如何处理biopython翻译中的空白

2024-06-16 09:04:27 发布

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

我需要用生物毒素翻译DNA序列

from Bio.Seq import Seq
from Bio.Alphabet import generic_dna
seq = Seq("tt-aaaatg")
seq.translate()

运行此脚本将得到错误:

Bio.Data.CodonTable.TranslationError: Codon 'TT-' is invalid.

有没有办法把“tt-”翻译成X,这样整个翻译的序列就是“XKM”?你知道吗

这对于翻译对齐的序列非常有用。例如,一个对齐的序列集以名为“df”的数据帧的形式存储为:

import pandas as pd

df = pd.DataFrame([['A',Seq("tt-aaaatg")],['B',Seq("tttaaaatg")],['C',Seq("tttaaaatg")]],columns=['seqName','seq'])

print(df)

df将显示为:

seqName                seq
        A                 Seq("tt-aaaatg")
        B                 Seq("tttaaaatg")
        C                 Seq("tt-aaaatg")

如果“tt-”可以翻译为“x”,则使用代码:

df['prot'] = pd.Seris([x.translate() for x in df.seq])

我们可以得到:

  seqName                          seq           prot
0       A           (t, t, g, a, a, a, a, t, g)  (X, K, M)
1       B           (t, t, t, a, a, a, a, t, g)  (F, K, M)
2       C           (t, t, t, a, a, a, a, t, g)  (F, K, M)

然而,目前的生物电话不能将“tt-”翻译成“X”,只能抛出错误。在我看来,我必须消除所有的差距,在对齐的序列,然后翻译他们之后,我必须重新排列翻译的蛋白质序列。你知道吗

你如何处理这样的问题?先谢谢你。你知道吗


Tags: fromimportdf错误生物序列seqtranslate
1条回答
网友
1楼 · 发布于 2024-06-16 09:04:27

注:假设这些是来自帧内(帧1)氨基酸编码比对的真正1bp缺失。你知道吗

为此,可以使用如下自定义翻译功能:

def translate_dna(sequence):
"""
:param sequence: (str) a DNA sequence string
:return: (str) a protein string from the forward reading frame 1
"""

codontable = {'ATA': 'I', 'ATC': 'I', 'ATT': 'I', 'ATG': 'M',
              'ACA': 'T', 'ACC': 'T', 'ACG': 'T', 'ACT': 'T',
              'AAC': 'N', 'AAT': 'N', 'AAA': 'K', 'AAG': 'K',
              'AGC': 'S', 'AGT': 'S', 'AGA': 'R', 'AGG': 'R',
              'CTA': 'L', 'CTC': 'L', 'CTG': 'L', 'CTT': 'L',
              'CCA': 'P', 'CCC': 'P', 'CCG': 'P', 'CCT': 'P',
              'CAC': 'H', 'CAT': 'H', 'CAA': 'Q', 'CAG': 'Q',
              'CGA': 'R', 'CGC': 'R', 'CGG': 'R', 'CGT': 'R',
              'GTA': 'V', 'GTC': 'V', 'GTG': 'V', 'GTT': 'V',
              'GCA': 'A', 'GCC': 'A', 'GCG': 'A', 'GCT': 'A',
              'GAC': 'D', 'GAT': 'D', 'GAA': 'E', 'GAG': 'E',
              'GGA': 'G', 'GGC': 'G', 'GGG': 'G', 'GGT': 'G',
              'TCA': 'S', 'TCC': 'S', 'TCG': 'S', 'TCT': 'S',
              'TTC': 'F', 'TTT': 'F', 'TTA': 'L', 'TTG': 'L',
              'TAC': 'Y', 'TAT': 'Y', 'TAA': '*', 'TAG': '*',
              'TGC': 'C', 'TGT': 'C', 'TGA': '*', 'TGG': 'W',
              ' -': '-',
              }

seq = sequence.upper()
prot = []

for n in range(0, len(seq), 3):
    if seq[n:n + 3] in codontable:
        residue = codontable[seq[n:n + 3]]
    else:
        residue = "X"

    prot.append(residue)

return "".join(prot)

else语句将导致任何未被识别的密码子(包括退化碱基的存在)被翻译为x。 只需将序列字符串传递给这个函数。 如果序列存储为seq对象,则可以如下方式修改函数中的行:

seq = sequence.seq.upper()

相关问题 更多 >