2014-02-27 19 views
10

Ich studiere über Erkennungsgemeinschaften in Netzwerken.Community-Erkennung in Networkx

Ich bin Gebrauch IGRAPH und Python

Für die optimale Anzahl der Gemeinden im Hinblick auf die Modularität Maßnahme:

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

Zur Versorgung die gewünschte Anzahl von Gemeinden:

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

Allerdings mache ich das gerne mit networkx. Ich weiß, optimale Anzahl von Gemeinden in Bezug auf die Modularitätsmaß erhalten:

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] 

Aber ich kann nicht die gewünschte Anzahl von Gemeinschaften erhalten. Gibt es dafür einen Algorithmus mit Networkx?

+0

Dies ist eine sehr neue Arbeit, sondern ist äußerst nützlich: https : //journals.aps.org/prl/abstract/10.1103/PhysRevLett.117.078301 – Peaceful

Antwort

3

Ich bin auch neu bei networkx und igraph, ich habe Gephi, ein Datenvisualisierungs-Tool/Software. Und es hat den gleichen Community-Erkennungsalgorithmus wie der in Networkx, den Sie jetzt verwenden. Insbesondere in http://perso.crans.org/aynaud/communities/

Es nutzt die louvain Methode in schnell beschrieben von Gemeinden in großen Netzwerken Entfaltung, Vincent D Blondel, Jean-Loup Guillaume, Renaud Lambiotte, Renaud Lefebvre, Journal of Statistical Mechanics: Theorie und Experiment 2008 (10), P10008 (12pp)

Sie können nicht mehr Kommunen gewünscht bekommen, wie ich weiß, da sind zwei Möglichkeiten, einen Versuch wert:

  • Verwendung Gephi. Sie können gephi verwenden und es gibt einen Parameter namens resolution, der die Größe der Community ändern würde, die Sie erhalten.
  • Verwenden Sie NetworkX. Dieses Mal dürfen wir best_partition(G) nicht mehr verwenden. Aber verwenden Sie partition_at_level(dendrogram, level), ich denke, das könnte helfen.

Überprüfen Sie die source code hier für weitere Informationen.

+3

NetworkX hat keine Community-Erkennung. Es kommt alles von 'community', das auf NetworkX aufbaut. Genauer gesagt ist 'best_partition()' 'community.best_partition()'. – MERose

1

Vielleicht verstehe ich Sie falsch, aber wenn Sie möchten, dass die Anzahl der Communities von der NetworkX-Implementierung des best_partition Algorithmus ausgegeben wird, beachten Sie, dass best_partition (G) ein Dictionary mit Knoten als Schlüssel und deren Partitionsnummer als Wert angibt.

Sie können die Anzahl der eindeutigen Werte in einem Wörterbuch wie folgt aus (wahrscheinlich nicht optimal) zählen:

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) 

mit

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

Ich denke, dass das OP daran interessiert ist, a priori die Anzahl der zu ermittelnden Communities anzugeben und nicht die optimale Anzahl an Communities zu erhalten – duhaime

Verwandte Themen