seabornはmatplotlibと並ぶPythonにおけるデータ可視化ライブラリです。seabornを使えば、よりオシャレなグラフを描画することができます。
データの可視化方法として散布図とヒストグラムがありますが、seabornを使えばこれらを組合わせた図を描画することができます。
本記事では、その描画方法とサンプルコードを紹介していきます。
散布図とヒストグラムを組み合わせた図とは
散布図とヒストグラムを組み合わせた図とは、以下のような図を指します。
散布図の上部にx軸データのヒストグラムが、散布図の右側にy軸データのヒストグラムが描画されます。これによって、それぞれのデータの分布とそれらの相関を容易に把握することができます。
seabornで描画する
今回使用するデータ
今回はどのデータセットを使用するでもなく、numpyでランダムに生成したデータを使用していきます。
とはいっても適当に乱数を使うのもあれなので、分布に従ったデータを作成します。
import numpy as np
#ランダム値のシード
rs = np.random.RandomState(10)
#ガンマ分布
x = rs.gamma(5, size=1000)
#ガンマ分布 × 正規分布
y = x * rs.normal(size=1000)
x軸のデータにはガンマ分布のデータを、y軸にはx軸の値と正規分布のデータの値を掛け合わせたものを使用します(特別意味はありません)。
図を描画する
図を描画するにはjointplot()を用います。
import seaborn as sns
sns.jointplot(x=x, y=y, color="#D91887")
これを実行すると、以下の図が得られます。
散布図の情報に加えて、y軸に用いたデータは0を中心に正規分布していそうなことなどもわかります。
必須のパラメータはxとyだけです。今回はなんとなく色を変更しています。色はHexで指定します。Adobe Colorを用いれば簡単に好きな色のHexを調べることができます。
https://color.adobe.com/ja/create/color-wheel
図のスタイル
jointplot()では、散布図だけでなく様々な種類の図を描画することができます。パラメータとしてはkindで指定します。
kind | 内容 |
---|---|
scatter | 散布図(デフォルト) |
kde | カーネル密度推定の等高線 |
hex | 六角形プロット |
reg | 回帰直線付散布図 |
resid | 回帰直線からの残差付散布図 |
hist | ヒートマップ(0.11.0以降) |
それぞれ順に描画してみます。散布図はデフォルトなので省略します。
kde
kind=”kde”にすると、カーネル密度推定を行った値が等高線で表示されます。
sns.jointplot(x=x, y=y, kind="kde", color="#D91887")
ヒストグラムも連続値として描画されます。
hex
kind=”hex”にすると、密度を六角形で表現したプロットになります。ハチの巣みたいな図です。
sns.jointplot(x=x, y=y, kind="hex", color="#D91887")
reg
kind=”hex”にすると、 散布図に回帰直線を追加した図が描画されます。
sns.jointplot(x=x, y=y, kind="reg", color="#D91887")
resid
kind=”resid”にすると、 回帰直線からの残差が散布図と重ねて表示されます。
sns.jointplot(x=x, y=y, kind="resid", color="#D91887")
hist
kind=”hist”にすると、 ヒートマップが表示されます。この機能はseabornのバージョンが0.11.0以降の機能です。
sns.jointplot(x=x, y=y, kind="hist", color="#D91887")
グループ分けして表示したい
散布図やヒストグラムを描画する際、いくつかのグループに分けてそれぞれの特徴を見たい場合もあります。jointplot()ではその機能も提供されています。
これまで使ってきたデータにはグループ分けをする項目がないので、ここからはseabornが提供しているデータセットを使用していきます。
注意) グルーピングはseabornのバージョン0.11.0以降の機能です。お使いのバージョンがそれ以前の場合はアップデートしてください。
使用するデータ
seabornが提供するペンギンのデータセットを使います。
import seaborn as sns
penguins = sns.load_dataset("penguins").dropna()
グルーピング
グルーピングにはパラメータhueを用い、グルーピングの基準となる列を指定します。
sns.jointplot(data=penguins, x="bill_length_mm", y="bill_depth_mm", hue="species")
1行でここまでの図を作成してくれます。
kind=”kde”の場合
hueを指定してグルーピングをする場合、kind=”hex”, “reg”, “resid”は使用できません。
Pythonでデータサイエンスするなら
Pythonでデータサイエンスをするなら、以下の書籍がおすすめです。Pandas、matplotlib、Numpy、scikit-learnといったデータサイエンスに必要なライブラリを、体系立てて一通り学ぶことができます。
ややお値段高めですが、これ1冊で十分という内容・ボリュームなので、損はしないと思います^^
まとめ
seabornで散布図とヒストグラムを併せて表示するjointplot()について解説しました。散布図だけでなく様々な形のグラフを使うことができるのでとても便利です。
seabornが0.11.にアップデートされたことで見せ方の幅も広がっています。是非色々試してみてください^^
ではでは👋