-
Notifications
You must be signed in to change notification settings - Fork 0
/
centrality.py
111 lines (69 loc) · 3.47 KB
/
centrality.py
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
import networkit as nk
import numpy as np
import datetime
import sys
namefolder=''
def calc_centrality(path,name_folder):
#apro il file contenente il grafo in forma testuale, in lettura
f= open(path,'r')
#variabile globale che mi indica il path dove salvare le varie distribuzioni
global namefolder
#assegno alla variabile globale il folder passato come parametro dalla riga di comando
namefolder=name_folder
#carico i grafi in memoria
reader= nk.graphio.EdgeListReader(separator=' ', firstNode=0, directed=True)
G= reader.read(path)
#Out-degree centrality
print("Inizio Out-degree, Current time:-", datetime.datetime.now())
centrality = nk.centrality.DegreeCentrality(G, False, True, True).run()
write_on_file(centrality.scores(),'Degree_Centrality(Out-degree)')
write_on_file(centrality.ranking(),'Degree_Centrality(Out-degree)RANK')
#In-degree centrality
print("Inizio In-degree, Current time:-", datetime.datetime.now())
centrality = nk.centrality.DegreeCentrality(G, False, False, True).run()
write_on_file(centrality.scores(),'Degree_Centrality(In-degree)')
write_on_file(centrality.ranking(),'Degree_Centrality(In-degree)RANK')
#Eigenvector centrality
print("Inizio Eigenvector, Current time:-", datetime.datetime.now())
centrality = nk.centrality.EigenvectorCentrality(G, tol=1e-9).run()
write_on_file(centrality.scores(),'Eigenvector_Centrality')
write_on_file(centrality.ranking(),'Eigenvector_CentralityRANK')
#PageRank centrality
print("Inizio PageRank, Current time:-", datetime.datetime.now())
centrality = nk.centrality.PageRank(G, damp=0.85, tol=1e-9).run()
write_on_file(centrality.scores(),'Page_Rank')
write_on_file(centrality.ranking(),'Page_RankRANK')
#Katz centrality (variante dell'eigenvector e PageRank centrality)
print("Inizio Katz, Current time:-", datetime.datetime.now())
centrality = nk.centrality.KatzCentrality(G,alpha=0.0005,beta=0.1,tol=1e-08).run()
write_on_file(centrality.scores(),'Katz_Centrality')
write_on_file(centrality.ranking(),'Katz_CentralityRANK')
#ApproxBetweenness centrality
print("Inizio Betweenness, Current time:-", datetime.datetime.now())
centrality =nk.centrality.ApproxBetweenness(G,epsilon=0.01, delta=0.1, universalConstant=1.0).run()
write_on_file(centrality.scores(),'Approx_Betweenness')
write_on_file(centrality.ranking(),'Approx_BetweennessRANK')
#Closeness centrality
print("Inizio Closeness, Current time:-", datetime.datetime.now())
centrality = nk.centrality.Closeness(G, False, nk.centrality.ClosenessVariant.Generalized).run()
write_on_file(centrality.scores(),'Closeness_Centrality')
write_on_file(centrality.ranking(),'Closeness_CentralityRANK')
#chiudo il file dei grafi, aperto precedentemente
print("Fine Closeness, Current time:-", datetime.datetime.now())
f.close()
#procedura per salvare i risultati di centralità in un file
def write_on_file(list_centrality, name):
global namefolder
#diamo il nome al file dove salvare i risultati uno per riga
namefile = "/media/sdc/lissandrello/data/"+namefolder+'/'+name+'.txt'
#apriamo il file (lo creiamo se non è presente)
f = open(namefile, 'w')
#convertiamo la lista di float in str per poterle scrivere nel file
new_list = []
for item in list_centrality:
new_list.append(str(item)+'\n')
f.writelines(new_list)
#chiudiamo il file
f.close()
if(__name__=='__main__'):
calc_centrality(sys.argv[1],sys.argv[2])