1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
from GraphType import GraphStat
from GraphType import GraphCollection
from scipy import stats
import readCSV as reader
import matplotlib.pyplot as plt
class GraphDistance:
#init with a graph stat and a collection of graph stats
def __init__(self, graphStat, collection):
self.graph = graphStat
self.collection = collection
print('calculating for %d' %(self.graph.id))
self.out_d_distance = average_ks_distance(collection.out_ds, graphStat.out_d)
self.na_distance = average_ks_distance(collection.nas, graphStat.na)
self.mpc_distance = average_ks_distance(collection.mpcs, graphStat.mpc)
def average_ks_distance(targets, sample):
distance = 0.0
for target in targets:
value, p = stats.ks_2samp(target, sample)
distance += value
distance = distance / len(targets)
return distance
# metric_selector: GraphDistance -> float
def plot(infos, lines, id, metric_selector, title):
metric_distances = retrive_info_from_list(metric_selector, list(infos.values()))
x = retrive_info_from_list(lambda a : a.graph.num_nodes, list(infos.values))
graph = plt.figure(id)
plt.title(title)
for line in lines:
line_infos = retrive_info_from_list(lambda a: infos[a], line)
line_y = retrive_info_from_list(metric_selector, line_infos)
line_x = retrive_info_from_list(lambda a : a.graph.num_nodes, list(infos.values))
plt.plot(line_x, line_y, color='blue')
plt.plot(x, metric_distances, color='red', linestyle='', marker='o',alpha=0.7)
graph.show()
def retrive_info_from_list(selector, distances):
return list(map(selector, list(infos.values)))
human = GraphCollection('../statistics/humanOutput/', 300, 'Human')
file_names = reader.readmultiplefiles('../statistics/viatraEvolve/', 500, False)
infos = []
# read all files
for name in file_names:
infos.append(GraphStat(name))
infos = list(map(lambda s: GraphDistance(s, human), infos))
info_dic = {}
for info in infos:
info_dic[info.graph.id] = info
plot(info_dic, [[1,2,3,4,5,6,7,8,9,10]], 0, lambda a: a.out_d_distance, 'out degree')
# plot(info_dic, 1, lambda a: a.na_distance, 'node activity')
# plot(info_dic, 2, lambda a: a.mpc_distance, 'mpc')
input()
|