使用 python networkx 计算图的入度中心化

calculate indegree centralization of graph with python 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

请注意,我写这篇文章时假设它是 python 2,而不是 3。所以我在除法中使用了 float。您可以根据需要进行调整。


开始定义

给定一个网络G,定义让y成为最大入度的节点,并使用d_i(u)表示节点的入度u.将 H_G 定义为(我不知道在 Whosebug 上编写数学公式的更好方法 - 希望知道的人编辑或发表评论)

H_G = \sum_{u} d_i(y) - d_i(u)  
    =  N d_i(u) - \sum_u d_i(u)

其中u遍历G中的所有节点,NG中的节点数。

当所有其他节点都指向一个节点并且没有其他节点与它们有边时,N 个节点上的图的最大可能值出现。那么这个H_G就是(N-1)^2.

因此,对于给定的网络,我们将中心化定义为 H_G 与最大值相比的值。所以 C(G) = H_G/ (N-1)^2.

结束定义

此答案取自 Google 问题组(在使用 R 的上下文中),这有助于阐明与上述答案一起采用的数学:

Freeman's approach measures "the average difference in centrality between the most central actor and all others".

This 'centralization' is exactly captured in the mathematical formula

sum(max(x)-x)/(length(x)-1)

x refers to any centrality measure! That is, if you want to calculate the degree centralization of a network, x has simply to capture the vector of all degree values in the network. To compare various centralization measures, it is best to use standardized centrality measures, i.e. the centrality values should always be smaller than 1 (best position in any possible network) and greater than 0 (worst position)... if you do so, the centralization will also be in the range of [0,1].

For degree, e.g., the 'best position' is to have an edge to all other nodes (i.e. incident edges = number of nodes minus 1) and the 'worst position' is to have no incident edge at all.

您可以使用以下代码来寻找度集中的网络。下面是函数定义。

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

通过将图形 G 作为参数传递来撤销相同的功能,即 in_degree_centralization(graph)