STEP 17:カテゴリカルデータの可視化

📦 STEP 17: カテゴリカルデータの可視化

カテゴリ別のデータを比較するための様々なグラフをマスターしよう!

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

  • boxplot()(箱ひげ図)でデータの分布を比較
  • violinplot()(バイオリン図)で密度を可視化
  • swarmplot()(スウォームプロット)で全データ点を表示
  • barplot()(棒グラフ)で平均値を比較
  • countplot()でカテゴリの頻度を集計
  • 実践的なカテゴリカルデータ分析

📊 1. カテゴリカルデータとは

カテゴリカルデータの基本概念

カテゴリカルデータとは、グループや区分を表すデータのことです。数値ではなく、「何に属するか」を示します。

例えば、「性別(男性/女性)」「曜日(月〜日)」「血液型(A/B/O/AB)」などがカテゴリカルデータです。これらのデータを可視化することで、グループ間の違いを比較できます。

📦 カテゴリカルデータの2つの種類
種類 特徴 具体例
名義尺度 順序がない(どれが上/下ではない) 性別、色、地域、血液型
順序尺度 順序がある(大小・優劣がある) 学年、満足度(低/中/高)、サイズ(S/M/L)

カテゴリカルデータの可視化パターン

カテゴリカルデータを可視化する目的は、グループ間の違いを比較することです。何を見たいかによって、使うグラフが変わります。

【カテゴリカルデータの可視化パターン】 カテゴリ × 数値データ の分析 ↓ ┌─────────────────────────────────────────┐ │ 何を見たいか? │ ├─────────────────────────────────────────┤ │ ・平均値を比較したい → 棒グラフ │ │ ・分布全体を比較したい → 箱ひげ図 │ │ ・分布の形を見たい → バイオリン図 │ │ ・全データ点を見たい → スウォームプロット│ │ ・件数を集計したい → カウントプロット │ └─────────────────────────────────────────┘
💡 このステップで使うサンプルデータ

Seabornに内蔵されているtipsデータセットを使います。これはレストランでのチップに関するデータです。

  • total_bill:食事代(ドル)
  • tip:チップ(ドル)
  • sex:性別(Male/Female)
  • day:曜日(Thur/Fri/Sat/Sun)
  • time:時間帯(Lunch/Dinner)
  • size:人数

📦 2. boxplot()(箱ひげ図)

箱ひげ図とは何か

箱ひげ図(Box Plot)は、データの分布を5つの統計値で表現するグラフです。中央値、四分位数、そして外れ値を一目で把握できます。

箱ひげ図は特に外れ値(異常値)の発見に優れています。複数のグループのデータ分布を並べて比較するのに最適です。

📊 箱ひげ図の読み方

箱ひげ図は5つの統計値で構成されています。図と一緒に理解しましょう。

【箱ひげ図の構造】 ○ ← 外れ値(ひげの範囲外のデータ) │ ┬ ← 最大値(ひげの上端) │ ※外れ値を除いた最大値 │ ┌──┴──┐ │ │ ← 第3四分位数(Q3):上位25%の境界 │ │ ───┼─────┤ ← 中央値(Median):データの真ん中 │ │ │ │ ← 第1四分位数(Q1):下位25%の境界 └──┬──┘ │ ┴ ← 最小値(ひげの下端) │ ※外れ値を除いた最小値 ○ ← 外れ値 【各部分の意味】 ・箱(Box):データの50%が含まれる範囲(Q1〜Q3) ・箱の中の線:中央値(平均値ではない!) ・ひげ(Whisker):外れ値を除いた最小・最大値 ・点(○):外れ値(通常、Q1-1.5×IQR 以下 または Q3+1.5×IQR 以上) ※IQR = Q3 – Q1(四分位範囲)

基本的な箱ひげ図の作成

まず、シンプルな箱ひげ図を作成してみましょう。曜日別にチップの分布を比較します。

📝 コードの流れ
  1. SeabornとMatplotlibをインポート
  2. スタイルとカラーパレットを設定
  3. tipsデータを読み込み
  4. boxplot()でグラフを作成
  5. タイトルやラベルを設定
