关于python中使用igraph模块下的infomap社区检测函数

最近用到了infomap函数,由于igraph在python中的使用例子很少,一开始的时候十分苦恼(至今仍有部分问题未解决)。
infomap函数的介绍如下:
community_infomap(self, edge_weights=None, vertex_weights=None, trials=10)

a) 参数说明:

edge_weights:边属性的一个名字或一个包含边权值的list

vertex_weights:节点属性名或包含节点权值的list

trials:预期将网络分割的数目,默认值为10,并没有对其进行详细说明

b) 返回值:VertexClustering对象以及一个额外的属性codelength,其中存储着有算法确定的code length。需要注意的是,vertexclustering对象是一个以列表为元素的列表,每个元素就是一个划分后的社区块列表,但是其中显示的并不是图中点的名称,而是点的代号——比如你导入点构成图的时候,导入的第一个点名称或许是102,但是由于第一个导入则代号为0,所以划分的结果VertexClustering中,最大数值其实是:点个数-1。所以如果需要按照原先点名称来进行后面的工作,需要进行一次转换。将代号转换为点名称。

c) 应用的网络类型:该算法是从对节点进行编码的角度考虑的,忽视了连边属性,所以可用于有向和无向网络,参考文献[3][4]是提出的infomap算法以及它的改进,但是说实话英文看起来实在是太费事了。
下面是一段我使用该算法的代码:
`import networkx as nx
import numpy as np
import igraph as ig
from igraph import*

L = []
wei = []
w = 0
node = []
with open(‘G:\出租车数据备份\城市区域划分研究\不同速度带权图/小于12公里.txt’) as f: #数据中每行三个数,点一,点二,权值
data = f.readlines()
for i in data:
line = i.strip().split(’,’)
if (float(line[0]) in node)==False:
node.append(float(line[0]))
if (float(line[1]) in node)==False:
node.append(float(line[1]))
node1 = float(line[0])
node2 = float(line[1])
w = int(line[2])
wei.append(w)
L.append((node1,node2))
g = ig.Graph.TupleList(L,directed=True) #directed函数将g定义为有向图
community_list1=g.community_infomap(edge_weights=wei)

你可能感兴趣的:(关于python中使用igraph模块下的infomap社区检测函数)