Snakemakeを使って再現性のある!スケーラブルな!可搬性のある解析! - ①

お疲れ様です。
ここのところバイオインフォに触れられず何か物足りないkimotonです。

最近はMLOps周りの基盤作りに関わっています。

ナンデダロ。

Snakemakeってなにー??

githubリポジトリは下記。

The Snakemake workflow management system is a tool to create reproducible and scalable data analyses. Workflows are described via a human readable, Python based language. They can be seamlessly scaled to server, cluster, grid and cloud environments, without the need to modify the workflow definition. Finally, Snakemake workflows can entail a description of required software, which will be automatically deployed to any execution environment.

タイトルの通り、再現性高くてスケーラブルかつ可搬性のある解析パイプラインを書くためのツールです。
100% pythonで書かれていますのでコード読むと勉強になったりします。

著者のツイートによると、引用数が500を突破したとのことです。
さらには現在週に約3報引用論文がpublishされているとのこと。

つまり激アツなんですね。

それなのに日本語の記事がほとんどないので、これはもう自分が連載企画としてSnakemakeをじっくり使っていくしかないかなと思った次第であります(研究で使う必要が出てきたのもある)。

ざっくりどんな感じなのか

こんな感じです。

rule targets:
    input:
        "plots/myplot.pdf"

rule transform:
    input:
        "raw/{dataset}.csv"
    output:
        "transformed/{dataset}.csv"
    singularity:
        "docker://somecontainer:v1.0"
    shell:
        "somecommand {input} {output}"

rule aggregate_and_plot:
    input:
        expand("transformed/{dataset}.csv", dataset=[1, 2])
    output:
        "plots/myplot.pdf"
    conda:
        "envs/matplotlib.yaml"
    script:
        "scripts/plot.py"

GNU Makeと発想が近いのがお判りでしょうか。
入力ファイルと出力ファイル、実行環境、実行コマンドを書くだけのシンプル設計。
可読性が高くていいですね。

その他の特徴として、

  • 内部で実行できるスクリプトの種類としては、Python, R, CWL, shellなどが使えます。
  • 実行環境としてconda及びsingularity が使用できます。必要なパッケージをワークフローに定義しておくことで環境を含めた再現性を担保することができます。
  • ストレージとして、S3、Google Storage, Dropbox, FTP, SFTP などが使えます。

便利ですね。

インストール

SnakemakeはPyPI及びBiocondaで公開されています。

一方、condaでのインストールが推奨されています。 というのも、上で述べたように再現性を担保するためにSnakemakeからcondaの仮想環境を使用することができるからです。

conda経由でインストール

まずはAnacondaもしくはMinicondaをインストールする必要があります。 インストール方法についてはこの辺を参照してください。

Minicondaのインストールが完了したら、下記コマンドによりBioconda経由でSnakemakeをインストールしましょう。

$ conda install -c bioconda -c conda-forge snakemake

次に独立した環境としてsnakemakeという名前でSnakemakeの入った環境を作成します。 マギラワシイ…

$ conda create -c bioconda -c conda-forge -n snakemake snakemake

作成したsnakemakeという名前の環境をactivateしたらsnakemakeコマンドが使えるようになっているはずです。snakemake --helpコマンドによりヘルプメッセージが出力されるか確認しましょう。

$ conda activate snakemake
$ snakemake --help

無事ヘルプメッセージが出力されたら準備完了です。

pip経由でインストール

こっちはもう超単純です。
おなじみpipコマンドを使ってインストールしましょう。

$ pip install snakemake

Pipenv使いのあなたはこんな感じ

$ pipenv install snakemake
$ pipenv shell

virtualenv使いのあなたはこんな感じになると思います。

$ virtualenv -p python3 .venv
$ source .venv/bin/activate
$ pip install snakemake

続きはまた明日

はい。

ここまでSnakemakeの概要とインストール方法について見てきました。
まだ実際に触るとこ入れてないので、次回はチュートリアルなぞってみたいと思います。

Python学んでスクラッチでパイプライン組むより、こういうOSS活用してサクッとパイプライン作れるようになるといいですね。