Pythonを使ったデータ分析に関する内容をJupyter Notebookにまとめ始めました

研究をかれこれ2年半ぐらい続けてきたので、研究をする中で必要になった機械学習の手法について調べたりコードを書いたりしてきたのですが、まだまだ触ったことのない機械学習の手法も多く、研究で必要になる手法以外の知識も付けたくなってきたので、勉強し始めました。

Sphinxにまとめるか悩んだのですが、「ひとまず簡単にスライドにできること」・「手元でもすぐにコードを実行できる」という理由でJupyter Notebookを使用しています。 もし誤りやタイポ等があれば、IssueやPRお待ちしております。

github.com

今のところ↓の2つについてまとめました。

ノートブックの内容一覧

内容については今後何度も変更をすると思いますが、とりあえず今の予定としては下記の内容について書く予定です。 次は「Seabornの使い方」と「クラスタリング」について書く予定。

データ加工(Data Wrangling)・可視化(Visualization)

統計(Statistics)と機械学習(Machine Learning)

Pythonのデータ分析環境の構築 with Docker

このままだと内容紹介だけになってしまうので、Dockerを使った環境構築についてメモ。

JupyterはDockerイメージを公開してくれているので、基本的にはそちらを使えばいいと思います。この時、notebooks ディレクトリを作成しておいて、そこを下記のコマンドのように共有しておくと終了した際にもNotebookが手元のマシンに残すことができます。

$ docker pull jupyter/datascience-notebook
$ docker run -p 8888:8888 -v $PWD/notebooks:/home/jovyan/work c-bata/datascience

もし自作ライブラリなどJupyterが公開しているDockerイメージの中に含まれてないライブラリ・パッケージを使用する際には下記のように jupyterのdockerfileをベースとしたコンテナを作成しましょう。

# https://github.com/c-bata/datascience-notebook/blob/master/Dockerfile
From jupyter/datascience-notebook 
MAINTAINER Masashi Shibata <contact@c-bata.link>

USER root
RUN apt-get update && \
    apt-get install -y graphviz-dev graphviz && \
    rm -rf /var/lib/apt/lists/*

USER jovyan
RUN pip install pandas-validator outlier-utils

docker buildや実行は下記のようにすればOKです。

$ docker build -t c-bata/datascience .
$ docker run -p 8888:8888 -v $PWD/notebooks:/home/jovyan/work c-bata/datascience

Jupyter NotebookはWebブラウザからアクセスするので、Dockerを使う方法は相性が良いなと感じています。

VPS上でNginxも使ってJupyter Notebookを使用する

VPSの環境がある場合、わざわざ手元で実行しなくてもVPS上で実行していれば好きなときにURLにアクセスして確認することが出来ます。 Nginxの設定は↓を参考にしてください。 /api/kernels のところを下記のように記述しないと「カーネルにつながらない」と言われ動かすことが出来ない点に注意してください。

upstream jupyter {
    server 127.0.0.1:8001;
}

server {
    server_name jupyter.hoge.com;

    location / {
        auth_basic "Restricted";
        auth_basic_user_file /etc/nginx/.htpasswd;

        proxy_set_header Host $host;
        proxy_pass       http://jupyter;
    }

    location /api/kernels {
        proxy_set_header Host $host;
        proxy_set_header Upgrade "websocket";
        proxy_set_header Connection "Upgrade";
        proxy_pass       http://jupyter;
    }
}

研究データの解析とかもここでやっておくと、教授への共有も簡単ですし、移動中でもiPad等から操作出来て良さそうです。 また運用しながら知見等が貯まれば記事にしますね。

Pythonによるデータ分析入門 第2版 ―NumPy、pandasを使ったデータ処理

Pythonによるデータ分析入門 第2版 ―NumPy、pandasを使ったデータ処理