-1

我有一个由一百万行组成的大数据,组成了一个二分网络。网络一侧代表APP,另一侧代表IP。

数据格式为:

1     1.1.1.1  

1     1.2.1.1

2     1.1.1.1

1     1.3.1.1

2     1.2.1.1 

我想做的是通过igraph(python接口)编写一些东西来将数据投影到一侧。例如

1.1.1.1  1.2.1.1 the weight = 2

1.1.2.1  1.3.1.1 the weight = 1

权重代表1.1.1.1节点共享一个普通APP(1)和普通APP(2)1.2.1.1

我想将重量保存在格式为的文件中txt

我有点困惑如何处理这个问题igraph

可以igraph处理这个问题吗?

谢谢

4

1 回答 1

3

可以通过以下方式完成:

from igraph import Graph

def looks_like_ip_address(label):
    return "." in label

g = Graph.Read_Ncol("your-input-file.txt")
g.vs["type"] = [looks_like_ip_address(name) for name in g.vs["name"]]
one, other = g.bipartite_projection()
the_projection_you_need = other

假设二分图在 igraph 中具有布尔type属性,并且函数只是假设带有 = 的顶点type属于False图的一侧,而带有type=的顶点属于另一侧True。因此,我们首先加载您的图形,然后使用简单的经验法则手动设置类型:当顶点标签包含点时,假定它属于type=True边。然后我们简单地进行两个预测并丢弃其中一个。您可以使用以下表达式从投影中获取权重:

the_projection_you_need.es["weight"]

更新:根据您的图表,可能会发生其中一个投影(您不需要的那个)太大并且它不适合内存而另一个适合。g.bipartite_projection()有一个which关键字参数,可让您指定所需的投影,因此您可以这样做:

the_projection_you_need = g.bipartite_projection(which=True)
于 2014-05-18T21:42:32.913 回答