Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Transcribing DNA into mRNA: Mutating Strings, Reading and Writing Files

B5a4a30238bf354e57d4ddac24c2d438?s=47 onouyek
November 12, 2021

Transcribing DNA into mRNA: Mutating Strings, Reading and Writing Files

B5a4a30238bf354e57d4ddac24c2d438?s=128

onouyek

November 12, 2021
Tweet

Transcript

  1. 【第2回】ゼロから始めるゲノム解析 (Python編) Transcribing DNA into mRNA: Mutating Strings, Reading and

    Writing Files @onouyek
  2. 本勉強会の概要・目的 書籍名 対象者/目的 Mastering Python for Bioinformatics Python・バイオインフォ知識ほぼゼロの人 を対象に、正しいPythonのコーディング手 法について学ぶ

    頻度 毎週〜隔週開催予定 登壇者 募集中!
  3. Rosalindとは • 問題解決を通じてバイオインフォマティク ス、プログラミング、およびアルゴリズムを 学習するためのプラットフォーム • 大学やハッカソン、就職の面接にも 600回 以上の採用実績あり 参考:https://qiita.com/_kimoton/items/d534d0fa9b83dd7dc412

    概要
  4. 環境構築 - 必要パッケージ群のインストール # 公開されているレポジトリからファイル群を取得 $ 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
  5. 本日のお題 与えられたDNA配列を RNA配列に変換せよ http://rosalind.info/problems/rna/

  6. 本日学ぶこと • 複数ファイルの引数設定 • ディレクトリの存在確認と作成 • ファイルの読み込みと書き込み • 文字列の変換

  7. 前提知識編

  8. argparseとは 実行時にコマンドライン引数を取れるようにするPythonの標準ライブラリ $ ./rna.py -h usage: rna.py [-h] [-o DIR]

    FILE [FILE ...] Transcribe DNA into RNA positional arguments: FILE Input DNA file optional arguments: -h, --help show this help message and exit -o DIR, --out_dir DIR Output directory (default: out) rna.pyでは、 位置引数として FILE オプション引数として --help と--out_dirが定義されている デフォルトの名前はout
  9. 位置引数の定義の仕方 ①-なしの場合は位置引数 ②ヘルプメッセージにおける表記を定義 ③引数の型を定義。 誤った入力をした場合 に早期に不適切な入力を検知可能 ④引数の数を定義 4 1 2

    3 シンボル 意味 ? 0または1 * 0以上 + 1以上
  10. オプション引数の定義の仕方 ①引数の1文字表記は-、長い名前は--はじま り ②ヘルプメッセージにおける表記を定義 ③引数の型を定義(デフォルトは str) ④デフォルトの値を定義(指定なければ None) 4 1

    2 3
  11. NamedTupleとargparseを用いたプログラム構成 1 2 3 ①NamedTupleを継承してArgsクラスを作成 ②ArgsクラスはTextIO属性をもつlist型の filesと定義している。 ③TextIOはファイルハンドラの型ヒント get_args()で引数解析をしてArgsクラスに 渡して返す

  12. ディレクトリの存在確認と作成 1 2 ①out_dirで定義したディレクトリが存在するかを確認 ②os.makedirs()で出力ディレクトリを作成(親ディレクトリが存在しない場 合にも作成される) demo

  13. 擬似コードを用いてアウトラインを描く 新しいプログラムを書く際は擬似コードで何をする処理かを明確にしておくと進めやすい

  14. 出力ファイルの作成 os.pathモジュールのdirname()でディレクトリのパスを、 basename()でファイル名をファイルパスから取得できる。 >>> import os >>> os.path.dirname('./tests/inputs/input1.txt') './tests/inputs' >>>

    os.path.basename('./tests/inputs/input1.txt') 'input1.txt' os.path.join()で出力ファイルのパスを作成する os.path.basename('tests/inputs/input1.txt') ↓ os.path.join("rna", "input1.txt") → "rna/input1.txt" ↑ args.out_dir demo
  15. ファイルを開く - open() open()関数のデフォルトでは読み込みモードになっているので書き込みモードの wを指定 処理モード 意味 w 書き込み r

    読み込み a 追記 内容モード 意味 t テキスト b バイト
  16. (参考)with文 • 処理中に例外が発生しても必ず最後にファイルをちゃんと閉じてくれる。 • 同じことを try-finally ブロックを使って書くより簡潔に書ける。 ※with キーワードを使用しない場合は、ファイルのために利用されたシステムリソースを直ちに解 放するために

    f.close() を呼び出してファイルを閉じてください。 >>> with open(workfile) as f: >>> read_data = f.read() >>> # We can check that the file has been automatically closed. >>> f.closed False
  17. ファイルへの書き込み ファイルハンドルのwrite()でファイルに書き込み print()のfileオプションに出力のファイルハンドルを指定することでも書き出せる。 demo

  18. テスト- bad_input 1 2 3 ①終了ステータスが 0でないことをチェック ②usage:が出力されることをチェック ③エラーメッセージが出力されることをチェック

  19. テスト- good_input 1 2 3 ①出力ディレクトリの存在確認 ②出力ファイルの存在確認 ③出力内容が正しいか確認 ④テスト後にディレクトリ削除 4

  20. (参考)pytest fixture 1 2 Yield fixturesでtestに使ったディレクトリを Cleanup ①関数にpytest.fixture デコレーターを つけるとテスト関数の引数として渡せる。

    ②outdirが呼ばれるとyieldまで実行さ れてout_dirを返す。 テストの実行が終わると yieldより後の処 理が行われる。
  21. 解答編

  22. 解法 1 str.replace()メソッドで変換

  23. 解法 2 正規表現モジュールのre.sub()を用いて置換 検索する文字列 入力文字列  ↓  ↓ re.sub('T', 'U', 'ACGT')

     ↑ 置換する文字列
  24. (参考)ベンチマーキング 1 2 1 2 str.replace()を用いた実行時間 re.sub()を用いた実行時間 100万塩基長の100配列の処理速度を計測 demo

  25. 追加課題 Q. RNAの配列を出力する代わりに配列の長さを出力するように修正してください。また 最後に最小、最大、平均の長さを出力してください。

  26. 本日学んだこと • argparse.FilteTypeを用いたファイル引数のバリデーション • os.path.isdir()によるディレクトリの確認 • os.makedirs()によるディレクトリの作成 • open()によるファイルの読み込み •

    open()によるファイルの書き込み • str.replace(), re.sub()による文字列の変換