# ステップ1: ライブラリをインポート import seaborn as sns import matplotlib.pyplot as plt # ステップ2: スタイル設定 sns.set_style(‘whitegrid’) # 背景に白いグリッド線 sns.set_palette(‘colorblind’) # 色覚バリアフリーの色 # ステップ3: データ読み込み tips = sns.load_dataset(‘tips’) # ステップ4: 箱ひげ図を作成 plt.figure(figsize=(12, 6)) sns.boxplot( data=tips, # データフレーム x=’day’, # X軸:曜日(カテゴリ) y=’tip’ # Y軸:チップ(数値) ) # ステップ5: グラフの装飾 plt.title(‘曜日別チップの分布(箱ひげ図)’, fontsize=16, fontweight=’bold’, pad=15) plt.xlabel(‘曜日’, fontsize=12, fontweight=’bold’) plt.ylabel(‘チップ(ドル)’, fontsize=12, fontweight=’bold’) plt.tight_layout() plt.show()
💡 コードの各行の解説
コード 何をしているか なぜ必要か
sns.set_style('whitegrid') 白いグリッド線の背景を設定 値を読み取りやすくするため
sns.set_palette('colorblind') 色覚バリアフリーの配色を設定 誰にでも見やすいグラフにするため
sns.load_dataset('tips') Seaborn内蔵のtipsデータを読み込み 練習用のサンプルデータを使うため
data=tips 使用するデータフレームを指定 どのデータを可視化するか伝えるため
x='day', y='tip' X軸にカテゴリ、Y軸に数値を指定 曜日ごとにチップの分布を見るため

hueで色分け(グループ化)

hueパラメータを使うと、さらに別のカテゴリで色分けできます。例えば、曜日別に加えて性別でも分けてみましょう。

# ライブラリをインポート import seaborn as sns import matplotlib.pyplot as plt # データ読み込み tips = sns.load_dataset(‘tips’) # 曜日×性別のクロス集計(hueで色分け) plt.figure(figsize=(12, 6)) sns.boxplot( data=tips, x=’day’, # X軸:曜日 y=’tip’, # Y軸:チップ hue=’sex’ # 性別で色分け(Male=青系、Female=オレンジ系) ) plt.title(‘曜日・性別別チップの分布’, fontsize=16, fontweight=’bold’, pad=15) plt.xlabel(‘曜日’, fontsize=12, fontweight=’bold’) plt.ylabel(‘チップ(ドル)’, fontsize=12, fontweight=’bold’) plt.legend(title=’性別’, fontsize=10) plt.tight_layout() plt.show()
💡 箱ひげ図の使いどころ
場面 なぜ箱ひげ図が適切か
外れ値の発見 異常なデータが点として明示的に表示される
複数グループの比較 コンパクトなので多くのグループを並べられる
中央値の比較 平均値より外れ値の影響を受けにくい
ばらつきの比較 箱の大きさでばらつきが一目でわかる

🎻 3. violinplot()(バイオリン図)

バイオリン図とは何か

バイオリン図(Violin Plot)は、箱ひげ図にデータの密度(カーネル密度推定: KDE)を追加したものです。どこにデータが集中しているかが、形状でわかります。

箱ひげ図より情報量が多く、分布の形(山が1つか2つか、左右対称かなど)を視覚的に把握できます。

【バイオリン図のイメージ】 箱ひげ図: バイオリン図: ┬ ╭─╮ │ ╭─╯ ╰─╮ ┌─┴─┐ ╭╯ ╰╮ ← 膨らんでいる部分 = データが多い │ │ ╭╯ ╰╮ ├───┤ → │ ─ │ ← 中央値(白い点など) │ │ ╰╮ ╭╯ └─┬─┘ ╰╮ ╭╯ ← 細い部分 = データが少ない │ ╰─╮ ╭─╯ ┴ ╰─╯ 【特徴】 ・膨らんでいる部分:データが多い(密度が高い) ・細い部分:データが少ない(密度が低い) ・全体の形状から分布の特徴がわかる

