Matplotlib & Seaborn 入門講座 | 10.Pythonのライブラリ「Seabron」の使い方を解説します

挨拶

こんにちは。キノコードです。
Matplotlib & Seaborn入門講座の10回目です。
今回からSeabornを使ってのレッスンが始まります。
Seabronの使い方は、matplotlibの使い方がわかっている方は、簡単に使えるようになります。
Seabornは、matplotlibより美しいデザインのグラフを作成することができますし、記述量を少なくグラフを作成することができます。
またmatplotlibでは作成できないようなグラフもありますので、その作成方法について紹介していきたいと思います。
また、キノコードでは、キノコードを応援するYouTubeのメンバーシップを募集しています。
キノコードは、プログラミングやIT、テクノロジーの知識であったり、その活用を日本中に広めたいと思っています。
キノコードでのYouTubeの活動などを応援してくださる方は、チャンネル登録ボタンの横にある「メンバーになる」をクリックをお願いします。
メンバーシップをはじめた理由などの動画もありますので、そちらもご視聴ください。
概要欄にURLを貼っておきます。
それではレッスンスタートです。

レッスンで使ったファイルはこちら

■保存方法
Mac:右クリック⇒「リンク先を別名で保存」
Windows:右クリック⇒「名前を付けてリンク先を保存」
Jupyter Labのファイルはこちら

ライブラリインポート

import matplotlib.pyplot as plt
%matplotlib inline
import seaborn as sns

それでは早速、ライブラリをインポートします。
まず、matplotlibをpltという名前でインポート。
notebook上にグラフを表示させるための記述もします。
続いてsaebornは、snsという名前でインポートしておきます。
seabornは、matplotlibとセットでインポートしておくと良いでしょう。

使用データの準備

sns.get_dataset_names()

seabornには、学習用のサンプルデータがいくつか用意されており、それらを簡単に呼び出す事ができます。
get_dataset_namesという関数で、どういったデータが用意されているのかリストで確認できます。
実行します。
今回は、この中でも比較的有名なirisというアヤメのサンプルデータを使用してみましょう。

iris_data = sns.load_dataset('iris')

まずは、iris dataという変数に、データを格納する記述をします。
seabornの、load datasetというメソッドの引数に、取得したいデータセットの名前をシングルコーテーションでくくります。
今回はirisです。
実行します。

iris_data

データの中身を確認してみましょう。
実行します。
このように、データフレームとして格納されます。
カラム名は左から、がく片の長さ(cm)、がく片の幅(cm)、花びらの長さ(cm)、花びらの幅(cm)、そして種の種類のカラムがあります。


sepal_length:がく片の長さ(cm)
sepal_width:がく片の幅(cm)
petal_length:花びらの長さ(cm)
petal_width:花びらの幅(cm)
species:種の種類(Setosa,Versicolour,Virginica)


散布図

sns.relplot(x='sepal_length', y='petal_length', data=iris_data)
plt.show()

まずは、簡単な散布図から作成してみましょう。
relplotというメソッドの引数に、プロットさせたいデータを指定します。
x軸に、sepal_length(シーパルレングス)、つまりアヤメのがく片の長さ、y軸にはpetal_length(ペタルレングス)、つまり花びらの長さを渡します。
dataという引数には、これらのデータを格納したiris_dataを記述します。
実行します。
散布図を作成できました。

plt.figure(figsize=(6,6))
plt.scatter(iris_data['sepal_length'], iris_data['petal_length'])
plt.xlabel('sepal_length')
plt.ylabel('petal_length')

比較のために、matplotlibでも散布図を書いてみましょう。
まずmatplotlibではfigsizeの設定をしなければ横長のグラフになるので、figsizeで6:6のグラフサイズに変更します。
matplotlibで散布図を描くにはscatterを使います。
plt.scatterと書いて丸括弧。丸括弧の中に、先ほど作成したデータフレームから「sepal_length」を取り出しxの値に、同じくデータフレームから「petal_length」を取り出しyの値として渡します。
そして、x軸とy軸のラベルをつけます。
実行します。
matplotlibでも散布図をかけました。
このように、Seabornは非常に少ない記述量で、簡単にグラフを作成できます。

sns.set(style='darkgrid')
sns.relplot(x='sepal_length', y='petal_length', data=iris_data)
plt.show()

次に、背景の色とグリッドも追加してみましょう。
setメソッドの引数styleにdarkgridを指定すると、色とグリッドのついた背景になります。
実行します。
背景の色が代わり、グリッドも追加されました。

sns.set(style='white')
sns.relplot(x='sepal_length', y='petal_length', data=iris_data)
plt.show()

白の背景に戻したい場合は、whiteを指定しましょう。

sns.set(style='whitegrid')
sns.relplot(x='sepal_length', y='petal_length', data=iris_data)
plt.show()

また、白の背景にグリッドを付けた、whitegridも指定できます。
お好みの背景を指定しましょう。

sns.set(style='darkgrid')
sns.relplot(x='sepal_length', y='petal_length', data=iris_data, color='green')
plt.show()

続いて、colorという引数で、点の色を好きな色に変更できます。
greenとしてみます。
実行します。
散布図の色を変更できました。

sns.set(style='darkgrid')
sns.relplot(x='sepal_length', y='petal_length', data=iris_data, hue='species')
plt.show()

カテゴリー別に、色を分けることもできます。
ここでは、species(スピーシーズ)というカラムから、種の種類ごとに色分けしてみます。
hue(ヒュー)という引数に、カテゴリーに指定したいデータのカラム名を渡します。
今回は「species」でカテゴリをわけたいので、hueにspeciesを渡します。
実行します。
カテゴリー別に色分けがされました。

