Python NetworkX库实现复杂网络

时间:2023-02-02 07:56:41

1.具有社团结构的网络(Networks with Community Structure)

定义: 对于一个图G而言,如果其中有一个完全子图(任意两个节点之间均存在边),节点数是k,那么这个完全子图就可称为一个k-clique。进而,如果两个k-clique之间存在k-1个共同的节点,那么就称这两个clique是“相邻”的。彼此相邻的这样一串clique构成最大集合,就可以称为一个社区,且社区是可以重叠的;

代码:

import networkx as nx
import matplotlib.pyplot as plt
G = nx.complete_graph(5) #返回具有N个节点的完整图,节点标签是0~n-1
K5 = nx.convert_node_labels_to_integers(G,first_label=2)
#G为复杂网络图,指定编号节点中的起始偏移量,新的整数标签编号为first_label,...,n-1 + first_label。
G.add_edges_from(K5.edges())#对地图中添加边
c = list(nx.k_clique_communities(G, 4))#查找具有社团结构的网络:地图,最小团块大小 :完全连接K个节点的子图
print(c)
nx.draw(G)
plt.show()

样例输出:

[frozenset({0, 1, 2, 3, 4, 5, 6})]

2.协同性(Assortativity)

代码:

import networkx as nx
import matplotlib.pyplot as plt
G = nx.complete_graph(5)
K5 = nx.convert_node_labels_to_integers(G,first_label=2)
G.add_edges_from(K5.edges())#对地图中添加边
#G为图,x有向图的度数类型,y目标节点的度数类型; 返回以度为单位的图的分类
r=nx.degree_assortativity_coefficient(G)
print("%3.1f"%r)
nx.draw(G)
plt.show()
样例输出:

-0.4


3.富俱乐部系数(Rich-club Coefficient)

代码:

import networkx as nx
import matplotlib.pyplot as plt
G = nx.complete_graph(5)
K5 = nx.convert_node_labels_to_integers(G,first_label=2)
G.add_edges_from(K5.edges())#对地图中添加边
#G为图,normalized使用随机网络进行规范化,Q(float(可选,默认值= 100))
# 如果normalized = True通过执行Q * M双边交换创建一个随机网络,其中M是G中的边数,用作归一化的空模型。
rc = nx.rich_club_coefficient(G,normalized=False)
print(rc)#各个节点的富俱乐部系数
nx.draw(G)
plt.show()

样例输出:

{0: 0.8095238095238095, 1: 0.8095238095238095, 2: 0.8095238095238095, 3: 0.8095238095238095, 4: 1.0, 5: 1.0}