我有一个由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
处理此问题吗?
由于
答案 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