【Streamlit】JupyterからStreamlitへの移行方法

Jupyter to Streamlit Streamlit
この記事は約13分で読めます。

こんにちは、JS2IIUです。
Jupyter Notebookは、データ分析の定番ツールとして広く使われています。Pythonとpandas、NumPyを使えば、手軽にデータの前処理や可視化が可能です。しかし――あなたが一度は感じたことがあるかもしれません。

「分析結果を他の人に見せたいけど、Notebookのままではちょっと不便……」

まさにこの課題を解決してくれるのが Streamlit です。
Streamlitを使えば、Jupyterで書いた分析コードをほぼそのまま、インタラクティブなWebダッシュボードとして公開できます。しかもHTMLやJavaScriptの知識は不要です。

本記事では、Jupyterの分析コードをStreamlitアプリに変換し、さらにHerokuやGCPを使ってWeb上にデプロイするまでの流れを丁寧に解説します。今回もよろしくお願いします。

Jupyter Notebookでの分析プロセスを振り返る

まずは、典型的なNotebook分析の流れを確認しておきましょう。
ここでは、仮の売上データ(CSV)を例に使います。

Python
import pandas as pd
import matplotlib.pyplot as plt

# CSVデータを読み込み
df = pd.read_csv("sales_data.csv")

# 日付をDatetime型に変換
df['date'] = pd.to_datetime(df['date'])

# 日別売上を集計
daily_sales = df.groupby('date')['amount'].sum()

# 可視化
plt.figure(figsize=(8,4))
plt.plot(daily_sales.index, daily_sales.values, marker='o')
plt.title("Daily Sales")
plt.xlabel("Date")
plt.ylabel("Sales Amount")
plt.show()

このコードはシンプルですが、「他のユーザーが自分で日付範囲を選べたら便利」など、インタラクティブ性を求めるとNotebookでは限界があります。
次に、これをStreamlitに変換していきましょう。

StreamlitでインタラクティブなUIを作る

Streamlitとは?

Streamlitは、Pythonコードを数行書くだけでWebアプリ化できるフレームワークです。
データ分析結果を可視化したり、ユーザーが操作できるUIを簡単に作成できます。

インストール

Bash
pip install streamlit pandas matplotlib

インストール後、以下のコマンドでアプリを起動できます。

Bash
streamlit run app.py

基本構成

Streamlitアプリは、次のように非常にシンプルな構造で動きます。

Python
import streamlit as st

st.title("Hello Streamlit!")
st.write("Streamlitアプリの基本構造です。")

これを実行するだけで、ブラウザ上に美しいUIが表示されます。

実装例:Jupyter分析をStreamlitダッシュボードに変換

ここでは、先ほどの売上データ分析をStreamlitでダッシュボード化してみましょう。

Python
import streamlit as st
import pandas as pd
import matplotlib.pyplot as plt

# タイトル
st.title("売上データ分析ダッシュボード")

# ファイルアップロード
uploaded_file = st.file_uploader("CSVファイルをアップロードしてください", type=["csv"])

if uploaded_file:
    df = pd.read_csv(uploaded_file)
    df['date'] = pd.to_datetime(df['date'])

    # 日付範囲スライダー
    min_date = df['date'].min()
    max_date = df['date'].max()
    start_date, end_date = st.slider("日付範囲を選択", min_date, max_date, (min_date, max_date))

    # 選択範囲でフィルタリング
    filtered_df = df[(df['date'] >= start_date) & (df['date'] <= end_date)]

    # 集計
    daily_sales = filtered_df.groupby('date')['amount'].sum()

    # グラフ描画
    fig, ax = plt.subplots(figsize=(8,4))
    ax.plot(daily_sales.index, daily_sales.values, marker='o')
    ax.set_title("Daily Sales")
    ax.set_xlabel("Date")
    ax.set_ylabel("Sales Amount")
    st.pyplot(fig)

    # 集計結果の表示
    st.dataframe(filtered_df)
else:
    st.info("まずCSVファイルをアップロードしてください。")

このアプリでは、

  • CSVファイルをアップロード
  • 日付範囲をスライダーで指定
  • グラフとデータテーブルを自動更新

といった流れがすべてWebブラウザ上で完結します。
これが「JupyterからStreamlitへの進化」です。

アプリをデプロイする(Heroku / GCP / Docker)

Herokuでのデプロイ(最も簡単な方法)

  1. Heroku CLIのインストール
Bash
   brew install heroku
   heroku login
  1. 必要ファイルの準備
Plaintext
   app.py
   requirements.txt
   Procfile

Procfile の中身は次のように書きます:

Plaintext
   web: streamlit run app.py --server.port=$PORT
  1. デプロイ
Bash
   git init
   git add .
   git commit -m "first commit"
   heroku create
   git push heroku master

Streamlit Cloudでのデプロイ(最も簡単で推奨)

  1. GitHubにコードをpush# まだリポジトリがない場合 git init git add . git commit -m "Deploy to Streamlit Cloud" git branch -M main git remote add origin git@github.com:<ユーザー>/<リポジトリ>.git git push -u origin main
    • プライベートリポジトリでも可ですが、初回はStreamlit CloudにGitHubアクセスを許可する必要があります。
  2. Streamlit Cloud上でアプリを作成
    • https://streamlit.io/cloud にログイン(GitHub認証)
    • 「New app」→ 対象のリポジトリとブランチを選択 → Main fileapp.py を指定 → 「Deploy」
  3. 必要なファイルと設定
    • app.py(Streamlitアプリ本体)
    • requirements.txt(依存パッケージ。例:streamlit, pandas, matplotlib
    • (任意).streamlit/config.toml(テーマやセッション設定など)
    • 環境変数・シークレットは Streamlit Cloud の「Settings」→「Secrets」から追加し、アプリ内では st.secrets で参照します。
  4. 自動デプロイと運用
    • GitHub に push すると自動的に再デプロイされます(CI/CDのような運用が簡単にできます)。
    • プライベートリポジトリの場合は、Streamlit Cloud に対してリポジトリへのアクセス権を付与してください。
  5. 注意点
    • Procfile--server.port の指定は不要です。Streamlit Cloud がホスティングとポート管理を行います。
    • 大きなデータファイルはリポジトリに含めず、クラウドストレージや外部URLから読み込むようにしてください。
    • ローカルで streamlit run app.py により動作確認を行ってからデプロイするとトラブルが減ります。
    簡潔に言えば、requirements.txt に必要ライブラリを記載して GitHub に push → Streamlit Cloud で「New app」を実行するだけで、数クリックで公開できます。

Dockerでのデプロイ(GCP Cloud Run向け)

Plaintext
FROM python:3.10
WORKDIR /app
COPY . /app
RUN pip install -r requirements.txt
CMD ["streamlit", "run", "app.py", "--server.port=8080", "--server.address=0.0.0.0"]

Dockerイメージをビルドし、GCP Cloud Runにデプロイすればスケーラブルに公開可能です。

まとめ

Jupyter Notebookでの分析は、個人利用には最適ですが、他者と共有して価値を高めるためにはStreamlitが非常に有効です。
Streamlitを使えば、

  • NotebookのコードをほぼそのままWeb化
  • インタラクティブUIの構築が容易
  • HerokuやGCPでの無料デプロイも可能

と、分析から共有までのプロセスが驚くほどスムーズになります。

データ分析を「見るもの」から「触れるもの」へ変える――
それが、JupyterからStreamlitへの一歩です。

参考

最後まで読んでいただきありがとうございました。

コメント

タイトルとURLをコピーしました