📜  使用 Networkx 在图中测量网络中心性 | Python(1)

📅  最后修改于: 2023-12-03 15:06:48.899000             🧑  作者: Mango

使用 Networkx 在图中测量网络中心性 | Python

在网络分析中,网络中心性是一个非常重要的需求。中心性度量通常用于确定哪些节点在图形中具有最大的影响力、哪些节点最重要、以及它们在图形中的位置。

在本文中,我们将介绍如何使用 Networkx 库在 Python 中测量网络图形中的中心性。我们将探讨以下社交网络图形:

social_network_graph

环境设置

首先,我们需要安装以下依赖:

!pip install networkx matplotlib numpy

Networkx 库

Networkx 是一个用 Python 语言编写的用于标准和非标准网络分析的库。我们将使用 Networkx 来测量我们的社交网络图形中的中心性。

导入库和数据

首先,我们将导入依赖库,并创建我们的社交网络图形。

import networkx as nx
import matplotlib.pyplot as plt

# 创建社交网络图形
G = nx.Graph()

# 添加节点
nodes = ['A', 'B', 'C', 'D', 'E']
for node in nodes:
    G.add_node(node)

# 添加边
G.add_edges_from([('A', 'B'), ('A', 'C'), ('B', 'C'), ('B', 'D'), ('D', 'E')])
nx.draw(G, with_labels=True)
plt.show()

我们的网络应该看起来像这样:

social_network_graph_labeled

测量节点的度中心性

度中心性是节点连接的数量(即度数)的标准化版本。这个重要的指标测量了节点在网络中的连接数量,并占网络总连接数量的比例。节点的度数越高,它在网络中的影响力就越大。

我们可以使用 Networkx 库中的 degree_centrality() 方法来测量每个节点的度中心性,并获取结果。

deg_cent = nx.degree_centrality(G)
sorted(deg_cent.items(), key=lambda x: x[1], reverse=True)

输出结果应该如下:

[('B', 0.8), ('A', 0.6), ('C', 0.4), ('D', 0.4), ('E', 0.2)]

我们可以看到,节点 B 的度中心性最高,紧随其后的是节点 A。

测量节点的接近度中心性

接近度中心性测量了一个节点到网络中其它所有节点的距离中心。如果某个节点到其他节点的平均距离更短,则它的接近中心性就相对较高。

我们可以使用 Networkx 库中的 closeness_centrality() 方法来测量每个节点的接近度中心性,并获取结果。

cls_cent = nx.closeness_centrality(G)
sorted(cls_cent.items(), key=lambda x: x[1], reverse=True)

输出结果应该如下:

[('B', 0.8823529411764706),
 ('A', 0.75),
 ('C', 0.75),
 ('D', 0.6),
 ('E', 0.42857142857142855)]

我们可以看到,节点 B 的接近度中心性最高,紧随其后的是节点 A 和 C。

测量节点的中介中心性

中介中心性测量了节点在网络中连接其他节点的数量或潜在性,并用此作为节点在比较上的指标。如果某个节点经常用于中介连接,则它的中介中心性就更高。

我们可以使用 Networkx 库中的 betweenness_centrality() 方法来测量每个节点的中介中心性,并获取结果。

btwn_cent = nx.betweenness_centrality(G)
sorted(btwn_cent.items(), key=lambda x: x[1], reverse=True)

输出结果应该如下:

[('B', 0.6),
 ('A', 0.26666666666666666),
 ('C', 0.26666666666666666),
 ('D', 0.0),
 ('E', 0.0)]

我们可以看到,节点 B 的中介中心性最高,说明它是这个网络中最常用的中介点。

测量节点的特征向量中心性

特征向量中心性是节点与其它节点之间的连接情况及其它节点的中心性综合反映节点的重要性。如果一个节点连向的节点具有高的中心性,则该节点的特征向量中心性就相对较高。

我们可以使用 Networkx 库中的 eigenvector_centrality() 方法来测量每个节点的特征向量中心性,并获取结果。

eig_cent = nx.eigenvector_centrality(G)
sorted(eig_cent.items(), key=lambda x: x[1], reverse=True)

输出结果应该如下:

[('A', 0.4965644567793918),
 ('B', 0.7173530796433013),
 ('C', 0.6095785538397886),
 ('D', 0.24751747150510505),
 ('E', 0.1292248797821162)]

我们可以看到,节点 B 的特征向量中心性最高,紧随其后的是节点 C 和 A。

结论

正如我们所看到的那样,Networkx 库使度、接近度、中介、特征向量中心性度量变得非常容易。这些都是在社交网络、交通网络、蛋白质相互作用网络和许多其他情况下非常有用的指标。

我们希望这篇介绍能够帮助你开始学习如何测量网络中节点的中心性!