Python、機械学習

Dockerでデータ分析環境を構築してみた(Miniconda + RDKitなど、日本語対応も)

Dockerでデータ分析環境を構築する方法をまとめてみました。

UbuntuをベースにMinicondaを導入し、さらにRDKitやPymatgen、XenonPyといったケモインフォマティクス、マテリアルズインフォマティクス関連のライブラリ、およびRその他をインストールするものです。UIはJupyterLab、日本語表記にも対応しています。

Dockerfile

こちらがDockerfileの中身です。

FROM ubuntu:latest

# proxy
ENV http_proxy http://doraemon:1a2b3c@111.111.111.111:8080
ENV https_proxy https://doraemon:1a2b3c@111.111.111.111:8080

# install linux commands
RUN apt-get -y update && apt-get install -y \
sudo \
wget \
vim \
curl \
unzip

# add Japanese packages to ubuntu
RUN apt-get install -y language-pack-ja-base language-pack-ja \
fontconfig fonts-takao && locale-gen ja_JP.UTF-8
ENV LANG ja_JP.UTF-8
ENV LANGUAGE ja_JP:ja
ENV LC_ALL ja_JP.UTF-8


# install miniconda3-py3.6
WORKDIR /opt
RUN wget https://repo.anaconda.com/miniconda/Miniconda3-4.5.4-Linux-x86_64.sh && \
sh /opt/Miniconda3-4.5.4-Linux-x86_64.sh -b -p /opt/miniconda3 && \
rm -f Miniconda3-4.5.4-Linux-x86_64.sh

# set path
ENV PATH /opt/miniconda3/bin:$PATH

# install libraries
RUN pip install --upgrade pip && \
conda install conda=4.8.3=py36_0 && \
conda config --append channels conda-forge && \
conda install -c conda-forge rdkit && \
conda install -c conda-forge pymatgen && \
conda install pytorch torchvision cpuonly -c \
pytorch --no-update-deps && \
pip install xenonpy && \
pip install dcekit && \
pip install pubchempy && \
conda install -c rdkit -c mordred-descriptor mordred && \
conda install -c conda-forge tensorflow && \
conda install -c anaconda py-xgboost && \
conda install catboost && \
conda install -c conda-forge lightgbm && \
pip install optuna && \
conda install -c conda-forge shap && \
conda install -c conda-forge boruta_py && \
conda install -c conda-forge python-graphviz && \
pip install dtreeviz && \
conda install -c r r-essentials && \
pip install pyper && \
conda install -c conda-forge nodejs jupyterlab

# enable japanese on matplotlib
RUN wget  "https://moji.or.jp/wp-content/IPAexfont/ipaexg00201.zip"  && \
unzip ipaexg00201.zip && \
cp ipaexg00201/ipaexg.ttf /opt/miniconda3/lib/python3.6/site-packages/matplotlib/mpl-data/fonts/ttf/ipaexg.ttf && \
echo "font.family : IPAexGothic" >>  /opt/miniconda3/lib/python3.6/site-packages/matplotlib/mpl-data/matplotlibrc  && \
rm -f /root/.cache/matplotlib/fontlist-v310.json

# make 'work' directory
WORKDIR /
RUN mkdir /work

# execute jupyterlab as a default command
CMD ["jupyter", "lab", "--ip=0.0.0.0", "--allow-root", "--LabApp.token=''"]

それぞれのコマンドの意味は以下の通りです。

1. Ubuntuをインストール

最初の一行目のところです。最新のUbuntuをインストールします。

2. プロキシ設定

# proxyのところに記載しているものです。

会社の中など、プロキシ内でdockerfileをビルドする場合は、この2行を入れておきます。プロキシを通過させるための設定です。

ここでは、ユーザー名(ID):doraemon、パスワード:1a2b3c、プロキシアドレス:111.111.111.111、ポート:8080、としています。各自のプロキシ情報に置き換えていただければと思います。

プロキシ情報の確認方法については、こちらの記事を参考にしてください。

【Python】プロキシあり/なし両方の環境でpip, condaを使ったりスクレイピングするには?(proxy)自宅と会社の両方でPythonを使う方、多いと思います。その場合、ほぼ間違いなくつまづくのがプロキシ(proxy)の設定のところでしょう...

3. 必要なLinuxコマンドをインストール

# install linux commandsのところに記載しているものです。

パッケージの操作・管理を行うコマンドであるapt-getをアップデートした上で、sudoやwgetなど、必要なLinuxコマンドをインストールします。

4. Ubuntuで日本語が使えるように設定

# add Japanese packages to ubuntuのところに記載しているものです。

日本語のパッケージをインストールします。これをしないと、JupyterLabのファイル一覧で、日本語が文字化けしてしまいます。

5. Minicondaをインストール

# install miniconda3-py3.6のところに記載しているものです。

まずはWORKDIRで、optディレクトリを指定します。ここに、Minicondaや各種ライブラリをインストールしていきます。

ここではMinicondaをインストールします。豊富なライブラリを包含したAnacondaでもよいのですが、通常のデータ分析で使わないものもインストールされますし容量も大きくなるため、今回は軽量のMinicondaを選択しています。

また、後ほどインストールするライブラリの中には、Python3.7以上に対応していないものがあるため、ここではPython3.6でかつ最も新しいバージョンのMiniconda (Miniconda3-4.5.5-Linux-x86_64.sh) を指定しています。

6. パスを通す

# set pathのところに記載しているものです。

Minicondaにパスを通します。

7. 各種ライブラリをインストール

# install librariesのところに記載しているものです。

pip, condaをアップグレードしたのち、必要なライブラリをインストールします。ここの書き方によってはpythonが勝手に3.7以上にアップグレードされる場合があるため要注意です。上記のDockerfileの通りであれば問題なくインストールできます。

インストールするライブラリはdockerfileを見ていただければ分かると思います。RDKit、Pymatgen、XenonPyといった化学系ライブラリから勾配ブースティング、変数選択、R関連、JupyterLabまで一通り入れています。もし他に追加したいものがあれば、installのコマンドを追記します。

なお、numpyやpandas、matplotlib、seaborn、scikit-learnといった基本ライブラリは、上記の過程で同時にインストールされますので、敢えてconda install numpyなどと打つ必要はありません。

また、JupyterLabを拡張機能を使うために

8. matplotlibの日本語対応化

# enable Japanese on matplotlibのところに記載しているものです。

matplotlibのグラフで日本語が文字化けしないようにするためのコマンドです。

9. ‘work’フォルダの作成

# make ‘work’ directoryのところに記載しているものです。

先程まではWORKDIRでoptディレクトリを指定していましたが、一旦rootに戻し、root直下にworkフォルダを作成します。ここが、実際の分析ファイル(.ipynb)等が格納されるディレクトリとなります。

10. docker runするとJupyterLabが起動するように設定

# execute jupyterlab as as default commandのところに記載しているものです。

Dockerfileをビルドしたあと、docker runすると自動的にJupyterLabが起動するように設定するものです。

参考にしたURL

Ubuntuベースにconda環境を導入する書き方はこちらのブログを参考にしました。

Docker超入門講座 | 米国データサイエンティストのブログ

ちなみに、このブログを運営されているカメさんのこちらのUdemy講座、超おすすめです。

米国AI開発者がゼロから教えるDocker講座