2011-11-03 21 views
25

Para un proyecto escolar, necesito definir un social network, analizarlo y dibujarlo. Podría dibujarlo a mano y analizarlo (calcular varias métricas) a mano. Pero como soy un amante de Python, espero que haya una herramienta de Python para esto.¿Fácil visualización y análisis de redes sociales con Python?

Estoy soñando con el equivalente gráfico social de matplotlib. Es decir. Puedo usarlo de forma interactiva, y en unas pocas líneas le digo cómo cargar los datos, y luego invoco una función de renderizado, que representará el gráfico como svg. Tal vez con algunas métricas mostradas en él, p. recuento de relación para cada nodo, las relaciones medias, etc.

Si usted sabe de un módulo de este tipo de Python, se aprecia si se pudiera proporcionar un ejemplo de juguete en su respuesta, en vez de responder con un nombre de un módulo.

Respuesta

21

networkx es una biblioteca de Python muy poderosa y flexible para trabajar con gráficos de red. Las conexiones dirigidas y no dirigidas se pueden usar para conectar nodos. Las redes se pueden construir agregando nodos y luego los bordes que los conectan, o simplemente enumerando los pares de bordes (los nodos indefinidos se crearán automáticamente). Una vez creados, los nodos (y los bordes) se pueden anotar con etiquetas arbitrarias.

Aunque NetworkX se puede utilizar para visualizar una red (véase la documentación), es posible que prefiera utilizar una aplicación de visualización de la red tales como Gephi (disponible en gephi.org). networkx es compatible con una amplia gama de formatos de importación y exportación. Si exporta una red utilizando un formato como GraphML, el archivo exportado puede cargarse fácilmente en Gephi y visualizarse allí.

import networkx as nx 
G=nx.Graph() 
G.add_edges_from([(1,2),(1,3),(1,4),(3,4)]) 
G 
>>> <networkx.classes.graph.Graph object at 0x128a930> 
G.nodes(data=True) 
>>> [(1, {}), (2, {}), (3, {}), (4, {})] 
G.node[1]['attribute']='value' 
G.nodes(data=True) 
>>> [(1, {'attribute': 'value'}), (2, {}), (3, {}), (4, {})] 
nx.write_graphml(G,'so.graphml') 
+0

cómo obtener este gráfico n/w a html a través de la llamada ajax? – NoobEditor

4

networkx es una buena idea. puede necesitar graphviz también para visualización.

+0

Graphviz no es necesario, pero es deseable. –

1

Aunque estrictamente no está dentro de sus parámetros, he hecho algunos análisis de redes sociales antes de usar Python. Estuvo bien, terminé usando NodeXL (http://www.nodexl.codeplex.com/), un plugin de Excel (agast!) Para un proyecto una vez y creo que es bastante impresionante. Hace más o menos lo que estás preguntando, con una GUI y una manera de programar orientada a código.

1

Para la visualización Puedo recomendar XDot (también en GitHub) por José Fonseca. Una combinación con networkx podría ser adecuada para usted.

8

networkx y Gephi combo es genial. networkx es capaz de generar formato graphml. Para obtener más información sobre gephi: http://gephi.org/

+0

El formato de archivo gexf es incluso más "nativo" de Gephi, (por ejemplo, gestiona la dinámica) y las salidas de redx también: https://networkx.github.io/documentation/networkx-1.10/reference/readwrite.gexf. html – seinecle

0

Networkx es de hecho una biblioteca ordenada. También lo sugeriría con Gephi. Yo sabría usar el Python console (aún no probé este combo).

Solía ​​usar Ubigraph para la visualización, pero no escala tan bien y es de propiedad exclusiva.

1

Otra forma es Cytoscape. Puede usar también con archivos gml.

Como dijo psychemedia, puede usar Networkx para trazar su gráfico y exportarlo a un archivo gml.

nx.write_graphml(G,'my_file.gml') 

Después de eso, en Cytoscape haga clic en Desde archivo de red y seleccione el archivo GML. Allí, puedes cambiar el estilo también.

+0

Las respuestas de solo enlace se desaconsejan aquí en Stack Overflow. En cambio, [es preferible] (http://meta.stackoverflow.com/q/8259) incluir un ejemplo básico del uso de Cytoscape para redes sociales. – drs

+0

Lo siento, drs. Pero acabo de completar otras respuestas. Estaré mejor. – anapaulagomes

9

Hay tres respuestas que mencionan Networkx y Gephi, pero nadie mencionó graph-tool. La principal diferencia es que los algoritmos se implementan en C++, dando un performance boost en comparación con, por ejemplo, Networkx.

Y, también cubre la visualización. Desde el sitio:

Dibuje convenientemente sus gráficos, usando una variedad de algoritmos y formatos de salida (incluso en la pantalla). Graph-tool tiene sus propios algoritmos de diseño y rutinas de dibujo versátiles e interactivas basadas en cairo y GTK +, pero también puede funcionar como una interfaz muy cómoda para el excelente paquete graphviz.

Aquí hay un claro ejemplo from the docs (hay muchos más):

Block partition of a political blogs network

(Bloque partición de una red de blogs de política).

Y, el código para ello:

>>> g = gt.collection.data["polblogs"] 
>>> g = gt.GraphView(g, vfilt=gt.label_largest_component(gt.GraphView(g, directed=False))) 
>>> state = gt.BlockState(g, B=g.num_vertices(), deg_corr=True) 
>>> state = gt.multilevel_minimize(state, B=2) 
>>> gt.graph_draw(g, pos=g.vp["pos"], vertex_fill_color=state.get_blocks(), output="polblogs_agg.pdf") 
<...> 

(Nota: Las posiciones de cada nodo está predeterminado en este ejemplo, por lo que no algoritmo de diseño tuvieron que ser de ejecución)

Aquí hay otro ejemplo utilizando los mismos datos (y el resultado es increíble): http://ryancompton.net/2014/10/05/graph-tools-visualization-is-pretty-good/

+0

'output =" polblogs_agg.pdf "' ¿Sería un problema si tuvieras que insertar estos gráficos en una página html? posible devolver 'html' o' div' ?? – NoobEditor

+1

@NoobEditor vea [los documentos] (https://graph-tool.skewed.de/static/doc/draw.html?highlight=output): 'fmt: formato de archivo de salida. Los valores posibles son "auto", "ps", "pdf", "svg" y "png". Si el valor es "auto", el formato se adivina a partir del parámetro de salida. '' Así que solo llámalo p. Ej. .png por ejemplo y obtendrá un png. Luego, el siguiente paso es incluir esta imagen en tu html. – keyser

+0

instalando graphtool en 2017 en un mac es imposible. requiere os x mavericks – swyx

Cuestiones relacionadas