我有一个文本文件,其中包含大约850万个数据点:
Company 87178481
Company 893489
Company 2345788
[...]
我想使用Python创建连接图,以查看公司之间的网络状况。从上面的示例中,如果第二列中的值相同,则两家公司将共享优势(来自/ Hooked 的说明)。
我一直在使用 NetworkX 软件包,并且已经能够生成几千个点的网络,但它并没有通过完整的850万节点文本文件。我跑了它并离开了大约15个小时,当我回来时,shell中的光标仍然闪烁,但是没有输出图。
假设它仍在运行是否安全?是否有更好/更快/更容易的方法来绘制数百万个点?
答案 0 :(得分:5)
如果你有1000K的数据点,你需要某种方式来查看广泛的图片。根据您正在寻找的内容,如果您可以在公司之间指定“距离”(比如分开的连接数),您可以通过Dendrogram可视化关系(或聚类)。
Scipy进行聚类:
http://docs.scipy.org/doc/scipy/reference/cluster.hierarchy.html#module-scipy.cluster.hierarchy
并具有将它们转换为树状图以进行可视化的功能:
通过networkx
获取最短路径距离函数的示例:
最终,您必须决定如何在图表中对两家公司(顶点)之间的距离进行加权。
答案 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我知道他们的代码可以在网上获得)