【问题标题】:how can i add weight to networkx edges?如何为networkx边缘添加权重?
【发布时间】:2020-06-14 17:17:03
【问题描述】:

我有一个看起来像这样的基本数据框

     A  B  C  D ... Z
foo1 1  0  1  0 ... 0
foo2 0  0  0  1 ... 0
foo3 0  1  0  0 ... 1
foo4 1  0  1  1 ... 0

(实际形状 = 330, 1113) 我将其转换为邻接矩阵

   A  B  C  D ... Z
A
B
C
D
..
Z

(实际形状 = 1113, 1113)

这个矩阵只有二进制值, 我可以使用 networkx 获得图的几个中心性(度、接近度、介数)

然后,我给数据框一些值,比如

     A  B  C  D ... Z
foo1 3  0  3  0 ... 0
foo2 0  0  0  2 ... 0
foo3 0  5  0  0 ... 5
foo4 4  0  4  4 ... 0

(实际形状 = 330, 1113 和一行中的值都是一样的)

我也将其转换为邻接矩阵并计算中心性 但我对二进制值有相同的结果。

这种情况正常吗? 我认为这些中心点会因为权重而有所不同,但事实并非如此。

我希望具有高值的列(例如 A)会更中心,但两者的结果是相同的。

为什么会这样?我该如何解决?

【问题讨论】:

    标签: python networkx adjacency-matrix


    【解决方案1】:

    当您使用nx.from_numpy_array 时,来自馈送邻接数组的值被设置为边权重,因此应该按照您的意愿进行操作。使用一些示例数组:

    df.values
    array([[6, 0, 4, 0],
           [0, 0, 0, 1],
           [0, 2, 0, 0],
           [1, 0, 4, 8]])
    
    G = nx.from_numpy_array(df.values)
    
    G.edges(data=True)
    #EdgeDataView([(0, 0, {'weight': 1}), (0, 2, {'weight': 1})...
    

    根据Centrality 中可用的各种中心性算法,要考虑权重,您必须修改属性名称,以便将它们考虑在内。例如,对于closeness_centrality,来自文档:

    如果“距离”关键字设置为边缘属性键,则最短路径长度将使用 Dijkstra 算法以该边缘属性作为边缘权重来计算。

    【讨论】:

      【解决方案2】:

      这是我计算加权图的介数的方法,其中 G 是使用来自@yatu 的方向创建的,networkx 已导入为 nx:

      BC = nx.betweenness_centrality(G, normalized=False, weight='weight')
      

      这是一个使用简单条形图计算和比较 BC 值的函数。参数“labels”是一个标签字典,其中值是字符串,例如某种形式的东西

      labels={0:'A',1:'B',2:'C',3:'D'}
      
      def network_betweenness_bar(G, labels):
          # Compute Betweenness Centrality Values and plot as bar graph
          BC = nx.betweenness_centrality(G, normalized=False, weight='weight')
          BC = list(BC.values())
          BC = [round(elem, 2) for elem in BC]
          x = np.arange(len(labels))
          axis_labels = list(labels.values());
          plt.bar(x, BC)
          plt.xticks(x, axis_labels)
          plt.title('Betweenness Centrality', fontsize=18)
          return BC
      

      【讨论】:

        猜你喜欢
        • 2017-09-24
        • 2015-04-06
        • 2013-07-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-26
        • 1970-01-01
        • 2014-05-22
        相关资源
        最近更新 更多