Networkx:列出每个节点的中心性的最佳方式是什么?
Networkx: What is the best way to list centralities for each node?
假设您有一个小图表,并希望获得干净 csv 中每个节点的一些中心性。
import networkx as nx
import csv
# Cast the graph
G=nx.Graph()
G.add_nodes_from([1,2,3,4,5,6])
G.add_edges_from([(1,2),(1,3),(2,3),(2,5),(2,6),(6,4)])
node_list = G.nodes()
# Compute dictionaries with centralities
betweenness_centr = nx.betweenness_centrality(G)
eigenvector_centr = nx.eigenvector_centrality_numpy(G)
clustering_centr = nx.clustering(G)
现在怎么着手?组合词典?节点属性?数组?
这是一个尝试与组合字典:
comb_dict = dict([(node, [eigenvector_centr[node], betweenness_centr[node]]) for node in node_list])
with open('some_file.csv', 'wb') as f:
outfileWriter = csv.DictWriter(f, fieldnames=comb_dict.keys())
outfileWriter.writeheader()
outfileWriter.writerow(comb_dict)
但 some_file.csv
自然具有节点名称 header:
1 2 3 4 5 6
[0.4553183188774393, 0.0] [0.6282837873950563, 0.8] [0.4553183188774396, 0.0] [0.13471441935354073, 0.0] [0.2639983036196953, 0.0] [0.3206038995238985, 0.4]
但应该是
node betweenness_centr eigenvector_centr
1 0.4553183188774393 0.0
2 0.6282837873950563 0.8
#and so forth
您可以在没有 CSV 编写器的情况下这样做。
with open('some_file.csv', 'wb') as f:
for n in G:
f.write("%s %f %f\n"%(n,betweenness_centr[n],eigenvector_centr[n]))
$ cat some_file.csv
1 0.000000 0.455318
2 0.800000 0.628284
3 0.000000 0.455318
4 0.000000 0.134714
5 0.000000 0.263998
6 0.400000 0.320604
跟进:
tab是\t,第一行随便写什么
with open('some_file.csv', 'wb') as f:
f.write('node\tbetweenness\teigenvector\n')
for n in G:
f.write("%s\t%f\t%f\n"%(n,betweenness_centr[n],eigenvector_centr[n]))
$ cat some_file.csv
node betweenness eigenvector
1 0.000000 0.455318
2 0.800000 0.628284
3 0.000000 0.455318
4 0.000000 0.134714
5 0.000000 0.263998
6 0.400000 0.320604
使用 csv 编写器:
with open('some_file.csv', 'wb') as f:
outfileWriter = csv.writer(f,delimiter='\t')
for n in G:
outfileWriter.writerow([n,betweenness_centr[n],eigenvector_centr[n]])
假设您有一个小图表,并希望获得干净 csv 中每个节点的一些中心性。
import networkx as nx
import csv
# Cast the graph
G=nx.Graph()
G.add_nodes_from([1,2,3,4,5,6])
G.add_edges_from([(1,2),(1,3),(2,3),(2,5),(2,6),(6,4)])
node_list = G.nodes()
# Compute dictionaries with centralities
betweenness_centr = nx.betweenness_centrality(G)
eigenvector_centr = nx.eigenvector_centrality_numpy(G)
clustering_centr = nx.clustering(G)
现在怎么着手?组合词典?节点属性?数组?
这是一个尝试与组合字典:
comb_dict = dict([(node, [eigenvector_centr[node], betweenness_centr[node]]) for node in node_list])
with open('some_file.csv', 'wb') as f:
outfileWriter = csv.DictWriter(f, fieldnames=comb_dict.keys())
outfileWriter.writeheader()
outfileWriter.writerow(comb_dict)
但 some_file.csv
自然具有节点名称 header:
1 2 3 4 5 6
[0.4553183188774393, 0.0] [0.6282837873950563, 0.8] [0.4553183188774396, 0.0] [0.13471441935354073, 0.0] [0.2639983036196953, 0.0] [0.3206038995238985, 0.4]
但应该是
node betweenness_centr eigenvector_centr
1 0.4553183188774393 0.0
2 0.6282837873950563 0.8
#and so forth
您可以在没有 CSV 编写器的情况下这样做。
with open('some_file.csv', 'wb') as f:
for n in G:
f.write("%s %f %f\n"%(n,betweenness_centr[n],eigenvector_centr[n]))
$ cat some_file.csv
1 0.000000 0.455318
2 0.800000 0.628284
3 0.000000 0.455318
4 0.000000 0.134714
5 0.000000 0.263998
6 0.400000 0.320604
跟进:
tab是\t,第一行随便写什么
with open('some_file.csv', 'wb') as f:
f.write('node\tbetweenness\teigenvector\n')
for n in G:
f.write("%s\t%f\t%f\n"%(n,betweenness_centr[n],eigenvector_centr[n]))
$ cat some_file.csv
node betweenness eigenvector
1 0.000000 0.455318
2 0.800000 0.628284
3 0.000000 0.455318
4 0.000000 0.134714
5 0.000000 0.263998
6 0.400000 0.320604
使用 csv 编写器:
with open('some_file.csv', 'wb') as f:
outfileWriter = csv.writer(f,delimiter='\t')
for n in G:
outfileWriter.writerow([n,betweenness_centr[n],eigenvector_centr[n]])