我有一个图表,想要计算其indegree和outdegree集中化。我尝试使用python networkx
来做到这一点,但在那里我只能找到一种方法来计算每个节点的indegree和outdegree中心性。有没有办法在networkx
?
答案 0 :(得分:1)
这是代码。我假设按照下面的描述定义了学位集中......
N=G.order()
indegrees = G.in_degree().values()
max_in = max(indegrees)
centralization = float((N*max_in - sum(indegrees)))/(N-1)**2
注意我写的是假设它是python 2而不是3.所以我在分区中使用了float
。您可以根据需要进行调整。
开始定义
鉴于网络G
,定义let 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
节点上的图形的最大可能值是在所有其他节点指向的单个节点且没有其他节点具有边缘的情况下出现的。然后,此H_G
为(N-1)^2
。
因此,对于给定的网络,我们将集中度定义为H_G
与最大值相比的值。所以C(G) = H_G/ (N-1)^2
。
最终定义
答案 1 :(得分:0)
这个答案来自谷歌小组关于这个问题(在使用R的背景下),这有助于澄清与上述答案一起的数学:
弗里曼的方法衡量“中心性的平均差异 在最核心的演员和所有其他人之间“。
这种“集中化”完全在数学公式
中捕获sum(max(x)-x)/(length(x)-1)
x指任何中心度量!也就是说,如果你想计算 在一个网络的集中度,x只是为了捕捉 网络中所有度数值的向量。比较各种 集中化措施,最好采用标准化的中心性 度量,即中心值应始终小于1 (在任何可能的网络中的最佳位置)和大于0(最差的 位置)...如果你这样做,集中化也将在 范围[0,1]。
对于学位,例如,“最佳位置”是对所有其他人有优势 节点(即入射边缘=节点数减1)和“最差” 位置'根本没有事件边缘。