点击上方“视学算法”,选择加"星标"或“置顶

重磅干货,第一时间送达

子豪 发自 凹非寺
量子位 报道 | 公众号 QbitAI

最近,又有一款Python可视化工具火了。

这一次,功能是针对图聚类问题的社群结构进行检测、可视化。

该项目的帖子在reddit上一经发布,就被顶到了“机器学习板块”的榜首

一起来看看它究竟都能用来做什么吧~

功能亮点

这款工具叫作communities, 是一个Python库,用于图聚类问题的社群结构检测。

它支持多种算法,包括:

  • Louvain算法;

  • Girvan-Newman算法;

  • 层次聚类算法;

  • 光谱聚类算法;

  • Bron-Kerbosch算法。

更赞的是,communities还可以实现这些算法的可视化

具体了解一下~

导入算法并插入矩阵

这里以Louvain算法为例。

这是一种基于模块度的社群发现算法,也是贪心算法。

它根据顶点的共享边将顶点排列成社群结构,也就是说,它将节点分为几个社群,每个社群之间共享很少的连接,但是同一社群的节点之间共享许多连接。

最终,让整个社群网络呈现出一种模块聚集的结构,实现整个社群网络的模块度的最大化。

所以首先,我们需要构建一个表示无向图的邻接矩阵,可以加权,也可以不加权,矩阵为2Dnumpy数组。

n*n矩阵则表示有n个节点,矩阵的每个位置分别表示各节点之间边的关系,有边则为1,没有边则为0。

然后,只需从communities.algorithms中导入算法并插入矩阵。

import numpy as np
from communities.algorithms import louvain_method
adj_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)
# >>> [{0, 1, 2}, {3, 4, 5}]

接下来输出社群列表,每个社群即为一组节点。

实现可视化,并进行颜色编码

利用communities将图进行可视化,将节点分到社群中并进行颜色编码,还可以选择深色或浅色背景、保存图片、选择图片的分辨率等等 。

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

其中各参数的具体含义为:

  • adj_matrix (numpy.ndarray):图的邻接矩阵;

  • dark (bool, optional (default=False)):如果为 True, 则绘图为深色背景,否则为浅色背景;

  • filename (str or None, optional (default=None)):通过 filename 路径可以将图另存为PNG格式; 设置 None 则是用交互方式显示图;

  • dpi (int or None, optional (default=None)):每英寸的点数,控制图像的分辨率;

  • seed (int, optional (default=2)):随机种子。

具体到Louvain算法的可视化,代码是这样的:

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

动画呈现算法

communities 还可以动画呈现节点分配到社群的过程。

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

其中各参数的含义如下:

  • adj_matrix (numpy.ndarray):图的邻接矩阵;

  • frames (list):算法每次迭代的字典列表;

  • 每个字典都有俩个键:“C”包含节点到社群的查找表,“Q”表示图的模块度数值;

  • 此字典列表是 louvain_method的第二个返回值;

  • dark (bool, optional (default=False)):如果为 True, 则动画为深色背景和配色方案,否则为浅色方案;

  • duration (int, optional (default=15)):动画所需的持续时间,以秒为单位;

  • filename (str or None, optional (default=None)):通过filename 路径将动画存为GIF;设置None则以交互方式展示动画;

  • dpi (int or None, optional (default=None)):每英寸点数,控制动画的分辨率;

  • seed (int, optional (default=2)):随机种子。

例如,空手道俱乐部网络中Louvain算法的动画呈现:

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

我们可以看到Louvain算法的动态过程:

  • 首先扫描数据中的所有节点,将每个节点看做一个独立的社群;

  • 接下来,遍历每个节点的邻居节点,判断是否将该节点加入邻居节点所在的社群,以提升模块度;

  • 这一过程重复迭代,直到每一个节点的社群归属稳定;

  • 最后,将所有在同一个社群的节点压缩成一个新节点,计算新节点的权重,直到整个图的模块度稳定。

大家可以通过文末链接,自行尝试一下其他算法~

此外,它还可以用于社群间邻接矩阵、拉普拉斯矩阵以及模块度矩阵等。

对于这款工具,不少网友发出“awesome”、“really cool!”等花式赞叹,表示正是自己需要的。

当然,也有网友提出疑问,例如:是否可以指定执行的迭代次数(例如:提前停止)?

开发者对此表示:不能,但是对于某些算法,可以指定要将图形划分为多少个社群。

作者简介

项目开发者Jonathan Shobrook,他目前是美国一家电商公司的软件工程师。

之前GitHub上的热门项目Rebound,也是出自他手,已经获得3.5k星。

更多信息可戳下方链接了解~

相关链接:
[1]https://github.com/shobrook/communities
[2]https://www.reddit.com/r/MachineLearning/comments/lozys9/p_i_made_communities_a_library_of_clustering/

—  —

本文系网易新闻•网易号特色内容激励计划签约账号【量子位】原创内容,未经账号授权,禁止随意转载。

点个在看 paper不断!

