web-dev-qa-db-fra.com

Comment visualiser les réseaux sociaux avec Python

Je dois définir un réseau social , l'analyser et le dessiner. Je pouvais à la fois le dessiner à la main et l'analyser (calculer diverses métriques) à la main. Mais je ne voudrais pas réinventer la roue.

J'ai essayé d'utiliser matplotlib, mais je dois l'utiliser de manière interactive, et en quelques lignes lui dire comment charger les données, puis appeler une fonction de rendu, qui rendra le graphique en SVG.

Comment visualiser les réseaux sociaux de la manière décrite?

31
Mads Skjern

networkx est une bibliothèque très puissante et flexible Python pour travailler avec des graphes de réseau. Directed et des connexions non dirigées peuvent être utilisées pour connecter des nœuds. Les réseaux peuvent être construits en ajoutant des nœuds puis les arêtes qui les connectent, ou simplement en listant les paires d'arêtes (les nœuds non définis seront automatiquement créés). Une fois créés, les nœuds (et les arêtes) peuvent être annoté avec des étiquettes arbitraires.

Bien que networkx puisse être utilisé pour visualiser un réseau (voir la documentation), vous pouvez préférer utiliser une application de visualisation de réseau telle que Gephi (disponible sur gephi.org ). networkx prend en charge un large éventail de formats d'importation et d'exportation. Si vous exportez un réseau en utilisant un format tel que GraphML , le fichier exporté peut être facilement chargé dans Gephi et visualisé là.

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')
28
psychemedia

Il y a trois réponses qui mentionnent Networkx et Gephi, mais personne n'a mentionné graph-tool . La principale différence est que les algorithmes sont implémentés en C++, ce qui donne un amélioration des performances par rapport à par ex. Networkx.

Et, il couvre également la visualisation. Depuis le site:

Dessinez facilement vos graphiques en utilisant une variété d'algorithmes et de formats de sortie (y compris à l'écran). Graph-tool a ses propres algorithmes de mise en page et des routines de dessin interactives polyvalentes basées sur le caire et GTK +, mais il peut également fonctionner comme une interface très confortable avec l'excellent package graphviz.

Voici un bon exemple à partir des documents (il y en a beaucoup plus):

Block partition of a political blogs network

(Bloquer la partition d'un réseau de blogs politiques).

Et, le code pour cela:

>>> 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")
<...>

(Remarque: les positions de chaque nœud sont prédéterminées dans cet exemple, donc aucun algorithme de disposition n'a dû être exécuté)

Voici un autre exemple utilisant les mêmes données (et le résultat est incroyable): http://ryancompton.net/2014/10/05/graph-tools-visualization-is-pretty-good/

14
keyser

Une autre façon est Cytoscape . Vous pouvez également utiliser des fichiers gml.

Comme l'a dit psychemedia, vous pouvez utiliser Networkx pour tracer votre graphique et exporter vers un fichier gml.

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

Après cela, dans Cytoscape, cliquez sur From Network File et sélectionnez votre fichier gml. Là, vous pouvez également changer le style.

1
anapaulagomes

Beaucoup de choses se sont passées ici récemment Netwulf est une bibliothèque dédiée à permettre une visualisation interactive reproductible et facile des réseaux dans Python (avertissement: je suis un contributeur).

img

Consultez également webweb , ce qui est préférable si vous souhaitez exporter le réseau en html.

0
Ulf Aslak