【发布时间】:2018-08-12 14:07:49
【问题描述】:
我正在编写一个脚本,该脚本当前包含多个 DNA 序列列表(每个列表都有不同数量的 DNA 序列),我需要根据汉明距离相似性对每个列表中的序列进行聚类。我目前的实现(目前非常粗略)提取列表中的第一个序列并计算每个后续序列的汉明距离。如果它在一定的汉明距离内,它会将其附加到一个新列表中,该列表稍后用于从原始列表中删除序列,并将相似的序列存储在 defaultdict 中。在下面查看我当前的代码实现:
def hamming_dist(sequence1, sequence2):
"""
Calculates the hamming distance between 2 sequences
"""
assert len(sequence1) == len(sequence2)
return sum(sequence1 !=sequence2 for sequence1,sequence2 \
in itertools.izip(sequence1,sequence2))
def group_sequences(sequences_list):
trash_sequences = []
main_sequence = sequences_list[0]
clustered_sequence = defaultdict(list)
while len(sequences_list) > 1:
for sequence in sequences_list:
ham_dist = hamming_dist(main_sequence,sequence)
if hamming_dist < 30:
trash_sequences.append(sequence)
for similar_sequences in trash_sequences:
sequences_list.remove(similar_sequences)
clustered_sequence[main_tcr].append(similar_sequences)
else:
clustered_sequence[main_sequence].append(None)
return clustered_sequence
显然这不是最好或最有效的方法,即使使用此实现,我的脚本中仍然存在一些错误。我通读了 StackOverflow/StackExchange 问题,看看其他人是否遇到过我的问题,在我发现的类似问题中,许多其他人提到了使用 K-Means 算法、马尔可夫聚类方法、层次聚类等算法。我对这些方法中的任何一种都不太熟悉,除了需要数字而不是字符串的 K-means 方法。
您建议我实施哪种聚类方法来将相似的 DNA 序列聚类在一起,以及实施您首选方法的最佳方法?任何建议将不胜感激!
【问题讨论】:
标签: python string algorithm cluster-analysis bioinformatics