Python

Python seaborn チュートリアル プロット機能 データの分布を可視化 (4)

原文のドキュメントはから。

二変量分布の可視化

これまでの例は、一変量分布を考慮している。1つの変数の分布、(おそらく)色相に代入された2番目の変数を条件とした分布である。しかし、2番目の変数をyに代入することで、2変量分布をプロットする。

import matplotlib.pyplot as plt
import seaborn as sns
sns.set_theme(style="darkgrid")

penguins = sns.load_dataset("penguins")
sns.displot(penguins, x="bill_length_mm", y="bill_depth_mm")

plt.show()

二変量のヒストグラムは、プロットをタイル状にする矩形内にデータを結合し、各矩形内の観測値・結果のカウントを塗りつぶし色で表示する(ヒートマップに似ている)。同様に、二変量のKDEプロットは、2Dガウスで(x, y)オブザベーションを平滑化する。デフォルトでは、2Dで密度の輪郭が表示される。

import matplotlib.pyplot as plt
import seaborn as sns
sns.set_theme(style="darkgrid")

penguins = sns.load_dataset("penguins")
sns.displot(penguins, x="bill_length_mm", y="bill_depth_mm", kind="kde")

plt.show()

色相変数を割り当てると、異なる色で複数のヒートマップ、もしくは等高線集合をプロットする。二変量のヒストグラムの場合、これは条件付き分布の間の重なりが最小の場合にのみ期待通りに機能する。

import matplotlib.pyplot as plt
import seaborn as sns
sns.set_theme(style="darkgrid")

penguins = sns.load_dataset("penguins")
sns.displot(penguins, x="bill_length_mm", y="bill_depth_mm", hue="species")

plt.show()

二変量のKDEプロットの輪郭のアプローチは、オーバーラップを評価するのに適している。しかし、あまりにも多くの輪郭を持つプロットは煩雑にあることがある。

import matplotlib.pyplot as plt
import seaborn as sns
sns.set_theme(style="darkgrid")

penguins = sns.load_dataset("penguins")
sns.displot(penguins, x="bill_length_mm", y="bill_depth_mm", hue="species", kind="kde")

plt.show()

一変量プロットと同様に、ビン・サイズまたは平滑化の帯域幅の選択は、プロットが基礎となる二変量分布をどれだけうまく表現できるかを決定する。同じパラメータが適用されるが、値のペアを渡すことで、各変数に対して調整することができる。

import matplotlib.pyplot as plt
import seaborn as sns
sns.set_theme(style="darkgrid")

penguins = sns.load_dataset("penguins")
sns.displot(penguins, x="bill_length_mm", y="bill_depth_mm", binwidth=(2, .5))

plt.show()

ヒートマップの解釈を助けるために、カウントと色の強さの間のマッピングを表示するためのカラーバーを追加する。

import matplotlib.pyplot as plt
import seaborn as sns
sns.set_theme(style="darkgrid")

penguins = sns.load_dataset("penguins")
sns.displot(penguins, x="bill_length_mm", y="bill_depth_mm", binwidth=(2, .5), cbar=True)

plt.show()

二変量密度等高線の意味はそれほど単純ではない。密度は直接解釈できないため、輪郭は密度の等比で描かれる。つまり、各曲線は密度のいくつかの割合pがそれより下にあるようなレベルセットを示す。p値は等間隔に配置され、最低レベルはスレッシュパラメータで制御され、数はレベルで制御される。

import matplotlib.pyplot as plt
import seaborn as sns
sns.set_theme(style="darkgrid")

penguins = sns.load_dataset("penguins")
sns.displot(penguins, x="bill_length_mm", y="bill_depth_mm", kind="kde", thresh=.2, levels=4)

plt.show()

levels パラメータには値のリストを指定でき、より多くの制御が可能となる。

import matplotlib.pyplot as plt
import seaborn as sns
sns.set_theme(style="darkgrid")

penguins = sns.load_dataset("penguins")
sns.displot(penguins, x="bill_length_mm", y="bill_depth_mm", kind="kde", levels=[.01, .05, .1, .8])

plt.show()

二変量のヒストグラムは、1つまたは両方の変数が離散であることを可能にする。1つの離散変数と1つの連続変数をプロットすると、条件付き一変量分布を比較する別の方法を提供する。

import matplotlib.pyplot as plt
import seaborn as sns
sns.set_theme(style="darkgrid")

diamonds = sns.load_dataset("diamonds")
sns.displot(diamonds, x="price", y="clarity", log_scale=(True, False))

plt.show()

対照的に、2つの離散変数をプロットすることは、観測値・結果のクロス集計を示す簡単な方法である。

import matplotlib.pyplot as plt
import seaborn as sns
sns.set_theme(style="darkgrid")

diamonds = sns.load_dataset("diamonds")
sns.displot(diamonds, x="color", y="clarity")

plt.show()