我有一张图,并想计算它的入度中心度和出度中心度。我尝试使用 python networkx
来完成这个任务,但是我只能找到一个方法来计算每个节点的入度和出度中心度。是否有一种方法可以在 networkx
中计算图的入度和出度中心化程度?
我有一张图,并想计算它的入度中心度和出度中心度。我尝试使用 python networkx
来完成这个任务,但是我只能找到一个方法来计算每个节点的入度和出度中心度。是否有一种方法可以在 networkx
中计算图的入度和出度中心化程度?
N=G.order()
indegrees = G.in_degree().values()
max_in = max(indegrees)
centralization = float((N*max_in - sum(indegrees)))/(N-1)**2
float
。您可以根据需要进行调整。
开始定义
给定一个网络G
,将具有最大入度的节点记为y
,并使用d_i(u)
表示节点u
的入度。定义H_G
为(我不知道在stackoverflow上如何更好地编写数学公式-如果您知道,请编辑此内容或留下评论)
H_G = \sum_{u} d_i(y) - d_i(u)
= N d_i(u) - \sum_u d_i(u)
其中u
遍历了G
中的所有节点,N
是G
节点数。
当只有一个节点指向其它所有节点且没有其它节点与它们相连时,N
个节点的图的最大可能值为(N-1)^2
。此时H_G
取最大值。
因此,对于给定的网络,我们定义中心化程度为H_G
值与最大值的比较,即C(G) = H_G / (N-1)^2
。
定义结束
def in_degree_centralization(G):
centralities=nx.in_degree_centrality(G)
max_val=max(bcc.values())
summ=0
for i in bcc.values():
cc= max_val-i
summ=summ+cc
normalization_factor=(len(G.nodes())-1)*(len(G.nodes())-2)
return summ/normalization_factor
in_degree_centralization(graph)
。这个答案来自于一个关于使用R语言的问题的Google Groups,它帮助澄清了上面答案中所涉及到的数学问题:
Freeman的方法测量“最中心的参与者和其他所有参与者之间的平均中心性差异”。
这种“中心化”正好可以用以下数学公式捕捉:
sum(max(x)-x)/(length(x)-1)
x是任何中心性度量!也就是说,如果你想计算网络的度中心化,x只需捕捉网络中所有度值的向量即可。为了比较各种中心化度量,最好使用标准化的中心性度量,即中心性值应始终小于1(在任何可能的网络中处于最佳位置)且大于0(处于最差位置)……如果这样做,中心化度也将在[0,1]范围内。
对于度数,例如,“最佳位置”是与所有其他节点都有一条边(即关联边数=节点数减1),而“最差位置”则是根本没有关联边。