統計、分析とかそっちの分野の勉強をはじめました
それに先駆けてインタラクティブな実行環境は必要だよねということで形から入っていきます!
今回はJupyterNotebookをdockerで立ち上げて使えるようにするところまでやってみました
docker
公式にDockerのイメージがあるのでそれを使います (jupyter/datascience-notebook)
結果的には下記ファイルでdocker-compose upすればOKという感じにしました
- Dockerfile
FROM jupyter/datascience-notebook USER root # GoogleAnalyticsClient のインストール RUN pip install --upgrade google-api-python-client redash-dynamic-query ipython-sql jupytext # vimキーバインドのプラグインインストール RUN jupyter labextension install jupyterlab_vim # 黒背景設定を追加 RUN mkdir -p /home/jovyan/.jupyter/lab/user-settings/@jupyterlab/apputils-extension RUN echo '{"theme":"JupyterLab Dark"}' > \ /home/jovyan/.jupyter/lab/user-settings/@jupyterlab/apputils-extension/themes.jupyterlab-settings RUN echo 'c.ContentsManager.default_jupytext_formats = "ipynb,py"' >> \ /home/jovyan/.jupyter/jupyter_notebook_config.py RUN mkdir /home/jovyan/notebooks RUN chown jovyan:users /home/jovyan/notebooks USER jovyan WORKDIR /home/jovyan
- docker-compose.yml
version: '3' services: jupyterlab: build: . ports: - '8888:8888' volumes: - "./notebooks:/home/jovyan/notebooks:z" environment: GRANT_SUDO: "yes" command: start.sh jupyter lab --NotebookApp.token='' --NotebookApp.iopub_data_rate_limit=100000000 --NotebookApp.contents_manager_class='jupytext.TextFileContentsManager'
設定とplugin
設定やいれたプラグインなど
黒背景
Dockerfileの'{"theme":"JupyterLab Dark"}'
の部分で黒背景に変更しています
単純に黒背景にしたいってだけですがモチベーション的には大事ですよね、ということで黒背景にしました
jupytext
.ipynb
のファイル.py
と一緒に管理できるプラグインです
ノートブックを保存すると自動的に処理をまとめた.py
ファイルも生成されます
両方のファイルで同期を保ってくれるのとソースコードをgit管理したいときは基本的には.py
を上げておけば良い感じですね
今の所.ipynb
も上げてしまっていますが。。。
vim
入力欄をvimのキーバインドで入力できるようにするプラグイン
移動に関しては入力欄の中ではvimキーバインドでいつもどおり移動できます
新しく次の入力欄を生成したい場合はctrl+_
で次の入力欄を生成してカーソルを移すことができます
起動オプション
いじったオプションなど
docker-composeでの起動時にオプションとして渡して設定を変えられるのでその方法でやっています
- --NotebookApp.token=''
ローカルで実行する前提なのでtoken入力を省くようにオプションをわたしています
- --NotebookApp.iopub_data_rate_limit=100000000
外部へのリクエストを発生させたときにひっかかったのですが扱えるデータ量に制限がかかっているようです
なので上限を上げて対応しました
RedashとかGoogleAnalyticsのデータをAPI経由で取ってきてそれをごにょごにょするみたいな時用です
個人的にはRedashにいろんなデータソースを接続させてJupyterからはRedashのAPIを叩くようにすればデータソースごとにクライアント使ってデータ取得用のコードを書かなくて済むのでとてもコスパが良さそうに思いました
Redash経由でデータ取れることは確認したもののまだ分析まではしてないです。。。w
- --NotebookApp.contents_manager_class='jupytext.TextFileContentsManager'
jupytextを使う設定
まとめ
今の所こんな感じで使うことにしました
サンプルを実行しただけですがスクリーンショットも貼っておきます
notebooks
ディレクトリにファイルをどんどん入れていってgitで管理する使い方をしています
pythonもあまり書いたことないのでこれから勉強ですね