質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

1回答

2079閲覧

Rubyでアミノ酸配列に変換したい

benigmaet

総合スコア19

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

0クリップ

投稿2017/12/12 18:37

###前提・実現したいこと
rubyで遺伝子の塩基配列をアミノ酸配列に翻訳するプログラムを作ろうと思ってます。

入力するファイルは各遺伝子の塩基配のデータが入っています。ファイル形式はFASTAです。ファイルの名前はU00096.ffnです。
ファイルは

遺伝子の名前

塩基配列
の形式です。

(例)

gi|48994873|gb|U00096.2|:190-255 Escherichia coli str. K-12 substr. MG1655, complete genome

ATGAAACGCATTAGCACCACCATTACCACCACCATCACCATTACCACAGGTAACGGTGCGGGCTGA

以上の例が数回繰り返しているようなものです。

###発生している問題

遺伝子の名前

を保存する。
また、塩基配列を保存してアミノ酸配列に翻訳して表示
を繰り返したい

(例)

遺伝子の名前

アミノ酸配列

遺伝子の名前

アミノ酸配列
...
と繰り返したい

###該当のソースコード

Ruby

1#-*- coding: utf-8 -*- 2 3#DNAからアミノ酸への翻訳 4def dna2aa_1(codon) 5 6 aa=''#alanine 7 if codon=~/GC./i 8 aa='A'#cysteine 9 elsif codon=~/TG[TC]/i 10 aa='C'#aspartic acid 11 elsif codon=~/GA[TC]/i 12 aa='D'#glutamic acid 13 elsif codon=~/GA[AG]/i 14 aa='E'#phenylalanine 15 elsif codon=~/TT[TC]/i 16 aa='F' 17 elsif codon=~/GG./i 18 aa='G' 19 elsif codon=~/CA[TC]/i 20 aa='H' 21 elsif codon=~/AT[TCA]/i 22 aa='I' 23 elsif codon=~/AA[AG]/i 24 aa='K' 25 elsif codon=~/TT[AG]|CT./i 26 aa='L' 27 elsif codon=~/ATG/i 28 aa='M' 29 elsif codon=~/AA[TC]/i 30 aa='N' 31 elsif codon=~/CC./i 32 aa='P' 33 elsif codon=~/CA[AG]/i 34 aa='Q' 35 elsif codon=~/CG.|AG[AG]/i 36 aa='R' 37 elsif codon=~/TC.|AG[TC]/i 38 aa='S' 39 elsif codon=~/AC./i 40 aa='T' 41 elsif codon=~/GT./i 42 aa='V' 43 elsif codon=~/TGG/i 44 aa='W' 45 elsif codon=~/TA[TC]/i 46 aa='Y' 47 elsif codon=~/TA[AG]|TGA/i 48 aa='_' 49 else 50 print("Bad codon",codon,"!!\n") 51 end 52 return aa 53end 54 55 56 57#DNA配列を三文字ずつ取得する 58#DNA配列dna_seqと読み枠iを引数として受け取る 59def codon_while(dna_seq,i) 60 61 aa_seq=[] 62 63 #読み枠の三文字目dna_seq[i+2]がなくなるまで処理を繰り返す 64 while dna_seq[i+2] 65 #DNA配列の3文字分を取得 66 codon=dna_seq[i]+dna_seq[i+1]+dna_seq[i+2] 67 #メソッドdna2aa_1を呼び足している 68 aa=dna2aa_1(codon) 69 #翻訳したアミノ酸名を配列に追加 70 aa_seq.push(aa) 71#3文字分iを移動 72 i=i+3 73 74 end 75 #翻訳したアミノ酸を返す 76 return aa_seq 77end 78 79 80 81dna_seq_1=[] 82 line_data_name="" 83 84 85###メインプログラム 86#ファイルからデータを取得 87#text=File.read('U00096.fna') 88#text=File.read('U00096.fna').partition("\n")[2] 89 90i=0 91File.open('U00096.ffn'){|file_name| 92 file_name.each{|line_data| 93 if line_data=~/^>/ and i=0 94 #>改行を読み飛ばす 95 i=1 96 line_data_name=line_data.chomp 97 else 98 #DNA配列を改行を除いて保存 99 ##"<<"文字列を追加 100 dna_seq_1[i] << line_data.chomp 101 end 102 } 103} 104#改行を除いた配列データの作成 105#text_1=text.gsub("\n","") 106 107#DNAデータを配列dna_hairetsu1へ代入 108dna_hairetsu_1=dna_seq_1.split("") 109 110 111#読み枠1の翻訳後を出力 112aa_seq_1=codon_while(dna_hairetsu_1,0) 113aa_seq_str_1=aa_seq_1.join('') 114 115print(line_data_name,"\n") 116print('aa_seq_1=',"\n") 117print(aa_seq_str_1,"\n") 118 119#読み枠2の翻訳後を出力 120aa_seq_2=codon_while(dna_hairetsu_1,1) 121aa_seq_str_2=aa_seq_2.join('') 122 123print('aa_seq_2=',"\n") 124print(aa_seq_str_2,"\n") 125#読み枠3の翻訳後を出力 126aa_seq_3=codon_while(dna_hairetsu_1,2) 127aa_seq_str_3=aa_seq_3.join('') 128print('aa_seq_3=',"\n") 129print(aa_seq_str_3,"\n") 130

###上のプログラムの結果
一部抜粋
ELVTRNTLKSIFEAEGYDVFEATDGAEMHQILSEYDINLVIMDINLPGKNGLLLARELREQANVALMFLTGRDNEVDKILGLEIGADDYITKPFNPRELTIRARNLLSRTMNLGTVSEERRSVESYKFNGWELDINSRSLIGPDGEQYKLPRSEFRAMLHFCENPGKIQSRAELLKKMTGRELKPHDRTVDVTIRRIRKHFESTPDTPEIIATIHGEGYRFCGDLED_MTKVRNCVLDALSINVNNIISLVVGTFPQDPTVSKTAVILTILTAT_MRITIILVAPARAENIGAAARAMKTMGFSDLRIVDSQAHLEPATRWVAHGSGDIIDNIKVFPTLAESLHDVDFTVATTARSRAKYHYYATPVELVPLLEEKSSWMSHAALVFGREDSGLTNEELALADVLTGVPMVADYPSLNLGQAVMVYCYQLATLIQQPAKSDATADQHQLQALRERAMTLLTTLAVADDIKLVDWLQQRLGLLEQRDTAMLHRLLHDIEKNITK_

となる。
ここに

遺伝子の名前は表示されない....

###補足情報(言語/FW/ツール等のバージョンなど)
Ruby初心者なのでわかりやすくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

この種の処理については既存のライブラリがあるので、それを使いましょう。
http://bioruby.org/archive/doc/Japanese/BR040824-jst/bioruby-tutorial.pdf
このテキストの最終ページに書かれているfastaファイル読み込みプログラムと、2ページ目に書かれているna2aa.rb を組み合わせれば目的は達せられるはずです。

投稿2017/12/12 18:51

KojiDoi

総合スコア13669

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問