【发布时间】:2017-10-06 02:34:01
【问题描述】:
我有一个 pajek .net 格式的图 G,我使用 igraph 读取它并使用 Louvain 方法使用社区检测。但我希望能够手动更改分辨率以查看模块化如何更改以及随后集群如何更改。
我可以在计算模块化之前更改 gephi 中的分辨率。这可能吗,如果可以的话- 怎么办?如果在 networkx 中可行,我也愿意使用 networkx。
【问题讨论】:
标签: python igraph networkx gephi
我有一个 pajek .net 格式的图 G,我使用 igraph 读取它并使用 Louvain 方法使用社区检测。但我希望能够手动更改分辨率以查看模块化如何更改以及随后集群如何更改。
我可以在计算模块化之前更改 gephi 中的分辨率。这可能吗,如果可以的话- 怎么办?如果在 networkx 中可行,我也愿意使用 networkx。
【问题讨论】:
标签: python igraph networkx gephi
igraph.Graph.community_multilevel(self, weights=None, return_levels=False) 有一个return_levels 参数。如果True,则在列表中返回每个级别的社区。所以这个列表中的每个元素都是一个聚类,对应于 Louvain 的不同“分辨率”(即级别)。
例如,Louvain 在对空手道俱乐部图进行聚类时会产生两个级别
import igraph as ig
import networkx as nx
# networkx is only needed to load the karate club graph
karate = igraph.Graph.Adjacency((nx.to_numpy_matrix(nx.karate_club_graph()) > 0).tolist(),
mode = igraph.ADJ_UNDIRECTED)
clusterings = igraph.Graph.community_multilevel(karate, return_levels=True)
其中clusterings[0] 是第一级,clusterings[1] 是第二级。 clusterings[0] 将比clusterings[1] 分辨率更高,在这种情况下可以看出clusterings[0] 包含更多社区
>>> # number of communities in the first level is given by
>>> max(clusterings[0].membership) + 1
6
>>> # number of communities in the second level is given by
>>> max(clusterings[1].membership) + 1
4
【讨论】:
AFAIK,igraph.Graph.community_multilevel 不公开分辨率参数。 networkx 没有本地实现 Louvain 方法,但是有一个出色的 community 包,它构建在 networkx 之上,它允许您设置分辨率参数。 Bitbucket repository here 或 pip install python-louvain)。
【讨论】: