您可能想查看包python-louvain。有了它,您可以使用函数best_partition 在图中检测社区。从功能描述来看:
计算最大化图节点的分区
使用鲁汶启发式的模块化(或尝试..)
这是最高模块化的分区,即最高的分区
Louvain算法生成的树状图。
在我的示例中,我计算了karate_club_graph 的社区。 (请注意,我使用 best_partition 和 weight 关键字,即使我的图表没有加权边——我只是展示您将如何在您的情况下使用该函数。)
import networkx as nx
import community
G = nx.karate_club_graph()
p = community.best_partition(G, weight='weight')
print(p)
输出:
{0: 0, 1: 0, 2: 0, 3: 0, 4: 1, 5: 1, 6: 1, 7: 0, 8: 2, 9: 0, 10: 1, 11: 0, 12: 0, 13: 0, 14: 2, 15: 2, 16: 1, 17: 0, 18: 2, 19: 0, 20: 2, 21: 0, 22: 2, 23: 3, 24: 3, 25: 3, 26: 2, 27: 3, 28: 3, 29: 2, 30: 2, 31: 3, 32: 2, 33: 2}
输出是一个字典(键 = 节点,值 = 分区)。分区从 0 到 k-1。如果您需要它们从 1 变为 k,您可以将字典值提高到 +1。
for k, v in p.items():
p[k] = v + 1