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
你的图表是:
并且您想要识别子组以形成系列/数据框架。
您可以使用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
关于python - python 中的社区检测算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72169710/