基本的なバイオリン図の作成

箱ひげ図と同じデータでバイオリン図を作成してみましょう。

# ライブラリをインポート import seaborn as sns import matplotlib.pyplot as plt # データ読み込み tips = sns.load_dataset(‘tips’) # バイオリン図を作成 plt.figure(figsize=(12, 6)) sns.violinplot( data=tips, x=’day’, # X軸:曜日 y=’tip’ # Y軸:チップ ) plt.title(‘曜日別チップの分布(バイオリン図)’, fontsize=16, fontweight=’bold’, pad=15) plt.xlabel(‘曜日’, fontsize=12, fontweight=’bold’) plt.ylabel(‘チップ(ドル)’, fontsize=12, fontweight=’bold’) plt.tight_layout() plt.show()

分割バイオリン図(split=True)

split=Trueを使うと、1つのバイオリンを左右に分割して2つのグループを比較できます。これは2グループ(例:男女)の比較に最適です。

# ライブラリをインポート import seaborn as sns import matplotlib.pyplot as plt # データ読み込み tips = sns.load_dataset(‘tips’) # 分割バイオリン図(左右に分けて比較) plt.figure(figsize=(12, 6)) sns.violinplot( data=tips, x=’day’, # X軸:曜日 y=’tip’, # Y軸:チップ hue=’sex’, # 性別で色分け split=True # 左右に分割して表示 ) plt.title(‘曜日・性別別チップの分布(分割バイオリン図)’, fontsize=16, fontweight=’bold’, pad=15) plt.xlabel(‘曜日’, fontsize=12, fontweight=’bold’) plt.ylabel(‘チップ(ドル)’, fontsize=12, fontweight=’bold’) plt.legend(title=’性別’, fontsize=10) plt.tight_layout() plt.show()

innerパラメータでカスタマイズ

innerパラメータを使うと、バイオリンの内部に表示する情報を変更できます。

# ライブラリをインポート import seaborn as sns import matplotlib.pyplot as plt # データ読み込み tips = sns.load_dataset(‘tips’) # バイオリン図の中に箱ひげ図を表示 plt.figure(figsize=(12, 6)) sns.violinplot( data=tips, x=’day’, y=’tip’, inner=’box’ # 内部に箱ひげ図を表示(推奨) ) plt.title(‘曜日別チップの分布(バイオリン+箱ひげ)’, fontsize=16, fontweight=’bold’, pad=15) plt.xlabel(‘曜日’, fontsize=12, fontweight=’bold’) plt.ylabel(‘チップ(ドル)’, fontsize=12, fontweight=’bold’) plt.tight_layout() plt.show()
🎻 innerパラメータの選択肢
表示内容 おすすめ場面
inner='box' 小さな箱ひげ図を表示 分布と統計値を両方見たい(推奨)
inner='quartile' 四分位数の線のみ表示 シンプルに四分位だけ見たい
inner='point' 個別のデータ点を表示 データ数が少ない場合
inner=None バイオリンの形状のみ 分布の形だけを見たい

🐝 4. swarmplot()(スウォームプロット)

スウォームプロットとは何か

スウォームプロット(Swarm Plot)は、すべてのデータ点を重ならないように配置するグラフです。名前の由来は、点が蜂の群れ(swarm)のように広がる様子からきています。

箱ひげ図やバイオリン図では見えない「個々のデータ点」を確認したい場合に使います。ただし、データ数が多すぎると重くなるので注意が必要です。

基本的なスウォームプロット

# ライブラリをインポート import seaborn as sns import matplotlib.pyplot as plt # データ読み込み tips = sns.load_dataset(‘tips’) # スウォームプロットを作成 plt.figure(figsize=(12, 6)) sns.swarmplot( data=tips, x=’day’, # X軸:曜日 y=’tip’, # Y軸:チップ size=5 # データ点のサイズ ) plt.title(‘曜日別チップ(全データ点表示)’, fontsize=16, fontweight=’bold’, pad=15) plt.xlabel(‘曜日’, fontsize=12, fontweight=’bold’) plt.ylabel(‘チップ(ドル)’, fontsize=12, fontweight=’bold’) plt.tight_layout() plt.show()

