python - 使用 python 对字符串进行聚类的最佳方法

标签 python cluster-analysis

我有 3200000 个字符串(字母表的所有可能组合 = 'ACDEFGHIKLMNPQRSTVWY')。 数据的一个小例子:

['AAAAA', 'AAAAC', 'AAAAD', 'AAAAE', 'AAAAF', 'AAAAG', 'AAAAH',
 'AAAAI', 'AAAAK', 'AAAAL', 'AAAAM', 'AAAAN', 'AAAAP', 'AAAAQ',
 'AAAAR', 'AAAAS', 'AAAAT', 'AAAAV', 'AAAAW', 'AAAAY', 'AAACA',
 'AAACC', 'AAACD', 'AAACE', 'AAACF', 'AAACG', 'AAACH', 'AAACI',
 'AAACK', 'AAACL', 'AAACM', 'AAACN', 'AAACP', 'AAACQ', 'AAACR',
 'AAACS', 'AAACT', 'AAACV', 'AAACW', 'AAACY'...]

我使用此代码来构造小字符串的大列表。

def get_all_possible_kmers(alphabet, k):
    return [''.join(char) for char in itertools.product(alphabet, repeat=k)]

我的意图是将所有字符串聚集在共享/相似字符组合的组中,即那些是单个字符串的排列的字符串。会有不同的组,例如: a1b1c1d1e1 、 a1b1c1d2 、 a1b2c2 .... a5 。每个簇必须包含 a1b4、b1a4、a1c4 等组合。 因此,每个簇将包含作为给定字符串组合的排列的所有字符串,例如巴布、巴布等 我可以使用任何 python 工具来进行这种聚类吗? 我正在考虑使用某种距离度量,例如汉明距离或编辑距离。

你们有适合开始的方向吗?

感谢您的时间和知识。

保罗

最佳答案

您可以使用collections.Counter生成集群哈希并更新字典中的集合。

例如:

from collections import Counter, defaultdict

clusters = defaultdict(set)
for item in get_all_possible_kmers(alphabet, k):
    clusters[str(Counter(item))].add(item)

您还可以将 str(Counter(item)) 设置为您需要的格式 (a1b4...)

此外,您可以通过在获得下一个 kmer 时更新集群来简化计算。

关于python - 使用 python 对字符串进行聚类的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59562531/

相关文章:

python - 使用 PCA (Python) 可视化聚类结果

python - Numpy:如何找到矩阵 A 中子矩阵的唯一局部最小值?

python - 模块未找到错误: No module named 'mport pandas as pd\r'

algorithm - 查找所有 k 最近邻

python - 如何在核密度估计中找到局部最大值?

python - 即使对于 128 GB 的内存,图形聚类也会出现内存错误。为什么?

python - 从 stdin 读取时出现 EOF 错误 - Python3

python - 如何通过 python input() 函数传递空列表

Python-将用户输入转换为列表

r - 如何展开使用 R 中的 igraph 包制作的社区图