Seabornライブラリを用いた散布図(Scatterplot)の描画方法について解説します。散布図(Scatterplot)は、2つの連続変数の関係性を視覚的に示すためのグラフです。Seabornのscatterplot
関数は、さまざまなグルーピングに基づいて散布図を描画し、視覚的にデータの意味を持たせる機能を提供します。本記事では、scatterplot
関数の基本的な使い方と、そのカスタマイズ可能なオプションについて詳しく見ていきましょう。
scatterplotの基本的な使い方
import seaborn as sns
sns.set_theme() #見た目をよくする設定
sns.scatterplot(data=データ, x="X軸の変数", y="Y軸の変数")
このコードは、指定されたデータセット内の2つの変数に基づいて散布図を描画します。data
引数には、pandasのDataFrame、numpyのndarray、マッピング、またはシーケンスを指定できます。
Scatterplotのオプション
散布図には、hue
、size
、style
という3つのパラメーターを使用して、データのサブセット間の関係性をわかりやすく示すことができます。
- hue(色): 点の色を変えることで、別の変数のグループを表現します。カテゴリカル変数も数値変数も使用できますが、色のマッピングは数値変数の場合とは異なる振る舞いをします。
- size(サイズ): 点のサイズを変えることで、別の変数のグループを表現します。こちらもカテゴリカル変数と数値変数の両方が使用できます。
- style(スタイル): 点のマーカーの形状を変えることで、別の変数のグループを表現します。このパラメーターは数値型を持つことができますが、常にカテゴリカルとして扱われます。
その他のカスタマイズオプション
scatterplot
関数は、色(palette
)、色の順序(hue_order
)、サイズ(sizes
)、マーカーのスタイル(markers
)、凡例の表示方法(legend
)など、グラフの見た目をカスタマイズするための多くのオプションを提供します。これらのオプションを使って、グラフの見た目をデータの特性やプレゼンテーションの目的に合わせて調整することができます。
Seabornによる散布図(scatterplot)作成の例
Seabornライブラリを活用したScatterplotの例をご紹介します。このチュートリアルでは、tips
データセットを例に、散布図の基本的な描画方法から、さまざまなセマンティックなマッピングの適用方法までを学びます。tipsはチップの額に関するデータセットで、seabornが提供してくれるものです。tips
データセットには数値変数とカテゴリカル変数が混在しており、この多様性を利用して散布図の豊富な表現を探ります。
まず、Seabornのload_dataset
関数を使ってtips
データセットを読み込みます。
import seaborn as sns
sns.set_theme()
tips = sns.load_dataset("tips")
tips.head()
基本的な散布図
2つの変数間の散布図を描画するには、scatterplot
関数にデータフレームとx、y軸に使用する変数名を指定します。
sns.scatterplot(data=tips, x="total_bill", y="tip")
色(hue)を使用したグルーピング
hue
パラメータを使用することで、点の色を変え、異なるカテゴリのデータを区別できます。
sns.scatterplot(data=tips, x="total_bill", y="tip", hue="time")
スタイル(style)でマーカーを変更
style
パラメータを使用して、マーカーの形状を変更し、よりアクセシブルなプロットを作成します。
sns.scatterplot(data=tips, x="total_bill", y="tip", hue="time", style="time")
色(hue)とスタイル(style)の独立した変更
hue
とstyle
を異なる変数に割り当てることで、色とマーカーを独立して変更できます。
sns.scatterplot(data=tips, x="total_bill", y="tip", hue="day", style="time")
数値データのセマンティックマッピング
hue
に数値変数を割り当てると、量的なマッピングが適用され、デフォルトのパレットが変わります。
sns.scatterplot(data=tips, x="total_bill", y="tip", hue="size")
カスタムパレットの適用
カテゴリカルなマッピングを強制するために、カテゴリカルパレット名や明示的な色を指定します。
sns.scatterplot(data=tips, x="total_bill", y="tip", hue="size", palette="deep")
サイズ(size)によるセマンティックマッピング
size
パラメータに数値変数を割り当てることで、点の大きさにセマンティックなマッピングを適用します。
sns.scatterplot(data=tips, x="total_bill", y="tip", hue="size", size="size")
カスタムマーカーの使用
markers
パラメータにリストや辞書を渡すことで、スタイル変数に応じた特定のマーカーを指定できます。
markers = {"Lunch": "s", "Dinner": "X"}
sns.scatterplot(data=tips, x="total_bill", y="tip", style="time", markers=markers)
マーカーの形を任意に設定
matplotlib.axes.Axes.scatter
に直接渡される追加のキーワード引数を使用して、任意にマーカーの形を設定できます。
sns.scatterplot(data=tips, x="total_bill", y="tip", s=100, color=".2", marker="+")
wide-formデータの使用
wide-formデータを使用すると、各列がインデックスに対してプロットされ、hueとstyleマッピングも使用できます。
import pandas as pd
import numpy as np
index = pd.date_range("1 1 2000", periods=100, freq="m", name="date")
data = np.random.randn(100, 4).cumsum(axis=0)
wide_df = pd.DataFrame(data, index, ["a", "b", "c", "d"])
sns.scatterplot(data=wide_df)
複数のサブプロットへの分割
relplot
を使用してscatterplot
とFacetGrid
を組み合わせ、追加のカテゴリカル変数によるグルーピングを複数のサブプロットに渡って描画します。
sns.relplot(
data=tips, x="total_bill", y="tip",
col="time", hue="day", style="day",
kind="scatter"
)
まとめ
seabornを用いてさまざまな散布図の作り方を見てきました。データの分析やプレゼンテーションに役立てていただけると幸いです。