バイオリン図と重ねて表示

スウォームプロットは単独で使うよりも、箱ひげ図やバイオリン図と重ねて使うと効果的です。分布の形状と個々のデータ点を同時に確認できます。

# ライブラリをインポート import seaborn as sns import matplotlib.pyplot as plt # データ読み込み tips = sns.load_dataset(‘tips’) # バイオリン図とスウォームプロットを重ねる plt.figure(figsize=(12, 6)) # 背景: バイオリン図(薄いグレーで目立たなくする) sns.violinplot( data=tips, x=’day’, y=’tip’, color=’lightgray’, # グレーに設定 alpha=0.5 # 半透明に ) # 前面: スウォームプロット(色分けして目立たせる) sns.swarmplot( data=tips, x=’day’, y=’tip’, hue=’sex’, # 性別で色分け size=4 # 少し小さめに ) plt.title(‘曜日別チップ(バイオリン+スウォーム)’, fontsize=16, fontweight=’bold’, pad=15) plt.xlabel(‘曜日’, fontsize=12, fontweight=’bold’) plt.ylabel(‘チップ(ドル)’, fontsize=12, fontweight=’bold’) plt.legend(title=’性別’, fontsize=10) plt.tight_layout() plt.show()
⚠️ スウォームプロットの注意点
注意点 詳細 対策
データ数の制限 1000点以上あると処理が重くなる サンプリング(.sample(n=500))を使う
重なりの警告 点が多いと警告が出ることがある stripplot()やkdeplotを検討
見た目の調整 sizeが大きいと重なりやすい size=3〜5程度が適切

📊 5. barplot()(棒グラフ)

Seabornのbarplot()の特徴

Seabornのbarplot()は、MatplotlibのものとPは異なり、平均値を自動計算し、信頼区間(エラーバー)も表示します。

データフレームを渡すだけで、グループごとの平均値と統計的な信頼性を同時に示せるため、非常に便利です。

基本的な棒グラフ

# ライブラリをインポート import seaborn as sns import matplotlib.pyplot as plt # データ読み込み tips = sns.load_dataset(‘tips’) # 曜日別の平均チップを自動計算して表示 plt.figure(figsize=(12, 6)) sns.barplot( data=tips, x=’day’, # X軸:曜日 y=’tip’, # Y軸:チップ(自動で平均値を計算) errorbar=’ci’ # 95%信頼区間を表示(デフォルト) ) plt.title(‘曜日別平均チップ(95%信頼区間付き)’, fontsize=16, fontweight=’bold’, pad=15) plt.xlabel(‘曜日’, fontsize=12, fontweight=’bold’) plt.ylabel(‘平均チップ(ドル)’, fontsize=12, fontweight=’bold’) plt.tight_layout() plt.show()
💡 信頼区間(エラーバー)とは

棒の上に表示される縦線は95%信頼区間です。「真の平均値がこの範囲にある確率が95%」という意味です。

  • エラーバーが長い:データのばらつきが大きい、または件数が少ない
  • エラーバーが短い:データが安定している、または件数が多い
  • エラーバーが重なっている:グループ間に統計的な差がない可能性

性別で色分け

# ライブラリをインポート import seaborn as sns import matplotlib.pyplot as plt # データ読み込み tips = sns.load_dataset(‘tips’) # 曜日×性別の平均チップ plt.figure(figsize=(12, 6)) sns.barplot( data=tips, x=’day’, # X軸:曜日 y=’tip’, # Y軸:チップ(平均値) hue=’sex’ # 性別で色分け ) plt.title(‘曜日・性別別の平均チップ’, fontsize=16, fontweight=’bold’, pad=15) plt.xlabel(‘曜日’, fontsize=12, fontweight=’bold’) plt.ylabel(‘平均チップ(ドル)’, fontsize=12, fontweight=’bold’) plt.legend(title=’性別’, fontsize=10) plt.tight_layout() plt.show()

水平棒グラフ

