Python中的社区检测

时间:2014-02-26 22:07:58

标签: python graph igraph networkx

我必须检测网络中的社区。但我需要告知社区数量(k)。

我试过这个

from igraph import *
karate = Nexus.get("karate")
cl = karate.community_fastgreedy()
cl.as_clustering().membership

# [0, 1, 1, 1, 0, 0, 0, 1, 2, 1, 0, 0, 1, 1, 2, 2, 0, 1, 2, 0, 
#  2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]

但是,我想告知社区数量

等式:

from igraph import *
karate = Nexus.get("karate")
k = 2 # --> Number of communities
cl = karate.community_fastgreedy(k) # --> Note the k

我是怎么做到的?那有什么算法吗?我可以使用'Networkx'或'igraph'。

1 个答案:

答案 0 :(得分:2)

此方法返回完整的树形图,因此您可以拥有任意数量的社区。默认情况下,as_clustering()会根据模块化度量返回最佳社区数,但您可以提供所需数量的社区。

请参阅igraph主页上的文档:http://igraph.org/python/doc/igraph.clustering.VertexDendrogram-class.html#as_clustering

from igraph import *
karate = Nexus.get("karate")
cl = karate.community_fastgreedy()
k=2
cl.as_clustering(k).membership
# [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 
#  0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]