Méthode pour sauvegarder networkx graph sur JSON graph?
il semble qu'il devrait y avoir une méthode dans networkx pour exporter le format graphique json, mais je ne le vois pas. J'imagine que cela devrait être facile à faire avec nx.to_dict_of_dicts(), mais nous aurions besoin d'un peu de manipulation. Quelqu'un connais une solution simple et élégante?
5 réponses
documentation contient une description complète
voici un exemple simple:
import networkx as nx
from networkx.readwrite import json_graph
DG = nx.DiGraph()
DG.add_edge('a', 'b')
print json_graph.dumps(DG)
Vous pouvez aussi jeter un oeil à l' Javascript / SVG / D3 bel exemple sur l'ajout de la physique à la visualisation graphique.
Voici une approche JSON que je viens de faire, avec le code pour lire les résultats. Il enregistre les attributs node et edge, au cas où vous en auriez besoin.
import simplejson as json
import networkx as nx
G = nx.DiGraph()
# add nodes, edges, etc to G ...
def save(G, fname):
json.dump(dict(nodes=[[n, G.node[n]] for n in G.nodes()],
edges=[[u, v, G.edge[u][v]] for u,v in G.edges()]),
open(fname, 'w'), indent=2)
def load(fname):
G = nx.DiGraph()
d = json.load(open(fname))
G.add_nodes_from(d['nodes'])
G.add_edges_from(d['edges'])
return G
en Général j'utilise le code suivant :
import networkx as nx;
from networkx.readwrite import json_graph;
G = nx.Graph();
G.add_node(...)
G.add_edge(...)
....
json_graph.node_link_data(G)
il va créer un graphique formaté json dans lequel les noeuds sont nodes
et arêtes links
en plus d'autres informations sur le graphique (directionnalité ... etc)
Les noeuds et les bords sont-ils assez informatifs? Si oui, vous pouvez écrire votre propre fonction:
json.dumps(dict(nodes=graph.nodes(), edges=graph.edges()))
essaye ceci:
# Save graph
nx.write_gml(G, "path_where_graph_should_be_saved.gml")
# Read graph
G = nx.read_gml('path_to_graph_graph.gml')