这个图聚类Python工具火了:可对社群结构进行可视化、检测 | 开源相关推荐

  1. Python 是怎么火起来的? 转载 2018年01月12日 00:00:00 133 图:Python 之父 Guido 正在设计 Python 语言,结果家里突然潜入一条大蟒蛇,一番激烈斗争,大

    Python 是怎么火起来的? 转载 2018年01月12日 00:00:00 133 图:Python 之父 Guido 正在设计 Python 语言,结果家里突然潜入一条大蟒蛇,一番激烈斗争,大蟒 ...

  2. python图形化编程工具哪个好_mPython(图形化编程软件) V0.5.0 官方版

    mPython 是一款针对Python 3编程语言的图形化编辑工具.支持函数,仿真.hex.python.blockly三种代码读写等功能.并可以与TPYBoard系类开发板配合使用,直接连接PC端进 ...

  3. python实现的基于NMF的多图聚类算法

    python实现的基于NMF的多图聚类算法的封装 代码均由论文复现 文章目录 python实现的基于NMF的多图聚类算法的封装 前言 参考论文 一.NMF 二.Mjnmf 总结 前言 怕忘记干了这个事 ...

  4. 【Python】时间序列数据分析与预测之Python工具汇总

    本文中总结了十多种时间序列数据分析和预测工具和python库,在我们处理时间序列项目时,可以翻开本文,根据需要选择合适的工具,将会事半功倍! 在处理时间序列项目时,数据科学家或 ML 工程师通常会使用 ...

  5. 21个有用的python工具

    Python是最流行的编程语言之一. 它简单.强大,并且由一个致力于开源项目的社区驱动.Python的大量使用是它如此流行的原因; 您可以免费构建软件.开发Web服务.执行数据分析和可视化以及训练机器 ...

  6. 时间序列数据分析与预测之Python工具汇总

    ‍ ‍ 大家好,我是辰哥‍ ‍ 本文中硬核总结了十多种时间序列数据分析和预测工具和python库,在我们处理时间序列项目时,可以翻开本文,根据需要选择合适的工具,将会事半功倍! 在处理时间序列项目时, ...

  7. python编程基础知识体系_最新版 17 幅思维导图:Python 编程之核心知识体系

    原标题:最新版 17 幅思维导图:Python 编程之核心知识体系 导读:本文主要涵盖了 Python 编程的核心知识,展示了一系列思维导图,主要就 Python 核心基础知识进行了细致梳理.无论你是 ...

  8. python爬取淘宝商品做数据挖掘_Python 3爬虫 数据清洗与可视化实战 Python数据抓取技术 python3网络爬虫教程书籍 运用Python工具获取电商平台页面数据挖掘书籍...

    A8 书    名:Python 3爬虫 数据清洗与可视化实战 作 译 者:零一,韩要宾,黄园园 出版时间:2018-03 千 字 数:200 版    次:01-01 页    数:212 开   ...

  9. python语言模型工具_Python工具整合,为程序员和新手准备的 8 大 Python 工具

    Python 是一种开源编程语言,用于 Web 编程.数据科学.人工智能和许多科学应用.学习 Python 使程序员能够专注于解决问题,而不是专注于语法,其丰富的库赋予它完成伟大任务所需的力量. 1) ...

最新文章

  1. [Nodejs学习之旅2-1] 模块机制
  2. 日子过得真快,转眼就工作了4个月了
  3. Git - 使用指南
  4. UA MATH571B 试验设计VI 随机效应与混合效应1
  5. react使用setSetat设置多级对象的值
  6. unity3d 不规则外发光描边_Shader案例之内发光和边缘泛光效果
  7. 面向过程的ado建造者模式
  8. Datawha组队——Pandas(下)综合练习(打卡)
  9. python合并视频和音频_真没想到,Python 还能实现 5 毛特效
  10. Android用外部应用打开文件,Android N 以上使用其他应用打开文件 FileProvider
  11. 用Siri显示二维码, iOS11, INGetVisualCodeIntent
  12. selnium 判断页面加载完成_Selenium_等待页面加载完毕
  13. 贪吃蛇c语言代码 vc++6.0,贪吃蛇代码-C语言版-VC++6.0
  14. html语言ppt,htmlppt课件
  15. 用c语言编写定时器程序,C语言怎么实现定时器
  16. wgc84 笛卡尔_WGS84椭球下的UTM坐标与Clarke80椭球下的兰勃特坐标转换方法研究
  17. 算法(5)动态规划法
  18. RSA生成公私钥并加解密
  19. 网络编程--TCP实例
  20. 区块链科普系列之1—区块链的由来

热门文章

  1. 错误:Error #2032解决方案
  2. 【组队学习】【23期】Datawhale编程实践(区块链)
  3. Hadoop 三大发行版本
  4. Python + 爬虫:可视化大屏帮你选粽子
  5. 认知智能再突破,阿里 18 篇论文入选 AI 顶会 KDD
  6. 大促下的智能运维挑战:阿里如何抗住“双11猫晚”?
  7. 2020,国产AI开源框架“亮剑”TensorFlow、PyTorch
  8. 华为腾讯百度众安微众360大咖齐聚,2019中国区块链开发者大会首批议程曝光!...
  9. 继AutoML后,第四范式发布软硬一体化AI集成系统SageOne
  10. 2018年Python开源项目Top100!只在这里!