【问题标题】:Centralities in networkx weighted graphnetworkx 加权图中的中心性
【发布时间】:2017-01-28 16:24:06
【问题描述】:

我无法计算简单 NetworkX 加权图的中心性。
这是正常的还是我做错了什么?

我用一个简单的add_edge(c[0],c[1],weight = my_values) 添加边,其中 c[0],c[1] 是字符串(节点的名称)和 my_values 整数,在 for 循环中。这是结果边缘的示例:

('first node label', 'second node label', {'weight': 14})

(节点的数量并不重要——现在我只保留 20 个)

我的图表的边列表是一个元组列表,带有 (string_node1,string_node2,weight_dictionary) - 一切看起来都很好,因为我还能够绘制/保存/读取/图表...

为什么?:

  • nx.degree_centrality 给我全1?
  • nx.closeness_centrality 给我全1?

示例:

{'first node name': 1.0,
...
'last node name': 1.0}

感谢您的帮助。

【问题讨论】:

  • 如果您发布一个完整的(非)工作示例,将更容易发现问题所在。
  • 是的,我明白,但我有点害怕数据的敏感性——真实人物的名字,还活着。我可以说我刚刚通过将weight='weight' 添加到nx.clusteringnx.degree_assortativity_coefficientnx.betweenness_centrality 来解决这个“问题”...这就是为什么我想知道我是否真的能获得加权度 i> 使用已实现的功能...可能我必须定义自己的功能,以便计算加权度...即使这对我来说有点奇怪

标签: networkx weighted-graph


【解决方案1】:

为了使closeness_centrality 考虑权重,您必须按照this issue 中的建议将1 / weightdistance 属性添加到图形边缘。

这是执行此操作的代码(图表为g):

g_distance_dict = {(e1, e2): 1 / weight for e1, e2, weight in g.edges(data='weight')}
nx.set_edge_attributes(g, g_distance_dict, 'distance')

【讨论】:

    【解决方案2】:

    我知道这是一个很老的问题,但只是想指出您的度中心性值全部为 1 的原因可能是因为您的图表是完整的(即所有节点都连接到其他每个节点),并且度中心度是指图中一个节点所连接的节点所占的比例。

    networkx's documentation:

    节点 v 的度中心性是它所连接的节点的比例。

    度中心性值通过除以简单图 n-1 中的最大可能度来归一化,其中 n 是 G 中的节点数。

    【讨论】:

      【解决方案3】:

      很简单:

      我没有使用nx.degree_centrality() my_graph.degree(weight='weight') - 我仍然认为这是模块中的基本缺陷......

      ...但是,对于nx.closeness_centrality,问题仍然存在

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-03-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-23
        • 2020-04-28
        • 1970-01-01
        相关资源
        最近更新 更多