使用Python生成连接/网络图

时间:2012-10-25 16:26:56

标签: python networkx

我有一个文本文件,其中包含大约850万个数据点:

Company 87178481
Company 893489
Company 2345788
[...]

我想使用Python创建连接图,以查看公司之间的网络状况。从上面的示例中,如果第二列中的值相同,则两家公司将共享优势(来自/ Hooked 的说明)。

我一直在使用 NetworkX 软件包,并且已经能够生成几千个点的网络,但它并没有通过完整的850万节点文本文件。我跑了它并离开了大约15个小时,当我回来时,shell中的光标仍然闪烁,但是没有输出图。

假设它仍在运行是否安全?是否有更好/更快/更容易的方法来绘制数百万个点?

2 个答案:

答案 0 :(得分:5)

如果你有1000K的数据点,你需要某种方式来查看广泛的图片。根据您正在寻找的内容,如果您可以在公司之间指定“距离”(比如分开的连接数),您可以通过Dendrogram可视化关系(或聚类)。

Scipy进行聚类:

http://docs.scipy.org/doc/scipy/reference/cluster.hierarchy.html#module-scipy.cluster.hierarchy

并具有将它们转换为树状图以进行可视化的功能:

http://docs.scipy.org/doc/scipy/reference/generated/scipy.cluster.hierarchy.dendrogram.html#scipy.cluster.hierarchy.dendrogram

通过networkx获取最短路径距离函数的示例:

http://networkx.lanl.gov/reference/generated/networkx.algorithms.shortest_paths.generic.shortest_path.html#networkx.algorithms.shortest_paths.generic.shortest_path

最终,您必须决定如何在图表中对两家公司(顶点)之间的距离进行加权。

答案 1 :(得分:4)

你有太多的数据点,如果你确实想象了网络,那就没有任何意义了。您需要有办法1)通过删除那些不太重要/不那么连接的公司来减少公司数量2)以某种方式总结图表然后进行可视化。

为了减少数据的大小,可以更好地独立创建网络(使用您自己的代码创建公司的边缘列表)。通过这种方式,您可以减小图形的大小(例如,删除单例,可能很多)。

对于摘要,我建议运行群集或社区检测算法。即使对于非常大的网络,这也可以非常快速地完成。使用igraph包中的“fastgreedy”方法:http://igraph.sourceforge.net/doc/R/fastgreedy.community.html (网上也提供了一种更快的算法,这是由Blondel等人提出的:http://perso.uclouvain.be/vincent.blondel/publications/08BG.pdf我知道他们的代码可以在网上获得)