Pythonではじめるバイオインフォマティクス

―可読性・拡張性・再現性のあるコードを書くために

[cover photo]
TOPICS
Programming , Python
発行年月日
PRINT LENGTH
460
ISBN
978-4-8144-0037-9
原書
Mastering Python for Bioinformatics
FORMAT
Print PDF EPUB
Ebook
6,050円
Ebookを購入する
Print
6,050円

本書はPythonを使ったバイオインフォマティクス研究のプログラミングスキルを学ぶことができる解説書です。Pythonが再現性のある科学的なプログラムを書くのに適していることに焦点を当て、バイオインフォマティクス分野におけるプログラムの文書化やテスト、再現可能なソフトウェアの開発方法を解説します。2部構成に分かれ、第Ⅰ部ではバイオインフォマティクスとプログラミングを学習するためのプラットフォーム「Rosalind」を使って14の課題に取り組みながら実践的に学習します。第Ⅱ部ではそのほかの重要パターンや概念を取り上げ、より複雑なプログラムについて説明します。ソフトウェアの開発、テスト、文書化、リリース、そしてサポートといった重要な方法を学び、Pythonを使ってバイオインフォマティクス研究を発展させるテクニックを学べる1冊です。

目次

訳者まえがき
はじめに

第Ⅰ部 Rosalind.infoチャレンジ

1章 テトラヌクレオチド頻度:モノを数える
    1.1 はじめましょう
        1.1.1 new.pyを使用したプログラムの作成
        1.1.2 argparseの使用
        1.1.3 コード中のエラーを発見するためのツール
        1.1.4 名前付きタプルの導入
        1.1.5 名前付きタプルに型を追加する
        1.1.6 引数をNamedTupleで表現する
        1.1.7 コマンドラインやファイルからの入力の読み取り
        1.1.8 プログラムのテスト
        1.1.9 出力テストのためのプログラム実行
    1.2 解法1:文字列の反復処理と文字数のカウント
        1.2.1 ヌクレオチドの数え方
        1.2.2 解法の作成と検証
    1.3 他の解法
        1.3.1 解法2:count()関数の作成とユニットテストの追加
        1.3.2 解法3:str.count()を使用する
        1.3.3 解法4:辞書を使って全文字数を数える
        1.3.4 解法5:必要な塩基だけをカウントする
        1.3.5 解法6:collections.defaultdict()を使用する
        1.3.6 解法7:collections.Counter()を使用する
    1.4 さらなる学習
    1.5 まとめ

2章 DNAからmRNAへの転写:文字列の改変、ファイルの読みだし、書き込み
    2.1 はじめましょう
        2.1.1 プログラムのパラメータの決定
        2.1.2 オプションパラメータの決定
        2.1.3 1つ以上の必須位置パラメーターの定義
        2.1.4 引数の数を定義するnargsの使い方
        2.1.5 argparse.FileType()を使ったファイル引数の検証
        2.1.6 Argsクラスの定義
        2.1.7 疑似コードによるプログラムの概要
        2.1.8 入力ファイルの反復処理
        2.1.9 出力ファイル名の作成
        2.1.10 出力ファイルを開く
        2.1.11 出力配列の書き込み
        2.1.12 ステータスの表示
        2.1.13 テストスイートの使用
    2.2 解法
        2.2.1 解法1:str.replace()
        2.2.2 解法2:re.sub()
    2.3 ベンチマーキング
    2.4 さらなる学習
    2.5 まとめ

3章 DNAの逆相補鎖配列への変換:文字列の操作
    3.1 はじめましょう
        3.1.1 反転した塩基配列の反復処理
        3.1.2 決定木の作成
        3.1.3 リファクタリング(ソースコードの整理)
    3.2 解法
        3.2.1 解法1:forループと決定木
        3.2.2 解法2:辞書検索機能
        3.2.3 解法3:リスト内包表記
        3.2.4 解法4:str.translate()関数
        3.2.5 解法5:Bio.Seqを使う
    3.3 まとめ

4章 フィボナッチ数列の作成:アルゴリズムのコーディング、テスト、およびベンチマーク
    4.1 はじめましょう
        4.1.1 命令的アプローチ
    4.2 解法
        4.2.1 解法1:リストをスタックとして使用する命令的解法
        4.2.2 解法2:ジェネレータ関数の作成
        4.2.3 解法3:再帰とメモ化の利用
    4.3 解法のベンチマーキング
    4.4 コードの良し悪しと、醜さをテストする
    4.5 すべての解法でテストスイートを実行する
    4.6 さらなる学習
    4.7 まとめ

5章 GC含量の計算:FASTA形式ファイルのパースと塩基配列の分析
    5.1 はじめましょう
        5.1.1 Biopythonを使ったFASTAの取得
        5.1.2 forループを使ったDNA配列の反復処理
    5.2 解法
        5.2.1 解法1:リストの使用
        5.2.2 解法2:型アノテーションとユニットテスト
        5.2.3 解法3:Running Max Variableの維持
        5.2.4 解法4:ガード付きリスト内包表記の利用
        5.2.5 解法5:filter()関数の利用
        5.2.6 解法6:map()関数の使用と論理値の合計
        5.2.7 解法7:正規表現によるパターン検索
        5.2.8 解法8:さらに複雑なfind_gc() 関数の利用
    5.3 ベンチマーキング
    5.4 さらなる学習
    5.5 まとめ

6章 ハミング距離を求める:点変異のカウント
    6.1 はじめましょう
        6.1.1 2つの文字列の文字の反復
    6.2 解法
        6.2.1 解法1:繰り返しとカウント
        6.2.2 解法2:ユニットテストの作成
        6.2.3 解法3:zip()関数の利用
        6.2.4 解法4:zip_longest()関数の利用
        6.2.5 解法5:リスト内包表記の利用
        6.2.6 解法6:filter()関数の利用
        6.2.7 解法7:zip_longest()関数と共にmap()関数を使う
        6.2.8 解法8:starmap()関数とoperator.ne()関数の使用
    6.3 さらなる学習
    6.4 まとめ

7章 mRNAのタンパク質への翻訳:関数型プログラミングの活用
    7.1 はじめましょう
        7.1.1 k-merとコドン
        7.1.2 コドンの翻訳
    7.2 解法
        7.2.1 解法1:forループを使う
        7.2.2 解法2:ユニットテストを追加する
        7.2.3 解法3:更なる関数の作成とリスト内包表記
        7.2.4 解法4:map()、partial()、takewhile()関数を用いた関数型プログラミング
        7.2.5 解法5:Bio.Seq.translate()を使う
    7.3 ベンチマーキング
    7.4 さらなる学習
    7.5 まとめ

8章 DNAのモチーフ検索:配列の類似性の探索
    8.1 はじめましょう
        8.1.1 部分配列の検索
    8.2 解法
        8.2.1 解法1:str.find()を用いる方法
        8.2.2 解法2:str.index()を用いる方法
        8.2.3 解法3:純粋に関数だけを用いたアプローチ
        8.2.4 解法4:k-merの利用
        8.2.5 解法5:正規表現による重複パターンの検索
    8.3 ベンチマーキング
    8.4 さらなる学習
    8.5 まとめ

9章 オーバーラップグラフ:共有k-merを用いた配列アセンブリ
    9.1 はじめましょう
        9.1.1 STDOUT、STDERR、およびログを用いたランタイムメッセージの管理
        9.1.2 オーバーラップを見つける
        9.1.3 オーバーラップによる塩基配列のグループ化
    9.2 解法
        9.2.1 解法1:集合の交わりを利用して重なりを見つける
        9.2.2 解法2:グラフを使ってすべての繋がりを確認する
    9.3 さらなる学習
    9.4 まとめ

10章 最長共通部分配列の探索:k-merの探索、関数の記述、バイナリサーチの利用
    10.1 はじめましょう
        10.1.1 FASTAファイル中の最短塩基配列の検索
        10.1.2 配列からのk-merの抽出
    10.2 解法
        10.2.1 解法1:k-merの頻度を数える
        10.2.2 解法2:バイナリサーチで高速化する
    10.3 さらなる学習
    10.4 まとめ

11章 タンパク質モチーフの検索:データの取得と正規表現の使用
    11.1 はじめましょう
        11.1.1 コマンドラインで配列ファイルをダウンロードする
        11.1.2 Pythonで配列ファイルをダウンロードする
        11.1.3 モチーフを検索するための正規表現を書く
    11.2 解法
        11.2.1 解法1:正規表現を使う
        11.2.2 解法2:正規表現を使わない解法
    11.3 さらなる学習
    11.4 まとめ

