用python-louvain聚类


用Louvain算法进行聚类

有一些方法可以使用Girvan-Newman算法来最大化要通过聚类算法划分的社区数时的模块化\\" Q \\"。对于聚类,可以使用Newman算法进行社交图聚类。很容易理解

其中,有Louvain算法,该算法目前需要相对较少的计算量。

单击此处查看论文
Blondel,Vincent D.等人\\"大型网络中社区的快速展开。\\"统计力学杂志:理论与实验2008.10(2008):P10008。

使用python-louvain(python中的louvain算法库)对networkx图进行聚类。

安装

我能够在我的环境中使用pip进行安装(Python 2.7.10,pip 8.1.2)。

点安装

1
sudo pip install python-louvain


下载源代码

安装

1
python setup.py install

库导入为

进口

1
import community

可以通过

完成

聚类

这次,我们将与上一篇文章中创建的独立艺术家的图形进行聚类,为简单起见,我们将2015年的数据作为目标,节点数为8523,边数为61,619。它是一个无向图,由于尚未执行详细的聚类分析,因此不知道聚类由什么组成,因此,在通过Louvain算法找到最佳聚类数的同时,它似乎是聚类的最佳选择。

如果按原样绘制图形,它将是以下图形。
nomal.png

python-louvain的基本聚类计算可以通过community.best_partition(nxGraph)完成,并将以以下dict格式返回。

1
2
3
4
5
6
In [1]: community.best_partition(G)                                          
Out[1]:
{'nodelabel': int(community),
'nodelabel': int(community),
'nodelabel': int(community),
...

将图形聚类并绘制图形,通过参考示例来创建要绘制的函数。

clustering.py

1
2
3
4
5
6
7
8
9
10
11
12
import networkx as nx
import community
def clusteringplot(G):
  partition = community.best_partition(G)                                                                                                          
  size = float(len(set(partition.values())))                                                                                                
  pos = nx.spring_layout(G)                                                                                                                  
  count = 0.                                                                                                                                
  for com in set(partition.values()):                                                                                                        
    count += 1.                                                                                                                              
    list_nodes = [nodes for nodes in partition.keys() if partition[nodes] == com]                                                            
    nx.draw_networkx_nodes(G, pos, list_nodes, node_size=150, node_color = str(count/size))                                                                                                                                
  plt.show()

输出图如下,按簇着色。
cluserring.png

然后聚类

如此处所述,聚类是一种任意的事物,可以确定的是,重要的是聚类的组成含义,聚类的数量和使用louvain算法的聚类的数量。组成,我们一定不要忘记分析组成部分并弄清它们的含义。

参考

使用Python和CytoScape-Qiita进行聚类和可视化