使用igraph或其他图书馆重叠社区检测

sky*_*ork 4 python graph igraph

我想检测小型网络/图表中的重叠社区.通过重叠,我的意思是节点可以包含在检测算法的输出中的多于一个的社区/群集中.

我已经查看了当前提供的各种社区检测算法igraph,但我认为它们都没有处理重叠的社区.

理想情况下,我希望能够以编程方式在Python中利用这种算法的一些实现.但是,用其他语言实现也​​可以.

Tam*_*más 10

我已经使用igraph的Python接口实现了Ahn等人的分层链接聚类算法; 在这里看到它的源代码.

另外,使用igraph在Python中实现CFinder相当容易; 这就是我提出的:

#!/usr/bin/env python
from itertools import combinations

import igraph
import optparse

parser = optparse.OptionParser(usage="%prog [options] infile")
parser.add_option("-k", metavar="K", default=3, type=int,
        help="use a clique size of K")

options, args = parser.parse_args()

if not args:
    parser.error("Required input file as first argument")

k = options.k
g = igraph.load(args[0], format="ncol", directed=False)
cls = map(set, g.maximal_cliques(min=k))

edgelist = []
for i, j in combinations(range(len(cls)), 2):
    if len(cls[i].intersection(cls[j])) >= k-1:
        edgelist.append((i, j))

cg = igraph.Graph(edgelist, directed=False)
clusters = cg.clusters()
for cluster in clusters:
    members = set()
    for i in cluster:
        members.update(cls[i])
    print "\t".join(g.vs[members]["name"])
Run Code Online (Sandbox Code Playgroud)