社区发现不得不了解的库,包含Louvain 算法、Girvan-Newman 算法等多种社区发现算法,还具有可视化功能

article/2025/9/27 22:11:48

熟知社区发现算法,你不能错过这个 Python 库。它涵盖 Louvain 算法、Girvan-Newman 算法等多种社区发现算法,还具有可视化功能。

网络是由一些紧密相连的节点组成的,并且根据不同节点之间连接的紧密程度,网络也可视为由不同簇组成。簇内的节点之间有着更为紧密的连接,不同簇之间的连接则相对稀疏。这种簇被称为网络中的社区结构(community structure)。

由此衍生出来的社区发现(community detection)算法用来发现网络中的社区结构,这类算法包括 Louvain 算法、Girvan-Newman 算法以及 Bron-Kerbosch 算法等。

最近,在 GitHub 上发现了一个可以发现图中社区结构的 Python 库 communities,该库由软件工程师 Jonathan Shobrook 创建。

在这里插入图片描述

图片

项目地址:https://github.com/shobrook/communities

首先,该库可以实现以下几种社区发现算法:

  • Louvain 算法

  • Girvan-Newman 算法

  • 层次聚类

  • 谱聚类

  • Bron-Kerbosch 算法

其次,用户还可以使用 communities 库来可视化上述几种算法,下图为空手道俱乐部(Zachary’s karate club)网络中 Louvain 算法的可视化结果:

图片

该库的安装方法也非常简单,可采用 pip 的方式安装 communities,代码如下:

pip install communitiesimport numpy as np
from communities.algorithms import louvain_methodadj_matrix = np.array([[0, 1, 1, 0, 0, 0],[1, 0, 1, 0, 0, 0],[1, 1, 0, 1, 0, 0],[0, 0, 1, 0, 1, 1],[0, 0, 0, 1, 0, 1],[0, 0, 0, 1, 1, 0]])
communities, _ = louvain_method(adj_matrix)communities
[{0, 1, 2}, {3, 4, 5}]

对于这个 Python 库,很多网友给予了高度评价,表示会去尝试。

图片

算法详解

Louvain 算法

louvain_method(adj_matrix : numpy.ndarray, n : int = None) -> list

该算法来源于文章《Fast unfolding of communities in large networks》,简称为 Louvian。

作为一种基于模块度(Modularity)的社区发现算法,Louvain 算法在效率和效果上都表现比较好,并且能够发现层次性的社区结构,其优化的目标是最大化整个图属性结构(社区网络)的模块度。

Louvain 算法对最大化图模块性的社区进行贪婪搜索。如果一个图具有高密度的群体内边缘和低密度的群体间边缘,则称之为模图。

示例代码如下:

from communities.algorithms import louvain_methodadj_matrix = [...]
communities, _ = louvain_method(adj_matrix)

Girvan-Newman 算法

girvan_newman(adj_matrix : numpy.ndarray, n : int = None) -> list

该算法来源于文章《Community structure in social and biological networks》。

Girvan-Newman 算法迭代删除边以创建更多连接的组件。每个组件都被视为一个 community,当模块度不能再增加时,算法停止去除边缘。

示例代码如下:

from communities.algorithms import girvan_newmanadj_matrix = [...]
communities, _ = girvan_newman(adj_matrix)

层次聚类

hierarchical_clustering(adj_matrix : numpy.ndarray, metric : str = "cosine", linkage : str = "single", n : int = None) -> list

层次聚类实现了一种自底向上、分层的聚类算法。每个节点从自己 的社区开始,然后,随着层次结构的建立,最相似的社区被合并。社区会一直被合并,直到在模块度方面没有进一步的进展。

示例代码如下:

from communities.algorithms import hierarchical_clusteringadj_matrix = [...]
communities = hierarchical_clustering(adj_matrix, metric="euclidean", linkage="complete")

谱聚类

spectral_clustering(adj_matrix : numpy.ndarray, k : int) -> list

这种类型的算法假定邻接矩阵的特征值包含有关社区结构的信息。

示例代码如下:

from communities.algorithms import spectral_clusteringadj_matrix = [...]
communities = spectral_clustering(adj_matrix, k=5)

Bron-Kerbosch 算法

