【问题标题】:NetworkX - writing results to CSV for multiple measuresNetworkX - 将结果写入 CSV 以进行多项测量
【发布时间】:2014-07-09 04:53:31
【问题描述】:

我正在使用 NetworkX 为大型网络计算 4 个独立的中心度指标,现在我想将结果写入 CSV 文件。我不想为 4 个指标中的每一个都编写一个 CSV 文件,而是希望有如下内容:

Id, degree, between, close, eigen

1, 0.4, 0.0, 0.5, 0.45

2, 0.4, 0.0, 0.5, 0.45

3, 0.6, 0.6, 0.71, 0.58

4, 0.6, 0.7, 0.71, 0.47

5, 0.2, 0.0, 0.45, 0.18

6, 0.2, 0.0, 0.45, 0.18

下面是我的代码,展示了我到目前为止所做的事情:

import networkx as nx
G = nx.Graph()

# add nodes and edges
G.add_edges_from([(1,2),(1,3),(2,3),(3,4),(4,5),(4,6)])

# calculate centrality metrics    
degree = nx.degree_centrality(G)
between = nx.betweenness_centrality(G)
close = nx.closeness_centrality(G)
eigen = nx.eigenvector_centrality(G)

【问题讨论】:

    标签: python csv networkx


    【解决方案1】:

    您可以并行遍历字典。

    首先,将每个字典转换为 (key, value) 元组的列表,按键排序:

    degree = sorted(degree.items())
    between = sorted(between.items())
    close = sorted(close.items())
    eigen = sorted(eigen.items())
    

    接下来,创建一个并行迭代器:

    p = zip(degree, between, close, eigen)
    

    现在,p 是:

    [((1, 0.4), (1, 0.0), (1, 0.5), (1, 0.45698629803118)),
     ((2, 0.4), (2, 0.0), (2, 0.5), (2, 0.45698629803118)),
     ((3, 0.6000000000000001),
      (3, 0.6000000000000001),
      (3, 0.7142857142857143),
      (3, 0.5842167062067959)),
     ((4, 0.6000000000000001),
      (4, 0.7000000000000001),
      (4, 0.7142857142857143),
      (4, 0.4171170012545873)),
     ((5, 0.2), (5, 0.0), (5, 0.45454545454545453), (5, 0.1830727919118216)),
     ((6, 0.2), (6, 0.0), (6, 0.45454545454545453), (6, 0.1830727919118216))]
    

    现在,遍历p 的每一行:

    for row in p:
        this_keys, this_values = zip(*row)
        assert len(set(this_keys)) == 1 # make sure we got what we expected
        this_key = this_keys[0]
        # Now, this_key is the key and this_values is a tuple of values
        print this_key, ['%.2f' % v for v in this_values]
    

    输出是:

    1 ['0.40', '0.00', '0.50', '0.46']
    2 ['0.40', '0.00', '0.50', '0.46']
    3 ['0.60', '0.60', '0.71', '0.58']
    4 ['0.60', '0.70', '0.71', '0.42']
    5 ['0.20', '0.00', '0.45', '0.18']
    6 ['0.20', '0.00', '0.45', '0.18']
    

    现在,您可以将它们保存到 csv 文件中,而不是打印。

    【讨论】:

      【解决方案2】:

      我找到了一个简单的答案,它将在一行上打印一个节点的多个度量的结果。

      ## calculate centrality metrics:
      degree = nx.degree_centrality(G)
      between = nx.betweenness_centrality(G)
      close = nx.closeness_centrality(G)
      eigen = nx.eigenvector_centrality(G)
      
      ## print the multiple centrality metrics to a single line for each node:
      for n in G:
          print ("%d, %f, %f, %f, %f"%(n, degree[n], between[n], close[n], eigen[n]))
      

      【讨论】:

        猜你喜欢
        • 2021-05-29
        • 1970-01-01
        • 2022-10-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-18
        • 2013-09-24
        相关资源
        最近更新 更多