使用Python NetworkX计算图的入度中心化

4

我有一张图,并想计算它的入度中心度和出度中心度。我尝试使用 python networkx 来完成这个任务,但是我只能找到一个方法来计算每个节点的入度和出度中心度。是否有一种方法可以在 networkx 中计算图的入度和出度中心化程度?

3个回答

3
这是代码。我假设入度中心化的定义如下所述...
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为(我不知道在stackoverflow上如何更好地编写数学公式-如果您知道,请编辑此内容或留下评论)

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

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

当只有一个节点指向其它所有节点且没有其它节点与它们相连时,N个节点的图的最大可能值为(N-1)^2。此时H_G取最大值。

因此,对于给定的网络,我们定义中心化程度为H_G值与最大值的比较,即C(G) = H_G / (N-1)^2

定义结束


这是用于图形的Freeman入度/出度集中度吗? - amaatouq

0
您可以使用以下代码来查找网络中心化的入度。以下是函数定义。
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)

0

这个答案来自于一个关于使用R语言的问题的Google Groups,它帮助澄清了上面答案中所涉及到的数学问题:

Freeman的方法测量“最中心的参与者和其他所有参与者之间的平均中心性差异”。

这种“中心化”正好可以用以下数学公式捕捉:

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

x是任何中心性度量!也就是说,如果你想计算网络的度中心化,x只需捕捉网络中所有度值的向量即可。为了比较各种中心化度量,最好使用标准化的中心性度量,即中心性值应始终小于1(在任何可能的网络中处于最佳位置)且大于0(处于最差位置)……如果这样做,中心化度也将在[0,1]范围内。

对于度数,例如,“最佳位置”是与所有其他节点都有一条边(即关联边数=节点数减1),而“最差位置”则是根本没有关联边。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接