bron_kerbosch(adj_matrix : numpy.ndarray, pivot : bool = False) -> list

Bron-Kerbosch 算法实现用于最大团检测(maximal clique detection)。图中的最大团是形成一个完整图的节点子集,如果向该子集中添加其他节点,则它将不再完整。将最大团视为社区是合理的,因为团是图中连接最紧密的节点群。因为一个节点可以是多个社区的成员,所以该算法有时会识别重叠的社区。

示例代码如下:

from communities.algorithms import bron_kerboschadj_matrix = [...]
communities = bron_kerbosch(adj_matrix, pivot=True)

可视化

绘图

draw_communities(adj_matrix : numpy.ndarray, communities : list, dark : bool = False, filename : str = None, seed : int = 1)

可视化图(graph),将节点分组至它们所属的社区和颜色编码中。返回代表绘图的 matplotlib.axes.Axes。示例代码如下:

from communities.algorithms import louvain_method
from communities.visualization import draw_communitiesadj_matrix = [...]
communities, frames = louvain_method(adj_matrix)draw_communities(adj_matrix, communities)

可视化图如下:

图片

Louvain 算法的动图展示

louvain_animation(adj_matrix : numpy.ndarray, frames : list, dark : bool = False, duration : int = 15, filename : str = None, dpi : int = None, seed : int = 2)

Louvain 算法在图中的应用可以实现动图展示,其中每个节点的颜色代表其所属的社区,并且同一社区中的节点聚类结合在一起。

示例代码如下:

from communities.algorithms import louvain_method
from communities.visualization import louvain_animationadj_matrix = [...]
communities, frames = louvain_method(adj_matrix)louvain_animation(adj_matrix, frames)

动图展示如下:

图片

参考链接:

https://www.codenong.com/cs105912940/

https://www.reddit.com/r/MachineLearning/comments/lozys9/p_i_made_communities_a_library_of_clustering/


http://chatgpt.dhexx.cn/article/5vsxDDT8.shtml

相关文章

【积】有向图中的louvain社区检测(二)

有向图中的louvain社区检测 请学着自己长大,参考连接《无向louvain社团算法》 无向到有向的修改真的很简单。如果你连这个都做不到,建议不要用了。每个算法与数据匹配的时候,都会对数据或者算法小修。如果你连小修都做不到的话,…

Louvain算法实现

谢谢平台提供-http://bjbsair.com/2020-04-13/tech-info/65263.html 社区查找找的算法 Louvain是一种无监督算法(执行前不需要输入社区数量或社区大小),分为两个阶段:模块化优化和社区聚集[1]。 第一步完成后,接下来…

Louvain 算法原理 及设计实现

模块度: Louvain算法是一种基于图数据的社区发现算法。原始论文为:《Fast unfolding of communities in large networks》。 算法的优化目标为最大化整个数据的模块度,模块度的计算如下: 其中m为图中边的总数量,k_i表示所有指向节点i的连边权重之和,k_j同理。A_{i,j} 表…

Louvain算法介绍

Louvain算法 一种基于模块度的图算法模型,与普通的基于模块度和模块度增益不同的是,该算法速度很快,而且对一些点多边少的图,进行聚类效果特别明显。 算法流程: 1、初始时将每个顶点当作一个社区,社区个数与…

Python社区发现—Louvain—networkx和community

社区 如果一张图是对一片区域的描述的话,将这张图划分为很多个子图。当子图之内满足关联性尽可能大,而子图之间关联性尽可能低时,这样的子图可以称之为一个社区。 社区发现算法 社区发现算法有很多,例如LPA,HANP&am…

关于在networkx中使用louvain算法报错的问题

module ‘networkx.algorithms.community’ has no attribute ‘louvain_communities’ Networkx是复杂网络科学中常用的python包,louvain也是常用的社团发现算法之一。在networkx的文档中也有描述。louvain_communities — NetworkX 2.8.5 documentationhttps://n…

【知识图谱】Louvain、LPA等5类经典社区发现算法 Python 实战

一、社区发现概述 根据图论,加权网络表示为𝐺(𝑉,𝐸,𝑊),未加权网络表示为𝐺(𝑉,𝐸),其中𝑉和𝐸表示节点和边的集合,&…

