通过重复数据进行聚类

时间:2017-10-19 18:25:17

标签: python grouping cluster-analysis connected-components

有没有办法将包含三对点(或只是它们的索引号)的数据集拆分成连接的集群?也就是说,如果两对(a,b)和(c,d)共享一个共同点(即a = c,b = c,a = d或b = d)或者如果有共有点,则它们应该在同一个簇中一个或多个其他对的链,每个对与前一个对共享一个点,从一对到另一对。

例如,对列表:

[[1,2],[2,3],[4,5],[6,7],[7,8],[9,4],[8,5]]

将分组如下:

[[1,2],[2,3]]

[[4,5],[6,7],[7,8],[9,4],[8,5]]

在第一个聚类中,对(1,2)和(2,3)具有共同的点2,并且不与聚类外的任何对共享点。在第二个集群中,该对(4,5)与(9,4)和(8,5)共享公共点,而(8,5)与(7,8)具有公共点,其具有共同点(6,7)。

数据最初存储在numpy数组中,但输出格式并不太重要。

之后我需要能够访问构成每个群集的数据。

1 个答案:

答案 0 :(得分:2)

使用networkx

import networkx

edges = [[1, 2], [2, 3], [4, 5], [6, 7], [7, 8], [9, 4], [8, 5]]

graph = networkx.Graph(edges)
print(list(networkx.connected_components(graph)))

输出:

[set([1, 2, 3]), set([4, 5, 6, 7, 8, 9])]