Python Seaborn徹底解説:scatterplotでデータ間の関係性を可視化する【決定版】

データ分析において、変数間の関係性を理解することは非常に重要です。Pythonの強力なデータ可視化ライブラリSeabornのscatterplot()関数は、まさにそのための強力なツールです。2つの数値変数の関係を点としてプロットすることで、パターンや相関、クラスタリングの可能性などを視覚的に捉えることができます。

この記事では、Seabornのscatterplot()関数の基本的な使い方から、より高度なカスタマイズ、そして実際のデータ分析における応用例までを、豊富なコード例と共に詳しく解説します。「点」一つ一つに秘められた情報を読み解き、データ分析のスキルを一段階向上させましょう。

scatterplot()の基本的な使い方:2変数の関係をシンプルに描画【Seaborn 散布図 初心者】

まずは、scatterplot()関数の最も基本的な使い方を見ていきましょう。ここでは、Seabornに組み込まれているirisデータセットを使って、アヤメのがく片の長さ (sepal_length) と幅 (sepal_width) の関係を散布図で表示します。

import seaborn as sns
import matplotlib.pyplot as plt

# 【基本】がく片の長さと幅の散布図
iris_df = sns.load_dataset('iris')
sns.scatterplot(x='sepal_length', y='sepal_width', data=iris_df)
plt.title('Irisデータセット:がく片の長さ vs 幅')
plt.xlabel('がく片の長さ (cm)')
plt.ylabel('がく片の幅 (cm)')
plt.show()

このシンプルなコードだけで、2つの連続変数の関係性を視覚的に捉える散布図が描画されます。点の分布を見ることで、長さと幅の間におおよその傾向があるか、特異な点(外れ値)が存在するかなどを確認できます。

hueパラメータ:カテゴリ変数で点を色分け【Seaborn 色分け 散布図】

scatterplot()の強力な機能の一つが、hueパラメータです。これを使うと、カテゴリカル変数に基づいて点を異なる色で表示できます。これにより、3つ目の変数を視覚的に表現し、カテゴリごとの関係性の違いを分析できます。

# 【hue】アヤメの種類で色分け
sns.scatterplot(x='sepal_length', y='sepal_width', hue='species', data=iris_df)
plt.title('Irisデータセット:がく片の長さ vs 幅 (種類別色分け)')
plt.xlabel('がく片の長さ (cm)')
plt.ylabel('がく片の幅 (cm)')
plt.legend(title='種類')
plt.show()

この例では、hue=’species’と指定することで、アヤメの種類(setosa, versicolor, virginica)ごとに点が異なる色で表示されます。これにより、同じ長さでも幅の分布が種類によって異なることなどが一目で分かります。

styleパラメータ:カテゴリ変数で点の形状を変更【Seaborn 形状 散布図】

hueパラメータに加えて、styleパラメータを使うと、カテゴリカル変数に基づいて点の形状を変更できます。色の違いが分かりにくい場合や、白黒印刷する場合などに有効です。

# 【style】アヤメの種類で形状を変更
sns.scatterplot(x='sepal_length', y='sepal_width', hue='species', style='species', data=iris_df)
plt.title('Irisデータセット:がく片の長さ vs 幅 (種類別色と形状)')
plt.xlabel('がく片の長さ (cm)')
plt.ylabel('がく片の幅 (cm)')
plt.legend(title='種類')
plt.show()

ここでは、style=’species’を追加することで、種類ごとに点の形状も変わります。hueとstyleを組み合わせることで、最大4つまでの変数を2次元の散布図で表現できます。

sizeパラメータ:数値変数で点の大きさを変更【Seaborn サイズ 散布図】

sizeパラメータを使うと、3つ目の数値変数に基づいて点の大きさを変更できます。これにより、点の密集度だけでなく、別の数値の大きさも同時に表現できます。

# 【size】花弁の長さで点の大きさを変更
sns.scatterplot(x='sepal_length', y='sepal_width', size='petal_length', data=iris_df)
plt.title('Irisデータセット:がく片の長さ vs 幅 (花弁の長さでサイズ変更)')
plt.xlabel('がく片の長さ (cm)')
plt.ylabel('がく片の幅 (cm)')
plt.show()

