統計、分析とかそっちの分野の勉強をはじめました
それに先駆けてインタラクティブな実行環境は必要だよねということで形から入っていきます!
今回は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もあまり書いたことないのでこれから勉強ですね