ソニックPowerBI不要、Python数十行で実現
「PowerBIは高い」「Tableauは難しい」「上司に響くダッシュボードを作りたい」
そんな悩みを解決するのが、Pythonのライブラリ「streamlit(ストリームリット)」です。
この記事では、streamlitを使った経営ダッシュボードの作り方を、コピペで使えるコード付きで完全解説します。Hello Worldから始めて、フィルター付きインタラクティブダッシュボードまで、業務でそのまま使えるテクニックを網羅しました。
読み終わる頃には、Pythonコード数十行で動く本格ダッシュボードを作れるようになります。
第1章|なぜstreamlitなのか
「Pythonコードがそのままダッシュボードになる」革命
streamlitは、Python界隈で最も注目されているダッシュボード作成ライブラリです。最大の特徴は「Pythonコードを書くだけで、Webブラウザで動くダッシュボードが作れる」こと。
HTMLもCSSもJavaScriptも不要。Pythonさえ書ければ、誰でも本格的なダッシュボードを作れます。
3つの大きな特徴
- 超シンプル:Pythonコード数十行でダッシュボードが動く
- 超高速:データ処理(pandas)と表示が一気通貫
- 超無料:完全オープンソース、商用利用も自由
こんな業務シーンで活躍する
- 売上データを毎日確認するダッシュボード
- 在庫管理・KPI監視ダッシュボード
- マーケティング指標の可視化
- 人事データ・勤怠データの集計表示
- 経営層へのリアルタイムレポート
私自身、データサイエンス業務でレポート納品にPowerPointやPDFを使っていました。しかし、streamlitを使い始めてから「動的に操作できるダッシュボード」の威力を実感しています。
第2章|PowerBI / Tableauとの比較
ダッシュボード作成といえばPowerBIやTableauが定番です。streamlitはどう違うのか、整理しましょう。
3ツールの徹底比較
| 観点 | PowerBI | Tableau | streamlit |
|---|---|---|---|
| 料金 | 有料(月10ドル〜) | 有料(月70ドル〜) | 完全無料 |
| 学習難易度 | 中 | 中〜高 | 低(Python知識のみ) |
| カスタマイズ性 | 中 | 高 | 超高(コード制御) |
| Excel連携 | ◎ | ◯ | ◯(pandas経由) |
| AI/機械学習連携 | △ | △ | ◎(Pythonエコシステム) |
| 社内導入のしやすさ | ライセンス必要 | ライセンス必要 | 制約なし |
streamlitを選ぶべき5つの理由
- 無料で始められる(ライセンス費用ゼロ)
- Python知識があれば誰でも書ける
- AI・機械学習との連携が圧倒的に強い
- コードで制御できるため、細かいカスタマイズが可能
- 社内導入で稟議が必要ない
※すでにPowerBIを使っている方は、無理に切り替える必要はありません。streamlitは「補完的な選択肢」として活用できます。
第3章|環境準備(uv環境前提)
この記事は、uv環境でPythonを使う前提で進めます。まだuvをインストールしていない方は、以下の記事を先にご覧ください。


必要なライブラリの追加
プロジェクトフォルダで、以下のコマンドを実行します。
uv add streamlit pandas plotly- streamlit:ダッシュボードを作るメインライブラリ
- pandas:データ処理(既におなじみ)
- plotly:インタラクティブなグラフ作成
第4章|最初のダッシュボード|Hello World
まずは「Hello, Streamlit!」と表示する、最小のダッシュボードから作ります。
最初のコード
VS Codeで「app.py」というファイルを作成し、以下のコードを書きます。
import streamlit as st
st.title("Hello, Streamlit!")
st.write("これが最初のダッシュボードです")実行する
ターミナルで以下のコマンドを実行します。
uv run streamlit run app.pyブラウザが自動で開き、http://localhost:8501 にダッシュボードが表示されます。


ポイント解説
- st.title():大きな見出しを表示
- st.write():テキストやデータを表示する万能関数
- コードを保存すると、ブラウザが自動で更新される
わずか3行で、Webブラウザで動くダッシュボードが完成です。
第5章|データを表示する
ダッシュボードの基本は「データを見せる」こと。pandas DataFrameをそのまま表示する方法を学びます。
売上データを表示する
import streamlit as st
import pandas as pd
# サンプルデータ
df = pd.DataFrame({
"商品名": ["商品A", "商品B", "商品C"],
"売上": [150000, 80000, 220000],
"利益率": [0.25, 0.18, 0.35]
})
st.title("売上ダッシュボード")
st.subheader("商品別売上")
st.dataframe(df)st.dataframe()でDataFrameを表として表示できます。並び替えや列のサイズ変更もインタラクティブに動きます。
KPIメトリクスを大きく表示
数値を大きく目立たせたい場合は、st.metric()を使います
import streamlit as st
st.title("月次KPIダッシュボード")
# 3カラムレイアウト
col1, col2, col3 = st.columns(3)
with col1:st.metric("月間売上", "¥1,234,567", "+12.5%")
with col2:st.metric("業務時間削減", "32.5時間", "-20.5%")
with col3:st.metric("達成率", "79%", "+5%")数値・前月比・差分が大きく表示され、上司に響くダッシュボードになります。
第6章|グラフを追加する
数字の羅列より、グラフの方が直感的に伝わります。streamlitは複数のグラフライブラリと連携できますが、ここではplotly(プロットリー)を使います。
棒グラフを作る
import streamlit as st
import pandas as pd
import plotly.express as px
df = pd.DataFrame({
"月": ["1月", "2月", "3月", "4月", "5月"],
"売上": [120, 150, 180, 165, 200]
})
st.title("月別売上推移")
# 棒グラフを作成
fig = px.bar(df, x="月", y="売上", title="売上の推移")
st.plotly_chart(fig)マウスホバーで詳細表示、画像保存機能もデフォルトで備わっています。
折れ線グラフ・円グラフ
# 折れ線グラフ
fig_line = px.line(df, x="月", y="売上", title="売上推移")
st.plotly_chart(fig_line)
# 円グラフ
fig_pie = px.pie(df, names="月", values="売上", title="月別売上の構成")
st.plotly_chart(fig_pie)複数のグラフを横に並べる
import streamlit as st
import plotly.express as px
import pandas as pd
df = pd.DataFrame({
"月": ["1月", "2月", "3月"],
"売上": [120, 150, 180]
})
st.title("ダッシュボード")
col1, col2 = st.columns(2)
with col1:
fig1 = px.bar(df, x="月", y="売上")
st.plotly_chart(fig1)
with col2:
fig2 = px.line(df, x="月", y="売上")
st.plotly_chart(fig2)

第7章|インタラクティブ機能|フィルター・スライダー
streamlitの真骨頂は、ユーザーが操作できる「インタラクティブ機能」です。フィルターやスライダーで動的にデータを切り替えられます。
フィルター(セレクトボックス)
import streamlit as st
import pandas as pd
import plotly.express as px
df = pd.DataFrame({"店舗": ["東京", "大阪", "東京", "大阪"], "月": ["1月", "1月", "2月", "2月"], "売上": [120, 90, 150, 110]})
st.title("店舗別売上ダッシュボード")
# 店舗を選ぶセレクトボックス
selected_store = st.selectbox("店舗を選択", df["店舗"].unique())
# 選ばれた店舗のデータでフィルター
filtered_df = df[df["店舗"] == selected_store]
fig = px.bar(filtered_df, x="月", y="売上", title=f"{selected_store}店の売上")
st.plotly_chart(fig)セレクトボックスで店舗を選ぶと、グラフがリアルタイムで切り替わります。
複数選択(マルチセレクト)
# 複数の店舗を選べる
selected_stores = st.multiselect("店舗を選択(複数可)", df["店舗"].unique(), default=df["店舗"].unique())
filtered_df = df[df["店舗"].isin(selected_stores)]スライダー(数値範囲)
# 売上範囲を選ぶスライダー
min_sales, max_sales = st.slider("売上範囲", min_value=0, max_value=300, value=(50, 200))
filtered_df = df[(df["売上"] >= min_sales) & (df["売上"] <= max_sales)]日付範囲指定
import streamlit as st
from datetime import date
start_date = st.date_input("開始日", date(2026, 1, 1))
end_date = st.date_input("終了日", date(2026, 12, 31))
# 日付範囲でフィルター
filtered_df = df[(df["日付"] >= start_date) & (df["日付"] <= end_date)]第8章|デザインを整える
ダッシュボードは「見せ方」が重要。少しの工夫で、プロが作ったような印象になります。
サイドバーにフィルターを配置
メイン画面をすっきりさせるため、フィルターはサイドバーに集めるのが定番です。
import streamlit as st
import pandas as pd
# サイドバーに配置
with st.sidebar:
st.header("フィルター")
store = st.selectbox("店舗", ["東京", "大阪", "名古屋"])
period = st.radio("期間", ["月別", "週別", "日別"])
# メイン画面
st.title(f"{store}店 {period}ダッシュボード")
st.write("選択された条件でデータを表示します")タブで画面を切り替える
import streamlit as st
tab1, tab2, tab3 = st.tabs(["売上", "在庫", "顧客"])
with tab1:
st.header("売上ダッシュボード")
st.write("売上データを表示")
with tab2:
st.header("在庫ダッシュボード")
st.write("在庫データを表示")
with tab3:
st.header("顧客ダッシュボード")
st.write("顧客データを表示")カラーテーマの設定
プロジェクトフォルダに「.streamlit」フォルダを作り、その中に「config.toml」を作成します。
[theme]
primaryColor = "#0066ff"
backgroundColor = "#ffffff"
secondaryBackgroundColor = "#f5f9ff"
textColor = "#0a1628"
font = "sans serif"マイペースブログのカラーテーマ(青系)を、ダッシュボードにもそのまま使えます。
第9章|公開・共有する方法
作ったダッシュボードを、他の人にも見てもらえるように公開する方法を紹介します。
方法1:Streamlit Community Cloud(最も簡単・無料)
- GitHubにコードをアップロード
- share.streamlit.io にアクセス
- リポジトリを連携してデプロイ
- URLを共有するだけで誰でも見られる
無料プランでも、3つまでのアプリを公開できます。個人ブログでの紹介や社内共有に最適です。
方法2:社内サーバーで公開
会社のセキュリティ要件で外部公開できない場合は、社内サーバーで動かします。
uv run streamlit run app.py --server.address 0.0.0.0 --server.port 8501社内ネットワークから http://[サーバーIP]:8501 でアクセスできるようになります。
方法3:その他のクラウドサービス
- Heroku(有料・本格運用向け)
- AWS / GCP / Azure(規模が大きい場合)
- Render(無料枠あり)
最初はStreamlit Community Cloudで十分です。
第10章|まとめ&次のステップ
この記事のまとめ
- streamlitはPythonコードだけでダッシュボードが作れる革命的ツール
- PowerBIやTableauと違い、完全無料・カスタマイズ自由
- st.metric / st.dataframe / plotlyグラフでKPI表示の基本完成
- セレクトボックス・スライダー等でインタラクティブ機能を追加
- Streamlit Community Cloudで無料公開可能
実務で作れるダッシュボード例
当ブログでは、すでにPythonで作ったダッシュボードを公開しています。streamlitの応用例として参考になります。
次に読むべき記事
- 【完全ガイド】非エンジニアのためのPython業務自動化
- 【完全版】uv入門|Pythonの新標準・最速の環境管理ツール
- 【コピペで使える】pandasで売上データを自動集計する完全マニュアル
- plotlyで作るインタラクティブグラフ完全ガイド(公開予定)
- streamlit応用|複数ページ構成のダッシュボード作成(公開予定)
FAQ
さあ、ダッシュボードを作ろう
streamlitは「Pythonでダッシュボードを作る」ことを民主化したライブラリです。プログラミング経験が浅くても、業務でそのまま使えるダッシュボードが数十行のコードで作れます。
「数字を見せる」から「数字を物語る」へ――その第一歩を、streamlitで踏み出してみませんか。
最新の解説記事は、新着記事から順次公開しています。X(旧Twitter)でも更新情報を発信していますので、ぜひフォローしてください。
この記事を書いた人
ソニック|バックオフィス7年目の業務効率化ブロガー。学校事務職員時代のExcel業務から、現在のデータサイエンス業務まで、リアルな実体験をもとにしたノウハウを発信中。


コメント