Slide 1

Slide 1 text

【第7回】ゼロから始めるゲノム解析 (Python編) Computing GC Content: Parsing FASTA and Analyzing Sequences @kimoton

Slide 2

Slide 2 text

本勉強会の概要・目的 書籍名 対象者/目的 Mastering Python for Bioinformatics Python・バイオインフォ知識ほぼゼロの人 を対象に、正しいPythonのコーディング手 法について学ぶ 頻度 毎週〜隔週開催予定 登壇者 募集中!

Slide 3

Slide 3 text

Rosalindとは ● 問題解決を通じてバイオインフォマティク ス、プログラミング、およびアルゴリズムを 学習するためのプラットフォーム ● 大学やハッカソン、就職の面接にも 600回 以上の採用実績あり 参考:https://qiita.com/_kimoton/items/d534d0fa9b83dd7dc412 概要

Slide 4

Slide 4 text

環境構築 - 必要パッケージ群のインストール # 公開されているレポジトリからファイル群を取得 $ git clone https://github.com/kyclark/biofx_python $ cd biofx_python # requirements.txt に記載のパッケージをインストール $ pip3 install -r requirements.txt # pylintの設定ファイルをホームディレクトリに移動 $ cp pylintrc ~/.pylintrc # mypyの設定ファイルをホームディレクトリに移動 $ cp mypy.ini ~/.mypy.ini

Slide 5

Slide 5 text

本日のお題 塩基配列を翻訳せよ https://rosalind.info/problems/prot/

Slide 6

Slide 6 text

本日学ぶこと ● 文字列スライスを使って、コドン/k-merを抽出する方法 ● 辞書型をテーブルの検索に使用する方法 ● forループをリスト内包表記やmap()関数で置き換える方法 ● takewhile() や partial() 関数の使用方法 ● Bio.Seqモジュールを用いたmRNA→アミノ酸配列への変換

Slide 7

Slide 7 text

前提知識編

Slide 8

Slide 8 text

K-merとコドン https://ja.wikipedia.org/wiki/%E3%82%B3%E3%83%89%E3%83%B3 RNAのコドン表 翻訳は3-merごとに行われる

Slide 9

Slide 9 text

文字列スライスを使った3-merごとの抽出 文字列スライスでインデックスを3飛ばしずつ読むことで3-merの抽出ができる >>> rna = 'AUGGCCAUGGCGCCCAGAACUGAGAUCAAUAGUACCCGUAUUAACGGGUGA' >>> rna[0:3] 'AUG' >>> rna[3:6] 'GCC' >>> rna[6:9] 'AUG'

Slide 10

Slide 10 text

文字列スライスを使った3-merごとの抽出 リスト内包表記を使うことで全配列に渡って3-merごとに抽出することができる >>> rna = 'AUGGCCAUGGCGCCCAGAACUGAGAUCAAUAGUACCCGUAUUAACGGGUGA' # STEP1. スライスstartの取得 >>> list(range(0, len(rna), 3)) [0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48] # STEP2. スライス(start, end)の取得 >>> [(n, n + 3) for n in range(0, len(rna), 3)][:5] [(0, 3), (3, 6), (6, 9), (9, 12), (12, 15)] # STEP2. スライス結果の取得 >>> [rna[n:n + 3] for n in range(0, len(rna), 3)][:5] ['AUG', 'GCC', 'AUG', 'GCG', 'CCC']

Slide 11

Slide 11 text

(参考)K-merの抽出 同様の処理でK-mer全てを抽出することができる >>> rna = 'AUGGCCAUGGCGCCCAGAACUGAGAUCAAUAGUACCCGUAUUAACGGGUGA' >>> [rna[n:n + 3] for n in range(0, len(rna)-2)] ['AUG', 'UGG', 'GGC', 'GCC', 'CCA', 'CAU', 'AUG', 'UGG', 'GGC', 'GCG', 'CGC', 'GCC', 'CCC', 'CCA', 'CAG', 'AGA', 'GAA', 'AAC', 'ACU', 'CUG', 'UGA', 'GAG', 'AGA', 'GAU', 'AUC', 'UCA', 'CAA', 'AAU', 'AUA', 'UAG', 'AGU', 'GUA', 'UAC', 'ACC', 'CCC', 'CCG', 'CGU', 'GUA', 'UAU', 'AUU', 'UUA', 'UAA', 'AAC', 'ACG', 'CGG', 'GGG', 'GGU', 'GUG', 'UGA']

Slide 12

Slide 12 text

辞書型を用いたコドン→アミノ酸への変換 コドン→アミノ酸への変換は辞書型で実装できる。 終止コドンは「*」で示すことが多い。 >>> rna = 'AUGGCCAUGGCGCCCAGAACUGAGAUCAAUAGUACCCGUAUUAACGGGUGA' >>> aa = [] >>> for codon in [rna[n:n + 3] for n in range(0, len(rna), 3)]: ... aa.append(codon_to_aa[codon]) ... >>> aa ['M', 'A', 'M', 'A', 'P', 'R', 'T', 'E', 'I', 'N', 'S', 'T', 'R', 'I', 'N', 'G', '*']

Slide 13

Slide 13 text

解法編

Slide 14

Slide 14 text

解法1forループを使用した実装 1 入力されたRNA文字列を大文字に変換 2 コドン表を辞書型で定義 3 大文字/小文字の塩基に該当すれば相補 的な塩基をrevc変数に追加 1 2 3 4 4 コドン表を使って3-merの塩基配列を 置換(存在しない場合、「-」) 5 5 終止コドンの場合、翻訳終了

Slide 15

Slide 15 text

解法2処理の関数化&単体テストを追加 1 コドンに分割する処理をcodon関数と して定義 2 codon関数の単体テストを実装 1 2

Slide 16

Slide 16 text

解法3処理の関数化&単体テストを追加 1 RNA配列を翻訳する処理をtranslate関数 として定義 3 終止コドンの位置までの配列にスライス 1 4 2 翻訳部分をリスト内包表記で実装 2 4 translate関数の単体テストを実装 3

Slide 17

Slide 17 text

解法3処理の関数化&単体テストを追加 1 RNA配列を翻訳する処理をtranslate関数 として定義 3 終止コドンの位置までの配列にスライス 1 4 2 翻訳部分をリスト内包表記で実装 2 4 translate関数の単体テストを実装 3

Slide 18

Slide 18 text

解法4map(), partial(), takewhile()を用いた関数型プログラミング

Slide 19

Slide 19 text

解法5Bio.Seq.translateモジュールを使用 参考:https://biopython.org/docs/1.76/api/Bio.Seq.html#Bio.Seq.Seq.translate (著者の意見) ドキュメント化され、テストされ、広く利用されている Bio.Seq.translateモジュールを使 用すべき

Slide 20

Slide 20 text

追加課題 デフォルト値が0かつ0-2の値を取り得る --frame-shift 引数を追加して、 指定した数値分ずれた開始地点から翻訳を開始するように実装 demo