Способ сохранения графа networkx в граф json? - PullRequest
20 голосов
/ 02 июля 2010

Похоже, в networkx должен быть метод для экспорта в граф json, но я его не вижу.Я предполагаю, что это должно быть легко сделать с помощью nx.to_dict_of_dicts (), но потребует немного манипуляций.Кто-нибудь знает простое и элегантное решение?

Ответы [ 6 ]

17 голосов
/ 30 декабря 2011

Эта документация содержит полное описание

Простой пример:

import networkx as nx
from networkx.readwrite import json_graph

DG = nx.DiGraph()
DG.add_edge('a', 'b')
print json_graph.dumps(DG)

Вы также можете взглянуть на Javascript / SVG/ D3 хороший пример добавления физики в графическую визуализацию.

7 голосов
/ 25 сентября 2011

Вот подход JSON, который я только что сделал, вместе с кодом для считывания результатов обратно. Он сохраняет атрибуты узла и ребра, на случай, если вам это нужно.

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
4 голосов
/ 01 июля 2014

Обычно я использую следующий код:

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)

это создаст граф в формате json, в котором узлы находятся в nodes, а ребра в links в дополнение к другой информации о графике (направленность, ... и т. д.)

1 голос
/ 11 апреля 2017

Попробуйте это:

# Save graph
nx.write_gml(G, "path_where_graph_should_be_saved.gml")

# Read graph
G = nx.read_gml('path_to_graph_graph.gml')
1 голос
/ 02 июля 2010

Достаточно ли информации для узлов и ребер?Если это так, вы можете написать свою собственную функцию:

json.dumps(dict(nodes=graph.nodes(), edges=graph.edges()))
0 голосов
/ 22 марта 2019

Остальные решения не сработали для меня. Из networkx 2.2 документации :

nx.write_gpickle(G, "test.gpickle")
G = nx.read_gpickle("test.gpickle")
...