6

我有一个包含大约 850 万个数据点的文本文件,格式如下:

Company 87178481
Company 893489
Company 2345788
[...]

我想用 Python 创建一个连接图,看看公司之间的网络是什么样子的。从上面的示例中,如果第二列中的值相同,两家公司将共享优势(来自/for Hooked的澄清)。

我一直在使用NetworkX包,并且已经能够为几千个点生成一个网络,但它并没有通过完整的 850 万个节点的文本文件。跑了大概15个小时左右,回来的时候shell里的光标还在闪烁,但是没有输出图。

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

4

2 回答 2

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

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

于 2012-10-25T16:34:34.753 回答
4

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

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

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

于 2012-10-25T18:10:27.787 回答