【15分で習得】seabornの使い方まとめ(散布図, ヒストグラム, 折れ線グラフ…)
- seabornで誰でもかっこいいグラフが描ける方法を教えます。
- この記事は15分程度で読み終わります。
本記事の内容
- seabornの基本と導入
- Seabornの基本的な使用方法
- Seabornで棒グラフ
[toc]
seabornの基本知識
searbonは、簡単にいうとmatplotlibを更に簡単にかっこよくプロットできるライブラリです。
描画方法は、ほとんんどmatplotlibと変わらないので、matplotlibの基本がわかっている方は、簡単に使いこなすことができます。
matplotlibの基本が怪しい方は、下記を参考にしてください。
Google Colabratoryを使用している方は、デフォルトでseabornをインポートすることが可能ですが、Jupyter notebookを使用している方は、インストールが必要です。
下記を入力して、インストールしてください。
pip install seaborn
必要なライブラリをインストール
seabornでグラフを描画するために必要なライブラリをインストールしていきましょう。
# 使用するライブラリをインストール
import seaborn as sns
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# seabornのスタイルを指定
sns.set()
基本的には、上記の3つのライブラリ(numpy, pandas, matplotlib)についての前提知識があると良いです。
もし、基本があまりにも抜けている方は、下記を参考にして簡単に復習してください。
- numpyの使い方(所要時間 : 15〜20分)
- pandasの使い方(所要時間 : 15〜20分)
- matplotlibの使い方(所要時間 : 15〜20分)
サンプルデータのインポート
seabornでは、いくつかのサンプルデータを提供しています。具体的なサンプルデータは以下を実行することで確認できます。
# サンプルデータ一覧を表示
sns.get_dataset_names()
<output>
['anagrams',
'anscombe',
'attention',
'brain_networks',
'car_crashes',
'diamonds',
'dots',
'exercise',
'flights',
'fmri',
'gammas',
'geyser',
'iris',
'mpg',
'penguins',
'planets',
'taxis',
'tips',
'titanic']
今回、titanicデータセットを使用してseabornの使い方を説明していきます。
以下のコードを実行すると、titanicデータセットを読み込むことができます。
titanic = sns.load_dataset('titanic')
有名なデータですが、一応どのようなデータなのかを確認しておきます。
titanic.head()
<出力>
このデータを具体例として、seabornで様々なグラフを描画していきます。
Seabornの基本的な使用方法
まずは、seabornの基本的な使用方法を簡単に説明します。
基本的には、以下のようにコードを書くことでグラフを描画する事ができます。
sns.グラフの種類(可視化するデータを指定)
plt.show()
さらに具体的な使用方法は後ほど紹介しますが、以下のように指定します。
グラフの種類
: 可視化するグラフの種類を指定(可視化するデータを指定)
: 可視化するデータを指定
たったこれだけで、綺麗なグラフを作成することができます!
seabornで棒グラフを描画|barplot, countplot
Seabornで棒グラフを使用する際には、以下の二つを使用します。
- barplot : 横軸と縦軸の値を設定して棒グラフを描画
- countplot : データを集計した棒グラフを描画
具体例を用いて使い方を説明します。
barplotの具体例|横軸と縦軸の値を設定して棒グラフを描画
barplotは横軸と縦軸の値を設定して棒グラフを描画します。
barplotの具体例を表示します。
sns.barplot(x='survived', y ='age', data=titanic, palette='Set1')
plt.show()
<output>
よく使用する引数を以下にまとめておきます。
barplot 引数 | 説明 |
---|---|
x | 横軸となるデータ |
y | 縦軸となるデータ |
data | 可視化するデータセット |
palette | 色のスタイル *種類に関しては、公式ドキュメント(seaborn.color_palette)を参照してください。 |
countplotの具体例|データを集計した棒グラフを描画
countplotは、データを集計した棒グラフを描画することができます。
具体例を以下に示します。
sns.countplot(x='pclass', data = titanic, palette='Set1')
plt.show()
<output>
countplotでよく使用する引数を以下にまとめます。
countplot 引数 | 説明 |
---|---|
x | 横軸となるデータ |
data | 可視化するデータセット |
palette | 色のスタイル *種類に関しては、公式ドキュメント(seaborn.color_palette)を参照してください。 |
seabornでヒストグラムを描画|distplot
Seabornでヒストグラムを使用する際には、displotを使用します。
- distplot : ヒストグラムを描画(確率密度関数付き)
以下具体例を説明します。
distplotの具体例|ヒストグラム描画
distplotを用いることでヒストグラムを描画することができます。
具体例を以下に示します。
sns.distplot(a=titanic['age'], bins=20, hist=True, kde=True, color='blue')
plt.show()
<output>
デフォルトでは、ヒストグラムの領域を1に正規化して、カーネル密度推定によって確率分布関数の近似値を表示します。
主な引数をまとめておきます。
distplot 引数 | 説明 |
---|---|
a | 可視化するデータ(Series, 1d-array, list) |
bins | x軸の刻み幅(棒の数) |
hist | ヒストグラムを表示するかどうか(デフォルト : True ) |
kde | 確率分布関数を表示するかどうか(デフォルト : True ) |
color | ヒストグラムの色を設定 |
Seabornで散布図を描画
Seabornで散布図を描画する方法は主に以下の二つです。
- scatterplot : 散布図を表示
- jointplot : 散布図とヒストグラムを表示
- pairplot : 指定した値に対する散布図と棒グラフを一括表示
scatterplotの具体例|散布図を表示
scatterplotを使用することで簡単に散布図を作成できます。
散布図を綺麗に表示するためにデータを少し変換します。
titanic_joint = titanic[titanic['fare'] < 300].copy()
では、早速具体例を以下に示します。
# scatterplot
titanic_joint = titanic[titanic['fare'] < 300].copy()
sns.scatterplot(x='age', y='fare', data=titanic_joint, alpha=0.3, color='blue')
plt.show()
<output>
さらにサイズや色分けにデータを選択することができます。
具体例を以下に示します。
# scatterplotの応用
titanic_joint = titanic[titanic['fare'] < 300].copy()
sns.scatterplot(x='age', y='fare', data=titanic_joint, hue='survived',
size='pclass', alpha=0.5)
plt.show()
<output>
jointplotの具体例|散布図とヒストグラムを表示
Jointplotを利用することで、散布図とヒストグラムを表示することができます。
では、具体例を以下に示します。
titanic_joint = titanic[titanic['fare'] < 300].copy()
sns.jointplot(x='age', y='fare', data=titanic_joint, alpha=0.3, color='blue')
plt.show()
<output>
主な引数をまとめておきます。
distplot 引数 | 説明 |
---|---|
x, y | x, y軸にするデータのキー |
data | 可視化するデータ, Dataframe, Ndarray |
kind | プロットの種類(“scatter”, “kde”, “hist”, “hex”, “reg”, “resid” ) |
joint_kws | 具体例を示します(透明度等を変更できる) |
color | 散布図の色 |
kde='reg'
を指定することで回帰直線を表示することができます。
さらに、kind='kde'
を設定することで、確率密度関数を評価することができます。
pirplotの具体例|指定した値に対する散布図と棒グラフを一括表示
pirplotの具体例を表示します。
sns.pairplot(data = titanic[['survived', 'age', 'fare']], hue='survived', plot_kws={'alpha':0.3})
plt.show()
<output>
全てのデータの傾向を探るのに便利なグラフです。
Seabornで箱ひげ図を描画
Seabornで箱ひげ図を描画するときは主に以下のメソッドを使用します。
- boxplot : 通常の箱ひげ図
- violinplot : サンプルのヒストグラム付きの箱ひげ図
- swarmplot : vilolinplot以上に詳しい箱ひげ図
boxplotの具体例|通常の箱ひげ図を表示
boxplotの具体例を表示します。
sns.boxplot(x='survived', y='age', data=titanic, orient="v", linewidth=1.25)
plt.show()
<output>
主な引数を以下にまとめておきます。
distplot 引数 | 説明 |
---|---|
x, y | x, y軸にするデータのキー |
data | 可視化するデータ, Dataframe, Ndarray |
orient | デフォルトでは縦("v" )、"h" を指定すると横になる |
hue | 色合い |
linewidth | 線の太さ |
violinplotの具体例
violinplotの具体例を表示します。
sns.violinplot(x='survived', y='age', data=titanic, orient="v", linewidth=1.25)
plt.show()
<output>
主な引数を以下にまとめておきます。
distplot 引数 | 説明 |
---|---|
x, y | x, y軸にするデータのキー |
data | 可視化するデータ, Dataframe, Ndarray |
orient | デフォルトでは縦("v" )、"h" を指定すると横になる |
hue | 色合い |
linewidth | 線の太さ |
swarmplotの具体例
swarmplotの具体例を表示します。
sns.swarmplot(x='survived', y='age', data=titanic)
plt.show()
<output>
主な引数を以下にまとめておきます。
distplot 引数 | 説明 |
---|---|
x, y | x, y軸にするデータのキー |
data | 可視化するデータ, Dataframe, Ndarray |
orient | デフォルトでは縦("v" )、"h" を指定すると横になる |
hue | 色合い |
linewidth | 線の太さ |
SeabornでHeatmapを描画
SeabornでHeatmapを描画するときは主に以下のメソッドを使用します。
- heatmap : ヒートマップを描画
heatmapは、主に相関係数や欠損値を可視化するときに便利なツールです。
そのため、今回のデータセットの相関係数をまず求めてみます。
# 相関係数を求める
titanic_corr = titanic.corr()
titanic_corr
<output>
heatmapの具体例
heatmapの具体例を表示します。
sns.heatmap(data=titanic_corr, vmax=1.0, vmin=-1.0, annot=True)
plt.show()
<output>
主な引数を以下にまとめておきます。
distplot 引数 | 説明 |
---|---|
data | ndarrayの2次元データセットまたは、DataFrame、インデックス/カラム情報がheatmapのラベルとなる |
vmax, vmin | カラーマップを表示する範囲 |
annot | ヒートマップ上に数値を表示 |
cmap | カラーマップを設定 |
cbar | cbar=False にするとカラーバーが表示されなくなる |
Seabornでカテゴリごとに比較した図を作成する|factorplot
factorplotを利用することで簡単にカテゴリごとの比較図が作成できます。
factorplotの具体例|カテゴリごとに比較した図を作成
factorplotの具体例を以下に示します。
sns.factorplot(x='pclass', y='age', hue='survived', data=titanic, kind='point', palette='Set1')
plt.show()
<output>
kind='strip'
に変更してみます。
sns.factorplot(x='pclass', y='age', hue='survived', data=titanic, kind='strip', palette='Set1')
plt.show()
<output>
Seabornのグラフをカスタマイズ
Seabornもmatplotlibと同様に、グラフをカスタマイズすることができます。
変更点は、snsのメソッドのax引数に、matplotlibのaxインスタンスを指定するところです。
逆にそれ以外は、matplotlibの編集方法と変わりません。
なかなかイメージがわかないと思うので、実際のコードの具体例を使って説明していきます。
<Input>
fig, ax = plt.subplots(1, 2, figsize=(10,6), constrained_layout=True)
sns.swarmplot(ax = ax[0], x='survived', y='age', data=titanic)
sns.countplot(ax = ax[1], x='pclass', data =titanic)
ax[0].set_title('figure 1')
ax[1].set_title('figure 2')
plt.show()
<output>
より簡易的な場合は、matplotlib同様以下のように書くことができます。
<Input>
sns.distplot(titanic['age'])
plt.title('Using matplotlib')
plt.xlabel('Value of Age')
plt.show()
<Output>
seabornのよくある疑問(Q & A)
ここでは、seabornのよくある疑問について簡単に答えていきます。
seabornの解像度を設定したい
matplotlibのデフォルト設定を自分の好きな解像度に変更するのが最も簡単です。
# 出力の解像度
plt.rcParams["figure.dpi"] = 200
# 保存した画像の解像度
plt.rcParams["savefig.dpi"] = 300
参考資料
本記事を書く際に使用した参考資料をまとめます。
参考文献
私がデータの可視化や数値計算の勉強に使用した参考文献に関しては、『Numpy・Matplotlib・Pandasを学ぶための本』を参考にしてください。
参考サイト
まとめ
Seabornの基本的なグラフ描画方法を体系的に解説しました。
matplotlibとは異なり、こんなに簡単におしゃれなグラフが作成できるのは驚きですね。
また、細かいカスタマイズ方法もmatplotlibと変わらないため覚えることも少なくてありがたいです。
他のライブラリの使用方法について知りたい方は下記を参考にしてください。
Pythonを学習するのに効率的なサービスを紹介していきます。
まず最初におすすめするのは、Udemyです。
Udemyは、Pythonに特化した授業がたくさんあり、どの授業も良質です。
また、セール中は1500円定義で利用することができ、コスパも最強です。
下記の記事では、実際に私が15個以上の講義を受講して特におすすめだった講義を紹介しています。
他のPythonに特化したオンライン・オフラインスクールも下記の記事でまとめています。
自分の学習スタイルに合わせて最適なものを選びましょう。
また、私がPythonを学ぶ際に使用した本を全て暴露しているので参考にしてください。