python 中的社区检测算法

Community Detection algorithms in python

python 中是否有我可以简单使用的关于社区检测的软件包?

这是我的数据集,只是一个包含一些关系记录的csv文件。

A,B
B,E
K,L
Q,W
P,Y
W,P
...

每一行代表一个人与另一个人有关系,例如'A,B'代表A与B有关系。并且不出现可逆关系。例如,'B,A' 永远不会出现在这个数据集中,因为已经存在 'A,B'.

所以在这个例子中,所有可以链接在一起的节点都被认为是一个社区。排序后的关系是这样的:

Community 1: A--B--E
Community 2: K--L
Community 3: Q--W--P--Y

我希望输出是这样的,只输出所有社区和每个社区中的所有成员。

我知道这种功能可以通过neo4j等图数据库轻松实现。但是如何在python中实现呢?有没有什么包比如sklearn中的一些包可以实现这个?

这是一个图形问题。

假设此 DataFrame 作为输入:

  source target
0      A      B
1      B      E
2      K      L
3      Q      W
4      P      Y
5      W      P

你的图表是:

并且您想识别子组以形成 Series/DataFrame。

您可以使用 networkx.connected_components:

# pip install networkx
import networkx as nx

G = nx.from_pandas_edgelist(df, source='source', target='target')

pd.Series({f'Community {i}': g
           for i,g in enumerate(nx.connected_components(G), start=1)})

输出:

Community 1       {A, E, B}
Community 2          {L, K}
Community 3    {P, W, Y, Q}
dtype: object