【Python】Seabornのjointplotによるグラフ描画|データ分析入門

当ページには広告が含まれています。

こんにちは、DXCEL WAVEの運営者(@dxcelwave)です!

こんな方におすすめ!
  • PythonSeabornライブラリを用いてグラフを描画したい
  • Seabornの「jointplot」メソッドについて詳しく知りたい
目次

【Python】Seabornとは?|グラフ作成メソッド

SeabornとはPythonライブラリであり、グラフの作成やヒートマップの可視化を目的に用いられます。

SeabornはMatplotlibと同様、人気が高いデータ可視化ライブラリです。特に、Seabornをもとに描いたグラフや表は、グラフィックのデザイン性に大変優れている点が特徴的です。

本記事ではSeabornに搭載されている可視化メソッドであるjointplotを活用し、様々な形式のグラフを作成する方法について解説します。

【事前準備】Python環境構築・データの準備

Seabornでのグラフ描画に際して、Python環境の構築を事前に行います。

Pythonライブラリのインストール

Seabornのインストールが未済の場合、コマンドプロンプト(Windows)またはターミナル(Mac)を開き、以下を実行しましょう。

pip install seaborn

データセットの説明

データセットには、機械学習のサンプルデータとして有名なIris(アヤメ)データセットを活用します。3種類のアヤメ(Iris Setosa, Iris Versicolor, Iris Virginica)があり、それぞれ50サンプルずつ(合計150サンプル)用意されているデータです。このアヤメの名前を目的変数として利用します。また、説明変数にはアヤメの計測値である萼片(sepals)と花びら(petals)の長さと幅の4つを利用します。

データ読込

前述したIrisのデータセットを読み込むためのコードを記載します。以下をPythonファイルの先頭に配置し、実行してみましょう。

コード

import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn import datasets

# データセット読込
iris = datasets.load_iris()

# 説明変数
X = iris.data
X = pd.DataFrame(X, columns=["Sepal Length", "Sepal Width", "Petal Length", "Petal Width"])

# 目的変数
Y = iris.target
Y = iris_target = pd.DataFrame(Y, columns = ["Species"])

# 変数結合
df = pd.concat([X,Y],axis=1)

出力イメージ

# 出力
print(df)

# 出力イメージ
#      Sepal Length  Sepal Width  Petal Length  Petal Width  Species
# 0             5.1          3.5           1.4          0.2        0
# 1             4.9          3.0           1.4          0.2        0
# 2             4.7          3.2           1.3          0.2        0
# 3             4.6          3.1           1.5          0.2        0
# 4             5.0          3.6           1.4          0.2        0
# ..            ...          ...           ...          ...      ...
# 145           6.7          3.0           5.2          2.3        2
# 146           6.3          2.5           5.0          1.9        2
# 147           6.5          3.0           5.2          2.0        2
# 148           6.2          3.4           5.4          2.3        2
# 149           5.9          3.0           5.1          1.8        2

【Python実践】Seabornのjointplotを用いてグラフを描画

それでは実際にSeabornのjoiintplotメソッドを活用して様々なグラフを作成してみましょう。

散布図×ヒストグラム

jointplotを用いると、2変数による散布図および各変数のヒストグラムを描画することができます。次のようなコードを実行してみましょう。

import seaborn as sns

sns.jointplot(x=df.columns[0],        # X軸
              y=df.columns[1],        # Y軸
              data=df,                # データソース
              kind='scatter',         # グラフ型式('scatter', 'hist', 'hex', 'kde', 'reg', 'resid')
              color='red',            # グラフの色       
              height=6,               # 高さ
              ratio=5,                # 内側のグラフと外側のグラフの表示比率
              space=0.2,              # 内側のグラフと外側のグラフ間のスペース
              dropna=False,           # Trueの場合、Null値が含まれる値を除外
              xlim=None,              # X軸の範囲|タプル型式で(最小値, 最大値)として指定
              ylim=None,              # Y軸の範囲|タプル型式で(最小値, 最大値)として指定
              marginal_ticks=False,   # Falseの場合、周辺プロットのカウント/密度軸の目盛り抑制
              joint_kws=None,         # グラフプロットオプション(辞書型で指定)
              marginal_kws=None,      # グラフプロットオプション(辞書型で指定)
              hue=None,               # hueにカテゴリデータを指定するとカテゴリ別にプロット表示
              palette=None,           # hueにカテゴリデータ指定時のカラーパレット
              hue_order=None,         # hueのカテゴリデータのプロット順序
              hue_norm=None           # hueの標準化オプション
              )

