如何从几个蛋白质比对中提取多态性位置?

时间:2017-06-15 21:51:27

标签: python alignment

我有几个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

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

非常感谢任何建议,谢谢!!

1 个答案:

答案 0 :(得分:0)

这是一个可以找到两个等位基因之间差异的函数。第一个应该是由每个位置最常用的字母组成的规范多边形(在您的示例中为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']

以下是一些参考资料: