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
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