显示在每个测序位置上使用最多的氨基酸,频率是多少

2024-10-03 17:20:07 发布

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

我试图在每个测序位置找到最常用的氨基酸(在所有这些序列中有27个位置),并知道每个位置的氨基酸频率位置。如果任何人都可以给我一些办法,我会很感激的!谢谢!在

NDVLPDEMTSIDNRPLPFIYQFTAGAI
IPAYITEMNGNSTNNEQLQQELATTQD
LEKALLYMLPLYLLTNAKGQQMQIELK 
YDMATNGMSKLFSTVNSARHSVPLGGM 
VEHLYSAMSANGKISVPEAVVNWLFKV 

Tags: 序列频率我会办法ipayitemngnstnneqlqqelattqdndvlpdemtsidnrplpfiyqftagailekallymlplylltnakgqqmqielkydmatngmsklfstvnsarhsvplggm
2条回答

这可能会给你一些开始的东西。输出格式可能需要更改。将其更改为从文件中读取aa序列并处理可变序列长度。你还需要处理领带。在

#!/usr/bin/env python
from __future__ import print_function

seqs = ['NDVLPDEMTSIDNRPLPFIYQFTAGAI',
        'IPAYITEMNGNSTNNEQLQQELATTQD',
        'LEKALLYMLPLYLLTNAKGQQMQIELK',
        'YDMATNGMSKLFSTVNSARHSVPLGGM',
        'VEHLYSAMSANGKISVPEAVVNWLFKV']

num = len(seqs)
aafre = []
for i in range(27):
    aafre.append({})

most = []

for seq in seqs:
    for i in range(27):
        aa = seq[i]
        if not aa in aafre[i]:
            aafre[i][aa] = 0
        aafre[i][aa] += 1

for i in range(27):
    most.append([0, ''])
    for aa in aafre[i]:
        if most[i][0] < aafre[i][aa]:
            most[i] = [aafre[i][aa], aa]
    print(str(i+1) + ': ' + most[i][1] + ' ' + str(most[i][0]), end="")
    for aa in aafre[i]:
        print(', ' + aa + ' ' + str(aafre[i][aa]), end="")
    print('')

我不能百分之百确定你想要的结果,但是我的解释是,对于每27个序列位置,你想知道每个氨基酸(用一个字母表示)在每个位置出现了多少次,哪一个出现频率最高?在

我从找出每个序列中出现频率最高的氨基酸开始。在

i = 1
for seq in lst.split(" "):
    print( i, max( set(seq), key=seq.count ) )
    i = i+1

结果

^{pr2}$

现在使用numpy我可以对序列进行转置,这意味着我可以垂直检查,而不是水平检查,因此,27个字符长的5行将变成27行5个字符长,然后我可以对27行中的每一行使用相同的方法来查看哪一个是最频繁出现的字母。在

import numpy as np
lst = 'NDVLPDEMTSIDNRPLPFIYQFTAGAI IPAYITEMNGNSTNNEQLQQELATTQD LEKALLYMLPLYLLTNAKGQQMQIELK YDMATNGMSKLFSTVNSARHSVPLGGM VEHLYSAMSANGKISVPEAVVNWLFKV'
arr = []
for seq in lst.split(" "):
    arr.append( list(seq) )
df = np.array( arr )
df = df.T
i = 1
for seq in df:
    seq_str = ''.join(str(x) for x in seq)
    print( i, max( set(seq_str), key=seq_str.count ) )
    i = i+1

结果。在

1 I
2 E
3 M
4 L
...
26 G
27 M

如果有平局,其中一个字母会被任意挑选。在

要查看每个位置的氨基酸列表,可以使用

print( i, max( set(seq_str), key=seq_str.count ), set(seq_str) )

结果

8 M {'M'}
9 S {'S', 'T', 'N', 'L'}
10 G {'G', 'S', 'P', 'A', 'K'}
11 L {'I', 'L', 'N'}

最后,要查看每个字母出现的次数,可以使用

    print( i, max( set(seq_str), key=seq_str.count ), {y:seq_str.count(y) for y in set(seq_str)})

结果

8 M {'M': 5}
9 S {'S': 2, 'T': 1, 'N': 1, 'L': 1}
10 G {'G': 1, 'S': 1, 'P': 1, 'A': 1, 'K': 1}
11 L {'I': 1, 'L': 2, 'N': 2}

相关问题 更多 >