如何从多个蛋白质序列中提取多态位置?

2024-05-20 13:17:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我有几个fasta蛋白比对(~5000),我想确定多态位置加上氨基酸残基在序列之间的变化。我自己也试过写一段代码,但很难(我是编程新手),我也看过BioPython,但还没有发现任何东西。我想要这样的东西:

蛋白质比对:

> sp1 MQGAAYMQAAAYYMQA
> sp2 MQGAARMQGAAYYMQA
> sp3 MQGAARMQGAAYYMQM
> sp4 MQGAARMQGAAYYMQA
> sp5 MQGAARMQAAAYYMQA
           ^  ^      ^

在上面的例子中,对齐有3个多态位置(用^标记)。第一个位于第6位,第二个位于第9位,第三个位于第16位。多态位点的一个常见符号可以是:R6Y,这意味着从R到Y的第6个位置发生了变化。变化的方向(R->;Y或Y->;R)基于该位置最常见的字母。因此,在这种情况下,R的频率最高,可以推断方向是R->;Y

如您所见,第6位和第16位有单个变化(不同的字母频率为1)。但是,第9个位置有两个序列(sp1和sp5)随时间变化。我想区分这两种多态性。因此,在这种情况下,我想要这样的输出:

输出:

# Alignment #1
#   Single polymorphisms:
#     R6Y: sp1
#     A16M: sp3

#   Non-single polymorphisms:
#     G9A: sp1, sp5

我希望这有助于澄清(抱歉,如果有点太长)。你知道吗

任何建议都非常感谢,谢谢!!你知道吗


Tags: gt字母情况序列方向fasta多态频率
1条回答
网友
1楼 · 发布于 2024-05-20 13:17:03

这里有一个函数可以找出两个等位基因之间的差异。第一个应该是由每个位置(在您的示例中是MQGAARMQGAAYYMQA)最频繁的字母组成的规范多晶型。你知道吗

def polymorphic_positions(allele1, allele2):
    return [p[1][0] + str(p[0] + 1) + p[1][1] 
            for p in enumerate(zip(allele1, allele2))
            if p[1][0] != p[1][1]]

示例:

>>> polymorphic_positions('MQGAARMQGAAYYMQA', 'MQGAARMQGAAYYMQM')
['A16M']
>>> polymorphic_positions('MQGAARMQGAAYYMQA', 'MQGAARMQAAAYYMQA')
['G9A']

以下是一些参考资料:

相关问题 更多 >