我是使用Networkx的新手,也是python的新手。我正在尝试从csv文件中计算节点(大约14K)的度中心度-第一列是源,第二列是目标。下面是一个示例(这些是各个经理的ids ):
Source Target
4890 12842691
4890 26682663
4890 59694886
4890 79419501
5280 389911360
5280 393411529
5280 395211613
5280 395511628
5280 395811643
5280 396011651
6000 300556269
6000 315027716
6000 315037716
6000 341189880
6000 341909932
6000 341919932我已经尝试过以下代码:
import networkx as nx
import pandas as pd
data = pd.read_csv('man_edge.csv')
FG = nx.from_pandas_edgelist(data, source='Source', target='Target')
FG.nodes()然后我试着计算学位中心性:
degree_dict=nx.degree_centrality(FG)代码计算ID4890、5280和6000的度中心度。但它还计算了第二列中I的度数中心度,这是我不想要的。
示例:
ID degree_dict
4890 0.526490066
5280 0.215231788
6000 0.251655629
473931 0.003311258
2219536 0.003311258
8053083 0.003311258
12842691 0.003311258
13213108 0.003311258如何仅计算第1列in的度中心性,而不计算第2列in的度中心性?提前感谢您的帮助。
发布于 2019-09-12 16:37:22
您可以指定必须在其上返回度数视图的节点。例如:
import networkx as nx
g = nx.path_graph(5)
print(g.degree([0, 1])) # return degree view of nodes 0, 1请注意,可以将nx.read_edgelist指定为使用有向图创建;默认情况下,它假定边缘列表是无向的
发布于 2019-09-12 16:47:26
你不能.那些其他的节点在你的网络中.学位中心性必须考虑到其他节点。
您可以仅从感兴趣的节点(源列中的节点)中提取度数中心性度量。
degree_dict = {
k: v for k, v in nx.degree_centrality(FG).items()
if k in data.Source
}发布于 2019-09-12 19:18:06
我假设你的网络是被定向的。因此,从第一列到第二列应该存在一条边。
然后你的代码就会变成(请注意读入时的create_using参数):
import networkx as nx
import pandas as pd
data = pd.read_csv('man_edge.csv')
FG = nx.from_pandas_edgelist(data, source='Source', target='Target', create_using=nx.DiGraph())
FG.nodes()在这一点上,FG是一个DiGraph。第一组节点具有到第二组节点的边。
degree_dict=nx.out_degree_centrality(FG)这将仅基于边缘向外(而不是向内)计算度数中心度。没有外边的节点将具有(我相信)值0。
没有你的数据文件我不能测试这个,所以请仔细检查我没有出错。
https://stackoverflow.com/questions/57902076
复制相似问题