我从FASTQ文件中提取了一系列DNA序列,目前它已存储在列表中。
sequences = ['ATCT','ATTT','ACGG','ACCG','ACGT','AGGT','ATGC','ATCC','AGTT']
我想将序列聚类到元组列表中,以便元组中的每个序列彼此相似。
我最初考虑使用汉明距离(下面显示的代码)将类似的序列聚类在一起,但如果我正确理解汉明距离,我将不得不使用其中一个序列作为参考,将汉明距离与另一个序列进行比较并依赖于我的参考序列是什么,我最终会得到不同的聚类(例如:如果我使用'ACGG'作为我的参考序列并将其与列表中的其他序列进行比较,'ACCG'和'ACGT'将与'ACGG'聚类如果我选择汉明距离为1作为我的标准。相反,如果我使用'ACCG'作为我的参考序列,'ACGG'会聚集在它而不是'ACGT',因为'ACGT'的汉明距离为2用'ACCG'。)
def hamming_dist(sequence1, sequence2):
assert len(sequence1) == len(sequence2)
return sum(sequence1 !=sequence2 for sequence1,sequence2 in itertools.izip(sequence1,sequence2))
由于使用汉明距离的缺点,我考虑使用Levenshtein比率(来自Levenshtein模块)或Fuzzywuzzy比率(来自Fuzzywuzzy模块)来聚类序列。
每种方法的优点/缺点是什么?如何设置我的代码以将相似的序列聚类在一起?