python - 如何监控 networkx 图创建的状态?

标签 python networkx amazon-ec2

我有一个数据集,它是一个代表网络的 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-CreateApache GraphX .

关于python - 如何监控 networkx 图创建的状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34170634/

相关文章:

Python 参数解析 : Raw string input

PHP 多服务器 session

java - 使用 Java 从 S3 检索文件并将它们放入 EC2 Linux 实例

Python 单元测试/测试夹具测试模块是否已加载

python - 如何在 IF 语句后重复两个相同的过程?

python - 将最小值替换为 numpy 数组中的另一个

python - 如何绘制 networkx 图的节点子集

python - 循环中 'if'的多种组合多行条件

python - 在固定位置绘制多重图的节点

json - AWS Cloudformation json 模板中 "Parameters"内应包含哪些内容以及 "Resoures"内应包含哪些内容?