Как создать график, используя данные файла 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()