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]])