JupyterLab(#データ分析用#)

<タイトル> JupyterLab(#データ分析用#)

2025年06月09日 2025年06月23日 カテゴリ: 環境構築

JupyterLabをDockerコンテナで立ち上げる(#データ解析用)

データ分析用のみならず、データ取得のスクレイピングコードの作成と実行まで、JupyterLab内で完結できるように作成している。「Python」、「Base R」、「Julia」と基本的なデータ分析用のプログラミング言語にも対応している。ただし、これらのコードをそのまま立ち上げるとコンテナイメージが約22GBとサイズが大きいため、全体の立ち上げに1時間30分程度かかる。そのため、適時修正してから実行すること。これらのファイルを作成し、同じディレクトリ内に置いてから立ち上げること。

※コードの保守性を高めるために、各プログラミング言語に対応するライブラリの管理を分割し、別途ファイルを作成してから Dockerfile に読み込ませている。

docker-compose.yml

services:
  datasciense:
    container_name: mylab
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - "8888:8888"
    volumes:
      - ./Mount_Directory:/Mount_Directory # 任意のディレクトリを作成する
    environment:
      - LANG=ja_JP.UTF-8
      - TZ=Asia/Tokyo
    command: jupyter lab --ip=0.0.0.0 --allow-root --NotebookApp.token='' 

Dockerfile

## ☆"Anaconda"を使用しない"DS"環境構築☆
FROM ubuntu:22.04

## ロケールとタイムゾーンの環境変数を設定 
ENV LANG ja_JP.UTF-8
ENV TZ=Asia/Tokyo
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

## 必要なパッケージ(apt-get) ##
RUN apt-get update && apt-get install -yq --no-install-recommends \
  # 共通部分
  python3-pip \
  python3-dev \
  sudo \
  vim \
  curl \
  wget \
  unzip \
  tzdata \
  git \
  # JupyterNotebook:「Save and Export Notebook AS」機能を実装する※日本語の文字化け対策
  pandoc \
  texlive-xetex \
  texlive-fonts-recommended \
  texlive-plain-generic \
  texlive-lang-japanese \
  texlive-lang-chinese \
  # R
  r-base \
  r-base-dev \
  libcurl4-openssl-dev \
  # OpenCV
  libsm6 \
  libxext6 \
  libxrender-dev \
  libglib2.0-0 \
  libgl1 \
  # C/C++コンパイラ(Pystan)
  build-essential \
  gcc \
  g++ \
  # "Chrome Driver"
  gnupg \
  jq \
  # 画像*動画編集
  imagemagick \
  ffmpeg \
  poppler-utils \
  locales && \
  locale-gen ja_JP.UTF-8 && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*

## 必要なパッケージ(pip) 
COPY requirements.txt .
RUN pip install --upgrade pip && \
    pip install --break-system-packages -r requirements.txt
    
## スクレイピング 環境構築
# (01) Google Chrome # google-chrome-stable --version {Google Chrome 132.0.6834.159 #2025-01-31}
RUN wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add && \
    echo 'deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main' | tee /etc/apt/sources.list.d/google-chrome.list && \
    apt-get update && \
    apt-get install -y google-chrome-stable
# (02) ChromeDriver # chromedriver --version {https://googlechromelabs.github.io/chrome-for-testing/#stable}
RUN mkdir -p /opt/chrome && \
    CHROME_VERSION=$(google-chrome-stable --version | awk '{print $3}' | awk -F'.' '{print $1"."$2"."$3}')".0" && \
    DRIVER_VERSION=$(curl -s "https://googlechromelabs.github.io/chrome-for-testing/known-good-versions-with-downloads.json" | \
                     jq -r --arg CHROME_VERSION "$CHROME_VERSION" '.versions[] | select(.version==$CHROME_VERSION) | .downloads.chromedriver[] | select(.platform=="linux64") | .url') && \
    wget -q -O /opt/chrome/chromedriver-linux64.zip "$DRIVER_VERSION" && \
    unzip /opt/chrome/chromedriver-linux64.zip -d /opt/chrome && \
    rm /opt/chrome/chromedriver-linux64.zip && \
    mv /opt/chrome/chromedriver-linux64/chromedriver /opt/chrome/chromedriver
# ChromeDriver をパスに追加
ENV PATH="/opt/chrome:$PATH"

## 環境構築(R)
COPY install-r-packages.R /usr/local/bin/install-r-packages.R
RUN Rscript /usr/local/bin/install-r-packages.R

## 環境構築(Julia)
RUN wget https://julialang-s3.julialang.org/bin/linux/x64/1.7/julia-1.7.1-linux-x86_64.tar.gz \
  && tar -zxvf julia-1.7.1-linux-x86_64.tar.gz \
  && rm julia-1.7.1-linux-x86_64.tar.gz \
  && mv julia-1.7.1 julia
ENV PATH=/julia/bin:$PATH
COPY install-julia-packages.jl /usr/local/bin/install-julia-packages.jl
RUN julia /usr/local/bin/install-julia-packages.jl

## 作業ディレクトリの作成 # WORKDIR はディレクトリが存在しなくても自動で作成される
WORKDIR /Mount_Directory
## Jupyter NotebookのPDF出力を日本語に対応する|https://zenn.dev/compass/articles/0c1574d9cd155e
RUN sed -i 's/\\documentclass\[11pt\]{article}/\\documentclass\[xelatex,ja=standard\]{bxjsarticle}/' \
   /usr/local/share/jupyter/nbconvert/templates/latex/index.tex.j2
## JupyterLab の起動
CMD ["jupyter", "lab", "--ip=0.0.0.0", "--allow-root", "--LabApp.token=''"]

requirements.txt

#=======================
# 2025-02-05:作成日    
#=======================
# 共通 (JupyterLab)
jupyterlab==4.2.5
jupyterlab-language-pack-ja-JP
# ==============================================================
# JupyterNotebook:「Save and Export Notebook AS」機能を実装する
# ==============================================================
nbconvert==7.16.4
mistune==3.0.2 # HTML
ipywidgets==8.1.5
anywidget==0.9.13 
# =============== #
# データサイエンス
# =============== #
numpy==2.1.1
pandas==2.2.2
matplotlib==3.9.2
japanize-matplotlib==1.1.3
seaborn==0.13.2
plotly==6.0.0
plotly-geo==1.0.0
scipy==1.14.1
scikit-learn==1.5.1
scikit-image==0.24.0
pystan==3.7.0
# Pytorch (https://pytorch.org/get-started/locally/)
torch==2.4.1
torchvision==0.19.1
torchaudio==2.4.1
# =========================== #
# スクレイピング & 地理空間情報
# =========================== #
psycopg2==2.9.10
pymongo==4.11
Pillow==10.4.0
beautifulsoup4==4.12.3
requests==2.32.3
Scrapy==2.11.2
scrapy-splash==0.9.0
geopandas==1.0.1
geopy==2.4.1
folium==0.17.0
# ========== #
# 事務作業用
# ========== #
openpyxl==3.1.5
PyPDF2==2.0.0
pyautogui==0.9.54
moviepy==1.0.3
pandocfilters==1.5.1

install-r-packages.R

install.packages('IRkernel')
IRkernel::installspec()
install.packages('tidyverse')
install.packages('caret')
install.packages('lme4')
install.packages('survival')
install.packages('rstan')
install.packages('imager')
install.packages('moments')
install.packages('forecast')
install.packages('lubridate')
install.packages('ggrepel')
install.packages('RColorBrewer')
install.packages('ggthemes')
install.packages('gridExtra')
install.packages('maps')
install.packages('shiny')
install.packages('flexdashboard')

install-julia-packages.jl

using Pkg

Pkg.add(["IJulia",
         "CSV", "StatsModels", "Optim", "StatsPlots", "ScikitLearn", "DataFramesMeta",
         "JSON", "Plots", "PyPlot", "XLSX", "SpecialFunctions", "DataFrames", "GLM",
         "ProgressBars", "PDMats", "LinearAlgebra", "Distributions", "UnicodePlots", "PackageCompiler"])

これらのコードを分割して、別途記事でメモする(例:スクレイピング用コード)



コメント(一覧)

コメント(入力画面)

空港MAP(#WIKI)
※現在の時刻 週間天気予報 (東京)
バックナンバー(年別)