DNA をアミノ酸配列に翻訳する方法は、if
条件文を用いる方法やディクショナリを用いる方法などがある。また、BioPython の Bio.Seq モジュールを利用しても実現できる。
if 条件文を利用した方法
各アミノ酸に翻訳される DNA のパターンをあらかじめ正規表現として登録し、そのあと、クエリー配列の DNA に対して、すべての正規表現とマッチング操作を行う。
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))
ディクショナリを利用した方法
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)
BioPython を利用した方法
BioPython の Seq モジュールを利用した翻訳方法。
from Bio.Alphabet import IUPAC
from Bio.Seq import Seq
seq = Seq("GCCTGGGACGAATTTTAA", IUPAC.ambiguous_dna)
print(cds.translate())