12章 タンパク質からmRNAを推定:リストの積と圧縮
    12.1 はじめましょう
        12.1.1 組み合わせのリストを作成
        12.1.2 剰余乗算によるオーバーフローの回避
    12.2 解法
        12.2.1 解法1:RNAコドン表に辞書を使う
        12.2.2 解法2:Turn the Beat Around
        12.2.3 解法3:最低限の情報にエンコーディング
    12.3 さらなる学習
    12.4 まとめ

13章 制限部位:使い方、テスト、コードの共有
    13.1 はじめましょう
        13.1.1 k-merによるすべての配列断片の探索
        13.1.2 すべての逆相補配列の探索
        13.1.3 パーツを組み立てましょう
    13.2 解法
        13.2.1 解法1:zip()関数とenumerate()関数の使用
        13.2.2 解法2:operator.eq()関数の利用
        13.2.3 解法3:revp()関数を書く
    13.3 プログラムのテスト
    13.4 さらなる学習
    13.5 まとめ

14章 オープンリーディングフレームの探索
    14.1 はじめましょう
        14.1.1 フレーム内の塩基をタンパク質に翻訳
        14.1.2 タンパク質配列中のORFの探索
    14.2 解法
        14.2.1 解法1:str.index()関数の利用
        14.2.2 解法2:str.partition()関数を使う
        14.2.3 解法3:正規表現を使う
    14.3 さらなる学習
    14.4 まとめ

第Ⅱ部 その他のプログラム

15章 Seqmagickマジック:レポートの作成と整形
    15.1 Seqmagickを用いた配列ファイルの解析
    15.2 MD5ハッシュ値を用いたファイルの検査
    15.3 はじめましょう
        15.3.1 tabulate()を用いたテキストテーブルの整形
    15.4 解法
        15.4.1 解法1:tabulate()による整形
        15.4.2 解法2:リッチフォーマット
    15.5 さらなる学習
    15.6 まとめ

16章 FASTX grep:配列を選択するユーティリティプログラムの作成
    16.1 grepを用いたファイル中の行の検索
    16.2 FASTQレコードの構造
    16.3 はじめましょう
        16.3.1 ファイル形式の推定
    16.4 解法
        16.4.1 拡張子からファイル形式の推定
        16.4.2 計画通りに進むことの快感
        16.4.3 正規表現検索フラグの結合
        16.4.4 論理値の削減
    16.5 さらなる学習
    16.6 まとめ

17章 DNAシンセサイザー:マルコフ連鎖を用いた合成データの作成
    17.1 マルコフ連鎖の理解
    17.2 はじめましょう
        17.2.1 乱数シードを理解する
        17.2.2 学習用ファイルの読み込み
        17.2.3 配列の生成
        17.2.4 プログラムを構造化する
    17.3 解法
    17.4 さらなる学習
    17.5 まとめ

18章 FASTXサンプラー:配列ファイルからランダムにサンプリング
    18.1 はじめましょう
        18.1.1 プログラムパラメータのレビュー
        18.1.2 パラメータ定義
        18.1.3 非決定論的サンプリング
        18.1.4 プログラムの構造
    18.2 解法
        18.2.1 解法1:通常のファイルの読み込み
        18.2.2 解法2:多数の圧縮ファイルの読み込み
    18.3 さらなる学習
    18.4 まとめ

19章 BLASTデータの処理:区切りテキストファイルの解析
    19.1 BLASTの紹介
    19.2 csvkitとcsvchkを使用する
    19.3 はじめましょう
        19.3.1 引数の定義
        19.3.2 csvモジュールによる区切りテキストの解析
        19.3.3 pandasモジュールによる区切りテキストファイルの解析
    19.4 解法
        19.4.1 解法1:辞書を使用して手動でテーブルを結合する
        19.4.2 解法2:csv.DictWriter()を用いて出力ファイルを書き出す
        19.4.3 解法3:pandasを用いたファイルの読み書きの方法
        19.4.4 解法4:pandasを使ったファイルの結合
    19.5 さらなる学習
    19.6 まとめ

付録A makeプログラムによる文書化とワークフローの作成
    A.1 Makefileはレシピ
    A.2 特定のターゲットを実行する
    A.3 ターゲットを指定せずに実行する
    A.4 Makefileを用いてDAGの作成
    A.5 makeを使ってCプログラムをコンパイルする
    A.6 makeを用いてショートカットを作成する
    A.7 変数の定義
    A.8 ワークフローの作成
    A.9 他のワークフローマネジャ
    A.10 参考文献

付録B $PATHとコマンドラインプログラムのインストールについて

おわりに
索引