如何监控 networkx 图创建的状态?
How to monitor status of networkx graph creation?
我有一个数据集,它是一个代表网络的 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 实例上使用它,它占用了 CPU 的 100%,只有 1% 的内存。
我对此持怀疑态度,因为我认为 networkx 是内存密集型的,而不是 CPU 猪。现在,它正在根据 nx.draw 命令旋转。有什么方法可以监控图形生成的进度吗?
Networkx 确实不适合这项任务。它非常慢。
此外,matplotlib (nx.draw) 永远无法成功绘制那么多对象。
如果您想可视化,您将需要一个工具来查看布局的每个步骤,您可以在其中修改正在发生的事情。
尽管它有 bug,我还是推荐 Gephi for this. The only layout algorithm which works for large graphs is OpenOrd(Gephi 插件)。不要忘记在 运行 算法时不要显示边缘。
作为处理图表比例的通用库,我推荐 graph-tool。使用 C++ 后端和 python 接口,它比 networkx 快得多。画的也比较好。
最终当你达到百万节点规模时,你可以切换到大型图分析框架,例如Graphlab-Create or Apache GraphX。
Networkx' draw
确实需要很长时间。但是,它不是 Networkx 提供的唯一布局/绘图功能,而且您的图形也没有那么大。
您可以使用 networkx.draw_graphviz(G, 'dot')
或 networkx.draw_graphviz(G, 'neato')
(其中 G
是您的 networkx 图)这样简单的东西来尝试 draw_graphviz。
此调用将使用 graphviz 作为节点布局并安装 matplotlib for the actual drawing. Therefore, you better also make sure that the machine has graphviz(sudo apt-get install graphviz
、sudo pip install pygraphviz
,假设您是 运行 基于 Debian 的操作系统,其中 apt
和 pip
可用)
有关 dot
和 neato
含义的解释,请参阅 graphviz 的网站。这是由 graphviz 提供的两个软件(以及其他软件),用于处理图形的绘制(它们可以在命令行中调用)。我个人在 Amazon 的 EC2 上将它们与数十万条边一起使用,虽然节点布局可能看起来需要一些时间,但它们会产生输出。
就监控整个进程而言,您可以从(另一个)终端发出 top
命令并检查进程在做什么,但这将回答简单的问题,例如 "Has the process stop?", "Does it keep consuming memory?"和"What percentage of the CPU time does it use right this instance?",不会回答"What percentage of the graph has been laid out and drawn so far?"等问题。有关 top
的更多信息,请参阅 this link。
希望这对您有所帮助。
我有一个数据集,它是一个代表网络的 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 实例上使用它,它占用了 CPU 的 100%,只有 1% 的内存。
我对此持怀疑态度,因为我认为 networkx 是内存密集型的,而不是 CPU 猪。现在,它正在根据 nx.draw 命令旋转。有什么方法可以监控图形生成的进度吗?
Networkx 确实不适合这项任务。它非常慢。 此外,matplotlib (nx.draw) 永远无法成功绘制那么多对象。
如果您想可视化,您将需要一个工具来查看布局的每个步骤,您可以在其中修改正在发生的事情。
尽管它有 bug,我还是推荐 Gephi for this. The only layout algorithm which works for large graphs is OpenOrd(Gephi 插件)。不要忘记在 运行 算法时不要显示边缘。
作为处理图表比例的通用库,我推荐 graph-tool。使用 C++ 后端和 python 接口,它比 networkx 快得多。画的也比较好。
最终当你达到百万节点规模时,你可以切换到大型图分析框架,例如Graphlab-Create or Apache GraphX。
Networkx' draw
确实需要很长时间。但是,它不是 Networkx 提供的唯一布局/绘图功能,而且您的图形也没有那么大。
您可以使用 networkx.draw_graphviz(G, 'dot')
或 networkx.draw_graphviz(G, 'neato')
(其中 G
是您的 networkx 图)这样简单的东西来尝试 draw_graphviz。
此调用将使用 graphviz 作为节点布局并安装 matplotlib for the actual drawing. Therefore, you better also make sure that the machine has graphviz(sudo apt-get install graphviz
、sudo pip install pygraphviz
,假设您是 运行 基于 Debian 的操作系统,其中 apt
和 pip
可用)
有关 dot
和 neato
含义的解释,请参阅 graphviz 的网站。这是由 graphviz 提供的两个软件(以及其他软件),用于处理图形的绘制(它们可以在命令行中调用)。我个人在 Amazon 的 EC2 上将它们与数十万条边一起使用,虽然节点布局可能看起来需要一些时间,但它们会产生输出。
就监控整个进程而言,您可以从(另一个)终端发出 top
命令并检查进程在做什么,但这将回答简单的问题,例如 "Has the process stop?", "Does it keep consuming memory?"和"What percentage of the CPU time does it use right this instance?",不会回答"What percentage of the graph has been laid out and drawn so far?"等问题。有关 top
的更多信息,请参阅 this link。
希望这对您有所帮助。