Python実践機械学習システム100本ノックを手元で動かしながら読んでみている。

Docker環境でJupyter Notebookを動かすサンプルコードがダウンロードできるが、そのままではビルドに失敗するので、requirements.txtにあるバージョンを書き換えるなどして動くように整えた。

jupyter==1.0.0
numpy==1.21.0
pandas==1.5.1
openpyxl==3.0.4
scikit-learn==1.1.3
matplotlib==3.3.2
japanize-matplotlib==1.1.2
seaborn==0.11.0
ipywidgets==7.5.1
ipympl==0.5.8
xlrd==1.2.0

あわせて、Dockerfileとdocker-compose.ymlをやりやすい形に書き換えた。 ディレクトリ構成は以下のようにしている。

.
├── .env
├── .env.example
├── .gitignore
├── Dockerfile
├── Makefile
├── README.md
├── docker-compose.yml
├── requirements.txt
└── src
    └── samples
        ├── 01
        │   ├── 1章_分析に向けた準備を行う10本ノック.ipynb
        │   ├── 1章_分析に向けた準備を行う10本ノック_answer.ipynb
        │   ├── m_area.csv
        │   ├── m_store.csv
        │   ├── tbl_order_202004.csv
        │   ├── tbl_order_202005.csv
        │   └── tbl_order_202006.csv
        ...
# Makefile
.PHONY: build-image run build-image:
        bash -c 'docker-compose build --build-arg UID="`id -u`" --build-arg GID="`id -g`"'
run:
        docker-compose up -d
# Dockerfile
FROM ubuntu:22.04

RUN apt-get update && apt-get install -y \
    python3 \
    python3-pip \
    curl \
    git \
  && rm -rf /var/lib/apt/lists/*

ARG USERNAME=app
ARG GROUPNAME=app
ARG UID=1000
ARG GID=1000

RUN groupadd -g $GID $GROUPNAME && \
  useradd -m -s /bin/bash -u $UID -g $GID $USERNAME

USER $USERNAME
WORKDIR /home/$USERNAME/

ENV PATH $PATH:/home/$USERNAME/.local/bin

COPY ./requirements.txt /home/$USERNAME/requirements.txt
RUN pip3 install -r /home/$USERNAME/requirements.txt

ENV PYTHONIOENCODING utf-8
ENV LANG C.UTF-8
ENV LC_ALL C.UTF-8
# docker-compose.yml
# docker-compose.yml
version: '3.5'

services:
    jupyter_notebook:
        build:
            context: .
            args:
              - UID:1000
              - GID:1000
              - USERNAME:app
              - GROUPNAME:app
            dockerfile: ./Dockerfile
        volumes:
            - ./src:/home/app/src
        ports:
            - "8888:8888"
        environment:
            TZ: "Asia/Tokyo"
        networks:
            - default
        command: jupyter notebook --ip=0.0.0.0 --port=8888 --allow-root --no-browser --NotebookApp.notebook_dir='/home/app/src' --NotebookApp.token=''

本文はまだ最初の方しか試せていないが、読みやすいし、Jupyter Notebook上で試せるのでテンポよく進んでいい感じ。