-1

DNA配列の補体をアミノ酸に翻訳する必要があります

TTTCAATACTAGCATGACCAAAGTGGGAACCCCCTTACGTAGCATGACCCATATATATATATATA
TATATATATATATATGGGTCATGCTACGTAAGGGGGTTCCCACTTTGGTCATGCTAGTATTGAAA
+1 TyrIleTyrIleTyrGlySerCysTyrValArgGlyPheProLeuTrpSerCysStpTyrStp
+2 IleTyrIleTyrMetGlyHisAlaThrOc*GlyGlySerHisPheGlyHisAlaSerIleglu
+3 TyrIleTyrIleTrpValMetLeuArgLysGlyValProThrLeuValMetLeuValLeuLys
  • 最初のシーケンスは通常のシーケンスですが、
  • 2つ目は、相補的なシーケンスです。
  • +1のあるものは私の相補配列に対応するアミノ酸配列です
  • +2のアミノ酸配列は、2番目の塩基から始まる私の相補配列に対応するアミノ酸配列です。
  • +3のアミノ酸配列は、三塁から始まる私の相補配列に対応するアミノ酸配列です。

結果を得るために次のコードを試しましたが、補完的なシーケンスが得られます。分割せずに。

seq = "CCGGAAGAGCTTACTTAG"
basecomplement = {'A': 'T', 'C': 'G', 'G': 'C', 'T': 'A'}

def translate(seq):

    x = 0
    aaseq = []
    while True:
        try:
            aaseq.append(basecomplement[seq[x:x+1]])
            x += 1

        except (IndexError, KeyError):
            break
    return aaseq

for frame in range(1):
    #print(translate(seq[frame:]))

    rseqn= (''.join(item.split('|')[0] for item in translate(seq[frame:])))

    rseqn = list(rseqn)
    rseqn.reverse()

    print( rseqn)

誰かが私の結果を得るのを手伝ってくれますか?

4

3 に答える 3

9

いくつかのコードを取得し、その機能をまったく理解せずに使用しようとしたようです。リンクされた質問を読むと、その質問のポスターには、 で区切られたアミノ酸コード文字列の辞書があったことに気付くでしょう|。への呼び出しsplitは、各コード文字列の 2 番目の部分を抽出する"F|Phe"こと"Phe"でしたsplit。そのような文字列はないので、コードのその部分を使用しないでください。

Joaquin の推奨事項である BioPython を使用することを 2 番目に挙げます。BioPython は明らかに仕事に適したツールですが、学習目的のためです。最初に知っておく必要があるのは、達成する必要がある 4 つのタスクがあるということです。

  1. DNA塩基配列の逆補体を計算する
  2. 逆相補配列を 3 塩基のグループに分割します
  3. 各グループをアミノ酸コードに変換
  4. アミノ酸コードを文字列にまとめる

リンクされた回答のコードは、最初のステップを処理しません。そのためにtranslate、Python 文字列オブジェクトのメソッドを使用できます。最初にmaketrans、キー => 値をマップする翻訳辞書を作成するために使用します。

basecomplement = str.maketrans({'A': 'T', 'C': 'G', 'G': 'C', 'T': 'A'})

次に、逆補数を生成するメソッドを作成できます。

def reverse_complement(seq):
    return seq.translate(basecomplement)[::-1]

translate他の質問に対するホアキンの回答の方法は、ステップ 2 と 3 を実装しています。実際には、のgrouperレシピを使用してより効率的に実行できitertoolsます。まず、塩基トリプレットをアミノ酸にマッピングする辞書が必要です。

amino_acids = {'TAT': 'Tyr', ...}

これを使用して、任意の塩基配列を変換できます。

amino_acids[''.join(a)] for a in zip(*([iter(rseq)]*3))

説明としてzip(*([iter(rseq)]*3))、一度に 3 つの文字をグループ化します。しかし、それは文字列ではなくタプルとして行われます。たとえば'TATATA'get('T', 'A', 'T'), ('A', 'T', 'A')の場合、文字列を作成するには各タプルを結合する必要があります。それ''.join(a)がそうです。次に、アミノ酸表で文字列を調べます。これは によって行われamino_acids[...]ます。

最後に、結果として得られるすべてのアミノ酸コードを一緒に結合する必要があります。これは、outer によって実行できます''.join(...)。したがって、次のようなメソッドを定義できます。

def to_amino_acids(seq):
    return ''.join(amino_acids[''.join(a)] for a in zip(*([iter(rseq)]*3)))

辞書に で区切られた複数の表現が含まれていない.split('|')限り、必要ないことに注意してください。amino_acids|

最後に、塩基をアミノ酸に変換する 3 つの異なる方法、つまり 3 つのフレームでこれを行うには、ホアキンの回答の最終ループに似たものを使用します。

rseq = reverse_complement(seq)
for frame in range(3):
    # print the frame number
    print('+', frame+1, end=' ')
    # translate the base sequence to amino acids and print it
    print(to_amino_acids(rseq[frame:]))

3 つの異なるフレームを印刷するために、このループが3回実行されることに注意してください。一度実行するだけなら、ループしても意味がありません。

于 2012-01-08T11:22:37.293 に答える
6

使用する:

for frame in range(1):
    rseqn = reversed([item for item in translate(seq[frame:])])
    rseqn = ''.join(rseqn)

    print(rseqn)

これにより、正しい補完的な(逆の)セキュリティが生成されます。

CTAAGTAAGCTCTTCCGG

これは翻訳フレームに依存しないため、DNAまたはRNAの相補配列を決定するためにforループ(現在のループは実際には何もしていません)は必要ないことに注意してください。

ただし、 BioinformaticタスクにBioPythonを使用し始めると、すべてのコードを4行で簡略化できることを強調する必要があります。

>>> from Bio import SeqIO
>>> from Bio.Alphabet import NucleotideAlphabet
>>> dna = SeqIO.Seq("CCGGAAGAGCTTACTTAG", NucleotideAlphabet())
>>> dna.reverse_complement()
Seq('CTAAGTAAGCTCTTCCGG', NucleotideAlphabet())
>>> 
于 2012-01-08T11:09:51.800 に答える
0

コードを少し整理しました。

seq = "CCGGAAGAGCTTACTTAG"
basecomplement = {'A': 'T', 'C': 'G', 'G': 'C', 'T': 'A'}

def translate(seq):
    aaseq = []
    for character in seq:
        aaseq.append(basecomplement[character])
    return aaseq

for frame in range(1):
    rseqn= (''.join(item.split('|')[0] for item in translate(seq[frame:])))
    rseqn = rseqn[::-1]
    print( rseqn)

これがうまくいくかどうかを確認してください。

あなたがしているのは、rseqn をリストに変換し、リストを逆にしてリストを出力することです。私が書いたコードは、rseqn をリストに変換しません。rseqn は最初は文字列で、行rseqn = rseqn[::-1]は文字列を逆にします。最後に、印刷しているのはリストではなく文字列であるため、分割はありません。

于 2012-01-08T11:14:34.183 に答える