一般序列比对

问题描述 投票:0回答:1

我正在编写一个旨在匹配两个序列的程序。我已经有两个列表,其中包含带有后缀F和R的SeqRecord对象。现在,我想从列表F中选择一个序列,并从列表R中找到最相似的序列。我想基于seq_record.id进行搜索。然后对这两个相似的序列进行全局匹配。并对列表f中的每个序列重复相同的操作。

这里是列表f中的示例ID名称:BIE-1_ITS5; BIE-2_ITS5; BIE-3_ITS5; KAZ-5_ITS5

[这里是清单r:BIE-1_ITS4; BIE-2_ITS4; BIE-3_ITS4; KAZ-5_ITS4

例如,具有ID号BIE-1_ITS5的序列在列表r中找到序列BIE-1_ITS4并对其进行全局序列比对。

首先与第一匹配,第二与第二匹配不是首选选项,因为可能会有序列没有任何对。

感谢您的回答

python biopython
1个回答
1
投票

我使用字符串匹配算法来找到两个字符串的相似性得分,并找到最相似的字符串:

import difflib
import numpy as np

def getScore(item1,item2):
    return float(difflib.SequenceMatcher(None, item1, item2).ratio()*100)

def getMostSimilar(f,r):
    result={}
    for i in f:
        scores=[0]*len(r)
        for ind,j in enumerate(r):
            scores[ind]=getScore(i,j)
        print(scores)
        ind = np.argmax(scores)
        result[i]=r[ind]
    return result

f=['BIE-1_ITS5','BIE-2_ITS5','BIE-3_ITS5','KAZ-5_ITS5']
r=['BIE-1_ITS4','BIE-2_ITS4','BIE-3_ITS4','KAZ-5_ITS4']

print(getMostSimilar(f,r))

我得到以下结果:

[90.0, 80.0, 80.0, 50.0]
[80.0, 90.0, 80.0, 50.0]
[80.0, 80.0, 90.0, 50.0]
[50.0, 50.0, 50.0, 90.0]
{'BIE-1_ITS5': 'BIE-1_ITS4',
 'BIE-2_ITS5': 'BIE-2_ITS4',
 'BIE-3_ITS5': 'BIE-3_ITS4',
 'KAZ-5_ITS5': 'KAZ-5_ITS4'}

印刷的词典是最相似项目的映射。

注意:这不会返回唯一的映射,因为这将需要有关如何映射的更多信息,即先到先得或最高匹配得分(这需要打破平局的情况)]

© www.soinside.com 2019 - 2024. All rights reserved.