■概要
mRNA配列(A, U, G, C で構成される文字列)を読み込み、開始コドン(AUG)から終了コドン(UAA, UAG, UGA)までを区切って「どんなコドンか」を特定する処理をPythonで実装する。
▼検索結果イメージ
検索対象:
AUGUUUUUCUAA
検索結果:
AUG -> Met: メチオニン(開始)
UUU -> Phe: フェニルアラニン
UUC -> Phe: フェニルアラニン
UAA -> STOP: 終止
■フローチャート
実装する処理のフローチャートを以下に示す。
・メイン処理
・mRNA/DNA解析処理呼び出し
■サンプルコード
以下に実装する処理のコードを示す。
from codon_table import codon_list
# 終了コドン
stop_codons = {"UAA", "UAG", "UGA"}
def find_orfs(mrna: str):
# DNAの場合TをUに変換
mrna = mrna.upper().replace("T", "U")
# 返却用リスト
orfs = []
# mRNAの文字列分繰り返し
for start_index in range(len(mrna)):
# 開始文字列含む3桁が開始(AUG)の場合
if mrna[start_index:start_index + 3] == "AUG":
# 一時配列
codons = []
# 開始文字列から終端まで3桁ずつ繰り返し
for i in range(start_index, len(mrna), 3):
# 開始文字列含む3桁を取得
codon = mrna[i:i + 3]
# コドンが3桁未満の場合は終了
if len(codon) < 3:
break
# コドン表からコドン情報を取得
aa_info = codon_list.get(codon, ("???", "不明"))
# 一時配列にコドン情報を格納
codons.append((codon, aa_info))
# コドンが終了の場合
if codon in stop_codons:
# 返却用配列に一時配列の値を格納
orfs.append(codons)
break
return orfs
if __name__ == '__main__':
test_sequences = {
"正常なORF":
"CCCAUGUUUCUUAUCGUAAGCCCCACGGCGCAUCAGAACAAAGAUGAGUGUUAAAAA",
"正常なORF(複数)":
"AUGUCGUCUCUGUAAAUGUUCCAAGCGUAA",
"正常なDNA":
"ATGTTGCGTGGATAA",
"未知の塩基": "AUGUGGCGAAXGGGCUAA", # AXG → "??? 不明"
"不完全コドン": "AUGUUUCGG", # 終了なし"
"開始なし": "CCCUUUUGA", # AUGがないので翻訳開始しない
}
# テストシーケンス分繰り返し
for label, seq in test_sequences.items():
# テストケース名表示
print(f"--- {label} ---")
# mRNA/DNA解析
orfs = find_orfs(seq)
# 解析結果判定
if not orfs:
print(" ORFなし")
else:
# 解析結果分繰り返し(indexは1スタート)
for idx, orf in enumerate(orfs, 1):
print(f" ORF {idx}:")
# 解析結果のコドン分繰り返し[コドン,(英名, 和名)]
for codon, (abbr, jp) in orf:
print(f" {codon} -> {abbr}: {jp}")
・コドン表
# コドン表(略号: 日本語名)
codon_list = {
# 開始コドン
"AUG": ("Met", "メチオニン(開始)"),
# フェニルアラニン
"UUU": ("Phe", "フェニルアラニン"),
"UUC": ("Phe", "フェニルアラニン"),
# ロイシン
"UUA": ("Leu", "ロイシン"), "UUG": ("Leu", "ロイシン"),
"CUU": ("Leu", "ロイシン"), "CUC": ("Leu", "ロイシン"),
"CUA": ("Leu", "ロイシン"), "CUG": ("Leu", "ロイシン"),
# イソロイシン
"AUU": ("Ile", "イソロイシン"), "AUC": ("Ile", "イソロイシン"),
"AUA": ("Ile", "イソロイシン"),
# バリン
"GUU": ("Val", "バリン"), "GUC": ("Val", "バリン"),
"GUA": ("Val", "バリン"), "GUG": ("Val", "バリン"),
# セリン
"UCU": ("Ser", "セリン"), "UCC": ("Ser", "セリン"),
"UCA": ("Ser", "セリン"), "UCG": ("Ser", "セリン"),
"AGU": ("Ser", "セリン"), "AGC": ("Ser", "セリン"),
# プロリン
"CCU": ("Pro", "プロリン"), "CCC": ("Pro", "プロリン"),
"CCA": ("Pro", "プロリン"), "CCG": ("Pro", "プロリン"),
# トレオニン
"ACU": ("Thr", "トレオニン"), "ACC": ("Thr", "トレオニン"),
"ACA": ("Thr", "トレオニン"), "ACG": ("Thr", "トレオニン"),
# アラニン
"GCU": ("Ala", "アラニン"), "GCC": ("Ala", "アラニン"),
"GCA": ("Ala", "アラニン"), "GCG": ("Ala", "アラニン"),
# チロシン
"UAU": ("Tyr", "チロシン"), "UAC": ("Tyr", "チロシン"),
# 終止コドン
"UAA": ("STOP", "終止"), "UAG": ("STOP", "終止"), "UGA": ("STOP", "終止"),
# ヒスチジン
"CAU": ("His", "ヒスチジン"), "CAC": ("His", "ヒスチジン"),
# グルタミン
"CAA": ("Gln", "グルタミン"), "CAG": ("Gln", "グルタミン"),
# アスパラギン
"AAU": ("Asn", "アスパラギン"), "AAC": ("Asn", "アスパラギン"),
# リシン
"AAA": ("Lys", "リシン"), "AAG": ("Lys", "リシン"),
# アスパラギン酸
"GAU": ("Asp", "アスパラギン酸"), "GAC": ("Asp", "アスパラギン酸"),
# グルタミン酸
"GAA": ("Glu", "グルタミン酸"), "GAG": ("Glu", "グルタミン酸"),
# システイン
"UGU": ("Cys", "システイン"), "UGC": ("Cys", "システイン"),
# トリプトファン
"UGG": ("Trp", "トリプトファン"),
# アルギニン
"CGU": ("Arg", "アルギニン"), "CGC": ("Arg", "アルギニン"),
"CGA": ("Arg", "アルギニン"), "CGG": ("Arg", "アルギニン"),
"AGA": ("Arg", "アルギニン"), "AGG": ("Arg", "アルギニン"),
# グリシン
"GGU": ("Gly", "グリシン"), "GGC": ("Gly", "グリシン"),
"GGA": ("Gly", "グリシン"), "GGG": ("Gly", "グリシン"),
}
■実行結果
--- 正常なORF ---
ORF 1:
AUG -> Met: メチオニン(開始)
UUU -> Phe: フェニルアラニン
CUU -> Leu: ロイシン
AUC -> Ile: イソロイシン
GUA -> Val: バリン
AGC -> Ser: セリン
CCC -> Pro: プロリン
ACG -> Thr: トレオニン
GCG -> Ala: アラニン
CAU -> His: ヒスチジン
CAG -> Gln: グルタミン
AAC -> Asn: アスパラギン
AAA -> Lys: リシン
GAU -> Asp: アスパラギン酸
GAG -> Glu: グルタミン酸
UGU -> Cys: システイン
UAA -> STOP: 終止
--- 正常なORF(複数) ---
ORF 1:
AUG -> Met: メチオニン(開始)
UCG -> Ser: セリン
UCU -> Ser: セリン
CUG -> Leu: ロイシン
UAA -> STOP: 終止
ORF 2:
AUG -> Met: メチオニン(開始)
UUC -> Phe: フェニルアラニン
CAA -> Gln: グルタミン
GCG -> Ala: アラニン
UAA -> STOP: 終止
--- 正常なDNA ---
ORF 1:
AUG -> Met: メチオニン(開始)
UUG -> Leu: ロイシン
CGU -> Arg: アルギニン
GGA -> Gly: グリシン
UAA -> STOP: 終止
--- 未知の塩基 ---
ORF 1:
AUG -> Met: メチオニン(開始)
UGG -> Trp: トリプトファン
CGA -> Arg: アルギニン
AXG -> ???: 不明
GGC -> Gly: グリシン
UAA -> STOP: 終止
--- 不完全コドン ---
ORFなし
--- 開始なし ---
ORFなし
■参考
本記事を記載するにあたり、参考とさせていただいたURLを以下に示す。
コメント