Как создать график, используя данные файла CSV?

У меня есть следующие данные в файле CSV,

A,B,50
A,C,34
C,D,55
D,D,80
A,D,90
B,D,78

Теперь я хочу создать граф с A, B, C, D в качестве узлов и номерами третьего столбца в качестве ребер. Я использую библиотеку networkx. Номер третьего столбца показывает общие элементы, совместно используемые A, B и A,C и так далее.

Я открываю и читаю CSV-файл.

Graphs = nx.Graph()

for row in openedfile:
 Graphs.add_node(row[0])
 Graphs.add_edge(row[2])

nx.draw_graphviz(Graphs)

Приведенный выше код дает мне ошибку. Я не могу получить правильный ответ.

1 ответ

Решение

Я не уверен, что понимаю формат вашего файла, поскольку первые два столбца показывают узлы, которые должны быть соединены ребром, а третий столбец - вес этого ребра.

Предполагая, что это так, более простой способ загрузить CSV-файл ребер в NetworkX состоит в использовании networkx.read_edgelist функция. Вот пример для вашего графика (при условии, что он хранится в файле с именем "edges.txt"):

In [1]: import networkx as nx
In [2]: G = nx.read_edgelist("edges.txt", delimiter=",", data=[("weight", int)]) 
In [3]: G.edges(data=True)
Out[1]: 
[(u'A', u'C', {'weight': 34}),
 (u'A', u'B', {'weight': 50}),
 (u'A', u'D', {'weight': 90}),
 (u'C', u'D', {'weight': 55}),
 (u'B', u'D', {'weight': 78}),
 (u'D', u'D', {'weight': 80})]

Важные параметры, на которые следует обратить внимание, это то, что для каждой строки необходимо установить запятую (","), и вам нужно указать, что данные, хранящиеся в третьем столбце, являются целыми числами, которые должны храниться с использованием ключа "weight",

Затем вы можете нарисовать график с весами в виде меток ребер следующим образом:

In [4]: edge_labels = dict( ((u, v), d["weight"]) for u, v, d in G.edges(data=True) )
In [5]: pos = nx.random_layout(G)
In [6]: nx.draw(G, pos)
In [7]: nx.draw_networkx_edge_labels(G, pos, edge_labels=edge_labels)
In [8]: import matplotlib.pyplot as plt; plt.show()

http://f.cl.ly/items/2F1t1I3D2i0R2X2E150N/graph.png

Другие вопросы по тегам