この記事はバカン Advent Calendar 2019の4日目の投稿です。
Jupyterer向けの記事となります。
理解不十分な部分もあるため、詳細は公式を確認してください。
nbdevとは
おそらく簡潔にいうと、IDEの役割を含めることで、Jupyter Notebook1つで作業を完結させるPythonのプログラム環境のことです。
fast.aiが作成しており、現在開発中のfastai v2もnbdevを用いているとのことです。
現状、EDAやモデル構築などの試行錯誤はJupyter Notebookを用いて行われることが多く、"exploring"の役割として存在しています。ですが、それ以降のフェーズではIDEを使うのが一般的とされています。
nbdevでは以下のような機能を提供することで、jupyter上で完結することを試みています。
・pyファイルの作成
・READMEの作成
・Visual diff
・merge conflictの確認、修正
(以下公式から拝借)
チュートリアル・使い方
以下はMacで行なっていますが、Winでも手順は変わらないです。
インストール 〜 Jupyter開くまで
1- ターミナルから以下コマンドでインストールします。
pip install nbdev
2- 公式がテンプレートを作成しているので、それをもとにRepositoryを作成します。
3- 作成したRepositoryをCloneします。
git clone [以下URL]
4- 連携するRepositoryの情報を加えるため、settings.ini
を編集します。
settings.ini
の以下項目のコメントアウトを外し、記入例のように編集します。
lib_name, user, descriptionは作成したrepositoryに対応させます。
keywordsは何を指しているか不明ですが、適当な文字列を入れてください。
※ copyrightまで記載しないと、次の手順でコケます。
5- ターミナルから以下コマンドを打ちこみ、lib_nameのディレクトリを作成します。
nbdev_build_lib
(上の画像ではPipfileとPipfile.lockが表示されてますが、関係ないので無視してください)
6- jupyter notebook
でJupyter Notebookを開きます。
pyファイルの作成
00_core.ipynb
を開き、以下手順でモジュール作成を行います。
- python moduleに変換するものに関して、該当セルの先頭に
#export
を加えます。 - 以下2行をセルに打ち込み実行します。(もしくはterminal上で
nbdev_build_lib
を実行します。)
from nbdev.export import *
notebook2script()
これによって、#export
で指定したものが、lib_nameディレクトリ配下のcore.py
に記載されます。
手順2を実行するたびにcore.py
が更新されるため、追加に加え、既存セルを消去すれば削除も可能です。
READMEの編集
99_index.ipynb
を開くと以下テンプレートが表示されます。
#hide
が記載されたセルは非表示となるため、ここで#export
したもの含めモジュールをimportしていきます。
編集完了後、terminal上でnbdev_build_docs
を実行することで、ディレクトリにあるREADME.md
が更新されます。
その後、remote repositoryにpushするとgithub上のREADMEでは以下のよう表示されます。
おわりに
いかがでしたか?
nbdevの概要、使い方の一部を紹介してみました。
本記事を通して、nbdevを使ってみるきっかけになれば幸いです。
カバーできていない部分もあるため、以下の参考文献を確認してみてください。
参考文献
・nbdev: use Jupyter Notebooks for everything
・Welcome to nbdev
・Nbdev discussion
・A Step-by-Step Introduction to Starting nbdev — Exploratory Programming
・今度こそ挫折しない git 入門 第1回
参考リンク
・株式会社バカン(Vacan, Inc.)
・バカン (Vacan) Advent Calendar 2019
参考情報
弊社代表取締役はKaggle推しです。