xとyを入れ替えると、水平方向の棒グラフになります。カテゴリ名が長い場合に便利です。

# ライブラリをインポート import seaborn as sns import matplotlib.pyplot as plt # データ読み込み tips = sns.load_dataset(‘tips’) # 水平棒グラフ(xとyを入れ替え) plt.figure(figsize=(10, 6)) sns.barplot( data=tips, y=’day’, # Y軸に曜日(カテゴリ) x=’tip’, # X軸にチップ(数値) orient=’h’ # 水平方向を明示(オプション) ) plt.title(‘曜日別平均チップ(水平棒グラフ)’, fontsize=16, fontweight=’bold’, pad=15) plt.ylabel(‘曜日’, fontsize=12, fontweight=’bold’) plt.xlabel(‘平均チップ(ドル)’, fontsize=12, fontweight=’bold’) plt.tight_layout() plt.show()

📈 6. countplot()(頻度集計)

countplot()とは何か

countplot()は、カテゴリの出現回数(頻度)を自動で集計して棒グラフで表示します。barplot()との違いは、countplot()は「件数」を、barplot()は「平均値」を表示することです。

データの偏り(例:曜日ごとのデータ件数の違い)を確認するのに便利です。

基本的なカウントプロット

# ライブラリをインポート import seaborn as sns import matplotlib.pyplot as plt # データ読み込み tips = sns.load_dataset(‘tips’) # 曜日別のデータ件数を自動集計 plt.figure(figsize=(12, 6)) sns.countplot( data=tips, x=’day’ # X軸:曜日(自動で件数を集計) ) plt.title(‘曜日別のデータ件数’, fontsize=16, fontweight=’bold’, pad=15) plt.xlabel(‘曜日’, fontsize=12, fontweight=’bold’) plt.ylabel(‘件数’, fontsize=12, fontweight=’bold’) plt.tight_layout() plt.show()

性別で色分け

# ライブラリをインポート import seaborn as sns import matplotlib.pyplot as plt # データ読み込み tips = sns.load_dataset(‘tips’) # 曜日×性別のクロス集計 plt.figure(figsize=(12, 6)) sns.countplot( data=tips, x=’day’, # X軸:曜日 hue=’sex’ # 性別で色分け ) plt.title(‘曜日・性別別のデータ件数’, fontsize=16, fontweight=’bold’, pad=15) plt.xlabel(‘曜日’, fontsize=12, fontweight=’bold’) plt.ylabel(‘件数’, fontsize=12, fontweight=’bold’) plt.legend(title=’性別’, fontsize=10) plt.tight_layout() plt.show()
💡 countplot() vs barplot() の違い
項目 countplot() barplot()
表示する値 データの件数(頻度) 数値の平均値
y引数 不要(自動で件数を集計) 必要(平均を計算する列)
エラーバー なし あり(信頼区間)
使用場面 データの偏りを確認 グループの平均を比較

🎯 7. 実践例:4つのグラフを比較

同じデータを4つの方法で可視化

同じデータを異なるグラフで表現し、それぞれの特徴を比較してみましょう。2×2のレイアウトで4つのグラフを並べます。

