【完全ガイド】streamlitで作る経営ダッシュボード入門

ソニック

PowerBI不要、Python数十行で実現

「PowerBIは高い」「Tableauは難しい」「上司に響くダッシュボードを作りたい」

そんな悩みを解決するのが、Pythonのライブラリ「streamlit(ストリームリット)」です。

この記事では、streamlitを使った経営ダッシュボードの作り方を、コピペで使えるコード付きで完全解説します。Hello Worldから始めて、フィルター付きインタラクティブダッシュボードまで、業務でそのまま使えるテクニックを網羅しました。

読み終わる頃には、Pythonコード数十行で動く本格ダッシュボードを作れるようになります。

第1章|なぜstreamlitなのか

目次

「Pythonコードがそのままダッシュボードになる」革命

streamlitは、Python界隈で最も注目されているダッシュボード作成ライブラリです。最大の特徴は「Pythonコードを書くだけで、Webブラウザで動くダッシュボードが作れる」こと。

HTMLもCSSもJavaScriptも不要。Pythonさえ書ければ、誰でも本格的なダッシュボードを作れます。

3つの大きな特徴

  1. 超シンプル:Pythonコード数十行でダッシュボードが動く
  2. 超高速:データ処理(pandas)と表示が一気通貫
  3. 超無料:完全オープンソース、商用利用も自由

こんな業務シーンで活躍する

  • 売上データを毎日確認するダッシュボード
  • 在庫管理・KPI監視ダッシュボード
  • マーケティング指標の可視化
  • 人事データ・勤怠データの集計表示
  • 経営層へのリアルタイムレポート

私自身、データサイエンス業務でレポート納品にPowerPointやPDFを使っていました。しかし、streamlitを使い始めてから「動的に操作できるダッシュボード」の威力を実感しています。

第2章|PowerBI / Tableauとの比較

ダッシュボード作成といえばPowerBIやTableauが定番です。streamlitはどう違うのか、整理しましょう。

3ツールの徹底比較

観点PowerBITableaustreamlit
料金有料(月10ドル〜)有料(月70ドル〜)完全無料
学習難易度中〜高低(Python知識のみ)
カスタマイズ性超高(コード制御)
Excel連携◯(pandas経由)
AI/機械学習連携◎(Pythonエコシステム)
社内導入のしやすさライセンス必要ライセンス必要制約なし

streamlitを選ぶべき5つの理由

  1. 無料で始められる(ライセンス費用ゼロ)
  2. Python知識があれば誰でも書ける
  3. AI・機械学習との連携が圧倒的に強い
  4. コードで制御できるため、細かいカスタマイズが可能
  5. 社内導入で稟議が必要ない

すでに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 にダッシュボードが表示されます。

ポイント解説

  1. st.title():大きな見出しを表示
  2. st.write():テキストやデータを表示する万能関数
  3. コードを保存すると、ブラウザが自動で更新される

わずか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

Q1. Pythonの知識はどれくらい必要ですか?

pandasの基本(DataFrame、groupby)を理解していれば十分です。「pandasで売上集計」記事の内容が分かるレベルなら問題ありません。

Q2. 業務データを使っても安全ですか?

ローカル環境(自分のPC)で動かす分には完全に安全です。クラウド公開する場合は、機密データを含めないよう注意が必要です。社内データの可視化は社内サーバーで運用するのが安全です。

Q3. PowerBIから乗り換えるべきですか?

無理に乗り換える必要はありません。「コードで制御したい」「AI連携したい」「無料で社内展開したい」場合はstreamlitが有利。「Excel連携が複雑」「営業向けにシンプルな操作で」という場合はPowerBIが有利です。

Q4. デザインがイマイチで上司に響きません

テーマカラーの設定(第8章)、適切な余白とタイトルの工夫、KPIメトリクスを大きく表示することで、見栄えが大きく改善します。最初は完璧を目指さず、徐々にブラッシュアップしましょう。

Q5. データ量が多くなるとどうなりますか?

streamlitの@st.cache_dataデコレーターを使えば、データ読み込みをキャッシュして高速化できます。数十万行のデータでも問題なく動きます。

さあ、ダッシュボードを作ろう

streamlitは「Pythonでダッシュボードを作る」ことを民主化したライブラリです。プログラミング経験が浅くても、業務でそのまま使えるダッシュボードが数十行のコードで作れます。

「数字を見せる」から「数字を物語る」へ――その第一歩を、streamlitで踏み出してみませんか。

最新の解説記事は、新着記事から順次公開しています。X(旧Twitter)でも更新情報を発信していますので、ぜひフォローしてください。

この記事を書いた人

ソニック|バックオフィス7年目の業務効率化ブロガー。学校事務職員時代のExcel業務から、現在のデータサイエンス業務まで、リアルな実体験をもとにしたノウハウを発信中。

→ 詳しいプロフィールはこちら→ はじめての方へ

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

CAPTCHA


目次