Detección de la comunidad en Networkx

Estoy estudiando sobre las comunidades de detección en redes.

Estoy usando igraph y Python

Para el número óptimo de comunidades en términos de la medida de modularidad:

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

Para suministrar el número deseado de comunidades:

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

Sin embargo, me gusta hacer esto usando networkx. Sé que obtener el número óptimo de comunidades en términos de la medida de modularidad:

 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] 

Pero no puedo conseguir el número deseado de comunidades. ¿Hay algún algoritmo para esto, usando Networkx?

También soy nuevo en networkx y igraph, usé Gephi, una herramienta / software de visualización de datos. Y tiene el mismo algoritmo de detección de comunidad que el de networkx que está usando ahora. Específicamente, en http://perso.crans.org/aynaud/communities/

Utiliza el método louvain descrito en Despliegue rápido de comunidades en redes grandes, Vincent D Blondel, Jean-Loup Guillaume, Renaud Lambiotte, Renaud Lefebvre, Diario de Mecánica Estadística: Teoría y Experimento 2008 (10), P10008 (12pp)

No se puede obtener el número deseado de comunidades, como sé, hay dos formas que vale la pena probar:

  • Utilice Gephi. Puedes usar gephi y hay un parámetro llamado resolution que cambiaría el tamaño de la comunidad que obtienes.
  • Utilice NetworkX. Esta vez, es posible que ya no utilicemos best_partition(G) . Pero use partition_at_level(dendrogram, level) , supongo que esto podría ayudar.

Compruebe el código fuente aquí para más información.

Tal vez lo estoy entendiendo mal, pero si desea la cantidad de comunidades generadas por la implementación de NetworkX del algoritmo best_partition, solo tenga en cuenta que best_partition (G) proporciona un diccionario con nodos como claves y su número de partición como valor.

Puede contar el número de valores únicos en un diccionario como este (probablemente no óptimo):

 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) 

Con resultado

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