Я пытаюсь построить из CSV-файла мультиплексный ориентированный граф, в котором каждое ребро имеет временную метку.Я хочу экспортировать его в Gephi для анализа в виде динамического графика.
CSV-файл выглядит следующим образом:
cdv = [['id','timestamp', 'node 1', 'node 2', 'description']
['1','10', '1', '2', 'description']
['2','20', '1', '3', 'description']
['3,'30', '2', '3', 'description']]
etc.
Код для построения графика:
def csv2gexf(csvf):
G = nx.MultiDiGraph() # works with G = nx.DiGraph()
for f in csv:
if f[3] not in G:
G.add_node(f[3])
if f[2] not in G:
G.add_node(f[2])
G.node[f[2]]['description'] = f[4]
if G.has_edge(f[3], f[2]):
G.edge[f[3]][f[2]]['weight'] += 1.0
else:
G.add_edge(f[3], f[2])
G.edge[f[3]][f[2]]['timestamp'] = str(f[1])
G.edge[f[3]][f[2]]['weight'] = 1.0
nx.write_gexf(G, "graph.gexf")
Хотя этот код работает при использовании DiGraph вместо MultiDiGraph, последний дает мне следующее:
nx.write_gexf(G, "graph.gexf")
File "<decorator-gen-206>", line 2, in write_gexf
File "/usr/local/lib/python3.6/site-packages/networkx/utils/decorators.py", line 220, in _open_file
result = func(*new_args, **kwargs)
File "/usr/local/lib/python3.6/site-packages/networkx/readwrite/gexf.py", line 77, in write_gexf
writer.add_graph(G)
File "/usr/local/lib/python3.6/site-packages/networkx/readwrite/gexf.py", line 300, in add_graph
self.add_edges(G,graph_element)
File "/usr/local/lib/python3.6/site-packages/networkx/readwrite/gexf.py", line 355, in add_edges
for u,v,key,edge_data in edge_key_data(G):
File "/usr/local/lib/python3.6/site-packages/networkx/readwrite/gexf.py", line 340, in edge_key_data
edge_data=data.copy()
AttributeError: 'str' object has no attribute 'copy'
Я думал, что формат файла gexf должен был обрабатывать мультиплексные ориентированные графы, что я здесь не так делаю