附源码|复杂网络社区发现--GN算法

本文在实现GN算法的过程中实现了社区划分结果,同时实现了不同社区的可视化结果。emmmm代码写得不是很好,希望各位不要介意,如果对你们有帮助的话,希望可以点个赞呀。

GN算法简介

由Girvan和Newman提出的GN算法在近几年已成为社团结构分析的一种标准算法,他的基本思想是从网络的整体出发,不断地从网络中移除介数最大的边,从而获得最佳的社团结构。边介数定义为网络中经过每条边的最短路径的数目。GN算法的基本流程如下:
​ (1)对复杂网络中的每一条边,计算其对应的边介数;
​ (2)比较网络中所有的边介数,并将边介数最大的边从网络中移除;
​ (3)重复以上两个步骤,直至每个节点都是一个退化的社团。

算法实现

import networkx as nx
from networkx.algorithms import community #  
import itertools
import matplotlib.pyplot as plt

G = nx.karate_club_graph() # 空手道俱乐部

comp = community.girvan_newman(G) # GN算法

k = 4 # 想要4个社区
limited = itertools.takewhile(lambda c: len(c) <= k, comp) # 层次感迭代器
for communities in limited:
    b = list(sorted(c) for c in communities)

print(b)

pos = nx.spring_layout(G) # 节点的布局为spring型

NodeId = list(G.nodes())
node_size = [G.degree(i)**1.2*90 for i in NodeId] # 节点大小

plt.figure(figsize = (8,6)) # 图片大小
nx.draw(G,pos, with_labels=True, node_size =node_size, node_color='w', node_shape = '.')
'''
node_size表示节点大小
node_color表示节点颜色
node_shape表示节点形状
with_labels=True表示节点是否带标签
'''
color_list = ['brown','orange','r','g','b','y','m','gray','black','c','pink']
# node_shape = ['s','o','H','D'] 

for i in range(len(b)):
    # nx.draw_networkx_nodes(G, pos, nodelist=b[i], node_color=color_list[i], node_shape=node_shape[i], with_labels=True)
    nx.draw_networkx_nodes(G, pos, nodelist=b[i], node_color=color_list[i],  with_labels=True)

plt.show()

社区划分结果
在这里插入图片描述
社区划分可视化结果,不同颜色代表不同的社区。
在这里插入图片描述
有帮助的话,可以点个赞呀
有问题的话,可以留个言呀~o(〃‘▽’〃)o

猜你喜欢

转载自blog.csdn.net/Python_Matlab/article/details/106753761