如何使用networkx获得集中度度量? nx.betweenness_centrality似乎不起作用

问题描述 投票:2回答:1

我有一个距离矩阵,如下所示:

[A B C D....
A 0 NaN 2 3
B NaN 0 2 5
C 3 1 0 NaN
D 4 18 NaN 0
...]

Matrix

[为了计算集中度度量,我画了一个网络,但是对于每个集中度度量(介于,紧密度,度数等之间),它都返回相同的数字。

下面是我的代码:

(Domain: A, B, C, D, ...) 


ser3 =  df['Domain'].unique()

G_weighted = nx.Graph()

for x in ser3:
    if(x is None):continue
    for y in ser3:
        ind=dist_matrix[x][y]
        print(ind)
        if (ind is None):continue
        if (ind>0): G_weighted.add_edge(x,y,weight=ind)

nx.betweenness_centrality(G)
[Out]: 
{'A': 0.0, 'B': 0.0, 'C': 0.0, 'D': 0.0, ....}

有人可以帮我解决这个问题吗?提前非常感谢...

python networkx social-networking
1个回答
1
投票

我和你不太一样。通常,如果您有complete graph,即所有节点对都连接在一起的图形,则所有节点的中间性中心点都将为零。但这似乎不是您的情况。

假设邻接矩阵是一个数据框,使用我得到的样本矩阵:

G = nx.from_pandas_adjacency(df)

edges_rem = []
for edge in G.edges(data=True):
    if np.isnan(edge[2]['weight']):
        edges_rem.append(edge[:2])
G.remove_edges_from(edges_rem)

G_weighted.edges(data=True)
# EdgeDataView([('A', 'C', {'weight': 3.0}), ('A', 'D', {'weight': 4.0}), 
#               ('C', 'B', {'weight': 1.0}), ('D', 'B', {'weight': 18.0})])

nx.betweenness_centrality(G_weighted)

{'A': 0.16666666666666666,
 'B': 0.16666666666666666,
 'C': 0.16666666666666666,
 'D': 0.16666666666666666}
© www.soinside.com 2019 - 2024. All rights reserved.