如何在Infomap代码(Python)中使用权重?

时间:2018-06-29 15:21:07

标签: python igraph

我想使用infomap查找网络社区。我有一个有向图和加权图。我的问题是我使用代码的方式没有考虑图形的权重,因此我必须考虑它。这是我的代码:

from igraph import *
import pandas as pd

g1=Graph.Read_Ncol("1.txt",names=("node1","node2","weigths"),weights="if_present",directed=True)

print g1.community_infomap()

我的输入是这样的:

0   1   0.9
1   2   0.0
2   3   0.9

如果我使用此示例运行代码,则表明我有1个社区!而从节点1到2的链接的权重为零,我应该有2个社区。因此,它不被视为网络的权重。我该怎么办?

1 个答案:

答案 0 :(得分:1)

在infomap参数括号中,您需要指定边缘权重,如下所示:

G = Graph.Read_Ncol('1.txt', names=('node1', 'node2', 'weights'), directed=True)
comms = G.community_infomap(edge_weights = 'weights')

您可以通过在添加权重函数之后随后检查模块性来验证这一点是否有所不同:

q = G.modularity(comms)
print(q)

在将参数保留为空白,然后添加edge_weights之后,我自己的数据在模块化方面的差异:

comms = G.community_infomap()
q = G.modularity(comms)
print(q)
0.6460833771434323

comms = G.community_infomap(edge_weights = 'weight')
q = G.modularity(comms)
print(q)
0.6130915761568664

如果这不起作用,则将您的数据文件转换为不带标题的GML,并按如下所示进行读取:

G = Graph.Read_GML('Only2001_15Removed.gml')
comms = G.community_infomap(edge_weights = 'weight')