papermill × Jupyter Notebookでドキュメント化された解析ワークフローを作る


昨日の記事でも書いたように、ワークフローに文章や画像を関連づけさせたいのだが、PapermillというJupyter Notebookをバッチ実行するためのPythonパッケージがあったので、これを使ってワークフローを構築した。

ここでは1細胞RNA-Seqのデータdata/input.csvと、ラベル情報data/label.csvというファイルに対して、複数の次元圧縮を試すというタスクを一度に行った。

なお、RをJupyter notebookで使えるようにするために、IRkernelのインストールと、.ipynbファイルのkernelspecのところを以下のように書き換えた。

  "kernelspec": {
   "display_name": "R",
   "language": "R",
   "name": "ir"
  },

あとは、

jupyter notebook workflow.ipynb

で、ノートブックを起動して、上から順にひたすら次元圧縮を試すノートブックを作り込んだ後に、入力、出力ファイルの場所や、圧縮次元数を後からPapermillの引数として渡せるように書いたら、以下のようにPapermillを実行した。

papermill workflow.ipynb output/papermill/output.ipynb \
-p infile data/input.csv -p infile2 data/label.csv -p  \
outdir output/papermill -p pca_ndim 3 -p nmf_ndim 4  \
-p mds_ndim 4 -p lda_ndim 3 -p som_ndim 2 -p isomap_ndim 2 \
-p lle_ndim 2 -p dmap_ndim 4 -p tsne_ndim 2 -p umap_ndim 2 \
-p tumap_ndim 2 -p fatlas2_ndim 2

これにより、output/papermillのところに、次元圧縮の結果ファイルやoutput.ipynbというノートブックが出力されるようになる。papermillで指定されたパラメーターはノートブックに埋め込まれているのがわかる。

https://github.com/kokitsuyuzaki/workflow_benchmark/blob/master/output/papermill/output.ipynb
https://colab.research.google.com/github/kokitsuyuzaki/workflow_benchmark/blob/master/output/papermill/output.ipynb

以下のように出力されたほうのノートブックを起動しておくと、実行途中の様子を確認できるのも便利。

jupyter notebook output/papermill/output.ipynb

ただし、昨日の記事でも書いたように、実データではパラメーターチューニングしたいのと、パラメーターの値次第ではコケるため、この書き方だと全計算をやり直す必要が出てくるので、各次元圧縮手法ごとにノートブック化&Dockerコンテナ化して、複数のパラメーターごとに分散処理するような使い方のほうがいいかもしれない。

参考

https://qiita.com/hrappuccino/items/d4961e1e42c82c52ef64
https://qiita.com/noko_qii/items/62a7f70fceb6153620f4