如何使用python界面的igraph来投影二分网络?

时间:2014-05-15 09:34:46

标签: python projection igraph bipartite

我有一个由100万行组成的大数据,构成了一个二分网络。 网络的一侧代表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处理此问题吗?

由于

1 个答案:

答案 0 :(得分: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的顶点属于图的一侧,而顶点位于{{ 1}} = type属于另一个。因此,我们首先加载图形,然后使用简单的经验法手动设置类型:当顶点标签包含点时,假定它属于True = type侧。然后我们只做两个投影并丢弃其中一个。您可以使用以下表达式从投影中获取权重:

True

更新:根据您的图表,可能会出现其中一个投影(您不需要的投影)太大而且不适合内存而另一个适合。 the_projection_you_need.es["weight"] 有一个g.bipartite_projection()关键字参数,可让您指定所需的投影,因此您可以执行此操作:

which