Comment visualiser les réseaux sociaux avec Python
Je dois définir un réseau social , l'analyser et le dessiner. Je pourrais à 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 tant que SVG.
Comment puis-je visualiser les réseaux sociaux de la manière décrite?
3 réponses
networkx est une bibliothèque Python très puissante et flexible pour travailler avec des graphiques de réseau. Des connexions dirigées et 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 bords qui les relient, ou simplement en répertoriant des paires de bords (les nœuds non définis seront automatiquement créés). Une fois créés, les nœuds (et les arêtes) peuvent être annotés avec des étiquettes arbitraires.
Bien que networkx peut être utilisé pour visualiser un réseau (voir la documentation), vous pouvez préférer utiliser une application de visualisation réseau telle que Gephi (disponible à partir de 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')
, Il y a trois réponses qui mentionnent Networkx et Gephi, mais personne n'a mentionné graphique de l'outil. La principale différence est que les algorithmes sont implémentés en C++, donnant un Amélioration des performances par rapport à par exemple Networkx.
Et, il couvre également la visualisation. Du site:
Dessinez facilement vos graphiques, en utilisant une variété d'algorithmes et formats de sortie (y compris à l'écran). Graphique de l'outil a son propre algorithmes de mise en page et polyvalent, interactif routines de dessin basées sur Caire et GTK+, mais il peut aussi fonctionner comme une interface très confortable à l'excellent paquet graphviz.
Voici un exemple soigné des docs (Il y en a beaucoup plus):
(bloc de 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 mise en page n'a dû être exécuté)
En voici un autre exemple en utilisant les mêmes données (et le résultat est incroyable): http://ryancompton.net/2014/10/05/graph-tools-visualization-is-pretty-good/
Une autre façon est Cytoscape . Vous pouvez utiliser avec des fichiers GML aussi.
Comme psychemedia l'a dit, 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 changer le style aussi.