# 画像保存
plt.savefig('jointplot.jpg')

散布図×ラベリング(hue)

前述のグラウに対して、散布図のカテゴリ別にラベリングしたい場合、次のようなコードを記述します。散布図のラベリングを行いたい場合、引数hueに対して対象のデータ項目を指定します。

import seaborn as sns

sns.jointplot(x=df.columns[0],        # X軸
              y=df.columns[1],        # Y軸
              data=df,                # データソース
              kind='scatter',         # グラフ型式('scatter', 'hist', 'hex', 'kde', 'reg', 'resid')
              color='red',            # グラフの色       
              height=6,               # 高さ
              ratio=5,                # 内側のグラフと外側のグラフの表示比率
              space=0.2,              # 内側のグラフと外側のグラフ間のスペース
              dropna=False,           # Trueの場合、Null値が含まれる値を除外
              xlim=None,              # X軸の範囲|タプル型式で(最小値, 最大値)として指定
              ylim=None,              # Y軸の範囲|タプル型式で(最小値, 最大値)として指定
              marginal_ticks=False,   # Falseの場合、周辺プロットのカウント/密度軸の目盛り抑制
              joint_kws=None,         # グラフプロットオプション(辞書型で指定)
              marginal_kws=None,      # グラフプロットオプション(辞書型で指定)
              hue=df.columns[-1],     # hueにカテゴリデータを指定するとカテゴリ別にプロット表示
              palette=None,           # hueにカテゴリデータ指定時のカラーパレット
              hue_order=None,         # hueのカテゴリデータのプロット順序
              hue_norm=None           # hueの標準化オプション
              )

# 画像保存
plt.savefig('jointplot.jpg')

散布図×回帰直線

散布図のプロットから回帰直線を表示したい場合、引数kind='reg'と指定し、次のように記述します。

import seaborn as sns

sns.jointplot(x=df.columns[0],        # X軸
              y=df.columns[1],        # Y軸
              data=df,                # データソース
              kind='reg',             # グラフ型式('scatter', 'hist', 'hex', 'kde', 'reg', 'resid')
              color='red',            # グラフの色       
              height=6,               # 高さ
              ratio=5,                # 内側のグラフと外側のグラフの表示比率
              space=0.2,              # 内側のグラフと外側のグラフ間のスペース
              dropna=False,           # Trueの場合、Null値が含まれる値を除外
              xlim=None,              # X軸の範囲|タプル型式で(最小値, 最大値)として指定
              ylim=None,              # Y軸の範囲|タプル型式で(最小値, 最大値)として指定
              marginal_ticks=False,   # Falseの場合、周辺プロットのカウント/密度軸の目盛り抑制
              joint_kws=None,         # グラフプロットオプション(辞書型で指定)
              marginal_kws=None,      # グラフプロットオプション(辞書型で指定)
              hue=None,               # hueにカテゴリデータを指定するとカテゴリ別にプロット表示
              palette=None,           # hueにカテゴリデータ指定時のカラーパレット
              hue_order=None,         # hueのカテゴリデータのプロット順序
              hue_norm=None           # hueの標準化オプション
              )

# 画像保存
plt.savefig('jointplot.jpg')

散布図×残差(resid)

引数kind='resid'と指定した場合、散布図と残差を描画できます。

import seaborn as sns

sns.jointplot(x=df.columns[0],        # X軸
              y=df.columns[1],        # Y軸
              data=df,                # データソース
              kind='resid',           # グラフ型式('scatter', 'hist', 'hex', 'kde', 'reg', 'resid')
              color='red',            # グラフの色       
              height=6,               # 高さ
              ratio=5,                # 内側のグラフと外側のグラフの表示比率
              space=0.2,              # 内側のグラフと外側のグラフ間のスペース
              dropna=False,           # Trueの場合、Null値が含まれる値を除外
              xlim=None,              # X軸の範囲|タプル型式で(最小値, 最大値)として指定
              ylim=None,              # Y軸の範囲|タプル型式で(最小値, 最大値)として指定
              marginal_ticks=False,   # Falseの場合、周辺プロットのカウント/密度軸の目盛り抑制
              joint_kws=None,         # グラフプロットオプション(辞書型で指定)
              marginal_kws=None,      # グラフプロットオプション(辞書型で指定)
              hue=None,               # hueにカテゴリデータを指定するとカテゴリ別にプロット表示
              palette=None,           # hueにカテゴリデータ指定時のカラーパレット
              hue_order=None,         # hueのカテゴリデータのプロット順序
              hue_norm=None           # hueの標準化オプション
              )

# 画像保存
plt.savefig('jointplot.jpg')

hexプロット

引数kind='hex'と指定した場合、hexプロットが描画できます。

import seaborn as sns

sns.jointplot(x=df.columns[0],        # X軸
              y=df.columns[1],        # Y軸
              data=df,                # データソース
              kind='hex',             # グラフ型式('scatter', 'hist', 'hex', 'kde', 'reg', 'resid')
              color='red',            # グラフの色       
              height=6,               # 高さ
              ratio=5,                # 内側のグラフと外側のグラフの表示比率
              space=0.2,              # 内側のグラフと外側のグラフ間のスペース
              dropna=False,           # Trueの場合、Null値が含まれる値を除外
              xlim=None,              # X軸の範囲|タプル型式で(最小値, 最大値)として指定
              ylim=None,              # Y軸の範囲|タプル型式で(最小値, 最大値)として指定
              marginal_ticks=False,   # Falseの場合、周辺プロットのカウント/密度軸の目盛り抑制
              joint_kws=None,         # グラフプロットオプション(辞書型で指定)
              marginal_kws=None,      # グラフプロットオプション(辞書型で指定)
              hue=None,               # hueにカテゴリデータを指定するとカテゴリ別にプロット表示
              palette=None,           # hueにカテゴリデータ指定時のカラーパレット
              hue_order=None,         # hueのカテゴリデータのプロット順序
              hue_norm=None           # hueの標準化オプション
              )

# 画像保存
plt.savefig('jointplot.jpg')

KDE(Karnel Density Estimation)プロット

引数kind='kde'と指定した場合、カーネル密度推定(KDE)プロットが描画できます。

import seaborn as sns

sns.jointplot(x=df.columns[0],        # X軸
              y=df.columns[1],        # Y軸
              data=df,                # データソース
              kind='kde',             # グラフ型式('scatter', 'hist', 'hex', 'kde', 'reg', 'resid')
              color='red',            # グラフの色       
              height=6,               # 高さ
              ratio=5,                # 内側のグラフと外側のグラフの表示比率
              space=0.2,              # 内側のグラフと外側のグラフ間のスペース
              dropna=False,           # Trueの場合、Null値が含まれる値を除外
              xlim=None,              # X軸の範囲|タプル型式で(最小値, 最大値)として指定
              ylim=None,              # Y軸の範囲|タプル型式で(最小値, 最大値)として指定
              marginal_ticks=False,   # Falseの場合、周辺プロットのカウント/密度軸の目盛り抑制
              joint_kws=None,         # グラフプロットオプション(辞書型で指定)
              marginal_kws=None,      # グラフプロットオプション(辞書型で指定)
              hue=None,               # hueにカテゴリデータを指定するとカテゴリ別にプロット表示
              palette=None,           # hueにカテゴリデータ指定時のカラーパレット
              hue_order=None,         # hueのカテゴリデータのプロット順序
              hue_norm=None           # hueの標準化オプション
              )

# 画像保存
plt.savefig('jointplot.jpg')

【参考】Pythonでのデータ前処理・分析・可視化

当サイトではPythonを用いた「データ前処理手法」「データ分析」「グラフや表を用いた可視化」手法について幅広く解説しております。AI・機械学習にも応用できる内容となっておりますため、興味がある方は併せてご確認下さい。

Pythonを活用したデータ処理・分析手法一覧



【参考】Pythonとは・できること一覧

最後に

この記事が気に入ったら
フォローしてね!

目次