Seaborn PR

【15分で習得】seabornの使い方まとめ(散布図, ヒストグラム, 折れ線グラフ…)

記事内に商品プロモーションを含む場合があります

【15分で習得】seabornの使い方まとめ(散布図, ヒストグラム, 折れ線グラフ…)

 

ガリレオ
ガリレオ
 

  • seabornで誰でもかっこいいグラフが描ける方法を教えます。
  • この記事は15分程度で読み終わります。

 

本記事の内容

  1. seabornの基本と導入
  2. Seabornの基本的な使用方法
  3. Seabornで棒グラフ

 

[toc]

seabornの基本知識

 

searbonは、簡単にいうとmatplotlibを更に簡単にかっこよくプロットできるライブラリです。

描画方法は、ほとんんどmatplotlibと変わらないので、matplotlibの基本がわかっている方は、簡単に使いこなすことができます。

matplotlibの基本が怪しい方は、下記を参考にしてください。

【15分】Pythonでグラフを作成する方法|matplotlibの基本をマスターPythonでグラフを書くことが難しそうだと思っていませんか?実は、Pythonを使用したグラフ作成は、excelより便利で簡単です。この記事では、初心者でもグラフが書けるように丁寧にpythonのグラフの作成法を説明します。...

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)についての前提知識があると良いです。

もし、基本があまりにも抜けている方は、下記を参考にして簡単に復習してください。

関連記事

 

サンプルデータのインポート

 

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で棒グラフを使用する際には、以下の二つを使用します。

  1. barplot : 横軸と縦軸の値を設定して棒グラフを描画
  2. 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のsample

countplotでよく使用する引数を以下にまとめます。

countplot 引数 説明
x 横軸となるデータ
data 可視化するデータセット
palette 色のスタイル
*種類に関しては、公式ドキュメント(seaborn.color_palette)を参照してください。

 

seabornでヒストグラムを描画|distplot

 

Seabornでヒストグラムを使用する際には、displotを使用します。

  1. distplot : ヒストグラムを描画(確率密度関数付き)

以下具体例を説明します。

 

distplotの具体例|ヒストグラム描画

 

distplotを用いることでヒストグラムを描画することができます。

具体例を以下に示します。

sns.distplot(a=titanic['age'], bins=20, hist=True, kde=True, color='blue')
plt.show()

 

<output>

distplotのサンプル

デフォルトでは、ヒストグラムの領域を1に正規化して、カーネル密度推定によって確率分布関数の近似値を表示します。

主な引数をまとめておきます。

distplot 引数 説明
a 可視化するデータ(Series, 1d-array, list)
bins x軸の刻み幅(棒の数)
hist ヒストグラムを表示するかどうか(デフォルト : True
kde 確率分布関数を表示するかどうか(デフォルト : True
color ヒストグラムの色を設定

 

 

Seabornで散布図を描画

 

Seabornで散布図を描画する方法は主に以下の二つです。

  1. scatterplot : 散布図を表示
  2. jointplot : 散布図とヒストグラムを表示
  3. 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の具体例

さらにサイズや色分けにデータを選択することができます。

具体例を以下に示します。

# 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>

scatterplotの応用

 

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>

jointplotの具体例

 

主な引数をまとめておきます。

distplot 引数 説明
x, y x, y軸にするデータのキー
data 可視化するデータ, Dataframe, Ndarray
kind プロットの種類(“scatter”, “kde”, “hist”, “hex”, “reg”, “resid” )
joint_kws 具体例を示します(透明度等を変更できる)
color 散布図の色

 

kde='reg'を指定することで回帰直線を表示することができます。

jointplotの具体例 回帰直線の表示

 

さらに、kind='kde'を設定することで、確率密度関数を評価することができます。

 

 

pirplotの具体例|指定した値に対する散布図と棒グラフを一括表示

 

pirplotの具体例を表示します。

sns.pairplot(data = titanic[['survived', 'age', 'fare']], hue='survived', plot_kws={'alpha':0.3})
plt.show()

 

<output>

pirplotの具体例

全てのデータの傾向を探るのに便利なグラフです。

 

Seabornで箱ひげ図を描画

 

Seabornで箱ひげ図を描画するときは主に以下のメソッドを使用します。

  1. boxplot : 通常の箱ひげ図
  2. violinplot : サンプルのヒストグラム付きの箱ひげ図
  3. swarmplot : vilolinplot以上に詳しい箱ひげ図

 

boxplotの具体例|通常の箱ひげ図を表示

 

boxplotの具体例を表示します。

sns.boxplot(x='survived', y='age', data=titanic, orient="v", linewidth=1.25)
plt.show()

 

<output>

boxplotの具体例

主な引数を以下にまとめておきます。

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>

violinplotの具体例

主な引数を以下にまとめておきます。

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>

swarmplotの具体例

主な引数を以下にまとめておきます。

distplot 引数 説明
x, y x, y軸にするデータのキー
data 可視化するデータ, Dataframe, Ndarray
orient デフォルトでは縦("v")、"h"を指定すると横になる
hue 色合い
linewidth 線の太さ

 

 

SeabornでHeatmapを描画

 

SeabornでHeatmapを描画するときは主に以下のメソッドを使用します。

  1. heatmap : ヒートマップを描画

 

heatmapは、主に相関係数や欠損値を可視化するときに便利なツールです。

そのため、今回のデータセットの相関係数をまず求めてみます。

# 相関係数を求める
titanic_corr = titanic.corr()
titanic_corr

 

<output>

titanic datasetの相関行列

 

heatmapの具体例

 

heatmapの具体例を表示します。

sns.heatmap(data=titanic_corr, vmax=1.0, vmin=-1.0, annot=True)
plt.show()

 

<output>

 

heatmap_sample 

主な引数を以下にまとめておきます。

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>

factorplotの具体例 pointを設定

 

kind='strip'に変更してみます。

sns.factorplot(x='pclass', y='age', hue='survived', data=titanic, kind='strip', palette='Set1')
plt.show()

 

<output>

factorplotの具体例 stripを設定

 

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>

seabornのカスタマイズ具体例

より簡易的な場合は、matplotlib同様以下のように書くことができます。

<Input>

sns.distplot(titanic['age'])
plt.title('Using matplotlib')
plt.xlabel('Value of Age')
plt.show()

 

<Output>

seabornのカスタマイズ具体例2

 

seabornのよくある疑問(Q & A)

 

ここでは、seabornのよくある疑問について簡単に答えていきます。

seabornの解像度を設定したい

 

matplotlibのデフォルト設定を自分の好きな解像度に変更するのが最も簡単です。

# 出力の解像度
plt.rcParams["figure.dpi"] = 200 
# 保存した画像の解像度
plt.rcParams["savefig.dpi"] = 300 

 

 

参考資料

 

本記事を書く際に使用した参考資料をまとめます。

 

参考文献

 

私がデータの可視化や数値計算の勉強に使用した参考文献に関しては、『Numpy・Matplotlib・Pandasを学ぶための本』を参考にしてください。

参考サイト

 

 

まとめ

 

Seabornの基本的なグラフ描画方法を体系的に解説しました。

matplotlibとは異なり、こんなに簡単におしゃれなグラフが作成できるのは驚きですね。

また、細かいカスタマイズ方法もmatplotlibと変わらないため覚えることも少なくてありがたいです。

他のライブラリの使用方法について知りたい方は下記を参考にしてください。

 

ABOUT ME
努力のガリレオ
【運営者】 : 東大で理論物理を研究中(経歴)東京大学, TOEIC950点, NASA留学, カナダ滞在経験有り, 最優秀塾講師賞, オンライン英会話講師試験合格, ブログと独自コンテンツで収益6桁達成 【編集者】: イングリッシュアドバイザーとして勤務中(経歴)中学校教諭一種免許取得[英語],カナダ留学経験あり, TOEIC650点
Python学習を効率化させるサービス

 

Pythonを学習するのに効率的なサービスを紹介していきます。

まず最初におすすめするのは、Udemyです。

Udemyは、Pythonに特化した授業がたくさんあり、どの授業も良質です。

また、セール中は1500円定義で利用することができ、コスパも最強です。

下記の記事では、実際に私が15個以上の講義を受講して特におすすめだった講義を紹介しています。

 

【最新】UdemyでおすすめのPythonコース|東大生が厳選!10万を超える講座があるUdemyの中で、Pythonに関係する講座を厳選しました。また、本記事では、Udemyを使用しながらPythonをどのような順番で勉強するべきかを紹介しました。ぜひ参考にしてください。...

 

他のPythonに特化したオンライン・オフラインスクールも下記の記事でまとめています。

 

【最新】Pythonに強いプログラミングスクール7選|東大生が厳選Pythonの流行と共に、Pythonに強いプログラミングスクールが増えてきました。本記事では、特にPythonを効率的に学ぶことができるプログラミングスクールを経験をもとに厳選して、内容を詳しく解説しています。...

 

自分の学習スタイルに合わせて最適なものを選びましょう。

また、私がPythonを学ぶ際に使用した本を全て暴露しているので参考にしてください。