【问题标题】:How to monitor status of networkx graph creation?如何监控networkx图创建的状态?
【发布时间】:2016-03-14 05:50:41
【问题描述】:

我有一个数据集,它是一个代表网络的 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 占用。现在,它正在运行 nx.draw 命令。有什么方法可以监控它的图形生成有多远?

【问题讨论】:

    标签: python networkx aws-ec2


    【解决方案1】:

    Networkx 确实不适合这项任务。它非常慢。 此外,matplotlib (nx.draw) 永远不会成功绘制那么多对象。

    如果您想进行可视化,您将需要一个工具来查看布局的每个步骤,您可以在其中修改正在发生的事情。

    即使它有问题,我也会为此推荐Gephi。唯一适用于大图的布局算法是OpenOrd(Gephi 插件)。不要忘记在运行算法时不要显示边缘。

    作为处理图表比例的通用库,我推荐graph-tool。使用 C++ 后端和 python 接口,它比 networkx 快得多。绘图也更好。

    最终,当您达到百万节点规模时,您可以切换到大型图形分析框架,例如 Graphlab-CreateApache GraphX

    【讨论】:

    • 我听取了您的建议,并继续在 GraphX 中进行尝试。我不太了解 scala 或 spark(还),但我能够制作图表并计算适当数量的边和顶点。绝对是一个学习曲线,但它有效!谢谢!
    • 有一个python API。你真的不需要使用 Scala。 Spark 是机器学习和大数据分析的重要资产。我很容易用它处理十亿条边的图:)
    • 确实如此,但 pyspark 还不支持 GraphX。因此,斯卡拉。
    【解决方案2】:

    Networkx'draw 确实需要很长时间。但是,它不是 Networkx 提供的唯一布局/绘图功能,而且您的图形也不是那么大。

    您可以尝试draw_graphviznetworkx.draw_graphviz(G, 'dot')networkx.draw_graphviz(G, 'neato') 一样简单(其中G 是您的networkx 图)。

    此调用将使用 graphviz 进行节点布局,使用matplotlib 进行实际绘图。因此,您最好还确保机器安装了graphvizsudo apt-get install graphvizsudo pip install pygraphviz,假设您正在运行基于 Debian 的操作系统,其中aptpip 可用)

    如需了解dotneato 的含义,请参阅graphviz 的网站。这是 graphviz 提供的两个软件(以及其他软件),它们处理图形的绘制(它们可以在命令行中调用)。我个人在 Amazon 的 EC2 上将它们与数十万条边一起使用,虽然节点布局可能看起来需要一些时间,但它们会产生输出。

    在监控整个进程方面,您可以从(另一个)终端发出top 命令并检查进程正在做什么,但这会回答简单的问题,例如“进程是否停止?”,“是否它一直在消耗内存?”和“它在这个实例中使用了多少百分比的 CPU 时间?”,它不会回答诸如“到目前为止已经布置和绘制了多少百分比的图形?”之类的问题。有关top 的更多信息,请参阅this link

    希望这会有所帮助。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-10
    • 2011-04-21
    • 1970-01-01
    • 1970-01-01
    • 2012-05-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多