こんにちは、JS2IIUです。
Jupyter Notebookは、データ分析の定番ツールとして広く使われています。Pythonとpandas、NumPyを使えば、手軽にデータの前処理や可視化が可能です。しかし――あなたが一度は感じたことがあるかもしれません。
「分析結果を他の人に見せたいけど、Notebookのままではちょっと不便……」
まさにこの課題を解決してくれるのが Streamlit です。
Streamlitを使えば、Jupyterで書いた分析コードをほぼそのまま、インタラクティブなWebダッシュボードとして公開できます。しかもHTMLやJavaScriptの知識は不要です。
本記事では、Jupyterの分析コードをStreamlitアプリに変換し、さらにHerokuやGCPを使ってWeb上にデプロイするまでの流れを丁寧に解説します。今回もよろしくお願いします。
Jupyter Notebookでの分析プロセスを振り返る
まずは、典型的なNotebook分析の流れを確認しておきましょう。
ここでは、仮の売上データ(CSV)を例に使います。
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を簡単に作成できます。
インストール
pip install streamlit pandas matplotlibインストール後、以下のコマンドでアプリを起動できます。
streamlit run app.py基本構成
Streamlitアプリは、次のように非常にシンプルな構造で動きます。
import streamlit as st
st.title("Hello Streamlit!")
st.write("Streamlitアプリの基本構造です。")これを実行するだけで、ブラウザ上に美しいUIが表示されます。
実装例:Jupyter分析をStreamlitダッシュボードに変換
ここでは、先ほどの売上データ分析をStreamlitでダッシュボード化してみましょう。
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でのデプロイ(最も簡単な方法)
- Heroku CLIのインストール
brew install heroku
heroku login- 必要ファイルの準備
app.py
requirements.txt
ProcfileProcfile の中身は次のように書きます:
web: streamlit run app.py --server.port=$PORT- デプロイ
git init
git add .
git commit -m "first commit"
heroku create
git push heroku masterStreamlit Cloudでのデプロイ(最も簡単で推奨)
- 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アクセスを許可する必要があります。
- Streamlit Cloud上でアプリを作成
- https://streamlit.io/cloud にログイン(GitHub認証)
- 「New app」→ 対象のリポジトリとブランチを選択 →
Main fileにapp.pyを指定 → 「Deploy」
- 必要なファイルと設定
app.py(Streamlitアプリ本体)requirements.txt(依存パッケージ。例:streamlit,pandas,matplotlib)- (任意)
.streamlit/config.toml(テーマやセッション設定など) - 環境変数・シークレットは Streamlit Cloud の「Settings」→「Secrets」から追加し、アプリ内では
st.secretsで参照します。
- 自動デプロイと運用
- GitHub に push すると自動的に再デプロイされます(CI/CDのような運用が簡単にできます)。
- プライベートリポジトリの場合は、Streamlit Cloud に対してリポジトリへのアクセス権を付与してください。
- 注意点
Procfileや--server.portの指定は不要です。Streamlit Cloud がホスティングとポート管理を行います。- 大きなデータファイルはリポジトリに含めず、クラウドストレージや外部URLから読み込むようにしてください。
- ローカルで
streamlit run app.pyにより動作確認を行ってからデプロイするとトラブルが減ります。
requirements.txtに必要ライブラリを記載して GitHub に push → Streamlit Cloud で「New app」を実行するだけで、数クリックで公開できます。
Dockerでのデプロイ(GCP Cloud Run向け)
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への一歩です。
参考
- Streamlit ドキュメント — Streamlit の基本と API リファレンス
- Streamlit Community Cloud (Share) — GitHub 連携でアプリを公開する公式ホスティング
- Streamlit: Secrets 管理 — 環境変数やシークレットの管理方法
- GitHub Docs — Create a repository — リポジトリ作成と push の公式ガイド
- Heroku Dev Center — Heroku によるデプロイ手順(Python アプリ向け)
- Google Cloud Run ドキュメント — Cloud Run でのコンテナデプロイ方法
- Docker Docs — Get started — Docker イメージ作成と運用の基本
- pandas ドキュメント — データ操作と型変換のリファレンス
- matplotlib ドキュメント — グラフ描画のリファレンス
最後まで読んでいただきありがとうございました。


コメント