Преобразование igraph в networkx для кластеризации - PullRequest
5 голосов
/ 19 мая 2019

У меня есть код Python, который использует библиотеку igraph

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, так как igraph недавно был прекращен.

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?

1 Ответ

2 голосов
/ 19 мая 2019

Проблема в том, что «кластеризация» относится к двум различным вещам в сетевой науке. Он либо относится к коэффициенту кластеризации (доля треугольников в графе эго; 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)
...