sns.set(style='darkgrid')
sns.relplot(x='sepal_length', y='petal_length', data=iris_data, hue='species', style='species')
plt.show()

マーカーのスタイルも変更できます。
styleという引数に、speciesを渡しましょう。
実行します。
カテゴリー別に、マーカーを分けることができました。

sns.set(style='darkgrid')
sns.relplot(x='sepal_length', y='petal_length', data=iris_data, hue="species", col="species")
plt.show()

さらに、カテゴリー別でグラフを分けて表示させることもできます。
colという引数にカテゴリーに指定したい列名、speciesを渡します。
実行します。
カテゴリーごとの散布図を表示できました。

sns.set(style='darkgrid')
sns.catplot(x='species', y='sepal_length', data=iris_data)
plt.show()

また、catplotというメソッドを使うと、カテゴリーごとで、ある特定の変量における散布図を作成できます。
実行します。
このような散布図を作成できました。

sns.set(style='whitegrid')
sns.catplot(x='species', y='sepal_length', data=iris_data, palette='rocket')
plt.show()

paletteという引数で、全体的な色味を変更できます。
ここではrocketとしてみます。
実行します。
カラーを変更できました。

sns.set(style='whitegrid')
sns.catplot(x='species', y='sepal_length', data=iris_data, palette='mako')
plt.show()

他にもmakoであったり、

sns.set(style='darkgrid')
sns.catplot(x='species', y='sepal_length', data=iris_data, palette='pastel')
plt.show()

pastel、

sns.set(style='darkgrid')
sns.catplot(x='species', y='sepal_length', data=iris_data, palette='dark')
plt.show()

darkなどを指定することもできます。
お好きなカラーパレッドを試してみてください。


指定できるカラーパレッド公式
https://seaborn.pydata.org/tutorial/color_palettes.html


箱ひげ図

sns.set(style='darkgrid')
sns.catplot(x='species', y='sepal_length', data=iris_data, kind='box')
plt.show()

さらに、catplotメソッドで箱ひげ図も作成できます。
箱ひげ図とは、最小値や最大値、中央値などが一目でわかる図のことです。
kindという引数に、boxを指定します。
実行します。
箱ひげ図を作成できました。

線形回帰直線

sns.set(style='darkgrid')
sns.regplot(x='sepal_length', y='petal_length', data=iris_data)
plt.show()

また、回帰直線を含む散布図も、簡単に作成できます。
ここでは、がく片の長さと花びらの長さの相関を示す回帰直線を表示させてみます。
regplotというメソッドの引数に、x、yをそれぞれ指定します。
実行します。
回帰直線を表示させることができました。

散布図とヒストグラム

sns.set(style='darkgrid')
sns.jointplot(x='sepal_length', y='petal_length', data=iris_data)
plt.show()

jointplotというメソッドを使うと、散布図の外側にヒストグラムが表示されます。
実行します。
このような図を作成できました。

sns.set(style='darkgrid')
sns.jointplot(x='sepal_length', y='petal_length', data=iris_data, kind='reg')
plt.show()

また、kindという引数にregを指定すると、回帰直線と確率密度関数の曲線が表示されます。
実行します。
このようになりました。

sns.set(style='white')
sns.jointplot(x='sepal_length', y='petal_length', data=iris_data, kind='hex')
plt.show()

他にも様々なオプションがあります。
例えば、kindにヘキサゴンの頭文字hexを指定すると、ヘキサゴン、つまり、六角形のグラフを作成することができます。

sns.set(style='white')
sns.jointplot(x='sepal_length', y='petal_length', data=iris_data, hue='species')
plt.show()

hueという引数にspeciesを渡して、カテゴリー別に色分けすることもできます。

複数の変量間の相関

sns.set(style='darkgrid')
sns.pairplot(iris_data)
plt.show()

最後に、pairplotというメソッドをご紹介します。
pairplotは、引数にデータセットを格納した変数を渡すだけで、全ての変量同士の相関を表示してくれます。
実行してみましょう。
同じ変量同士の対角線上にはヒストグラム、その他は散布図として表示されました。

sns.set(style='darkgrid')
sns.pairplot(iris_data, hue='species')
plt.show()

また、引数hueにカテゴリーのspeciesを指定することで、カテゴリー別に色分けされた図を表示できます。
実行します。

sns.set(style='darkgrid')
sns.pairplot(iris_data, hue='species', diag_kind='hist')
plt.show()

カテゴリーを指定すると、対角線上のグラフがデフォルトでは密度関数の曲線なので、
ヒストグラムにしたい場合は、diag_kindという引数にhistを指定します。
実行します。
対角線上のグラフがヒストグラムになりました。

sns.set(style='whitegrid')
sns.pairplot(iris_data, hue='species', diag_kind='hist', palette='GnBu')
plt.show()

全体のカラーは、paletteで変更できます。
お好きなカラーを試してみてください。
ここでは、GnBuとしてみます。
実行します。
カラーを変更できました。

挨拶

キノコードではmatplotlibやSeabornのレッスンだけではなく、仕事の自動化のレッスン、人工知能のレッスンなども配信しています。
また、今後はWebアプリケーションの開発の動画やファイナンスの分析の動画などもアップしていく予定です。
キノコードの新着動画はチャンネル登録をしていただければ、通知が届きますので、ぜひチャンネル登録をお願いします。
それでは、次のレッスンでお会いしましょう。

レッスンで使ったファイルはこちら

■保存方法
Mac:右クリック⇒「リンク先を別名で保存」
Windows:右クリック⇒「名前を付けてリンク先を保存」
Jupyter Labのファイルはこちら