データの分布をなめらかに見る:Seaborn KDEプロット

kdeplotseaborn

データ分析の現場では、「平均値」や「最大・最小値」だけでは見えてこない情報が数多く存在します。同じ平均を持つデータでも、ばらつき方や偏りによって、ビジネス上の解釈や意思決定は大きく変わるからです。こうしたデータの“分布”を直感的に理解する手段として、多くの分析者に活用されているのが KDE(Kernel Density Estimation:カーネル密度推定)プロットです。

KDEプロットは、ヒストグラムをよりなめらかにし、「データがどの値に集中しているのか」「裾が長い分布なのか」といった特徴を視覚的に把握できるのが強みです。Python の可視化ライブラリ Seaborn を使えば、比較的少ないコードで美しく、かつ解釈しやすい KDE プロットを作成できます。

本記事では、Seaborn に公式サンプルとして用意されている サンプルデータを題材に、一連の KDE プロットの描き方と、その読み取り方を丁寧に解説していきます。

日次・月次の数値レポートを扱う方、顧客データや業務データの傾向を把握したい方、そして「ヒストグラムの次に何を使えばよいか迷っている」分析初学者の方にとって、本記事が KDE プロットを実務で使いこなす第一歩になれば幸いです。

KDEとは

KDEプロットがどのように動作するかをステップ毎に見ていきます。

6つのデータを軸の上にプロットしてみます。

image

それぞれのデータ上にKernel=小さな山を置いていきます。

image
image

それぞれのKernelを合わせていくと・・・

image
image
image

これを最後まで繰り返すと、

image

このようにKernel(小さな山)Density(密度、厳密には確率密度)Estimation(なめらかに推定)するのでKDEと呼びます。

単変量のKDEプロット

まずサンプルデータの確認をします。

import seaborn as sns
from matplotlib import pyplot as plt

sns.set_theme()

cars = sns.load_dataset('mpg').dropna()

cars.shape
(392, 9)

データを確認してみます。

cars.head()
image

ちなみに、Seabornの始め方については、以下の記事を参考にしてください。

Seaborn入門:Pythonで始めるデータ可視化 – Lean Data Office

早速ですがhorsepower列をKDEでプロットしてみます。

sns.kdeplot(cars.horsepower);
image

horsepowerが80付近で大きな山なりになっていることから、そこにデータを密集していることが推定されます。

また、以下のコードで

sns.kdeplot(cars.horsepower, shade=True);
image

影をつけることができます。

帯域幅を調整する

帯域幅の調整はKDEの見た目に大いに影響します。

bw_adjustは帯域を表す引数で、これを小さくすると、

sns.kdeplot(cars.horsepower, bw_adjust=0.5);
image
sns.kdeplot(cars.horsepower, bw_adjust=0.1);
image

帯域幅を短く設定でき、よりグラフが詳細になります。

逆に大きくすると、よりなだらかになります。

sns.kdeplot(cars.horsepower, bw_adjust=1.5);
image

二変量のKDEプロット

Seabornのkdeplotは2つの変数(xとy)を渡すと二変量のKDEを描けます。

新たなデータで試してみます。

penguins = sns.load_dataset("penguins")

sns.kdeplot(data=penguins, x='bill_depth_mm', y='bill_length_mm')
image

ここではペンギンのくちばし(bill)の厚さと長さをプロットしています。

また新たな変数をhue=で指定することも可能です。

sns.kdeplot(data=penguins, x='bill_depth_mm', y='bill_length_mm',hue='species')
image

Fillでの塗りつぶしも可能です。

sns.kdeplot(data=df, x='bill_depth_mm', y='bill_length_mm', hue='species', fill=True)
image

まとめ

本記事では、Seaborn の kdeplot() 関数を使って、カーネル密度推定(KDE)プロットを作成する方法を解説しました。KDE プロットは、データの分布をなめらかに可視化でき、ヒストグラムでは捉えにくい傾向を理解するのに役立ちます。

Seabornを用いたヒストグラムの描画については、以下の記事も参考にしてください。

数値のばらつきを可視化する:Seaborn ヒストグラムの基本 – Lean Data Office

KDE プロットは設定次第で見え方が大きく変わるため、目的に応じたパラメータ調整が重要です。本記事のコード例を参考にしながら、ぜひご自身のデータに合わせた可視化を試してみてください。

筋トレとオートメーションが趣味。 モバイルアプリ個人開発者。 データ処理・可視化とレポートにハマり備忘録と情報共有のためにブログ開設し運営している。