社区发现算法之——Louvain

1、什么是社区 如果一张图是对一片区域的描述的话,我们将这张图划分为很多个子图。当子图之内满足关联性尽可能大,而子图之间关联性尽可能低时,这样的子图我们可以称之为一个社区。 2、社区发现算法及评价标准 社区发现算法有很多&#xf…

python-louvain

安装 louvain当前最新版本:0.14 pip install python-louvain由于是处理社区的数据,这里还是安装networkx pip install networkx使用 不妨来运行下一个案例: import community as community_louvain import matplotlib.cm as cm import m…

louvain算法

简介 louvain算法由比利时鲁汶大学的 Vincent D.Blondel 等人于 2008 年提出,因其能以较高的效率计算出令人满意的社区识别结果,是近年来最多被提及和使用的社区识别算法。 Louvain算法是一种基于模块度(模块度越大则表明社区划分效果越好。Q值的…

社区发现算法——Louvain 算法

Louvain 算法 原始论文为:《Fast unfolding of communities in large networks》。 所以又被称为Fast unfolding算法。 Louvain算法是一种基于模块度的社区发现算法。其基本思想是网络中节点尝试遍历所有邻居的社区标签,并选择最大化模块度增量的社区…

Win10系统导入证书私钥

一、Win10系统导入证书私钥 二、直接点击“下一步”即可 三、输入私钥密码,“导入选项”按下图所示选择,点击“下一步” 四、默认选择“自动选择证书存储”,点击“下一步” 五、点击“完成”,弹出“导入成功”窗户,则私…

解决Win10无法安装没有数字签名驱动的问题

建议按如下步骤操作后,手动安装没有数字签名的驱动,亲测可以使用,之前也为没办法安装没有数字签名的驱动烦躁的不行,修改完启动项后,就安装成功了。 1.第一步打开开始菜单,选择设置 2.第二步打开更新和安全…

Win10下安装 Redis

Win 10下安装 Redis 一、安装环境二、下载windows版本的Redis三、安装Redis四、安装服务五、启动服务六、测试Redis 写在前面 Redis 是一个开源使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库。 Redis 通常被称作数据结构数据库&…

win10 安装配置Git

1、下载Git: 官网下载地址:Git - Downloading Package 选择相应的版本下载git 百度地址:链接:https://pan.baidu.com/s/1Y_P_ek1Pb9Zt04n3wsAlzA 提取码:3p60 2、 安装: 环境:Windows 10 6…

win10系统激活遇到的问题

1. 0xC004F069 提示“0xC004F069 在运行 Microsoft Windows 非核心版本的计算机上,运行“slui.exe 0x2a 0xC004F069”,多半是因为当前的windows系统不是最新的,需要更新(更新win10) 2. 0xFFFFFFFF 我这里在解决1后&…

Win10添加ssh公钥

1,创建ssh-key ssh-keygen.exe 2,运行ssh-agent Start-Service ssh-agent PS C:\Users\Administrator\.ssh> Start-Service ssh-agent Start-Service : 由于以下错误无法启动服务“OpenSSH Authentication Agent (ssh-agent)”: 无法启动计算机“…

Win10 PowerToys官方免费效率小工具集

文章目录 颜色选择器​FancyZones 窗口增强管理器PowerToys Run 应用启动器Keyboard Manager 键盘映射管理器 / 键位修改工具PowerRename 强力批量文件重命名工具File Explorer (Preview Pane) 文件管理器“预览窗格”Image Resizer 批量图片处理器 (尺寸修改/缩放/转换格式)Wi…

关于如何获取Win10 蓝牙Link Key的方法

本文记录如何获取Win10 蓝牙Link Key信息: 使用Win10 Notebook打开蓝牙, 配对连接上设备后,蓝牙Link Key的显示位置在: 计算机 \HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\BTHPORT\Parameters\Keys 但执行”rege…

win环境下SSH key 配置

从Gitlab上拉取代码报错: Warning: Permanently added gitlab.wang.cn,47.94.8.13 (ECDSA) to the list of known hosts. Connection closed by 47.94.148.123 port 22 Could not read from remote repository. Please make sure you have the correct access rig…