我有一个数据集,它是一个代表网络的 csv/txt 文件。文件中的每一行都包含两个以逗号分隔的节点名称。我的数据文件涉及大约 330k 个节点和大约 550k 个边。我正在尝试使用以下代码创建一个非常基本的图表(是的,我知道它会非常困惑):
import networkx as nx
import matplotlib.pyplot as plt
import sys
import numpy as np
f = open('dataFile.txt', 'rb')
G = nx.read_edgelist(f, delimiter=',', nodetype=str)
f.close()
print(nx.number_of_nodes(G))
print(nx.number_of_edges(G))
plt.figure(1)
nx.draw(G)
plt.savefig("graph.pdf")
我在 AWS EC2 m4.4xlarge 实例上运行它,它占用 100% 的 CPU 和仅 1% 的内存。
我对此持怀疑态度,因为我认为 networkx 是内存密集型的,而不是 CPU pig 。现在,它正在 nx.draw 命令上旋转。有什么方法可以监控图形生成的进度吗?
最佳答案
Networkx 确实不适合这项任务。它非常慢。 此外,matplotlib (nx.draw) 永远不会成功绘制那么多对象。
如果您想可视化,您将需要一个工具来查看布局的每个步骤,您可以在其中修改正在发生的事情。
即使它有问题,我还是推荐 Gephi为了这。唯一适用于大图的布局算法是 OpenOrd (Gephi 插件)。不要忘记在运行算法时不要显示边缘。
作为处理图表规模的通用库,我推荐 graph-tool .使用 C++ 后端和 python 接口(interface),它比 networkx 快得多。画的也比较好。
最后,当您达到百万节点规模时,您可以切换到大型图形分析框架,例如 Graphlab-Create或 Apache GraphX .
关于python - 如何监控 networkx 图创建的状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34170634/