我有几个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
我希望这有助于澄清(抱歉,如果有点太长)。
非常感谢任何建议,谢谢!!
答案 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']
以下是一些参考资料: