
結論:可視化は「きれいに描く」ことではなく、意思決定を動かすための設計です。本稿では、未経験〜初学者が 週10時間×1〜2週 で、Matplotlib/Plotlyを軸に “伝わるグラフ”の設計と実装の型 を身につけることをゴールにします。棒・折れ線・箱ひげ・ヒートマップ・ファセットなど、“いつ使うか/何を伝えるか”の判断基準つき。最後に レポート1枚の型 と レビュー観点チェックリスト も付属します。
はじめに:なぜ“伝わらない”のか
現場でよく見る詰まりどころは3つ。①目的が曖昧(誰に何を決めてもらうか不明)②図の選択ミス(カテゴリ比較に折れ線、時系列に円など)③読み手への配慮不足(凡例が遠い、色が多すぎ、軸や注釈が不親切)。これを防ぐ最短ルートは、目的→メッセージ→図の選択→注釈/配色→検証の順で作る“型”を持つことです。
筆者のスタンス:現場で効いた作法だけ残す
筆者(ふみと)は大手企業のデータサイエンティスト/マーケティングサイエンティスト歴10年。役員会・営業会議・現場共有まで1,000枚以上のグラフを作ってきました。結局効いたのは、難解なテクニックではなく正しい設計順序と余白、そして注釈でした。以下、実務で骨太に使えるやり方に絞って解説します。
前提:環境とサンプルデータ
想定環境は Python 3.10+ / pandas 2.x / Matplotlib / Plotly。Jupyter推奨。サンプルは sales.csv
(date, store, product, qty, price
)。>>【保存版】pandas基礎:データフレームの作成・整形・結合・集計を“実務の型”で身につけるに沿って 読み込み→整形→集計まで済ませておきます。
“伝わる可視化” 10ステップ
ステップ1:まず1文で「誰に何を伝え、何を決めてもらうか」
例)「店舗Aは4月以降の売上が前年比-12%。要因は来店数の減少。」/「新商品X導入後、カテゴリYの粗利率が+2.1pt改善。」
この1文が図の選択・注釈・配色を決めます。先に必ず書き出しましょう。
ステップ2:図の選び方(判断基準表)
目的 | 推奨図 | 避けたい図 |
---|---|---|
時系列トレンド | 折れ線/移動平均/面(少色) | 円/3D棒 |
カテゴリ比較 | 棒(縦/横)/箱ひげ | 折れ線(非時系列) |
構成比 | 積み上げ棒/100%積み上げ | 円・ドーナツ(カテゴリ多) |
相関 | 散布図/回帰線/ヒートマップ | 過度なバブル/3D散布 |
分布 | ヒストグラム/KDE/箱ひげ | 円・ドーナツ |
[内部リンク:pandas実践]
ステップ3:Matplotlibで“最低限・読みやすい”図を描く
import pandas as pd
import matplotlib.pyplot as plt
# 前処理(例)
df = pd.read\_csv("sales.csv", parse\_dates=\["date"])
.assign(amount=lambda d: d\["qty"] \* d\["price"],
ym=lambda d: d\["date"].dt.to\_period("M").astype(str))
monthly = df.groupby("ym", as\_index=False).agg(sales=("amount", "sum"))
# 折れ線(トレンド)
plt.figure()
plt.plot(monthly\["ym"], monthly\["sales"], marker="o")
plt.title("月次売上の推移")
plt.xlabel("年月"); plt.ylabel("売上")
plt.xticks(rotation=45)
plt.tight\_layout()
plt.show()
ポイント:タイトル/軸/単位は必須、tight_layout()
で崩れ防止、ラベルは45°で重なり回避。
ステップ4:カテゴリ比較は“横棒”が強い
top_store = (df.groupby("store", as_index=False)
.agg(sales=("amount", "sum"))
.sort_values("sales", ascending=False)
.head(10))
plt.figure()
plt.barh(top\_store\["store"], top\_store\["sales"]) # 横棒
plt.title("上位店舗の売上(TOP10)")
plt.xlabel("売上")
plt.gca().invert\_yaxis() # 1位を上に
plt.tight\_layout(); plt.show()
日本語ラベルは長くなりがち。横棒にすると読みやすくなります。
ステップ5:分布を読む(箱ひげ&ヒストグラム)
import numpy as np
# 単価の分布
plt.figure(); plt.hist(df\["price"].dropna(), bins=30)
plt.title("単価の分布"); plt.xlabel("単価"); plt.ylabel("頻度")
# 店舗ごとの金額分布(箱ひげ)
amount = df\["qty"] \* df\["price"]
by\_store = \[amount\[df\["store"] == s] for s in top\_store\["store"]]
plt.figure(); plt.boxplot(by\_store, labels=top\_store\["store"], showfliers=False)
plt.title("店舗別の金額分布(外れ値非表示)"); plt.xticks(rotation=45)
plt.tight\_layout(); plt.show()
箱ひげは中央値と四分位を見る道具。外れ値は別途注釈で扱いを明確に。
ステップ6:Plotlyで“インタラクティブに”検証
import plotly.express as px
fig = px.line(monthly, x="ym", y="sales", markers=True,
title="月次売上の推移(ホバーで値を確認)")
fig.update\_layout(xaxis\_title="年月", yaxis\_title="売上")
fig.show()
使い分け:レポート書き出しはMatplotlib、探索やダッシュボードはPlotlyが快適。
ステップ7:ヒートマップ/ファセットで“全体像”を掴む
# 年月×店舗の売上ヒートマップ(Plotly)
pv = pd.pivot_table(df.assign(ym=lambda d: d["date"].dt.to_period("M").astype(str)),
index="ym", columns="store", values=df["qty"]*df["price"],
aggfunc="sum", fill_value=0)
fig = px.imshow(pv, aspect="auto", title="売上ヒートマップ(ym×store)")
fig.update\_xaxes(title="店舗"); fig.update\_yaxes(title="年月")
fig.show()
# ファセット(カテゴリ別に小さな同型グラフを並べる)
by\_product = (df.assign(ym=lambda d: d\["date"].dt.to\_period("M").astype(str))
.groupby(\["ym", "product"], as\_index=False)
.agg(sales=("qty", "sum")))
fig = px.line(by\_product, x="ym", y="sales", facet\_col="product", facet\_col\_wrap=3)
fig.update\_layout(showlegend=False, title="商品別の月次数量推移")
fig.show()
ファセットは同一スケールで並べて比較。凡例は省いて視線の往復を減らします。
ステップ8:注釈・基準線・ハイライトで視線誘導
plt.figure(); plt.plot(monthly["ym"], monthly["sales"], marker="o")
plt.axhline(monthly["sales"].mean(), linestyle="--") # 平均線
plt.annotate("キャンペーン開始", xy=(5, monthly["sales"].iloc[5]), xytext=(6, monthly["sales"].max()),
arrowprops=dict(arrowstyle="->"))
plt.title("月次売上(平均線と注釈付き)"); plt.xticks(rotation=45)
plt.tight_layout(); plt.show()
矢印・囲み・色は人間の注意を引きます。言いたい点にピンを打つつもりで。
ステップ9:ダッシュボード素材の“型”をつくる
- 長期トレンド:月次折れ線+移動平均
- カテゴリ比較:上位10の横棒
- 分布:単価ヒストグラム
- 構成比:100%積み上げ棒(主要カテゴリのみ)
- 要因:年月×店舗のヒートマップ
毎月同じフォーマットで出すと、読む側の負担が劇的に下がります。
ステップ10:レポート1枚の型(10分LTにも効く)
- 結論(太字1行)
- 根拠図(大きく1枚:注釈/基準線付き)
- 補助図(小さく2枚:比較/分布)
- 打ち手(次アクションを具体化:AB案)
>>【保存版】面接で刺さる発表の作り方:10分LTテンプレ/スライド構成/図解/Q&A台本/練習法まで完全ガイド
実務Tips:配色・書式・出力の最短メモ
- 色は2〜3色+強調1色に抑える。
- 桁区切り(1,000区切り)と単位の統一で読みやすさUP。
- 画像は横長(16:9)で保存。日本語フォント崩れはPDF出力で回避。
学習サポート:最短で“意思決定に効く可視化”へ
独学でも到達できますが、レビューや質問対応があるとメッセージ設計→注釈→配色まで磨き込めます。6ヶ月ロードマップに沿ってポートフォリオまで仕上げたい方は、下記2校の無料カウンセリングから。
- 株式会社キカガク:業務再現型課題と出口支援で、可視化→意思決定まで連動。
- Tech Academy:質問の速さ×短時間運用で継続しやすい。レポート納品の型づくりに◎。
TechAcademy データサイエンスコース(受講料:174,600円~ ※更に割引あり)

