DNA配列をアミノ酸配列に変換

DNA 配列を読み込み、アミノ酸配列に翻訳する Python スクリプトの例。BioPython の Bio.seq パッケージを利用することで、翻訳だけでなく、転写や逆転写などの操作も簡単で正確に行える。(Bio.Seqによる転写と翻訳

ディクショナリーを利用した方法

DNA の 3 塩基をアミノ酸に置換するためのディレクトリーを作成してから、for 文で 3 文字ずつ変換する。

DNA2Protein = {
        'TTT' : 'F', 'TCT' : 'S', 'TAT' : 'Y', 'TGT' : 'C',
        'TTC' : 'F', 'TCC' : 'S', 'TAC' : 'Y', 'TGC' : 'C',
        'TTA' : 'L', 'TCA' : 'S', 'TAA' : '*', 'TGA' : '*',
        'TTG' : 'L', 'TCG' : 'S', 'TAG' : '*', 'TGG' : 'W',

        'CTT' : 'L', 'CCT' : 'P', 'CAT' : 'H', 'CGT' : 'R',
        'CTC' : 'L', 'CCC' : 'P', 'CAC' : 'H', 'CGC' : 'R',
        'CTA' : 'L', 'CCA' : 'P', 'CAA' : 'Q', 'CGA' : 'R',
        'CTG' : 'L', 'CCG' : 'P', 'CAG' : 'Q', 'CGG' : 'R',

        'ATT' : 'I', 'ACT' : 'T', 'AAT' : 'N', 'AGT' : 'S',
        'ATC' : 'I', 'ACC' : 'T', 'AAC' : 'N', 'AGC' : 'S',
        'ATA' : 'I', 'ACA' : 'T', 'AAA' : 'K', 'AGA' : 'R',
        'ATG' : 'M', 'ACG' : 'T', 'AAG' : 'K', 'AGG' : 'R',

        'GTT' : 'V', 'GCT' : 'A', 'GAT' : 'D', 'GGT' : 'G',
        'GTC' : 'V', 'GCC' : 'A', 'GAC' : 'D', 'GGC' : 'G',
        'GTA' : 'V', 'GCA' : 'A', 'GAA' : 'E', 'GGA' : 'G',
        'GTG' : 'V', 'GCG' : 'A', 'GAG' : 'E', 'GGG' : 'G'
}


dna = 'GCCTGGGACGAATTTTAA'
p = ''
for i in range(0, int(len(dna) / 3)):
	codon = dna[3 * i : 3 * i + 3]
	if (codon in DNA2Protein):
		p += DNA2Protein[codon]
	else:
		p += 'X'

print (p)

正規表現を利用した方法

正規表現を利用する場合、次のように、あらかじめコンパイルした方が速い(データが小さいと実感できないが…)。

import re

#翻訳関数
def DNA2Protein(dna):
   p = ""                   #アミノ酸配列

   #転写翻訳のハッシュ
   A = re.compile("GC.")
   C = re.compile("TG[CT]")
   D = re.compile("GA[CT]")
   E = re.compile("GA[AG]")
   F = re.compile("TT[CT]")
   G = re.compile("GG.")
   H = re.compile("CA[CT]")
   I = re.compile("AT[ACT]")
   K = re.compile("AA[AG]")
   L = re.compile("CT.|TT[AG]")
   M = re.compile("ATG")
   N = re.compile("AA[CT]")
   P = re.compile("CC.")
   Q = re.compile("CA[AG]")
   R = re.compile("CG.|AG[AG]")
   S = re.compile("AG[CT]|TC.")
   T = re.compile("AC.")
   V = re.compile("GT.")
   W = re.compile("TGG")
   Y = re.compile("TA[CT]")
   X = re.compile("[^ACGT]..|.[^ACGT].")
   End = re.compile("TA[AG]|TGC")

   #転写翻訳
   for i in range(0, int(len(dna) / 3)):
      codon = dna[3 * i : 3 * i + 3]
      if A.match(codon):
         p += "A"
      elif C.match(codon):
         p += "C"
      elif D.match(codon):
         p += "D"
      elif E.match(codon):
         p += "E"
      elif F.match(codon):
         p += "F"
      elif G.match(codon):
         p += "G"
      elif H.match(codon):
         p += "H"
      elif I.match(codon):
         p += "I"
      elif K.match(codon):
         p += "K"
      elif L.match(codon):
         p += "L"
      elif M.match(codon):
         p += "M"
      elif N.match(codon):
         p += "N"
      elif P.match(codon):
         p += "P"
      elif Q.match(codon):
         p += "Q"
      elif R.match(codon):
         p += "R"
      elif S.match(codon):
         p += "S"
      elif T.match(codon):
         p += "T"
      elif V.match(codon):
         p += "V"
      elif W.match(codon):
         p += "W"
      elif Y.match(codon):
         p += "Y"
      elif X.match(codon):
         p += "X"
      elif End.match(codon):
         p += "*"
      else:
         print ("unknown codon: " + codon)
   return p

#関数の実行
dna = "GCCTGGGACGAATTTTAA"
print ("DNA:     " + dna)
print ("Protein: " + DNA2Protein(dna))