jupyter notebookを簡単に管理できるjupytextの紹介
データ分析とかを行うときにjupyter notebookをよく使うと思うんですが、それをgitで簡単に管理できるようにするjupytextなるものを知ったので、備忘録としてまとめてみたいと思います。
背景
jupyter notebookの中身はjsonで書かれているため、gitとかで管理しづらい
jupyter上での表示
git上での表示
printした結果や実行回数まで差分として出力されてしまう
データ分析を行う際に、jupyter notebookを使いたい派 vs 使いたくない派の戦争が発生する(?)
- 使いたい派:step by stepで途中経過を確認しながら分析したい
- 使いたくない派: コードが煩雑になりがちなので、出来れば
.py
ファイルを使いたい
jupytextとは
jupyter notebookをpython script(
.py
)として保存することができるツール.ipynb
ファイル(左)、変換された.py
ファイル(右)
他にも以下のような機能がある
基本的な使い方
使い方はとても簡単で、以下の3ステップを実行するだけ!!
pip install jupytext
~/.jupyter/jupyter_notebook_config.py
内の末尾に以下を追加c.NotebookApp.contents_manager_class = "jupytext.TextFileContentsManager"
- jupyter notebookを立ち上げ、Edit>Edit Notebook Metadataを開き、以下を追加
"jupytext": {"formats": "ipynb,py"}
これを仕込んでおくだけで、
jupyter notebookを保存する度に.pyファイルが自動で作成・更新されます
さらに、作成された.pyファイルを変更しても、自動的に変更が.ipynbに反映されます
発展的(?)な使い方
- すべての
.ipynb
ファイルに対して.py
ファイルを作成したい場合、~/.jupyter/jupyter_notebook_config.py
内の末尾に以下を追加c.ContentsManager.default_jupytext_formats = "ipynb,py"
- 作成される
.py
ファイルの場所も指定することができる- Edit Notebook Metadataに、
"jupytext": {"formats": "ipynb, scripts//py"}
と書くと、以下のようにscriptディレクトリの下に.py
ファイルが作成される
- Edit Notebook Metadataに、
|--- hoge.ipynb |--- scripts/ |----hoge.py
- コマンドラインからでも変換を行うことができる
jupytext --to py hoge.ipynb #hoge.ipynbをhoge.pyに変換する
メリット・デメリット
- メリット
.py
,.ipynb
片方を変更すると、もう片方のファイルも自動で同期される- jupyter notebookのgitでの管理が簡単になる
- デメリット
- 純粋にファイルの数が増える
- これは、作成場所をうまく指定してあげることで何とかなりそう
- 純粋にファイルの数が増える
まとめ
- jupytextを用いると、自動で
.py
ファイルが生成・変更され、コードの差分が分かりやすくなる .ipynb
と.py
ファイルそれぞれの変更が保存のタイミングで反映されるため、どちらの派閥にも対応できる
余談
jupytextを使って、.ipynb
を.md
に変更してみると、コード部分だけが抽出されたmarkdownが作成された。