株式会社キカガク AI人材長期育成コース(受講料:237,600円~)

ミニプロジェクト(提出推奨)
課題:「上位店舗の月次売上トレンドと構成比を1枚にまとめ、3行で示唆を記載」。
sales.csv
からamount=qty*price
、ym
を作る。- 図1(大):
ym
×売上の折れ線+移動平均(キャンペーン等を注釈)。 - 図2(小):上位10店舗の横棒(凡例なし、ラベル明確)。
- 図3(小):主要カテゴリの100%積み上げ棒(構成比の変化)。
- スライド:結論1行+根拠図+打ち手(仮説A/B)。
レビュー観点チェックリスト(コピペ可)
- [ ] 目的/メッセージの1文が先にある
- [ ] 図の選択が目的と一致(時系列→折れ線、比較→棒)
- [ ] タイトル/軸/単位/注釈が整っている
- [ ] 色は2〜3色、強調1色のみ
- [ ] 画像は横長、文字は読みやすい大きさ
付録A:Matplotlibの便利スニペット
# 1) 2軸(避けたいが使うなら明確に)
fig, ax1 = plt.subplots(); ax2 = ax1.twinx()
ax1.plot(monthly["ym"], monthly["sales"], marker="o")
ax2.bar(monthly["ym"], monthly["sales"]//1000, alpha=0.3)
ax1.set_ylabel("売上"); ax2.set_ylabel("売上(千)")
plt.xticks(rotation=45); plt.tight_layout(); plt.show()
# 2) 注釈の囲み
y = monthly\["sales"].max(); x = monthly\["sales"].idxmax()
plt.annotate("ピーク", xy=(x, y), xytext=(x, y\*1.1),
bbox=dict(boxstyle="round", alpha=0.2),
arrowprops=dict(arrowstyle="->"))
# 3) 保存(解像度指定)
plt.savefig("figure.png", dpi=200, bbox\_inches="tight")
付録B:Plotlyの便利スニペット
# 1) 散布図+回帰線
fig = px.scatter(df, x="price", y=df["qty"]*df["price"], trendline="ols",
labels={"x":"単価", "y":"金額"}, title="単価と金額の関係")
fig.show()
# 2) 100%積み上げ棒(正規化)
import numpy as np
share = (by\_product.pivot(index="ym", columns="product", values="sales")
.apply(lambda s: s / s.sum(), axis=1))
fig = px.area(share, title="カテゴリ構成比(100%積み上げ)")
fig.show()
この記事から次に読むべきもの(内部リンク)
-
-
【実務で差がつく】pandas実践:欠損処理・結合・ウィンドウ関数・時系列・品質保証まで“読みやすく速い”型を習得
リード(結論)基礎を終えたら次は実務の現場で頻出する処理を“型”で覚える段階です。本記事は、pandas 2.x を前提に、欠損・外れ値・結合・ウィンドウ関数・時系列・カテゴリ処理・集計の自動化・大規 ...
-
-
【保存版】scikit-learn基礎:回帰・分類・前処理・パイプライン・交差検証を“実務の型”で習得
機械学習で迷子になる最大の理由は、前処理→学習→評価→改善の順番が曖昧なまま個々のアルゴリズムに飛びつくこと。本記事は、未経験〜初学者が週10時間×2〜3週で到達できるscikit-learnの最短ル ...
-
-
【保存版】モデル評価:指標の選び方・交差検証・閾値最適化・ビジネス接続を“実務の型”で解説
精度が上がらない原因の多くは「評価設計の誤り」にあります。評価とは「何点取れたか」ではなく、意思決定に耐えるかを測る営み。この記事では、回帰/分類/ランキングの指標の選び方、交差検証の正しい使い分け、 ...
-
-
【保存版】データレポート納品の型:要件定義→ETL→検証→可視化→Excel/PDF→引き継ぎまで、失注しないワークフロー完全版
“いい分析”より“伝わる納品”。副業や実務で評価されるのは、意思決定に効く1枚と再現できるパッケージを期限通り出せること。 本記事は、未経験〜初学者が週10時間×2〜3週で、要件定義→データ受領→ET ...
-
-
未経験からデータサイエンティストへ:6ヶ月ロードマップ【現役が解説】
「数学もPythonもゼロだけど、半年で実務に通じる力はつく?」 結論、週10時間×24週の積み上げで「面接で語れる実務再現ポートフォリオ」まで到達できます。要は、学ぶ順番と迷わない設計です。 本記事 ...
最近のコメント