📋 このステップで学ぶこと
- Seabornの3大関数(relplot、displot、catplot)の使い分け
- relplot()で変数間の関係性を可視化する方法
- displot()でデータの分布を可視化する方法
- catplot()でカテゴリカルデータを可視化する方法
- 統計情報(平均、信頼区間)の自動計算と表示
- 実践的なデータ分析ダッシュボードの作成
🎯 1. Seabornの3大関数とは
なぜ3大関数を学ぶのか
Seabornには多くの関数がありますが、最も重要なのはrelplot()、displot()、catplot()の3つです。これらを「3大関数」と呼びます。
この3つの関数を覚えれば、ほとんどのデータ可視化に対応できます。それぞれが異なる種類のデータ分析に特化しているため、データの種類に応じて使い分けます。
💡 3大関数を料理に例えると
3大関数は、料理の調理法に似ています。
relplot(焼く):2つの食材の組み合わせを見る(肉と野菜の相性)
displot(切る):1つの食材の中身を調べる(断面を見る)
catplot(盛り付け):カテゴリ別に分けて比較する(前菜・メイン・デザート別)
📊 Seabornの3大関数
| 関数 |
用途 |
作れるグラフ |
使う場面 |
| relplot() |
変数間の関係性 |
散布図、折れ線グラフ |
「AとBに関係があるか?」 |
| displot() |
データの分布 |
ヒストグラム、KDE、ECDF |
「データはどう散らばっている?」 |
| catplot() |
カテゴリカルデータ |
棒グラフ、箱ひげ図、バイオリン図 |
「グループ間で違いがある?」 |
小文字のplotと大文字のPlotの違い
Seabornには似たような名前の関数がたくさんあります。例えば、scatterplot()とrelplot()、histplot()とdisplot()などです。これらの違いを理解しましょう。
📝 小文字plot vs 大文字Plot
| 種類 |
例 |
特徴 |
使いどころ |
| 小文字(〜plot) |
scatterplot()、histplot() |
1つのグラフだけを作成 |
plt.subplot()と組み合わせるとき |
| 大文字(〜Plot) |
relplot()、displot() |
複数グラフを自動配置できる |
単体で使うとき(推奨) |
💡 初心者へのアドバイス
基本的には大文字版(relplot、displot、catplot)を使うことを推奨します。大文字版は、複数のグラフを自動で配置する「ファセット」機能が使えるなど、より高機能です。小文字版は、複数のグラフを1つの図に並べたいときに使います。
🔗 2. relplot()(関係性の可視化)
relplot()とは
relplot()は、「relation(関係)」を可視化する関数です。2つの変数の間にどのような関係があるかを調べるときに使います。
例えば、「会計額が高いとチップも多いのか?」「広告費を増やすと売上は伸びるのか?」といった疑問に答えるのに適しています。
📊 relplot()で作れるグラフ
| kind |
グラフの種類 |
使う場面 |
| kind=’scatter’ |
散布図(デフォルト) |
2変数の相関を見たいとき |
| kind=’line’ |
折れ線グラフ |
時系列の変化を見たいとき |
基本的な散布図を作る
まずは、最もシンプルな散布図を作成してみましょう。Seabornに付属している「tips」データセット(レストランのチップデータ)を使います。
コードを1つずつ見ていきましょう。
# ライブラリを読み込む
import seaborn as sns
import matplotlib.pyplot as plt
📝 インポートの意味
| コード |
意味 |
なぜ必要か |
| import seaborn as sns |
Seabornをsnsという名前で読み込む |
統計的可視化の機能を使うため |
| import matplotlib.pyplot as plt |
Matplotlibをpltという名前で読み込む |
タイトル追加や表示制御のため |
# スタイルとカラーパレットを設定
sns.set_style(‘whitegrid’)
sns.set_palette(‘colorblind’)
📝 スタイル設定の意味
| コード |
意味 |
なぜ使うか |
| sns.set_style(‘whitegrid’) |
白背景にグリッド線を表示 |
データが見やすくなる |
| sns.set_palette(‘colorblind’) |
色覚バリアフリーな色を使用 |
誰にでも見やすい配色になる |
# サンプルデータを読み込む
tips = sns.load_dataset(‘tips’)
📝 データ読み込みの意味
sns.load_dataset(‘tips’)は、Seabornに付属しているサンプルデータを読み込む関数です。’tips’はレストランのチップに関するデータで、以下の列が含まれています。
| 列名 |
意味 |
データ型 |
| total_bill |
会計額(ドル) |
数値 |
| tip |
チップ(ドル) |
数値 |
| sex |
性別 |
カテゴリ |
| day |
曜日 |
カテゴリ |
| time |
時間帯(Lunch/Dinner) |
カテゴリ |
| size |
人数 |
数値 |
# 散布図を作成
sns.relplot(
data=tips,
x=’total_bill’,
y=’tip’,
height=6,
aspect=1.5
)
📝 relplot()のパラメータ
| パラメータ |
意味 |
設定値の例 |
| data |
使用するデータフレーム |
tips(読み込んだデータ) |
| x |
X軸に使う列名 |
‘total_bill’(会計額) |
| y |
Y軸に使う列名 |
‘tip’(チップ) |
| height |
グラフの高さ(インチ) |
6 |
| aspect |
アスペクト比(幅÷高さ) |
1.5(幅が高さの1.5倍) |
完成コード:基本的な散布図
上記のコードをまとめた完成版です。コードセルに入力して実行してください。
# =========================================
# 【実践】基本的な散布図
# =========================================
import seaborn as sns
import matplotlib.pyplot as plt
# スタイル設定
sns.set_style(‘whitegrid’)
sns.set_palette(‘colorblind’)
# データ読み込み
tips = sns.load_dataset(‘tips’)
# 散布図を作成
sns.relplot(
data=tips,
x=’total_bill’, # X軸: 会計額
y=’tip’, # Y軸: チップ
height=6, # 図の高さ
aspect=1.5 # アスペクト比
)
# タイトルを追加
plt.title(‘会計額とチップの関係’, fontsize=16, fontweight=’bold’, pad=15)
plt.tight_layout()
plt.show()
色とサイズで情報を追加する
散布図に色(hue)やサイズ(size)を追加すると、1つのグラフで4つの変数を同時に表現できます。これを「多次元データの可視化」と呼びます。
🎨 追加できるパラメータ
| パラメータ |
意味 |
効果 |
| hue |
色分けに使う列 |
カテゴリ別に色が変わる |
| size |
サイズに使う列 |
値に応じて点の大きさが変わる |
| style |
マーカー形状に使う列 |
カテゴリ別に形が変わる |
| col |
列方向に分割する列 |
カテゴリ別に複数グラフを横に並べる |
| row |
行方向に分割する列 |
カテゴリ別に複数グラフを縦に並べる |
# =========================================
# 【実践】色とサイズで4次元データを表現
# =========================================
import seaborn as sns
import matplotlib.pyplot as plt
# スタイル設定
sns.set_style(‘whitegrid’)
sns.set_palette(‘colorblind’)
# データ読み込み
tips = sns.load_dataset(‘tips’)
# 色とサイズを追加した散布図
sns.relplot(
data=tips,
x=’total_bill’, # X軸: 会計額
y=’tip’, # Y軸: チップ
hue=’day’, # 色: 曜日で色分け
size=’size’, # サイズ: 人数で大きさ変更
height=6,
aspect=1.5
)
plt.title(‘会計額とチップの関係(曜日・人数別)’,
fontsize=16, fontweight=’bold’, pad=15)
plt.tight_layout()
plt.show()
【このグラフから読み取れること】
・X軸(横軸): 会計額が高いほど右に位置
・Y軸(縦軸): チップが多いほど上に位置
・色: 曜日によって色が異なる
・サイズ: 人数が多いほど点が大きい
→ 会計額とチップには正の相関がある(右肩上がり)
→ 土日(週末)の方がチップが多い傾向
→ 人数が多いグループは会計額も高い
折れ線グラフ(kind=’line’)
relplot()は散布図だけでなく、折れ線グラフも作成できます。時系列データの変化を見るのに適しています。
Seabornの折れ線グラフには特別な機能があります。同じX値に複数のデータがある場合、自動で平均値を計算し、信頼区間(影の部分)も表示してくれます。
# =========================================
# 【実践】折れ線グラフ(自動で平均と信頼区間を計算)
# =========================================
import seaborn as sns
import matplotlib.pyplot as plt
# フライトデータを読み込み
flights = sns.load_dataset(‘flights’)
# 折れ線グラフを作成
sns.relplot(
data=flights,
x=’year’, # X軸: 年
y=’passengers’, # Y軸: 乗客数
kind=’line’, # グラフの種類: 折れ線
height=6,
aspect=1.8
)
plt.title(‘年別乗客数の推移’, fontsize=16, fontweight=’bold’, pad=15)
plt.tight_layout()
plt.show()
✨ Seabornの折れ線グラフのすごいところ
上のグラフでは、各年に12ヶ月分のデータがあります。Seabornは自動的に以下を計算します。
・実線:各年の平均乗客数
・影の部分:95%信頼区間(データのばらつきの範囲)
ファセット(グラフの分割)
ファセット(facet)とは、カテゴリ別にグラフを分割して並べる機能です。col(列方向)やrow(行方向)を指定すると、自動でグラフが分割されます。
# =========================================
# 【実践】月別にグラフを分割(ファセット)
# =========================================
import seaborn as sns
import matplotlib.pyplot as plt
# フライトデータを読み込み
flights = sns.load_dataset(‘flights’)
# 月別にグラフを分割
sns.relplot(
data=flights,
x=’year’, # X軸: 年
y=’passengers’, # Y軸: 乗客数
kind=’line’, # 折れ線グラフ
col=’month’, # 月別に列で分割
col_wrap=4, # 4列で折り返し
height=3, # 各グラフの高さ
aspect=1.2 # 各グラフのアスペクト比
)
plt.tight_layout()
plt.show()
📝 ファセットのパラメータ
| パラメータ |
意味 |
効果 |
| col=’month’ |
列方向に分割するカテゴリ |
月ごとに別のグラフが作られる |
| col_wrap=4 |
何列で折り返すか |
4列×3行のレイアウトになる |
📊 3. displot()(分布の可視化)
displot()とは
displot()は、「distribution(分布)」を可視化する関数です。1つの変数がどのように散らばっているかを調べるときに使います。
例えば、「会計額は平均いくらぐらいか?」「ばらつきは大きいか小さいか?」「特定の金額に集中しているか?」といった疑問に答えるのに適しています。
📊 displot()で作れるグラフ
| kind |
グラフの種類 |
特徴 |
| kind=’hist’ |
ヒストグラム(デフォルト) |
棒の高さでデータ数を表現 |
| kind=’kde’ |
カーネル密度推定(KDE) |
滑らかな曲線で分布を表現 |
| kind=’ecdf’ |
累積分布関数(ECDF) |
「〇以下の割合」を表現 |
ヒストグラムを作る
ヒストグラムは、データを「ビン(区間)」に分けて、各区間のデータ数を棒の高さで表します。最も基本的な分布の可視化方法です。
# =========================================
# 【実践】ヒストグラム
# =========================================
import seaborn as sns
import matplotlib.pyplot as plt
# データ読み込み
tips = sns.load_dataset(‘tips’)
# ヒストグラムを作成
sns.displot(
data=tips,
x=’total_bill’, # 分布を見たい列
bins=20, # ビン(区間)の数
height=6,
aspect=1.5
)
plt.title(‘会計額の分布’, fontsize=16, fontweight=’bold’, pad=15)
plt.tight_layout()
plt.show()
📝 binsパラメータの意味
bins(ビン)は、データを何個の区間に分けるかを指定します。
・bins=10:大まかな分布がわかる(粗い)
・bins=20:標準的な細かさ(推奨)
・bins=50:詳細な分布がわかる(データ数が多いとき)
KDE(カーネル密度推定)を作る
KDE(Kernel Density Estimation)は、ヒストグラムを滑らかな曲線で表現したものです。データの「形状」がより直感的にわかります。
# =========================================
# 【実践】KDE(滑らかな分布曲線)
# =========================================
import seaborn as sns
import matplotlib.pyplot as plt
tips = sns.load_dataset(‘tips’)
# KDEを作成
sns.displot(
data=tips,
x=’total_bill’,
kind=’kde’, # KDEを指定
fill=True, # 曲線の下を塗りつぶす
height=6,
aspect=1.5
)
plt.title(‘会計額の分布(KDE)’, fontsize=16, fontweight=’bold’, pad=15)
plt.tight_layout()
plt.show()
ヒストグラムとKDEを重ねる
ヒストグラムとKDEを重ねて表示すると、具体的なデータ数と滑らかな分布の両方がわかります。
# =========================================
# 【実践】ヒストグラム + KDE
# =========================================
import seaborn as sns
import matplotlib.pyplot as plt
tips = sns.load_dataset(‘tips’)
# ヒストグラムとKDEを重ねて表示
sns.displot(
data=tips,
x=’total_bill’,
kde=True, # KDEを追加
bins=20,
height=6,
aspect=1.5
)
plt.title(‘会計額の分布(ヒストグラム + KDE)’,
fontsize=16, fontweight=’bold’, pad=15)
plt.tight_layout()
plt.show()
カテゴリ別に分布を比較する
hueパラメータを使うと、カテゴリ別の分布を重ねて比較できます。グループ間の違いが一目でわかります。
# =========================================
# 【実践】性別で分布を比較
# =========================================
import seaborn as sns
import matplotlib.pyplot as plt
tips = sns.load_dataset(‘tips’)
# 性別で色分けして分布を比較
sns.displot(
data=tips,
x=’total_bill’,
hue=’sex’, # 性別で色分け
kde=True, # KDEも追加
bins=20,
height=6,
aspect=1.5
)
plt.title(‘会計額の分布(性別比較)’, fontsize=16, fontweight=’bold’, pad=15)
plt.tight_layout()
plt.show()
📦 4. catplot()(カテゴリカルデータ)
catplot()とは
catplot()は、「categorical(カテゴリ)」データを可視化する関数です。グループ間の比較をするときに使います。
例えば、「曜日によってチップは変わるか?」「性別で売上に差があるか?」といった疑問に答えるのに適しています。
💡 カテゴリカルデータとは
カテゴリカルデータとは、「種類」や「グループ」を表すデータです。
カテゴリカルデータの例:曜日(月〜日)、性別(男/女)、時間帯(Lunch/Dinner)、地域(東京/大阪)
数値データの例:金額、人数、気温、距離
📊 catplot()で作れるグラフ
| kind |
グラフの種類 |
特徴 |
使う場面 |
| kind=’strip’ |
ストリッププロット |
全データ点を表示 |
生データを見たいとき |
| kind=’swarm’ |
スウォームプロット |
重ならないよう配置 |
データの分布を見たいとき |
| kind=’box’ |
箱ひげ図 |
中央値・四分位を表示 |
ばらつきを比較したいとき |
| kind=’violin’ |
バイオリン図 |
分布を滑らかに表現 |
分布の形を比較したいとき |
| kind=’bar’ |
棒グラフ |
平均値を表示 |
平均を比較したいとき |
| kind=’point’ |
ポイントプロット |
平均値と信頼区間 |
変化を追いたいとき |
棒グラフ(kind=’bar’)
catplot()の棒グラフは、自動で平均値を計算してくれます。さらに、信頼区間(エラーバー)も自動表示されます。
# =========================================
# 【実践】曜日別の平均チップ(自動計算)
# =========================================
import seaborn as sns
import matplotlib.pyplot as plt
tips = sns.load_dataset(‘tips’)
# 棒グラフを作成(平均値を自動計算)
sns.catplot(
data=tips,
x=’day’, # X軸: 曜日
y=’tip’, # Y軸: チップ
kind=’bar’, # 棒グラフ
height=6,
aspect=1.5
)
plt.title(‘曜日別平均チップ’, fontsize=16, fontweight=’bold’, pad=15)
plt.tight_layout()
plt.show()
✨ catplot()のすごいところ
上のコードでは、たった1行で以下のことを自動で行っています。
1. 曜日別にデータをグループ化
2. 各曜日のチップの平均値を計算
3. 95%信頼区間を計算してエラーバーを表示
Matplotlibだけでこれをやろうとすると、事前にgroupby()で集計する必要があり、10行以上のコードが必要です!
箱ひげ図(kind=’box’)
箱ひげ図は、データの中央値、四分位数、外れ値を1つのグラフで表現できます。データのばらつきを比較するのに最適です。
# =========================================
# 【実践】箱ひげ図
# =========================================
import seaborn as sns
import matplotlib.pyplot as plt
tips = sns.load_dataset(‘tips’)
# 箱ひげ図を作成
sns.catplot(
data=tips,
x=’day’, # X軸: 曜日
y=’tip’, # Y軸: チップ
kind=’box’, # 箱ひげ図
height=6,
aspect=1.5
)
plt.title(‘曜日別チップの分布(箱ひげ図)’,
fontsize=16, fontweight=’bold’, pad=15)
plt.tight_layout()
plt.show()
【箱ひげ図の読み方】
┌─────┐ ← 最大値(外れ値を除く)
│ │
├─────┤ ← 第3四分位(75%)
│ ─ │ ← 中央値(50%)
├─────┤ ← 第1四分位(25%)
│ │
└─────┘ ← 最小値(外れ値を除く)
● ← 外れ値(点で表示)
箱の高さ = データの50%が含まれる範囲(四分位範囲)
箱が大きい = ばらつきが大きい
バイオリン図(kind=’violin’)
バイオリン図は、箱ひげ図とKDEを組み合わせたグラフです。分布の形状がより直感的にわかります。
# =========================================
# 【実践】バイオリン図
# =========================================
import seaborn as sns
import matplotlib.pyplot as plt
tips = sns.load_dataset(‘tips’)
# バイオリン図を作成
sns.catplot(
data=tips,
x=’day’, # X軸: 曜日
y=’tip’, # Y軸: チップ
kind=’violin’, # バイオリン図
height=6,
aspect=1.5
)
plt.title(‘曜日別チップの分布(バイオリン図)’,
fontsize=16, fontweight=’bold’, pad=15)
plt.tight_layout()
plt.show()
hueで色分けする
hueパラメータを追加すると、カテゴリ×カテゴリのクロス集計を可視化できます。
# =========================================
# 【実践】曜日×性別のクロス集計
# =========================================
import seaborn as sns
import matplotlib.pyplot as plt
sns.set_style(‘whitegrid’)
sns.set_palette(‘colorblind’)
tips = sns.load_dataset(‘tips’)
# 曜日×性別でクロス集計
sns.catplot(
data=tips,
x=’day’, # X軸: 曜日
y=’tip’, # Y軸: チップ
hue=’sex’, # 色: 性別で色分け
kind=’bar’, # 棒グラフ
height=6,
aspect=1.5
)
plt.title(‘曜日・性別別の平均チップ’, fontsize=16, fontweight=’bold’, pad=15)
plt.tight_layout()
plt.show()
📈 5. 信頼区間の表示
信頼区間とは
信頼区間(Confidence Interval)は、「真の平均がこの範囲に含まれる可能性が高い」ことを示す統計的な指標です。
棒グラフの上に表示される「ひげ」(エラーバー)が信頼区間です。ひげが長いほど、データのばらつきが大きいことを意味します。
💡 信頼区間を日常に例えると
「明日の気温は20度です」と言われるより、「明日の気温は18〜22度の範囲です」と言われる方が、予測の不確実性がわかりますよね。
信頼区間は、この「範囲」を統計的に計算したものです。
📊 errorbarパラメータの選択肢
| 設定 |
意味 |
使う場面 |
| errorbar=’ci’ |
95%信頼区間(デフォルト) |
標準的な統計分析 |
| errorbar=’sd’ |
標準偏差 |
ばらつきの大きさを見たいとき |
| errorbar=’se’ |
標準誤差 |
サンプル数が多いとき |
| errorbar=None |
エラーバーなし |
シンプルな見た目にしたいとき |
# =========================================
# 【実践】標準偏差を表示
# =========================================
import seaborn as sns
import matplotlib.pyplot as plt
tips = sns.load_dataset(‘tips’)
# 信頼区間の代わりに標準偏差を表示
sns.catplot(
data=tips,
x=’day’,
y=’tip’,
kind=’bar’,
errorbar=’sd’, # 標準偏差を表示
height=6,
aspect=1.5
)
plt.title(‘曜日別平均チップ(標準偏差付き)’,
fontsize=16, fontweight=’bold’, pad=15)
plt.tight_layout()
plt.show()
🎯 6. 実践例:総合ダッシュボード
3つの関数を組み合わせた分析
ここまで学んだ3大関数を組み合わせて、実践的な分析ダッシュボードを作成しましょう。1つのデータセットを複数の角度から分析します。
ダッシュボードでは、複数のグラフを1つの図に並べます。そのため、大文字版(relplot等)ではなく、小文字版(scatterplot等)を使います。
📝 大文字版と小文字版の使い分け
| 場面 |
使う関数 |
理由 |
| 1つのグラフだけ作る |
relplot()、displot()等 |
高機能で便利 |
| 複数グラフを並べる |
scatterplot()、histplot()等 |
plt.subplot()と組み合わせやすい |
コードが長いので、スマートフォンでは横スクロールして確認してください。
# =========================================
# 【実践】総合ダッシュボード
# =========================================
import seaborn as sns
import matplotlib.pyplot as plt
# データ読み込み
tips = sns.load_dataset(‘tips’)
# スタイル設定
sns.set_style(‘whitegrid’)
sns.set_palette(‘colorblind’)
# 2×2のレイアウトを作成
fig = plt.figure(figsize=(16, 12))
# 1. 散布図(左上)
plt.subplot(2, 2, 1)
sns.scatterplot(data=tips, x=’total_bill’, y=’tip’,
hue=’time’, style=’sex’, s=100, alpha=0.7)
plt.title(‘会計額とチップの関係’, fontsize=14, fontweight=’bold’)
plt.legend(title=’凡例’, fontsize=9, loc=’upper left’)
# 2. ヒストグラム(右上)
plt.subplot(2, 2, 2)
sns.histplot(data=tips, x=’total_bill’, hue=’sex’,
kde=True, bins=20, alpha=0.6)
plt.title(‘会計額の分布(性別比較)’, fontsize=14, fontweight=’bold’)
plt.legend(title=’性別’, fontsize=9)
# 3. 箱ひげ図(左下)
plt.subplot(2, 2, 3)
sns.boxplot(data=tips, x=’day’, y=’tip’, hue=’sex’)
plt.title(‘曜日別チップの分布’, fontsize=14, fontweight=’bold’)
plt.legend(title=’性別’, fontsize=9)
# 4. バイオリン図(右下)
plt.subplot(2, 2, 4)
sns.violinplot(data=tips, x=’time’, y=’total_bill’,
hue=’sex’, split=True)
plt.title(‘時間帯別会計額の分布’, fontsize=14, fontweight=’bold’)
plt.legend(title=’性別’, fontsize=9)
# 全体タイトル
plt.suptitle(‘📊 レストランデータ分析ダッシュボード’,
fontsize=18, fontweight=’bold’, y=0.995)
plt.tight_layout()
# 保存
plt.savefig(‘seaborn_dashboard.png’, dpi=300, bbox_inches=’tight’)
plt.show()
【ダッシュボードから読み取れること】
1. 散布図: 会計額が高いほどチップも多い(正の相関)
2. ヒストグラム: 男性の方が高額な会計が多い傾向
3. 箱ひげ図: 週末(土日)はチップのばらつきが大きい
4. バイオリン図: ディナーの方がランチより会計額が高い
→ このように複数の角度から分析することで、
データの全体像が見えてきます!
📝 STEP 14 のまとめ
✅ このステップで学んだこと
| トピック |
重要ポイント |
| 3大関数 |
relplot(関係性)、displot(分布)、catplot(カテゴリ) |
| relplot() |
散布図・折れ線グラフで変数間の関係を可視化 |
| displot() |
ヒストグラム・KDEでデータの分布を可視化 |
| catplot() |
棒グラフ・箱ひげ図でグループ間を比較 |
| 統計情報 |
平均値・信頼区間を自動計算して表示 |
| 多次元表現 |
hue、size、styleで複数変数を同時に表現 |
| ファセット |
col、rowでカテゴリ別にグラフを分割 |
💡 最重要ポイント
Seabornの3大関数(relplot、displot、catplot)を使えば、統計情報を自動で計算・表示できます。
特にcatplot()の棒グラフは、カテゴリ別の平均値と信頼区間を1行で可視化できる強力なツールです。
次のステップでは、ヒートマップと相関行列を学びます。変数間の関係をさらに詳しく分析できるようになります!
📝 実践演習
演習 1
基礎
tipsデータセットを使って、会計額(total_bill)とチップ(tip)の散布図を作成してください(relplot使用)。
【解答コード】
import seaborn as sns
import matplotlib.pyplot as plt
sns.set_style(‘whitegrid’)
tips = sns.load_dataset(‘tips’)
sns.relplot(
data=tips,
x=’total_bill’,
y=’tip’,
height=6,
aspect=1.5
)
plt.title(‘会計額とチップの関係’, fontsize=16, fontweight=’bold’, pad=15)
plt.tight_layout()
plt.show()
ポイント:relplot()のデフォルトは散布図なので、kind=’scatter’を省略できます。
演習 2
応用
tipsデータセットの会計額(total_bill)の分布を、ヒストグラムとKDEを重ねて表示してください(displot使用)。
【解答コード】
import seaborn as sns
import matplotlib.pyplot as plt
sns.set_style(‘whitegrid’)
tips = sns.load_dataset(‘tips’)
sns.displot(
data=tips,
x=’total_bill’,
kde=True, # KDEを追加
bins=25,
height=6,
aspect=1.5
)
plt.title(‘会計額の分布’, fontsize=16, fontweight=’bold’, pad=15)
plt.tight_layout()
plt.show()
ポイント:kde=Trueを追加するだけで、ヒストグラムの上にKDE曲線が重なります。
演習 3
発展
曜日別のチップの平均値を棒グラフで表示し、性別で色分けしてください(catplot使用)。95%信頼区間も表示してください。
【解答コード】
import seaborn as sns
import matplotlib.pyplot as plt
sns.set_style(‘whitegrid’)
sns.set_palette(‘colorblind’)
tips = sns.load_dataset(‘tips’)
sns.catplot(
data=tips,
x=’day’,
y=’tip’,
hue=’sex’, # 性別で色分け
kind=’bar’,
errorbar=’ci’, # 95%信頼区間
height=6,
aspect=1.5
)
plt.title(‘曜日・性別別の平均チップ(95%信頼区間付き)’,
fontsize=16, fontweight=’bold’, pad=15)
plt.tight_layout()
plt.show()
ポイント:errorbar=’ci’はデフォルトなので省略可能ですが、明示的に書くと意図が明確になります。
❓ よくある質問
Q1: relplot、displot、catplotはいつ使い分けるべきですか?
データの種類と分析の目的で選びましょう。「2つの数値変数の関係を見たい」→ relplot、「1つの変数の分布を見たい」→ displot、「カテゴリ別に比較したい」→ catplot。迷ったら、まず「何を比較したいか」を考えてください。グループ間の違いを見たいならcatplot、変数同士の相関を見たいならrelplotです。
Q2: 信頼区間のエラーバーが長すぎます。どうすればいいですか?
これはデータのばらつきが大きいことを示しています。エラーバーが長いこと自体は「問題」ではなく、データの特性を正しく表しています。見た目を変えたい場合は、errorbar=’se’(標準誤差)を使うとエラーバーが短くなります。または、errorbar=Noneで非表示にできます。ただし、データの実態を正しく伝えるためには、信頼区間を表示することを推奨します。
Q3: catplotで合計値ではなく平均値が表示されます。合計値を表示できますか?
catplotは統計的な平均値を表示する設計です。合計値を表示したい場合は、事前にPandasでgroupby().sum()を使って集計してから、sns.barplot()やplt.bar()を使いましょう。例えば、df_sum = tips.groupby(‘day’)[‘tip’].sum().reset_index() で合計を計算してから、棒グラフを作成します。
Q4: 複数のグラフを1つの図に並べたいとき、relplotは使えないのですか?
その通りです。relplot、displot、catplotは「Figure-level」関数と呼ばれ、1つの図全体を制御します。そのため、plt.subplot()と組み合わせることができません。複数のグラフを並べたいときは、「Axes-level」関数(scatterplot、histplot、boxplotなど)を使ってください。
Q5: Seabornのサンプルデータ(tips、flights等)以外のデータでも使えますか?
もちろん使えます!Seabornの関数は、Pandasのデータフレームであれば何でも使えます。自分のCSVファイルをdf = pd.read_csv(‘data.csv’)で読み込んで、data=dfと指定すればOKです。列名はx=’列名’、y=’列名’のように文字列で指定します。
artnasekai
#artnasekai #学習メモ