繁体   English   中英

将igraph转换为networkx进行聚类

[英]Converting igraph to networkx for clustering

我有一个使用igraph库的python代码

import igraph
edge =  [(0, 6), (0, 8), (0, 115), (0, 124), (0, 289), (0, 359), (0, 363), (6, 60), (6, 115), (6, 128), (6, 129), (6, 130), (6, 131), (6, 359), (6, 529), (8, 9), (8, 17), (8, 115)]
G = igraph.Graph(edges=edge, directed=False)
G.vs['label'] = nodes
G.es["weight"] = weights
dendrogram = G.community_edge_betweenness()
clusters = dendrogram.as_clustering()
membership = clusters.membership
out = pd.Series(membership, index=nodes)

我需要将其转换为networkx库。

import networkx as nx
G = nx.Graph(edges)
dendrogram = nx.edge_betweenness_centrality(G)
clusters = nx.clustering(dendrogram)
membership = clusters.membership
out = pd.Series(membership, index=nodes)

但是, dendrogram无法在networkx库中进行聚类。 有人可以帮助将igraph代码复制到networkx集群吗?

问题是“聚类”是指网络科学中的两个不同的东西。 它或者指的是聚类系数(自我图中的三角形的分数; nx.clustering ),或者它指的是一组节点(也称为数据聚类,网络社区,节点分区等)。

在这种情况下,您使用igraph community_edge_betweenness()来分层聚类节点,然后剪切树形图以通过dendrogram.as_clustering()创建节点分区。

networkx中的等价物是使用girvan_newman

from networkx.algorithms.community.centrality import girvan_newman

nx_dendrogram = girvan_newman(G)
move_down_dendrogram = itertools.takewhile(lambda c: len(c) <= 4, nx_dendrogram)
for c in move_down_dendrogram:
    clustering_list = c
print(clustering_list)

membership = [0] * G.number_of_nodes()
for ic, cset in enumerate(clustering_list):
    for n in cset:
        membership[n] = ic
out = pd.Series(membership, index=nodes)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM