STEP 31:KPIカードの効果的なデザイン

📊 STEP 31: KPIカードの効果的なデザイン

重要な数値を一目で理解できるKPIカードの作り方をマスターしよう!

📋 このステップで学ぶこと

  • KPIカードとは何か、なぜ重要なのか
  • 効果的なKPIカードの4つの要素
  • 数値を大きく表示する方法と視覚的階層
  • 前期比の矢印表示(▲▼)の実装
  • 信号機カラー(赤・黄・緑)での状態表現
  • スパークライン(小さなグラフ)の追加
  • 実務で使える営業・ECダッシュボードの作成

📊 1. KPIカードとは

KPIカードの定義と役割

KPIカード(KPI Card)とは、重要業績評価指標(KPI: Key Performance Indicator)を1枚のカードにまとめて表示したUIコンポーネントです。

ダッシュボードの上部に並べて配置されることが多く、ビジネスの状況を5秒で把握できるように設計されています。

💡 身近な例で考えてみよう

KPIカードは、車のダッシュボードに似ています:

スピードメーター:現在の速度を大きく表示(=メイン数値)
燃料計:残量を色で表示(緑=十分、赤=要給油)
警告ランプ:問題があれば点灯(=ステータス表示)

運転中に「今何km?」と聞かれたら、一目でメーターを見て答えられる。KPIカードも同じように、ビジネスの状況を一瞬で把握できるように設計します。

KPIカードの構成要素

効果的なKPIカードは、以下の要素で構成されています。それぞれが「何を伝えるか」という役割を持っています。

【KPIカードの構成要素】 ┌────────────────────────┐ │ 月間売上 │ ← ① タイトル(何のKPIか) │ │ │ 450万円 │ ← ② メイン数値(最も重要、大きく表示) │ │ │ ▲ +12.5% │ ← ③ 変化率(前期比、矢印で方向を表示) │ 前月比 │ │ │ │ ━━━━━━━━━━━━━━━━━━━━ │ │ │ │ 目標: 400万円 ✓達成 │ ← ④ 目標値とステータス │ │ │ ╱╲ ╱╲╱╲╱ │ ← ⑤ スパークライン(トレンド) │ ╱ ╲╱ ╲ │ └────────────────────────┘ 【各要素の役割】 ① タイトル: 「何のKPIか」を明示 ② メイン数値: 「今どれくらいか」を大きく表示 ③ 変化率: 「良くなったか悪くなったか」を矢印で表示 ④ 目標・状態: 「目標に達したか」を色やアイコンで表示 ⑤ スパークライン: 「過去の推移」を小さなグラフで表示
📊 KPIカードが使われる場面
用途 具体例 特徴
ダッシュボード 売上、顧客数、CVRなどを横に並べて表示 複数のKPIを一覧で比較できる
レポート 月次レポートのサマリーセクション 重要指標だけを抜粋して表示
モニタリング サーバー稼働率、エラー率のリアルタイム監視 異常を即座に検知できる
モバイルアプリ 営業アプリの今日の売上表示 小さな画面でもコンパクトに表示
💡 良いKPIカードの4つの特徴
特徴 実現方法 悪い例
一目で理解 数値を48-72ptで大きく表示 数値が小さくて読めない
状況が分かる 良い=緑、悪い=赤で色分け 全部同じ色で区別がつかない
トレンドが見える 上昇=▲、下降=▼の矢印 変化の方向が分からない
文脈がある 目標値や前期比を併記 数値だけで良し悪しが判断できない

🔢 2. 数値を大きく表示する

視覚的階層の重要性

KPIカードでは、数値が主役です。他の要素(タイトル、ラベル、補足情報)よりも圧倒的に大きく表示することで、見た人が最初に数値に目を向けるように設計します。

これを視覚的階層(Visual Hierarchy)と呼びます。重要な情報ほど大きく、目立つようにデザインします。

【フォントサイズの階層設計】 ┌────────────────────────┐ │ 月間売上 │ ← 14-18pt(タイトル):何のKPIか │ │ │ 450万円 │ ← 48-72pt(メイン数値)★ 最も大きく! │ │ │ +12.5% │ ← 18-24pt(変化率):方向性を示す │ 前月比 │ ← 10-12pt(ラベル):補足説明 └────────────────────────┘ 【ポイント】 ✓ メイン数値は他の要素の3〜5倍のサイズ ✓ 数値だけで意味が伝わるように単位も表示 ✓ 色やウェイト(太さ)でさらに強調 【サイズの目安】 ・タイトル: 14-18pt(通常の太さ) ・メイン数値: 48-72pt(太字)★ ・変化率: 18-24pt(色付き) ・ラベル: 10-12pt(薄いグレー)

基本的なKPIカードの作成

Plotlyのgo.Indicatorを使うと、KPIカードを簡単に作成できます。まずは最もシンプルな形から始めましょう。

# 基本的なKPIカードの作成 import plotly.graph_objects as go # KPIデータ 売上 = 450 # 今月の売上(万円) 前月 = 400 # 前月の売上(万円) # KPIカードを作成 fig = go.Figure(go.Indicator( mode=’number+delta’, # 数値と変化率を表示 value=売上, # メインの数値 delta={ ‘reference’: 前月, # 比較対象(前月) ‘relative’: True, # 変化率を%で表示 ‘valueformat’: ‘.1f’, # 小数点1桁 ‘suffix’: ‘%’ # 単位に%を追加 }, number={ ‘suffix’: ‘万円’, # 単位 ‘font’: { ‘size’: 64, # フォントサイズ(大きく!) ‘weight’: ‘bold’ # 太字 } }, title={ ‘text’: ‘月間売上’, # タイトル ‘font’: {‘size’: 18} } )) # レイアウト設定 fig.update_layout( height=250, paper_bgcolor=’#F8F9FA’ # 薄いグレーの背景 ) fig.show()

コードの解説

📝 go.Indicator() の主要パラメータ
パラメータ 説明 なぜ使うのか
mode 表示モード(’number’, ‘delta’, ‘gauge’の組み合わせ) どの要素を表示するか指定するため
value メインの数値 KPIの現在値を表示するため
delta 変化率の設定 前期比や変化を表示するため
number 数値の表示設定 フォントサイズや単位を設定するため
title タイトルの設定 何のKPIか明示するため
【modeパラメータの組み合わせ】 ‘number’ → 数値のみ表示 ‘number+delta’ → 数値 + 変化率 ‘number+gauge’ → 数値 + ゲージ(メーター) ‘number+delta+gauge’ → 数値 + 変化率 + ゲージ 【deltaパラメータの詳細】 reference: 比較対象の値(前月、目標など) relative: True=変化率(%)、False=差分(絶対値) valueformat: 表示形式(’.1f’=小数点1桁) suffix: 単位(’%’など) increasing: 増加時の色設定 decreasing: 減少時の色設定

複数のKPIカードを並べる

実際のダッシュボードでは、複数のKPIカードを横に並べて表示します。make_subplotsを使って実装します。

# 複数のKPIカードを横に並べる import plotly.graph_objects as go from plotly.subplots import make_subplots # KPIデータ(3つのKPI) kpis = [ {‘名前’: ‘売上’, ‘値’: 450, ‘前期’: 400, ‘単位’: ‘万円’}, {‘名前’: ‘新規顧客’, ‘値’: 38, ‘前期’: 30, ‘単位’: ‘社’}, {‘名前’: ‘満足度’, ‘値’: 4.5, ‘前期’: 4.2, ‘単位’: ‘点’} ] # 3列のサブプロットを作成 fig = make_subplots( rows=1, cols=3, specs=[[{‘type’: ‘indicator’}] * 3], # 3つともIndicator型 subplot_titles=[kpi[‘名前’] for kpi in kpis] ) # 各KPIカードを追加 for i, kpi in enumerate(kpis, start=1): fig.add_trace(go.Indicator( mode=’number+delta’, value=kpi[‘値’], delta={ ‘reference’: kpi[‘前期’], ‘relative’: True, ‘valueformat’: ‘.1f’, ‘suffix’: ‘%’, ‘increasing’: {‘color’: ‘green’}, # 増加=緑 ‘decreasing’: {‘color’: ‘red’} # 減少=赤 }, number={ ‘suffix’: kpi[‘単位’], ‘font’: {‘size’: 48, ‘weight’: ‘bold’} } ), row=1, col=i) # レイアウト設定 fig.update_layout( height=250, showlegend=False, paper_bgcolor=’white’ ) fig.show()
【実行結果】 3つのKPIカードが横に並んで表示されます: 売上: 450万円 ▲+12.5%(緑) 新規顧客: 38社 ▲+26.7%(緑) 満足度: 4.5点 ▲+7.1%(緑)

📈 3. 前期比の矢印表示

矢印で増減を表現する理由

矢印(↑↓ または ▲▼)は、数値の変化を直感的に伝えます。数値を読まなくても、矢印の向きを見るだけで「良くなった」「悪くなった」が分かります。

特に複数のKPIカードを並べたとき、矢印があると一瞬でどのKPIに問題があるかを把握できます。

【矢印の使い方と色の組み合わせ】 ■ 上昇(良い変化) 記号: ↑ または ▲ 色: 緑 (#2ECC71) 例: 売上 450万円 ▲+12.5% ■ 下降(悪い変化) 記号: ↓ または ▼ 色: 赤 (#E74C3C) 例: 顧客満足度 3.8点 ▼-5.0% ■ 横ばい(変化なし) 記号: → または ━ 色: グレー (#7F8C8D) 例: 利益率 15% →±0% 【注意】指標によって「上昇=良い」とは限らない ・売上、顧客数 → 上昇=良い(▲緑) ・コスト、エラー率 → 上昇=悪い(▲赤) ・指標の性質に合わせて色を設定すること!

矢印付きKPIカードの作成

Plotlyのdeltaパラメータで、自動的に矢印と色を付けることができます。

# 矢印付きKPIカードを作成する関数 import plotly.graph_objects as go def create_kpi_card(タイトル, 値, 前期値, 単位=”): “”” 矢印付きKPIカードを作成する Parameters: ———– タイトル : str – KPIの名前 値 : float – 現在の値 前期値 : float – 比較対象(前月、前年など) 単位 : str – 単位(万円、%など) Returns: ——– fig : Figure – PlotlyのFigureオブジェクト “”” fig = go.Figure(go.Indicator( mode=’number+delta’, value=値, delta={ ‘reference’: 前期値, ‘relative’: True, # 変化率で表示 ‘valueformat’: ‘.1f’, # 小数点1桁 ‘suffix’: ‘%’, ‘increasing’: { ‘color’: ‘green’, # 増加時は緑 ‘symbol’: ‘▲’ # 上向き三角 }, ‘decreasing’: { ‘color’: ‘red’, # 減少時は赤 ‘symbol’: ‘▼’ # 下向き三角 } }, number={ ‘suffix’: 単位, ‘font’: {‘size’: 64, ‘weight’: ‘bold’} }, title={ ‘text’: タイトル, ‘font’: {‘size’: 18} } )) fig.update_layout( height=250, paper_bgcolor=’#F8F9FA’, margin=dict(t=50, b=20, l=20, r=20) ) return fig # 使用例:売上が増加した場合 fig1 = create_kpi_card(‘月間売上’, 450, 400, ‘万円’) fig1.show() # 使用例:満足度が低下した場合 fig2 = create_kpi_card(‘顧客満足度’, 3.8, 4.0, ‘点’) fig2.show()
【実行結果】 月間売上: 450万円 ▲+12.5%(緑色の矢印) 顧客満足度: 3.8点 ▼-5.0%(赤色の矢印)
⚠️ 「上昇=良い」とは限らない場合の対処

コストやエラー率など、下がった方が良い指標では、色の設定を逆にする必要があります。

increasing: {'color': 'red'}(上昇=悪い=赤)
decreasing: {'color': 'green'}(下降=良い=緑)

🎨 4. 色での強調(信号機カラー)

信号機カラーシステムとは

赤・黄・緑の信号機カラーは、世界中で「止まれ・注意・進め」として認知されています。この直感的な色分けをKPIカードに適用することで、状況を瞬時に伝えることができます。

【信号機カラーの定義】 🟢 緑(Good): 目標達成、良好な状態 RGB: (46, 204, 113) HEX: #2ECC71 → 「問題なし、このまま継続」 🟡 黄(Warning): 注意、警告が必要 RGB: (243, 156, 18) HEX: #F39C12 → 「注意が必要、対策を検討」 🔴 赤(Bad): 未達成、問題あり RGB: (231, 76, 60) HEX: #E74C3C → 「問題あり、即座に対応が必要」 【適用ルールの例】 ┌─────────────┬────────────────────────┐ │ 指標 │ 色分けルール │ ├─────────────┼────────────────────────┤ │ 目標達成率 │ ≥100%: 緑 │ │ │ 80-99%: 黄 │ │ │ <80%: 赤 │ ├─────────────┼────────────────────────┤ │ 顧客満足度 │ ≥4.0点: 緑 │ │ │ 3.0-3.9点: 黄 │ │ │ <3.0点: 赤 │ ├─────────────┼────────────────────────┤ │ エラー率 │ <1%: 緑 │ │ │ 1-5%: 黄 │ │ │ ≥5%: 赤 │ └─────────────┴────────────────────────┘

色分けKPIカードの作成

目標達成率に応じて背景色を変える、色分けKPIカードを作成します。

# 色分けKPIカード(目標達成率で色を変える) import plotly.graph_objects as go def kpi_card_with_color(タイトル, 値, 目標, 単位=”): “”” 目標達成率に応じて色分けされたKPIカードを作成 Parameters: ———– タイトル : str – KPIの名前 値 : float – 現在の値 目標 : float – 目標値 単位 : str – 単位 “”” # 達成率を計算 達成率 = (値 / 目標) * 100 # 達成率に応じて色とステータスを決定 if 達成率 >= 100: 背景色 = ‘#D5F4E6’ # 薄い緑 文字色 = ‘#2ECC71’ # 緑 ステータス = ‘✓ 目標達成’ elif 達成率 >= 80: 背景色 = ‘#FCF3CF’ # 薄い黄 文字色 = ‘#F39C12’ # 黄 ステータス = ‘⚠ 要注意’ else: 背景色 = ‘#FADBD8’ # 薄い赤 文字色 = ‘#E74C3C’ # 赤 ステータス = ‘✗ 未達成’ # KPIカードを作成 fig = go.Figure(go.Indicator( mode=’number+gauge’, value=値, number={ ‘suffix’: 単位, ‘font’: { ‘size’: 56, ‘color’: 文字色, ‘weight’: ‘bold’ } }, title={ ‘text’: f'{タイトル}
{ステータス}‘, ‘font’: {‘size’: 16} }, gauge={ ‘axis’: {‘range’: [0, 目標 * 1.2]}, ‘bar’: {‘color’: 文字色}, ‘threshold’: { ‘line’: {‘color’: ‘black’, ‘width’: 2}, ‘thickness’: 0.75, ‘value’: 目標 } } )) fig.update_layout( height=300, paper_bgcolor=背景色, margin=dict(t=80, b=20, l=20, r=20) ) return fig # 使用例:目標達成 fig1 = kpi_card_with_color(‘月間売上’, 450, 400, ‘万円’) fig1.show() # 使用例:要注意 fig2 = kpi_card_with_color(‘新規顧客’, 35, 40, ‘社’) fig2.show() # 使用例:未達成 fig3 = kpi_card_with_color(‘成約率’, 6, 10, ‘%’) fig3.show()
【実行結果】 月間売上: 450万円(緑背景)✓ 目標達成 新規顧客: 35社(黄背景)⚠ 要注意 成約率: 6%(赤背景)✗ 未達成
💡 色分けのベストプラクティス
ポイント 推奨 避けるべきこと
一貫性 同じ色は常に同じ意味 グラフごとに色の意味が違う
コントラスト 背景と文字色の差を大きく 薄い背景に薄い文字
アクセシビリティ 色だけでなくアイコン(✓✗)も併用 色だけで状態を判断させる

📉 5. スパークライン(小さなグラフ)

スパークラインとは

スパークライン(Sparkline)は、文字サイズ程度の小さな線グラフです。限られたスペースで過去の推移(トレンド)を表現できます。

KPIカードにスパークラインを追加すると、「今の値」だけでなく「過去からの流れ」も一目で把握できるようになります。

【スパークラインの効果】 ┌────────────────────────┐ │ 月間売上 │ │ │ │ 450万円 │ ← 現在の値 │ ▲ +12.5% │ ← 前月比 │ │ │ ╱╲ ╱╲╱╲╱ │ ← スパークライン │ ╱ ╲╱ ╲ │ (過去6ヶ月の推移) └────────────────────────┘ 【スパークラインのメリット】 ✓ トレンドが一目で分かる(上昇傾向?下降傾向?) ✓ 異常値の発見(急激な変化があったか?) ✓ スペースを取らない(小さなカード内に収まる) ✓ 詳細グラフへの誘導(「もっと詳しく見たい」と思わせる) 【表示する期間の目安】 ・日次データ: 過去7-14日 ・週次データ: 過去8-12週 ・月次データ: 過去6-12ヶ月

スパークライン付きKPIカードの作成

make_subplotsを使って、上部にKPI数値、下部にスパークラインを配置します。

# スパークライン付きKPIカード import plotly.graph_objects as go from plotly.subplots import make_subplots def kpi_card_with_sparkline(タイトル, 現在値, 履歴データ, 単位=”): “”” スパークライン付きKPIカードを作成 Parameters: ———– タイトル : str – KPIの名前 現在値 : float – 現在の値 履歴データ : list – 過去のデータ(リスト形式) 単位 : str – 単位 “”” # 前期の値(履歴データの最後から2番目) 前期値 = 履歴データ[-2] if len(履歴データ) > 1 else 現在値 # 2行のサブプロットを作成(上:KPI、下:スパークライン) fig = make_subplots( rows=2, cols=1, row_heights=[0.7, 0.3], # 上70%、下30% specs=[ [{‘type’: ‘indicator’}], [{‘type’: ‘scatter’}] ], vertical_spacing=0.05 # 行間のスペース ) # 上部: KPI数値 fig.add_trace(go.Indicator( mode=’number+delta’, value=現在値, delta={ ‘reference’: 前期値, ‘relative’: True, ‘valueformat’: ‘.1f’, ‘suffix’: ‘%’ }, number={ ‘suffix’: 単位, ‘font’: {‘size’: 48, ‘weight’: ‘bold’} }, title={ ‘text’: タイトル, ‘font’: {‘size’: 16} } ), row=1, col=1) # 下部: スパークライン fig.add_trace(go.Scatter( x=list(range(len(履歴データ))), y=履歴データ, mode=’lines’, line=dict(color=’#3498DB’, width=2), fill=’tozeroy’, # 下を塗りつぶす fillcolor=’rgba(52, 152, 219, 0.2)’, # 薄い青 showlegend=False, hovertemplate=’%{y}’ + 単位 + ‘‘ ), row=2, col=1) # 軸を非表示(スパークラインはシンプルに) fig.update_xaxes(showticklabels=False, showgrid=False, row=2, col=1) fig.update_yaxes(showticklabels=False, showgrid=False, row=2, col=1) fig.update_layout( height=300, paper_bgcolor=’#F8F9FA’, margin=dict(t=50, b=20, l=20, r=20) ) return fig # 使用例 過去6ヶ月売上 = [320, 350, 380, 400, 420, 450] fig = kpi_card_with_sparkline(‘月間売上’, 450, 過去6ヶ月売上, ‘万円’) fig.show()
【実行結果】 月間売上: 450万円 ▲+7.1% (下部に過去6ヶ月の上昇トレンドを示すスパークラインが表示)

コードの解説

📝 スパークラインの設定ポイント
設定 コード 効果
塗りつぶし fill='tozeroy' 線の下を塗りつぶしてエリアチャートに
透明度 fillcolor='rgba(52, 152, 219, 0.2)' 薄い色で圧迫感を減らす
軸非表示 showticklabels=False 軸ラベルを消してシンプルに
グリッド非表示 showgrid=False グリッド線を消してスッキリ

💼 6. 実務での応用例

例1: 営業ダッシュボード

営業チームが毎日確認するダッシュボードの例です。4つのKPIを横に並べて表示します。

# 営業ダッシュボード(4つのKPIカード) import plotly.graph_objects as go from plotly.subplots import make_subplots # 営業KPIデータ 営業データ = { ‘月間売上’: {‘値’: 450, ‘目標’: 400, ‘前月’: 400, ‘単位’: ‘万円’}, ‘新規顧客’: {‘値’: 38, ‘目標’: 30, ‘前月’: 24, ‘単位’: ‘社’}, ‘商談数’: {‘値’: 52, ‘目標’: 50, ‘前月’: 48, ‘単位’: ‘件’}, ‘成約率’: {‘値’: 12.5, ‘目標’: 10.0, ‘前月’: 11.2, ‘単位’: ‘%’} } # 4列のサブプロットを作成 fig = make_subplots( rows=1, cols=4, specs=[[{‘type’: ‘indicator’}] * 4], subplot_titles=list(営業データ.keys()) ) # 各KPIを追加 for i, (名前, data) in enumerate(営業データ.items(), start=1): # 達成率で色を決定 達成率 = (data[‘値’] / data[‘目標’]) * 100 if 達成率 >= 100: 色 = ‘#2ECC71’ # 緑 elif 達成率 >= 80: 色 = ‘#F39C12’ # 黄 else: 色 = ‘#E74C3C’ # 赤 fig.add_trace(go.Indicator( mode=’number+delta+gauge’, value=data[‘値’], delta={ ‘reference’: data[‘前月’], ‘relative’: True, ‘valueformat’: ‘.1f’, ‘suffix’: ‘%’, ‘increasing’: {‘color’: ‘green’}, ‘decreasing’: {‘color’: ‘red’} }, number={ ‘suffix’: data[‘単位’], ‘font’: {‘size’: 36, ‘weight’: ‘bold’} }, gauge={ ‘axis’: {‘range’: [0, data[‘目標’] * 1.2]}, ‘bar’: {‘color’: 色}, ‘threshold’: { ‘line’: {‘color’: ‘black’, ‘width’: 2}, ‘value’: data[‘目標’] } } ), row=1, col=i) fig.update_layout( height=300, showlegend=False, title_text=’📊 営業KPIダッシュボード’, title_font_size=20 ) fig.show()
【実行結果】 営業KPIダッシュボード 月間売上: 450万円 ▲+12.5%(緑ゲージ) 新規顧客: 38社 ▲+58.3%(緑ゲージ) 商談数: 52件 ▲+8.3%(緑ゲージ) 成約率: 12.5% ▲+11.6%(緑ゲージ)

例2: ECサイトKPIダッシュボード

ECサイトの運営者向けダッシュボードです。スパークライン付きで過去の推移も表示します。

# ECサイトKPIダッシュボード(スパークライン付き) import plotly.graph_objects as go from plotly.subplots import make_subplots # ECサイトKPIデータ ec_data = { ‘訪問者数’: { ‘値’: 15000, ‘履歴’: [12000, 12500, 13000, 13800, 14200, 15000], ‘単位’: ‘人’ }, ‘CVR’: { ‘値’: 2.9, ‘履歴’: [2.4, 2.5, 2.6, 2.7, 2.8, 2.9], ‘単位’: ‘%’ }, ‘平均単価’: { ‘値’: 5294, ‘履歴’: [4800, 4900, 5000, 5100, 5200, 5294], ‘単位’: ‘円’ }, ‘売上’: { ‘値’: 230, ‘履歴’: [150, 160, 180, 200, 210, 230], ‘単位’: ‘万円’ } } # 4列×2行のグリッド(上:KPI、下:スパークライン) fig = make_subplots( rows=2, cols=4, row_heights=[0.65, 0.35], specs=[ [{‘type’: ‘indicator’}] * 4, [{‘type’: ‘scatter’}] * 4 ], subplot_titles=list(ec_data.keys()), vertical_spacing=0.12 ) # 各KPIとスパークラインを追加 for i, (名前, data) in enumerate(ec_data.items(), start=1): 前期 = data[‘履歴’][-2] # KPI数値(上段) fig.add_trace(go.Indicator( mode=’number+delta’, value=data[‘値’], delta={ ‘reference’: 前期, ‘relative’: True, ‘valueformat’: ‘.1f’, ‘suffix’: ‘%’ }, number={ ‘suffix’: data[‘単位’], ‘font’: {‘size’: 32, ‘weight’: ‘bold’} } ), row=1, col=i) # スパークライン(下段) fig.add_trace(go.Scatter( x=list(range(len(data[‘履歴’]))), y=data[‘履歴’], mode=’lines+markers’, line=dict(color=’#3498DB’, width=2), marker=dict(size=5), fill=’tozeroy’, fillcolor=’rgba(52, 152, 219, 0.2)’, showlegend=False ), row=2, col=i) # 軸を非表示 fig.update_xaxes(showticklabels=False, showgrid=False, row=2, col=i) fig.update_yaxes(showticklabels=False, showgrid=False, row=2, col=i) fig.update_layout( height=350, title_text=’🛒 ECサイトKPIダッシュボード’, title_font_size=20, showlegend=False ) fig.show()
【実行結果】 ECサイトKPIダッシュボード 訪問者数: 15,000人 ▲+5.6%(上昇トレンドのスパークライン) CVR: 2.9% ▲+3.6%(上昇トレンドのスパークライン) 平均単価: 5,294円 ▲+1.8%(上昇トレンドのスパークライン) 売上: 230万円 ▲+9.5%(上昇トレンドのスパークライン)

📝 STEP 31 のまとめ

✅ このステップで学んだこと
トピック 重要ポイント
KPIカードとは 重要指標を1枚のカードに集約、5秒で状況把握
大きな数値 48-72ptで目立たせる、視覚的階層を意識
矢印表示 ▲▼で増減を直感的に表現
信号機カラー 赤・黄・緑で状況を瞬時に伝える
スパークライン 小さなグラフでトレンドを表示
実務応用 営業・ECダッシュボードで活用
💡 最重要ポイント

効果的なKPIカードは、数値を大きく変化を矢印で状況を色で表現することで、一目で理解できます。

スパークラインを追加すれば、トレンドも同時に把握できます。

これらの要素を組み合わせることで、ユーザーが5秒で状況を判断できるKPIカードが完成します!

📝 実践演習

演習 1 基礎

売上450万円(目標400万円、前月400万円)のKPIカードを作成してください。変化率も表示してください。

【解答コード】
import plotly.graph_objects as go fig = go.Figure(go.Indicator( mode=’number+delta+gauge’, value=450, delta={ ‘reference’: 400, ‘relative’: True, ‘valueformat’: ‘.1f’, ‘suffix’: ‘%’ }, number={‘suffix’: ‘万円’, ‘font’: {‘size’: 60, ‘weight’: ‘bold’}}, title={‘text’: ‘月間売上’, ‘font’: {‘size’: 18}}, gauge={ ‘axis’: {‘range’: [0, 500]}, ‘bar’: {‘color’: ‘green’}, ‘threshold’: {‘value’: 400, ‘line’: {‘width’: 2}} } )) fig.update_layout(height=300) fig.show()

解説:deltaで前月比を表示し、gaugeで目標値をラインで示しています。

演習 2 応用

3つのKPIカード(売上、顧客数、満足度)を横に並べて表示してください。目標達成率に応じて色分けも追加してください。

【解答コード】
import plotly.graph_objects as go from plotly.subplots import make_subplots # データ: [値, 目標, 単位] kpis = [ {‘名前’: ‘売上’, ‘値’: 450, ‘目標’: 400, ‘単位’: ‘万円’}, {‘名前’: ‘顧客数’, ‘値’: 35, ‘目標’: 40, ‘単位’: ‘社’}, {‘名前’: ‘満足度’, ‘値’: 4.5, ‘目標’: 4.0, ‘単位’: ‘点’} ] fig = make_subplots( rows=1, cols=3, specs=[[{‘type’: ‘indicator’}] * 3], subplot_titles=[k[‘名前’] for k in kpis] ) for i, kpi in enumerate(kpis, 1): 達成率 = kpi[‘値’] / kpi[‘目標’] * 100 色 = ‘#2ECC71’ if 達成率 >= 100 else ‘#F39C12’ if 達成率 >= 80 else ‘#E74C3C’ fig.add_trace(go.Indicator( mode=’number+gauge’, value=kpi[‘値’], number={‘suffix’: kpi[‘単位’], ‘font’: {‘size’: 42}}, gauge={ ‘axis’: {‘range’: [0, kpi[‘目標’] * 1.2]}, ‘bar’: {‘color’: 色}, ‘threshold’: {‘value’: kpi[‘目標’], ‘line’: {‘width’: 2}} } ), row=1, col=i) fig.update_layout(height=300) fig.show()

解説:達成率に応じて緑・黄・赤の3色を使い分けています。

演習 3 発展

スパークライン付きのKPIカードを作成してください。過去6ヶ月のデータ [320, 350, 380, 400, 420, 450] を表示してください。

【解答コード】
import plotly.graph_objects as go from plotly.subplots import make_subplots 履歴 = [320, 350, 380, 400, 420, 450] 現在 = 450 前月 = 420 fig = make_subplots( rows=2, cols=1, row_heights=[0.7, 0.3], specs=[[{‘type’: ‘indicator’}], [{‘type’: ‘scatter’}]], vertical_spacing=0.05 ) # KPI数値 fig.add_trace(go.Indicator( mode=’number+delta’, value=現在, delta={‘reference’: 前月, ‘relative’: True, ‘suffix’: ‘%’}, number={‘suffix’: ‘万円’, ‘font’: {‘size’: 56, ‘weight’: ‘bold’}}, title={‘text’: ‘月間売上’} ), row=1, col=1) # スパークライン fig.add_trace(go.Scatter( y=履歴, mode=’lines’, line=dict(color=’#3498DB’, width=2), fill=’tozeroy’, fillcolor=’rgba(52, 152, 219, 0.2)’, showlegend=False ), row=2, col=1) fig.update_xaxes(showticklabels=False, showgrid=False, row=2) fig.update_yaxes(showticklabels=False, showgrid=False, row=2) fig.update_layout(height=300) fig.show()

解説:make_subplotsで2段構成にし、下段にfill='tozeroy'でエリアチャートを追加しています。

❓ よくある質問

Q1: KPIカードにはどれくらいの情報を入れるべきですか?
最小限にしましょう。必須要素は以下の3つです:

1. メイン数値(大きく表示)
2. 変化率または前期比(矢印付き)
3. タイトル(何のKPIか)

オプションで目標値、スパークライン、ステータスを追加できますが、詰め込みすぎないことが重要です。情報が多すぎると「5秒で把握」ができなくなります。
Q2: 数値が小さい場合(例: 2.9%)でも大きく表示すべきですか?
はい、大きく表示してください。数値の大小に関わらず、KPIとして重要なら大きく目立たせます。

ただし、以下の点に注意してください:
• 単位(%、円、人など)を必ず表示する
• 小数点以下の桁数を適切に設定する(2.9%なら小数点1桁)
• 文脈(目標値や前期比)を併記して意味が分かるようにする
Q3: 色は必ず赤・黄・緑を使う必要がありますか?
推奨ですが、必須ではありません。信号機カラーは直感的で分かりやすいですが、ブランドカラーに合わせることも可能です。

ただし、以下のルールは守りましょう:
一貫性:同じ色は常に同じ意味
コントラスト:良い/悪いが明確に区別できる
アクセシビリティ:色覚特性に配慮し、色だけでなくアイコン(✓✗)も併用
Q4: スパークラインはどの程度の期間を表示すべきですか?
データの粒度に応じて決めます:

日次データ:過去7〜14日(直近の変化を見る)
週次データ:過去8〜12週(約2〜3ヶ月)
月次データ:過去6〜12ヶ月(半年〜1年のトレンド)

あまり長い期間を表示すると細かすぎて見にくくなります。「トレンドの方向性が分かる」程度の粒度が理想です。
📝

学習メモ

データ可視化マスター - Step 31

📋 過去のメモ一覧
#artnasekai #学習メモ
LINE