🎯 ステップ41: 目的別グラフの使い分け
データの目的に合わせて最適なグラフを選ぼう!
ステップ35〜40で様々なグラフの作り方を学びました。今回は「何を伝えたいか」に応じて最適なグラフを選ぶ方法を学びます。データ分析では、グラフ選びが分析結果の伝わりやすさを大きく左右します。
📖 このステップで学ぶこと
・グラフ選択の基本原則
・時系列データの可視化
・カテゴリ比較の表現
・分布と相関の可視化
・割合・構成比の表現
🎯 1. グラフ選択の基本原則
グラフはデータを伝える手段です。「何を伝えたいか」を最初に考え、それに合ったグラフを選ぶことが重要です。
📌 グラフ選択の早見表
| 伝えたいこと | 最適なグラフ | 例 |
| 時間の変化・推移 | 折れ線グラフ | 月別売上推移 |
| カテゴリ間の比較 | 棒グラフ | 商品別売上 |
| 割合・構成比 | 円グラフ | 支出内訳 |
| 2変数の関係 | 散布図 | 広告費と売上 |
| データの分布 | ヒストグラム、箱ひげ図 | テスト得点分布 |
| 複数変数の相関 | ヒートマップ | 科目間の関連性 |
📈 2. 時系列データの可視化
時系列データとは、時間の経過とともに記録されたデータです。「いつ、どのように変化したか」を見るには折れ線グラフが最適です。
🔰 基本的な折れ線グラフ
コード:月別売上推移
import matplotlib.pyplot as plt
import pandas as pd
# 月別売上データ
months = ['1月', '2月', '3月', '4月', '5月', '6月',
'7月', '8月', '9月', '10月', '11月', '12月']
sales_2023 = [120, 135, 150, 140, 160, 175, 180, 190, 170, 185, 200, 220]
sales_2024 = [140, 155, 170, 165, 185, 200, 210, 220, 200, 215, 235, 260]
# 折れ線グラフ
plt.figure(figsize=(12, 6))
plt.plot(months, sales_2023, marker='o', linewidth=2, label='2023年')
plt.plot(months, sales_2024, marker='s', linewidth=2, label='2024年')
plt.title('月別売上推移', fontsize=16, fontweight='bold')
plt.xlabel('月', fontsize=12)
plt.ylabel('売上(万円)', fontsize=12)
plt.legend(fontsize=11)
plt.grid(True, alpha=0.3)
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()
※ 画面が小さい場合は、コードブロックを横にスクロールできます
💡 コードの解説
marker=’o’とmarker=’s’
・’o’は丸、’s’は四角(square)のマーカー
・異なるマーカーで複数の線を区別しやすくする
plt.xticks(rotation=45)
・X軸のラベルを45度回転
・ラベルが重ならないようにする
plt.legend()
・labelで設定した名前を凡例として表示
実行結果
2年間の売上推移が比較できる折れ線グラフが表示されます。2024年が2023年より全体的に高いこと、8月がピークであることがわかります。
📝 エリアチャート(累積表現)
複数の項目の内訳と合計の推移を同時に見たい場合は、エリアチャート(積み上げ面グラフ)が効果的です。
コード:商品別売上推移(累積)
import matplotlib.pyplot as plt
# 商品別売上データ
months = ['1月', '2月', '3月', '4月', '5月', '6月']
product_a = [50, 55, 60, 58, 65, 70]
product_b = [30, 35, 40, 42, 45, 50]
product_c = [20, 25, 30, 28, 32, 35]
# エリアチャート(積み上げ)
plt.figure(figsize=(12, 6))
plt.stackplot(months, product_a, product_b, product_c,
labels=['商品A', '商品B', '商品C'],
alpha=0.7)
plt.title('商品別売上推移(累積)', fontsize=16, fontweight='bold')
plt.xlabel('月', fontsize=12)
plt.ylabel('売上(万円)', fontsize=12)
plt.legend(loc='upper left', fontsize=11)
plt.grid(True, alpha=0.3)
plt.tight_layout()
plt.show()
※ 画面が小さい場合は、コードブロックを横にスクロールできます
💡 コードの解説
plt.stackplot()
・積み上げ面グラフを描く関数
・第1引数:X軸のデータ(月)
・第2引数以降:Y軸のデータ(各商品の売上)
・データが下から順に積み上げられる
labels=[‘商品A’, ‘商品B’, ‘商品C’]
・凡例に表示する名前をリストで指定
alpha=0.7
・透明度を0.7に設定(色が重なっても見やすい)
📌 時系列グラフのポイント
・横軸は必ず時間にする
・複数の系列を比較する場合は色とマーカーで区別する
・データポイントが多い場合はマーカーを小さくまたは省略
・グリッド線で値を読み取りやすくする
📊 3. カテゴリ比較の表現
カテゴリ比較とは、「商品別」「地域別」「部門別」などの項目間で値を比較することです。棒グラフが最も適しています。
🔰 横棒グラフでランキング
ランキングを表現する場合、横棒グラフが見やすいです。項目名が長い場合にも適しています。
コード:都市別人口ランキング
import matplotlib.pyplot as plt
import pandas as pd
# 都市別人口データ
cities = ['東京', '横浜', '大阪', '名古屋', '札幌', '福岡', '神戸', '京都']
population = [1400, 375, 275, 232, 197, 160, 152, 147]
# データを降順にソート
df = pd.DataFrame({'都市': cities, '人口': population})
df = df.sort_values('人口', ascending=True)
# 横棒グラフ(ランキング)
plt.figure(figsize=(10, 6))
plt.barh(df['都市'], df['人口'], color='skyblue', edgecolor='black')
plt.title('都市別人口ランキング', fontsize=16, fontweight='bold')
plt.xlabel('人口(万人)', fontsize=12)
plt.grid(axis='x', linestyle='--', alpha=0.3)
plt.tight_layout()
plt.show()
※ 画面が小さい場合は、コードブロックを横にスクロールできます
💡 コードの解説
df.sort_values(‘人口’, ascending=True)
・人口列で昇順(小さい順)にソート
・ascending=Trueで昇順(上から下に大きくなる)
・横棒グラフでは昇順の方が「上が大きい」表示になる
plt.barh()
・horizontal bar(水平棒)グラフを描く
・plt.bar()と違い、横向きになる
plt.grid(axis=’x’)
・横棒グラフではX軸のグリッド線が見やすい
📝 グループ化した棒グラフ
複数のカテゴリを複数の指標で比較したい場合、グループ化した棒グラフが有効です。
コード:四半期別商品売上比較
import matplotlib.pyplot as plt
import numpy as np
# データの準備
categories = ['商品A', '商品B', '商品C', '商品D']
q1 = [100, 120, 90, 110]
q2 = [110, 130, 95, 120]
q3 = [120, 140, 100, 130]
q4 = [130, 150, 110, 140]
# 棒の位置を計算
x = np.arange(len(categories))
width = 0.2
# グループ化した棒グラフ
plt.figure(figsize=(12, 6))
plt.bar(x - width*1.5, q1, width, label='Q1', color='#FF6B6B')
plt.bar(x - width*0.5, q2, width, label='Q2', color='#4ECDC4')
plt.bar(x + width*0.5, q3, width, label='Q3', color='#45B7D1')
plt.bar(x + width*1.5, q4, width, label='Q4', color='#FFA07A')
plt.title('四半期別商品売上比較', fontsize=16, fontweight='bold')
plt.xlabel('商品', fontsize=12)
plt.ylabel('売上(万円)', fontsize=12)
plt.xticks(x, categories)
plt.legend(fontsize=11)
plt.grid(axis='y', linestyle='--', alpha=0.3)
plt.tight_layout()
plt.show()
※ 画面が小さい場合は、コードブロックを横にスクロールできます
💡 コードの解説
x = np.arange(len(categories))
・カテゴリ数と同じ長さの連番(0, 1, 2, 3)を作成
・棒グラフの中心位置として使用
width = 0.2
・各棒の幅を0.2に設定
・4本の棒を並べるので、間隔を考慮
x – width*1.5, x – width*0.5, …
・中心位置からずらして棒を配置
・4本の棒がグループになって表示される
plt.xticks(x, categories)
・X軸の目盛り位置(x)にラベル(categories)を設定
📌 棒グラフの使い分け
| 種類 | 特徴 | おすすめ場面 |
| 縦棒グラフ | カテゴリが少ない | 月別、四半期別 |
| 横棒グラフ | ラベルが長い | ランキング、商品名 |
| 積み上げ棒グラフ | 全体と内訳を同時に | 構成要素の推移 |
| グループ化 | 複数の指標を比較 | 期間×カテゴリ |
📈 4. 分布の表現
分布とは、データがどの範囲にどれくらい集中しているかを表したものです。ヒストグラムや箱ひげ図で可視化します。
🔰 ヒストグラムと平均線
コード:テスト得点の分布
import matplotlib.pyplot as plt
import numpy as np
# テスト得点データ(正規分布)
np.random.seed(42)
scores = np.random.normal(70, 15, 500)
# ヒストグラム
plt.figure(figsize=(10, 6))
plt.hist(scores, bins=30, color='lightblue', edgecolor='black', alpha=0.7)
# 平均線を追加
mean_score = np.mean(scores)
plt.axvline(mean_score, color='red', linestyle='--', linewidth=2,
label=f'平均: {mean_score:.1f}点')
plt.title('テスト得点の分布', fontsize=16, fontweight='bold')
plt.xlabel('得点', fontsize=12)
plt.ylabel('人数', fontsize=12)
plt.legend(fontsize=11)
plt.grid(axis='y', linestyle='--', alpha=0.3)
plt.tight_layout()
plt.show()
※ 画面が小さい場合は、コードブロックを横にスクロールできます
💡 コードの解説
np.random.normal(70, 15, 500)
・平均70、標準偏差15の正規分布から500個のデータを生成
mean_score = np.mean(scores)
・データの平均値を計算
plt.axvline(mean_score, …)
・axvlineは「垂直線(vertical line)」を描く関数
・平均値の位置に赤い破線を引く
f’平均: {mean_score:.1f}点’
・.1fで小数点以下1桁まで表示
📝 箱ひげ図でグループ比較
コード:クラス別得点分布の比較
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
import numpy as np
# クラス別得点データ
np.random.seed(0)
df = pd.DataFrame({
'得点': np.concatenate([
np.random.normal(75, 10, 40), # A組
np.random.normal(80, 12, 40), # B組
np.random.normal(70, 8, 40), # C組
np.random.normal(85, 9, 40) # D組
]),
'クラス': ['A組']*40 + ['B組']*40 + ['C組']*40 + ['D組']*40
})
# 箱ひげ図とバイオリンプロットを並べる
sns.set_style("whitegrid")
fig, axes = plt.subplots(1, 2, figsize=(15, 6))
# 左:箱ひげ図
sns.boxplot(x='クラス', y='得点', data=df, ax=axes[0], palette='Set2')
axes[0].set_title('クラス別得点分布(箱ひげ図)', fontsize=14, fontweight='bold')
axes[0].grid(axis='y', alpha=0.3)
# 右:バイオリンプロット
sns.violinplot(x='クラス', y='得点', data=df, ax=axes[1],
palette='muted', inner='box')
axes[1].set_title('クラス別得点分布(バイオリンプロット)', fontsize=14, fontweight='bold')
plt.tight_layout()
plt.show()
※ 画面が小さい場合は、コードブロックを横にスクロールできます
💡 コードの解説
fig, axes = plt.subplots(1, 2, figsize=(15, 6))
・1行2列のグラフを作成
ax=axes[0]
・Seabornの関数にaxを指定すると、その位置に描画
inner=’box’
・バイオリンプロットの内側に箱ひげ図を表示
🔗 5. 相関関係の可視化
相関関係とは、2つの変数がどれだけ関連しているかを表すものです。散布図とヒートマップが代表的な可視化方法です。
🔰 散布図と近似直線
コード:勉強時間と得点の関係
import matplotlib.pyplot as plt
import numpy as np
# データの準備(勉強時間とテスト得点)
np.random.seed(0)
study_hours = np.random.uniform(0, 10, 100)
test_scores = 50 + 4 * study_hours + np.random.normal(0, 5, 100)
# 散布図
plt.figure(figsize=(10, 6))
plt.scatter(study_hours, test_scores, alpha=0.6, s=100, edgecolors='black')
# 近似直線を追加
z = np.polyfit(study_hours, test_scores, 1)
p = np.poly1d(z)
plt.plot(study_hours, p(study_hours), "r--", linewidth=2,
label=f'近似直線: y={z[0]:.2f}x+{z[1]:.2f}')
plt.title('勉強時間とテスト得点の関係', fontsize=16, fontweight='bold')
plt.xlabel('勉強時間(時間)', fontsize=12)
plt.ylabel('テスト得点', fontsize=12)
plt.legend(fontsize=11)
plt.grid(True, alpha=0.3)
plt.tight_layout()
plt.show()
※ 画面が小さい場合は、コードブロックを横にスクロールできます
💡 コードの解説
test_scores = 50 + 4 * study_hours + np.random.normal(0, 5, 100)
・勉強時間に比例した得点(50点 + 4×時間)にノイズを加えたデータ
z = np.polyfit(study_hours, test_scores, 1)
・1次式(直線)でデータを近似
・zには[傾き, 切片]が入る
p = np.poly1d(z)
・近似式を関数化(p(x)でy値を計算できる)
plt.plot(study_hours, p(study_hours), “r–“)
・近似直線を赤い破線で描画
📝 相関ヒートマップ
コード:科目間の相関分析
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
import numpy as np
# 複数科目の得点データ
np.random.seed(0)
n = 100
df = pd.DataFrame({
'国語': np.random.normal(70, 15, n),
'数学': np.random.normal(75, 12, n),
'英語': np.random.normal(72, 10, n),
'理科': np.random.normal(77, 13, n),
'社会': np.random.normal(73, 11, n)
})
# 国語と英語に強い相関を作る(言語系科目)
df['英語'] = df['国語'] * 0.6 + df['英語'] * 0.4
# 相関行列
corr = df.corr()
# ヒートマップ
plt.figure(figsize=(10, 8))
sns.heatmap(corr, annot=True, cmap='coolwarm',
vmin=-1, vmax=1, center=0,
square=True, linewidths=1,
fmt='.2f')
plt.title('科目間の相関分析', fontsize=16, fontweight='bold')
plt.tight_layout()
plt.show()
※ 画面が小さい場合は、コードブロックを横にスクロールできます
💡 コードの解説
df[‘英語’] = df[‘国語’] * 0.6 + df[‘英語’] * 0.4
・国語と英語に相関を持たせるための加工
・実際のデータ分析では不要(デモ用)
corr = df.corr()
・すべての列間の相関係数を計算
fmt=’.2f’
・数値を小数点以下2桁で表示
📌 相関係数の読み方
| 相関係数 | 意味 | ヒートマップの色 |
| 0.7〜1.0 | 強い正の相関 | 濃い赤 |
| 0.3〜0.7 | 中程度の正の相関 | 薄い赤 |
| -0.3〜0.3 | 相関なし | 白 |
| -0.7〜-0.3 | 中程度の負の相関 | 薄い青 |
| -1.0〜-0.7 | 強い負の相関 | 濃い青 |
🥧 6. 割合・構成比の表現
割合・構成比とは、全体に対して各項目がどれくらいの比率を占めているかを表すものです。円グラフやドーナツチャートで可視化します。
🔰 円グラフ
コード:支出内訳
import matplotlib.pyplot as plt
# 支出データ
categories = ['食費', '住居費', '光熱費', '交通費', '娯楽費', 'その他']
expenses = [30, 35, 10, 12, 8, 5]
# 最大項目を強調
explode = [0, 0.1, 0, 0, 0, 0]
# 円グラフ
plt.figure(figsize=(10, 8))
colors = ['#FF6B6B', '#4ECDC4', '#45B7D1', '#FFA07A', '#98D8C8', '#BFBFBF']
plt.pie(expenses, labels=categories, autopct='%1.1f%%',
explode=explode, colors=colors, startangle=90,
shadow=True, textprops={'fontsize': 12})
plt.title('月々の支出内訳', fontsize=16, fontweight='bold')
plt.tight_layout()
plt.show()
※ 画面が小さい場合は、コードブロックを横にスクロールできます
💡 コードの解説
explode = [0, 0.1, 0, 0, 0, 0]
・2番目の項目(住居費)を0.1だけ切り出して強調
shadow=True
・影をつけて立体的に見せる
textprops={‘fontsize’: 12}
・ラベルとパーセンテージのフォントサイズを指定
📝 ドーナツチャート
円グラフの中央に空間を作り、合計値などを表示できます。
コード:商品カテゴリ別売上(ドーナツチャート)
import matplotlib.pyplot as plt
# 商品カテゴリ別売上
categories = ['電化製品', '衣類', '食品', '雑貨']
sales = [450, 320, 280, 150]
# ドーナツチャート
plt.figure(figsize=(10, 8))
colors = ['#FF6B6B', '#4ECDC4', '#45B7D1', '#FFA07A']
plt.pie(sales, labels=categories, autopct='%1.1f%%',
colors=colors, startangle=90,
wedgeprops={'width': 0.5})
# 中央に合計を表示
total = sum(sales)
plt.text(0, 0, f'合計\n{total}万円',
ha='center', va='center', fontsize=18, fontweight='bold')
plt.title('商品カテゴリ別売上構成比', fontsize=16, fontweight='bold')
plt.tight_layout()
plt.show()
※ 画面が小さい場合は、コードブロックを横にスクロールできます
💡 コードの解説
wedgeprops={‘width’: 0.5}
・扇形の幅を0.5に設定(1だと通常の円グラフ)
・0.5にすると中央に穴が開く(ドーナツ型)
plt.text(0, 0, f’合計\n{total}万円’, …)
・座標(0, 0)=円の中心にテキストを配置
・ha=’center’, va=’center’で中央揃え
⚠️ 円グラフの注意点
・項目は5〜7個までが見やすい
・小さい項目は「その他」にまとめる
・時系列データには向かない
・正確な数値比較には棒グラフの方が適している
📝 練習問題
問題1:時系列データの可視化(初級)
📋 問題
以下の気温データを折れ線グラフで可視化してください。マーカーとグリッド線も追加してください。
days = ['月', '火', '水', '木', '金', '土', '日']
temperature = [18, 20, 22, 19, 21, 23, 24]
※ 画面が小さい場合は、コードブロックを横にスクロールできます
解答例を見る
コード
import matplotlib.pyplot as plt
days = ['月', '火', '水', '木', '金', '土', '日']
temperature = [18, 20, 22, 19, 21, 23, 24]
plt.figure(figsize=(10, 6))
plt.plot(days, temperature, marker='o', linewidth=2)
plt.title('1週間の気温推移', fontsize=16)
plt.xlabel('曜日', fontsize=12)
plt.ylabel('気温(℃)', fontsize=12)
plt.grid(True, alpha=0.3)
plt.tight_layout()
plt.show()
※ 画面が小さい場合は、コードブロックを横にスクロールできます
問題2:カテゴリ比較の棒グラフ(初級)
📋 問題
以下のデータを降順にソートして、横棒グラフで表示してください。
products = ['商品A', '商品B', '商品C', '商品D', '商品E']
sales = [120, 180, 90, 150, 110]
※ 画面が小さい場合は、コードブロックを横にスクロールできます
解答例を見る
コード
import matplotlib.pyplot as plt
import pandas as pd
products = ['商品A', '商品B', '商品C', '商品D', '商品E']
sales = [120, 180, 90, 150, 110]
# データをソート
df = pd.DataFrame({'商品': products, '売上': sales})
df = df.sort_values('売上', ascending=True)
plt.figure(figsize=(10, 6))
plt.barh(df['商品'], df['売上'], color='skyblue', edgecolor='black')
plt.title('商品別売上ランキング', fontsize=16)
plt.xlabel('売上(万円)', fontsize=12)
plt.grid(axis='x', alpha=0.3)
plt.tight_layout()
plt.show()
※ 画面が小さい場合は、コードブロックを横にスクロールできます
問題3:分布の可視化(中級)
📋 問題
正規分布に従うランダムデータ(平均100、標準偏差15、500件)を生成し、ヒストグラムで可視化してください。平均線も追加してください。
解答例を見る
コード
import matplotlib.pyplot as plt
import numpy as np
np.random.seed(42)
data = np.random.normal(100, 15, 500)
plt.figure(figsize=(10, 6))
plt.hist(data, bins=30, color='lightgreen', edgecolor='black', alpha=0.7)
mean_val = np.mean(data)
plt.axvline(mean_val, color='red', linestyle='--', linewidth=2,
label=f'平均: {mean_val:.1f}')
plt.title('データの分布', fontsize=16)
plt.xlabel('値', fontsize=12)
plt.ylabel('頻度', fontsize=12)
plt.legend(fontsize=11)
plt.grid(axis='y', alpha=0.3)
plt.tight_layout()
plt.show()
※ 画面が小さい場合は、コードブロックを横にスクロールできます
問題4:相関関係の散布図(中級)
📋 問題
広告費と売上の関係を散布図で表現し、近似直線も追加してください。
import numpy as np
np.random.seed(0)
ad_cost = np.random.uniform(10, 100, 50)
sales = 50 + 2.5 * ad_cost + np.random.normal(0, 20, 50)
※ 画面が小さい場合は、コードブロックを横にスクロールできます
解答例を見る
コード
import matplotlib.pyplot as plt
import numpy as np
np.random.seed(0)
ad_cost = np.random.uniform(10, 100, 50)
sales = 50 + 2.5 * ad_cost + np.random.normal(0, 20, 50)
plt.figure(figsize=(10, 6))
plt.scatter(ad_cost, sales, alpha=0.6, s=100, edgecolors='black')
# 近似直線
z = np.polyfit(ad_cost, sales, 1)
p = np.poly1d(z)
plt.plot(ad_cost, p(ad_cost), "r--", linewidth=2,
label=f'y={z[0]:.2f}x+{z[1]:.2f}')
plt.title('広告費と売上の関係', fontsize=16)
plt.xlabel('広告費(万円)', fontsize=12)
plt.ylabel('売上(万円)', fontsize=12)
plt.legend(fontsize=11)
plt.grid(True, alpha=0.3)
plt.tight_layout()
plt.show()
※ 画面が小さい場合は、コードブロックを横にスクロールできます
問題5:総合ダッシュボード作成(上級)
📋 問題
売上データを4つの視点(時系列、カテゴリ比較、分布、構成比)で分析するダッシュボードを作成してください。
解答例を見る
コード
import matplotlib.pyplot as plt
import numpy as np
# データ準備
np.random.seed(0)
months = ['1月', '2月', '3月', '4月', '5月', '6月']
sales = [120, 150, 130, 180, 170, 200]
categories = ['商品A', '商品B', '商品C', '商品D']
cat_sales = [250, 180, 150, 120]
all_sales = np.random.normal(150, 30, 100)
# ダッシュボード
fig, axes = plt.subplots(2, 2, figsize=(15, 12))
fig.suptitle('売上分析ダッシュボード', fontsize=18, fontweight='bold')
# 1. 時系列
axes[0, 0].plot(months, sales, marker='o', linewidth=2, color='blue')
axes[0, 0].set_title('月別売上推移', fontsize=14)
axes[0, 0].set_ylabel('売上(万円)')
axes[0, 0].grid(True, alpha=0.3)
# 2. カテゴリ比較
axes[0, 1].barh(categories, cat_sales, color='skyblue', edgecolor='black')
axes[0, 1].set_title('商品別売上比較', fontsize=14)
axes[0, 1].set_xlabel('売上(万円)')
axes[0, 1].grid(axis='x', alpha=0.3)
# 3. 分布
axes[1, 0].hist(all_sales, bins=20, color='lightgreen', edgecolor='black')
axes[1, 0].axvline(np.mean(all_sales), color='red', linestyle='--',
label=f'平均: {np.mean(all_sales):.1f}')
axes[1, 0].set_title('売上分布', fontsize=14)
axes[1, 0].set_xlabel('売上(万円)')
axes[1, 0].set_ylabel('頻度')
axes[1, 0].legend()
# 4. 構成比
axes[1, 1].pie(cat_sales, labels=categories, autopct='%1.1f%%',
startangle=90)
axes[1, 1].set_title('商品別構成比', fontsize=14)
plt.tight_layout()
plt.show()
※ 画面が小さい場合は、コードブロックを横にスクロールできます
🎯 このステップのまとめ
✅ 学んだこと
✓ 時系列データ → 折れ線グラフ、エリアチャート
✓ カテゴリ比較 → 棒グラフ(縦・横・グループ化)
✓ 分布の表現 → ヒストグラム、箱ひげ図
✓ 相関関係 → 散布図、ヒートマップ
✓ 割合・構成比 → 円グラフ、ドーナツチャート
✓ 目的に合わせた適切なグラフ選択
💡 次のステップに進む前に確認
以下のことができるようになったか確認しましょう:
□ データの種類に合わせてグラフを選べる
□ 時系列データを適切に可視化できる
□ カテゴリ比較のグラフを作れる
□ 分布や相関を可視化できる
これらができたら、次のステップに進みましょう!
❓ よくある質問
Q1: グラフの種類を間違えるとどうなりますか?
A: データの特徴が正しく伝わりません。例えば、時系列データを円グラフにすると変化の推移がわからなくなります。
Q2: 複数のグラフを使っても良いですか?
A: はい、むしろ推奨します!ダッシュボードのように複数の視点から分析すると、データの理解が深まります。
Q3: 散布図と折れ線グラフの使い分けは?
A: 散布図は2変数の相関を見る時、折れ線グラフは時間の推移を見る時に使います。散布図は点が連続している必要がありません。
Q4: 3Dグラフは使った方が良いですか?
A: 一般的には推奨しません。3Dグラフは見栄えは良いですが、正確な値が読み取りにくくなります。2Dで十分です。
Q5: グラフの色はどう選べばいいですか?
A: 意味を持たせる(赤=警告、緑=良好など)、色覚障害に配慮、多すぎない(3〜5色程度)が基本です。Seabornのカラーパレットを使うと簡単です。
学習メモ
Pythonデータ分析入門 - Step 41