2014-02-27 81 views
10

我正在研究網絡中的檢測社區。Networkx中的社區檢測

我使用的igraph和Python

對於社區的最佳數量的模塊化測量方面:

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

供應所需的一些社區:

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

不過,我喜歡使用networkx來做到這一點。我知道獲得模塊化度量方面,社區的最佳數量:

import community # --> http://perso.crans.org/aynaud/communities/ 
import fastcommunity as fg # --> https://networkx.lanl.gov/trac/ticket/245 
import networkx as nx 

g = nx.karate_club_graph() 
partition = community.best_partition(g) 
print "Louvain Modularity: ", community.modularity(partition, g) 
print "Louvain Partition: ", partition 

cl = fg.communityStructureNewman(g) 
print "Fastgreed Modularity: ", cl[0] 
print "Fastgreed Partition: ", cl[1] 

但我不能得到社區的所需數量。有沒有一些使用Networkx的算法?

+0

這是一個非常新的工作,但非常有用:HTTPS ://journals.aps.org/prl/abstract/10.1103/PhysRevLett.117.078301 – Peaceful

回答

3

我也是networkx和igraph的新手,我使用了一個數據可視化工具/軟件Gephi。它與您現在使用的networkx中的社區檢測算法具有相同的社區檢測算法。具體而言,在http://perso.crans.org/aynaud/communities/

它使用在大型網絡中快速展開社區的描述的魯汶方法,文森特d布隆德爾,讓 - Loup的紀堯姆雷諾Lambiotte,雷諾列弗斐爾,雜誌統計力學的理論與實驗2008( 10),P10008(12pp)

你不能得到所需的社區數量,因爲我知道,這裏有兩種方法值得一試:

  • 使用Gephi。您可以使用gephi,並且有一個名爲resolution的參數可以改變您獲得的社區的大小。
  • 使用NetworkX。這一次,我們可能不再使用best_partition(G)。但使用partition_at_level(dendrogram, level),我想這可能會有所幫助。

查看source code在這裏獲取更多信息。

+3

NetworkX沒有社區檢測。這一切都來自基於NetworkX的'community'。更具體地說,'best_partition()'是'community.best_partition()'。 – MERose

1

也許我誤解了你,但是如果你想通過best_partition算法的NetworkX實現輸出的社區數量,請​​注意best_partition(G)給出了一個字典,其中的節點作爲鍵和它們的分區號作爲值。

你可以指望的唯一值在這樣的詞典數量(可能不是最優):

dict = {'a':1,'b':1,'c':2,'d':1,'e':3,'f':4,'g':5} 
count=list(set([i for i in dict.values()])) 
print count 
print len(count) 

有了結果

[1, 2, 3, 4, 5] 
5 
+1

我認爲OP有興趣說明要檢測的社區數量,而不是接收最佳社區數量 – duhaime