【问题标题】:What is the best way to calculate centralities for a single node in networkx?计算networkx中单个节点的中心性的最佳方法是什么?
【发布时间】:2021-12-16 00:46:28
【问题描述】:

我能够计算不同类型的中心性,例如 degreebetweennessclosenesseigenvector 图 G 中的所有节点。例如,此代码计算 graph G 的所有包含节点的 betweenness centrality

import networkx as nx
# build up a graph
G = nx.Graph()
G.add_nodes_from(['A', 'B', 'C', 'D', 'E'])
G.add_edges_from([('A', 'B'), ('B','C'), ('C', 'D'), ('D', 'E')])
bw_centrality = nx.betweenness_centrality(G, normalized=True)
print (bw_centrality)

对于大型网络,计算一些中心性是非常耗时的,例如betweennesscloseness。因此,我想计算仅节点子集的中心度,而不是计算所有节点的中心度。在上面的示例中,如何通过 Python 中的 Networkx 库计算 node Abetweenness

【问题讨论】:

    标签: python-3.x graph networkx sna node-centrality


    【解决方案1】:

    在图中,我找到了计算单个节点的接近中心度的解决方案。但是,对于中间性,我一直无法找到解决方案。让我们计算一个节点在图中的接近中心性。以下是如何计算所有节点的接近度: 将networkx导入为nx

    # build up a graph
    
    G = nx.Graph()
    G.add_nodes_from(['A', 'B', 'C', 'D', 'E'])
    G.add_edges_from([('A', 'B'), ('B','C'), ('C', 'D'), ('D', 'E')])
    cc_centrality = nx.closeness_centrality(G)
    
    print (cc_centrality )
    

    因此,上面的代码产生如下结果:

    {'A': 0.4, 'B': 0.5714285714285714, 'C': 0.6666666666666666, 'D': 0.5714285714285714, 'E': 0.4}
    

    下一步,我们将分别计算节点A的接近度。根据Neworkx的源码,closeness centrality的含义如下:

    closeness_centrality(G, u=None, distance=None, wf_improved=True)
    

    图 G 显示定义的图,u 表示您要单独确定其接近度的节点。要计算节点 A 的接近度,请按以下步骤操作:

    nx.closeness_centrality(G, u='A')
    

    结果等于0.4。同样,nx.closeness_centrality(G, u='B') 给你0.5714285714285714

    【讨论】:

      【解决方案2】:

      Networkx 引入了一种新形式的中心性,称为 Group Centrality,它计算一组节点的中心性。为了说明,如果你想计算 Networkx 中 3 个节点的中心度,引入的功能将计算这 3 个节点的所需中心度并给你一个数字(只有一个数字),表示 3 个节点的综合中心性。为了计算一个节点的中心性,它应该被视为一个组。因此,它的中心性可以单独计算。基于上述问题,我们可以计算出所有节点的介数中心性如下:

      G = nx.Graph()
      G.add_nodes_from(['A', 'B', 'C', 'D', 'E'])
      G.add_edges_from([('A', 'B'), ('B','C'), ('C', 'D'), ('D', 'E')])
      bw_centrality = nx.betweenness_centrality(G, normalized=True)
      print (bw_centrality)
      

      上面的代码产生以下结果:

      {'A': 0.0, 'B': 0.5, 'C': 0.6666666666666666, 'D': 0.5, 'E': 0.0}
      

      现在,我们使用组中心性特征来计算节点C的中心性,如下:

      nx.group_betweenness_centrality(G, ['C'])
      

      计算节点Cbetweenness的结果等于0.6666666666666666。访问以下链接了解更多信息: https://networkx.org/documentation/stable/reference/algorithms/centrality.html

      【讨论】:

        猜你喜欢
        • 2019-04-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多