Может ли networkx выбрать определенные c столбцы из данных CSV? - PullRequest
1 голос
/ 06 апреля 2020

Допустим, у меня есть файл data.csv со следующим:

a 1 2 45
b 2 3 24
c 4 5 98
d 5 6 12

И я хочу, чтобы мои узлы и, как мне кажется, ребра были просто столбцами 2 и 3

Так он выводит что-то вроде этого:

enter image description here

1 Ответ

1 голос
/ 06 апреля 2020

Вероятно, проще всего использовать pandas, чтобы прочитать ваш файл .csv в формате df, а затем выполнить понимание списка, чтобы извлечь каждую строку в формат, читаемый библиотекой networkx.

Следующий код частично адаптировано из: Рисование сети с узлами и ребрами в Python3

... с изменениями для ориентированного графа в круговой схеме с узлами, ребрами и весами столбцы вашего df

import pandas as pd

import matplotlib.pyplot as plt
import networkx as nx

df = pd.DataFrame({'nodes': [1,2,4,5], 'edges': [2,3,5,6], 'weights': [45,24,98,12]})

# each edge is a tuple of the form (node, edge/node, {'weight': weight})
edges = [(x, y, {'weight': z}) for x, y, z in zip(df['nodes'], df['edges'], df['weights'])]

# a directed graph has arrows pointing to edges
G = nx.DiGraph()

G.add_edges_from(edges)

# create a circular layout
pos = nx.circular_layout(G)

# draw the nodes
nx.draw_networkx_nodes(G,pos, node_size=300)

# draw the labels
nx.draw_networkx_labels(G,pos, font_size=15,font_family='sans-serif')

# draw the edges
nx.draw_networkx_edges(G,pos, edgelist=edges, arrowstyle = '-|>', width=1)

# add weights
labels = nx.get_edge_attributes(G,'weight')
nx.draw_networkx_edge_labels(G,pos, edge_labels=labels)
plt.show()

circular directed graph

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...