Python Reading from a file to create a weighted directed graph using networkx

情到浓时终转凉″ 提交于 2021-02-06 11:07:55

问题


I am new at python and Spyder. I am trying to read from a text file with format into a graph using networkx:

FromNodeId  ToNodeId    Weight
0   1   0.15
0   2   0.95
0   3   0.8
0   4   0.5
0   5   0.45
0   6   0.35
0   7   0.4
0   8   0.6
0   9   0.45
0   10  0.7
1   2   0.45
1   11  0.7
1   12  0.6
1   13  0.75
1   14  0.55
1   15  0.1
...

I want to use Networkx graph format that can store such a large graph(about 10k nodes, 40k edges).

import networkx as nx
import matplotlib.pyplot as plt

g = nx.read_edgelist('test.txt', nodetype=int, create_using= nx.DiGraph())

print(nx.info(g))
nx.draw(g)
plt.show()

When I run this code, nothing happens. I am using Spyder for editing. Could you help? Thanks!


回答1:


You have comment first line with symbol # (read_edgelist by default skip lines start with #):

#FromNodeId  ToNodeId    Weight
 0   1   0.15
 0   2   0.95
 0   3   0.8

Then modify call of read_edgelist to define type of weight column:

import networkx as nx
import matplotlib.pyplot as plt

g = nx.read_edgelist('./test.txt', nodetype=int,
  data=(('weight',float),), create_using=nx.DiGraph())

print(g.edges(data=True))
nx.draw(g)
plt.show()

Output:

[(0, 1, {'weight': 0.15}), (0, 2, {'weight': 0.95}), (0, 3, {'weight':
0.8}), (0, 4, {'weight': 0.5}), (0, 5, {'weight': 0.45}), (0, 6, {'weight': 0.35}), (0, 7, {'weight': 0.4}), (0, 8, {'weight': 0.6}), (0, 9, {'weight': 0.45}), (0, 10, {'weight': 0.7}), (1, 2, {'weight':
0.45}), (1, 11, {'weight': 0.7}), (1, 12, {'weight': 0.6}), (1, 13, {'weight': 0.75}), (1, 14, {'weight': 0.55}), (1, 15, {'weight':
0.1})]



来源:https://stackoverflow.com/questions/45292159/python-reading-from-a-file-to-create-a-weighted-directed-graph-using-networkx

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!