# ライブラリをインポート import seaborn as sns import matplotlib.pyplot as plt # データ読み込み tips = sns.load_dataset(‘tips’) # スタイル設定 sns.set_style(‘whitegrid’) sns.set_palette(‘Set2′) # 2×2のレイアウトでグラフを作成 fig, axes = plt.subplots(2, 2, figsize=(16, 12)) # ===== 1. 箱ひげ図(左上)===== sns.boxplot( data=tips, x=’day’, y=’tip’, hue=’sex’, ax=axes[0, 0] # 左上に配置 ) axes[0, 0].set_title(‘箱ひげ図(分布の比較)’, fontsize=14, fontweight=’bold’) axes[0, 0].set_xlabel(‘曜日’, fontsize=11) axes[0, 0].set_ylabel(‘チップ(ドル)’, fontsize=11) axes[0, 0].legend(title=’性別’, fontsize=9) # ===== 2. バイオリン図(右上)===== sns.violinplot( data=tips, x=’day’, y=’tip’, hue=’sex’, split=True, # 左右に分割 ax=axes[0, 1] # 右上に配置 ) axes[0, 1].set_title(‘バイオリン図(密度の可視化)’, fontsize=14, fontweight=’bold’) axes[0, 1].set_xlabel(‘曜日’, fontsize=11) axes[0, 1].set_ylabel(‘チップ(ドル)’, fontsize=11) axes[0, 1].legend(title=’性別’, fontsize=9) # ===== 3. 棒グラフ(左下)===== sns.barplot( data=tips, x=’day’, y=’tip’, hue=’sex’, ax=axes[1, 0] # 左下に配置 ) axes[1, 0].set_title(‘棒グラフ(平均値の比較)’, fontsize=14, fontweight=’bold’) axes[1, 0].set_xlabel(‘曜日’, fontsize=11) axes[1, 0].set_ylabel(‘平均チップ(ドル)’, fontsize=11) axes[1, 0].legend(title=’性別’, fontsize=9) # ===== 4. カウントプロット(右下)===== sns.countplot( data=tips, x=’day’, hue=’sex’, ax=axes[1, 1] # 右下に配置 ) axes[1, 1].set_title(‘カウントプロット(件数の集計)’, fontsize=14, fontweight=’bold’) axes[1, 1].set_xlabel(‘曜日’, fontsize=11) axes[1, 1].set_ylabel(‘件数’, fontsize=11) axes[1, 1].legend(title=’性別’, fontsize=9) # 全体のタイトル plt.suptitle(‘📊 カテゴリカルデータ可視化の4つの方法’, fontsize=18, fontweight=’bold’, y=0.995) # レイアウト調整 plt.tight_layout() # 保存 plt.savefig(‘categorical_comparison.png’, dpi=300, bbox_inches=’tight’) plt.show()
📊 グラフの使い分け早見表
グラフ 見せたい情報 特徴 おすすめ場面
箱ひげ図 分布、外れ値 5つの統計値を表示 異常値の発見、分布の比較
バイオリン図 分布の形状 密度(KDE)を可視化 分布の詳細な比較、見栄えの良いプレゼン
スウォーム 全データ点 すべての点を表示 少量データの詳細確認
棒グラフ 平均値 信頼区間も表示 グループ間の平均比較
カウント 頻度、件数 件数を自動集計 データの偏りを確認

📝 STEP 17 のまとめ

✅ このステップで学んだこと
トピック 重要ポイント
カテゴリカルデータ グループや区分を表すデータ。比較が目的
boxplot() 箱ひげ図。分布と外れ値を確認
violinplot() バイオリン図。密度(分布の形)を可視化
swarmplot() 全データ点を重ならず表示
barplot() 平均値と信頼区間を自動計算
countplot() 頻度(件数)を自動集計
hue引数 別のカテゴリで色分けできる
💡 最重要ポイント

カテゴリカルデータの可視化では、見せたい情報に応じてグラフを選択することが重要です。

  • 分布全体を見たい → 箱ひげ図 / バイオリン図
  • 平均値を比較したい → 棒グラフ
  • データ件数を確認したい → カウントプロット
  • 個別のデータ点を見たい → スウォームプロット

次のステップでは、インタラクティブなグラフを作成できるPlotlyを学びます!

📝 実践演習

演習 1 基礎

tipsデータで、曜日別のチップの箱ひげ図を作成してください。

【解答コード】
import seaborn as sns import matplotlib.pyplot as plt # スタイル設定 sns.set_style(‘whitegrid’) # データ読み込み tips = sns.load_dataset(‘tips’) # 箱ひげ図を作成 plt.figure(figsize=(12, 6)) sns.boxplot(data=tips, x=’day’, y=’tip’) plt.title(‘曜日別チップの箱ひげ図’, fontsize=16, fontweight=’bold’, pad=15) plt.xlabel(‘曜日’, fontsize=12) plt.ylabel(‘チップ(ドル)’, fontsize=12) plt.tight_layout() plt.show()

