はじめに
- 自己紹介:UbuntuでPythonを書いてデータ分析とか異常検知してます
- Jupyter Notebookで再現性を確保する10の方法というpaperが良かった
- https://arxiv.org/abs/1810.08055
- 翻訳しました
目次
- ストーリーを伝える
- 結果だけでなく過程もドキュメント化する
- ステップを明確にする
- コードをモジュール化する
- 環境の依存関係を記録する
- バージョン管理する
- パイプラインを作る
- データをシェアし、説明する
- notebookを公開する
- スタックは共有してOSSに貢献する
ストーリーを伝える
ストーリーを伝えたい人のレベルに合わせて伝えよう。
「伝えたい人」はエンジニアなのか?技術の知識がない人なのか考えること。
もしかしたら1ヶ月後の自分かもしれない。
結果だけでなく過程もドキュメント化する
「なぜ」「何を」「どのように」行ったのか記入しよう。
ステップを明確にする
コードをセル毎にモジュール化し、その上にマークダウンでラベルを付けよう。
各セルは、1つの段落、1つの機能、または1つのタスクを行うように区切ろう。
notebookが長くなりすぎたら、別のファイルに分けても良い。
コードをモジュール化する
コードのコピペはやめよう。(修正の時が大変だ!)
関数やクラスを作ってそれを呼び出すようにしよう。
依存関係を記録する
Condaのenvironment.ymlやpipのrequirements.txtを使って、依存関係を明示しよう。
バージョン管理する
GitやGitHubを活用しよう。
nbdimeなどのツールで差分を明確化しよう。
パイプラインを作る
汎用のパイプラインを作ろう。
複雑な分析の実行を長いnotebookで行うのはやめよう。
「欠損処理用」「自然言語のクリーニング用」など小さなnotebookに分割して行おう。
訳注:おすすめEDAスニペット
https://qiita.com/TaigoKuriyama/items/8f9286b5c882819adebb
papermillやMakefileなども試してみよう。
大切なことは継続的インテグレーションだ!
データをシェアする
結果だけでなく、データセット全体をnotebookそのものを相手と共有しよう。
notebookを公開する
可能であれば、外部の人にもnotebookを公開しよう。
Github, Docker, Nbviewer などのツールを使ってみよう。
スタックを共有してOSSに貢献する
再現性は共同研究の重要ポイント。
必要ならば再現性の確保に専念してみよう。
また、問題に突き当たったり、それを解決したときは、ぜひ共有してコミュニティ全体に貢献しよう!
#終わりに
- 「ここがまちがってる」「「こういう資料もあるよ」などコメントお待ちしてます