この例では、size=’petal_length’と指定することで、花弁の長さが長いほど点が大きくなります。

さらに、sizesパラメータを使って、点の大きさの範囲を明示的に指定することも可能です。

# 【sizes】点の大きさの範囲を指定
sns.scatterplot(x='sepal_length', y='sepal_width', size='petal_length', sizes=(20, 200), data=iris_df)
plt.title('Irisデータセット:がく片の長さ vs 幅 (花弁の長さでサイズ変更、範囲指定)')
plt.xlabel('がく片の長さ (cm)')
plt.ylabel('がく片の幅 (cm)')
plt.show()

alphaパラメータ:点の透明度を調整【Seaborn 透明度 散布図】

データ点が密集している場合、alphaパラメータを使って点の透明度を調整することで、点の重なり具合を視覚的に把握しやすくなります。alphaは0(完全に透明)から1(完全に不透明)の間の値を指定します。

# 【alpha】点の透明度を調整
import numpy as np
import pandas as pd

# 多くの重複点を含むサンプルデータを作成
np.random.seed(0)
x_overlap = np.random.rand(100) * 5
y_overlap = np.random.rand(100) * 5
overlap_df = pd.DataFrame({'x': x_overlap, 'y': y_overlap})

sns.scatterplot(x='x', y='y', data=overlap_df, alpha=0.5)
plt.title('重複点が多いデータの散布図 (透明度調整)')
plt.xlabel('X')
plt.ylabel('Y')
plt.show()

markerパラメータ:点の形状をカスタマイズ【Seaborn マーカー 散布図】

デフォルトの丸い点だけでなく、markerパラメータを使って様々な形状の点をプロットできます。matplotlibのマーカーシンボルを指定できます。

# 【marker】点の形状をカスタマイズ
sns.scatterplot(x='sepal_length', y='sepal_width', hue='species', marker='o', data=iris_df)
sns.scatterplot(x='petal_length', y='petal_width', hue='species', marker='x', data=iris_df)
plt.title('Irisデータセット:がく片 vs 花弁 (マーカー形状変更)')
plt.xlabel('長さ (cm)')
plt.ylabel('幅 (cm)')
plt.legend(title='特徴')
plt.show()

複数のscatterplot()を重ねることで、異なる変数に対して異なるマーカーを使用することも可能です。

カテゴリカル変数の扱い:hueとstyleの組み合わせ【Seaborn カテゴリカル 散布図】

hueとstyleを組み合わせることで、2つのカテゴリカル変数に基づいて点を色と形状で区別できます。

# 【hueとstyleの組み合わせ】2つのカテゴリカル変数で表現
import pandas as pd

# 新しいカテゴリカル変数を作成
iris_df['size_category'] = pd.cut(iris_df['petal_length'], bins=[0, 3, 6, 10], labels=['small', 'medium', 'large'])

sns.scatterplot(x='sepal_length', y='sepal_width', hue='species', style='size_category', data=iris_df)
plt.title('Irisデータセット:がく片の長さ vs 幅 (種類で色、花弁の長さカテゴリで形状)')
plt.xlabel('がく片の長さ (cm)')
plt.ylabel('がく片の幅 (cm)')
plt.legend(title='カテゴリ')
plt.show()

この例では、花弁の長さをカテゴリ分けし、アヤメの種類で色、花弁の長さのカテゴリで形状を区別しています。

まとめ:scatterplot()を使いこなしてデータ探索を深化させる【Seaborn データ分析】

この記事では、Seabornのscatterplot()関数の基本的な使い方から、hue, style, size, alpha, markerといった様々なパラメータによる高度なカスタマイズまでを解説しました。scatterplot()を使いこなすことで、2つの数値変数間の関係性を視覚的に捉えるだけでなく、カテゴリカル変数や他の数値変数の情報も同時に表現し、データに隠された複雑なパターンを発見することができます。

ぜひ、scatterplot()をあなたのデータ分析ワークフローに取り入れ、より深く、より洞察に満ちたデータ探索を進めてください。

おつー


SEshopは、エンジニアやクリエイター向けの技術書や実用書が充実しているオンラインストアです。最新の技術トレンドを学びたい方におすすめ!