我有一个非常大的网络需要在 Networkx 中读取和分析(大约 5 亿行),存储在 gzip 加权边缘列表(Node1 Node2 权重)中。到目前为止,我尝试用以下方式阅读它:
# Open and Read File
with gzip.open(network,'rb') as fh:
# Read Weighted Edge List
G = nx.read_weighted_edgelist(fh, create_using=nx.DiGraph())
Run Code Online (Sandbox Code Playgroud)
但由于它很大,我有一些内存问题。我想知道是否有一种方法可以沿着固定长度的块以“pandas”样式读取文件。感谢您的帮助。
编辑:
这是我的边缘列表文件的一小部分提取(Node1 Node2 Weight):
30879005 5242 11
44608582 2295986 4
24935102 737450 1
42230925 1801294 1
20926179 2332390 1
40959246 1100438 1
3291058 3226104 1
23192021 5818064 1
16328715 7695005 1
11561383 2102983 1
1886716 1378893 2
23192021 5818065 1
2060097 2060091 1
7176482 3222203 2
46586813 1599030 1
35151866 35151866 1 …Run Code Online (Sandbox Code Playgroud) 我有一个包含这些节点的 csv 文件,每个节点都有相关的坐标,如下所示:
node x y
A1 67.8 15.53
A2 108.74 15.53
B1 67.8 25.33
B2 108.74 25.33
C1 67.8 30.22
C2 108.74 30.22
D1 67.8 37.99
D2 108.74 37.99
E1 67.8 43.84
Run Code Online (Sandbox Code Playgroud)
对于每个节点,我有另一个带边的文件,它表示每个连接节点之间的距离,如下所示:
node1 node2 distance
A1 A2 40.90
A1 B1 9.8
A2 B2 9.8
B1 A1 9.8
...
Run Code Online (Sandbox Code Playgroud)
那么,我该怎么做才能将节点及其对应的边添加到同一个图中?
我试过这个,但它不起作用:
import pandas as pd
import networkx as nx
import matplotlib.pyplot as plt
import numpy
nodes = pd.read_csv('nodes.csv')
print nodes
G = nx.Graph()
for row in nodes.iterrows():
G.add_node(row[1][0], x=row[1][2],y=row[1][3]) …Run Code Online (Sandbox Code Playgroud)