ポイント:x=’day’でカテゴリ(曜日)、y=’tip’で数値(チップ)を指定します。

演習 2 応用

tipsデータで、曜日・性別別のチップの分割バイオリン図を作成してください。

【解答コード】
import seaborn as sns import matplotlib.pyplot as plt # スタイル設定 sns.set_style(‘whitegrid’) # データ読み込み tips = sns.load_dataset(‘tips’) # 分割バイオリン図を作成 plt.figure(figsize=(12, 6)) sns.violinplot( data=tips, x=’day’, y=’tip’, hue=’sex’, split=True # 左右に分割 ) plt.title(‘曜日・性別別チップ(分割バイオリン図)’, fontsize=16, fontweight=’bold’, pad=15) plt.xlabel(‘曜日’, fontsize=12) plt.ylabel(‘チップ(ドル)’, fontsize=12) plt.legend(title=’性別’, fontsize=10) plt.tight_layout() plt.show()

ポイント:split=Trueで男女を左右に分割表示。hue=’sex’で性別を色分けしています。

演習 3 発展

tipsデータで、バイオリン図とスウォームプロットを重ねたグラフを作成してください。

【解答コード】
import seaborn as sns import matplotlib.pyplot as plt # スタイル設定 sns.set_style(‘whitegrid’) # データ読み込み tips = sns.load_dataset(‘tips’) # グラフ作成 plt.figure(figsize=(12, 6)) # 背景: バイオリン図(薄いグレー) sns.violinplot( data=tips, x=’day’, y=’tip’, color=’lightgray’, # グレーに設定 alpha=0.5 # 半透明に ) # 前面: スウォームプロット(色分け) sns.swarmplot( data=tips, x=’day’, y=’tip’, hue=’sex’, # 性別で色分け size=4 # 点のサイズ ) plt.title(‘曜日別チップ(バイオリン+スウォーム)’, fontsize=16, fontweight=’bold’, pad=15) plt.xlabel(‘曜日’, fontsize=12) plt.ylabel(‘チップ(ドル)’, fontsize=12) plt.legend(title=’性別’, fontsize=10) plt.tight_layout() plt.show()

ポイント:先にviolinplot()、次にswarmplot()の順で描画すると、バイオリンが背景になります。バイオリンは薄くして(alpha=0.5)、スウォームを目立たせています。

❓ よくある質問

Q1: 箱ひげ図とバイオリン図はどちらを使うべきですか?
目的で使い分けましょう。外れ値を強調したい場合は箱ひげ図、分布の形状を詳しく見たい場合はバイオリン図がおすすめです。プレゼンでは見た目が美しいバイオリン図、統計レポートでは標準的な箱ひげ図が好まれる傾向があります。
Q2: barplot()の信頼区間(エラーバー)が長すぎます。どうすればいいですか?
これはデータのばらつきが大きいことを示しています。信頼区間を短くしたい場合は、errorbar=’se’(標準誤差)を使うか、errorbar=Noneで非表示にできます。ただし、データの実態を正しく伝えるためには表示を推奨します。ばらつきが大きいこと自体が重要な情報だからです。
Q3: スウォームプロットが重くて動きません。どうすればいいですか?
データ数が多すぎる可能性があります。1000点以上あると処理が重くなるので、サンプリング(例:tips.sample(n=500))で点を減らすか、stripplot()を使いましょう。または、hexbinやkdeplotで密度を表現する方法もあります。
Q4: hueで色分けしたとき、凡例が邪魔です。移動できますか?
plt.legend()のloc引数で位置を調整できます。例えば、plt.legend(loc=’upper right’)で右上、plt.legend(bbox_to_anchor=(1.05, 1))でグラフの外側に配置できます。凡例を非表示にしたい場合はplt.legend([])を使います。
Q5: 複数のグラフを重ねたいとき、描画の順序は重要ですか?
はい、重要です。先に描画したグラフが背景、後に描画したグラフが前面になります。例えば、バイオリン図を背景、スウォームプロットを前面にしたい場合は、violinplot()を先に、swarmplot()を後に書きます。
📝

学習メモ

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

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