[seaborn][pairplot] ペアプロット図を一括描画

Python in Excel 入門 - pairplot3 コアライブラリ
この記事は約11分で読めます。

seabornライブラリの pairplot関数を使って、ペアプロットのマトリックスを生成するサンプルコードを紹介します。
seabornは、統計データ視覚化ライブラリで Python in Excel のコアライブラリです。pairplot関数を使うと散布図やヒストグラム、カーネル密度推定グラフを一括描画できます。

2023年10月現在、Python in Excel は Microsoft 365 Insider Program のベータチャネルを選択することによって使用できるベータ版のExcelでのみ利用可能です。
ベータ版のExcelのインストール・初期設定方法は以下で詳しく紹介しています。

出力結果例

Python in Excel 入門 - pairplot38
palette=”cool”

pairplot 関数の構文

sns.pairplot(data [, 任意引数])
戻り値PairGrid
引数説明
(data)
(必須)
DataFrame処理対象のデータ
huestring色分けする場合、dataの列名
hue_orderlist(string)凡例に表示する値(hueに指定した列内の値)の順番
palettestring or
dict
プロットの色
RGB値やカラーパレット名で指定する
varslist(string)x軸とy軸に表示するdataの列名
x_varslist(string)x軸に表示するdataの列名
y_varslist(string)y軸に表示するdataの列名
kindstringグラフの種類
選択肢:”scatter”, “kde”, “hist”, “reg”
デフォルト:”scatter”
diag_kindstring対角線の位置に表示されるグラフの種類
選択肢:”auto”, “hist”, “kde”, None
デフォルトは “auto”
markersstring or
list(string)
マーカー(プロットの形)
matplotlib marker code で指定する
heightnumber各グラフの高さ(単位:inch)
デフォルトは 2.5
aspectnumber各グラフの幅(heightに対する比率で指定する)
デフォルトは 1
cornerboolTrueの場合、対角線の上側のグラフを表示しない
デフォルトは False
dropnabooldataから欠損値を削除してプロットするか
デフォルトは False
plot_kwsdict二変量のグラフ(対角線の位置に表示されるグラフ以外
の詳細設定
diag_kwsdict対角線の位置に表示されるグラフの詳細設定
grid_kwsdict戻り値のPairGridの追加設定
pairplot関数の引数一覧(「引数」列に「必須」の記載がないものはすべて任意引数)

サンプルコード

サンプルデータ
データが150件、名称が「IrisDataSet2」のテーブルを使用して説明します。

Python in Excel 入門 - describe4
サンプルデータを取得する方法は、ここを展開してください。
サンプルデータを取得する手順
  • 1
    「数式」タブ→「Pythonの挿入」ボタン→「Pythonサンプルを試す」をクリック
    Python in Excel 入門 - sample1
  • 2
    Excelウィンドウ右側に表示されたペーンの「サンプルの挿入」をクリック
    Python in Excel 入門 - sample2
  • 3
    サンプルデータのシートが追加されます
    Python in Excel 入門 - sample3

前提

以降のサンプルコードは、DataFrame型の df 変数が定義済みであることを前提としています。

# 別のセルに定義しておく
df = xl("IrisDataSet2[#すべて]", headers=True)
# 同じセルに記述してもよい
df = xl("IrisDataSet2[#すべて]", headers=True)
pp = sns.pairplot(df)

また、複数のpairplot関数の例を列挙して記述していますが、実際に試してみる場合はそれぞれ別のセルに記述してください。(列挙して記述しても最後の結果しか表示されません。)

# こんな風に複数記述されている場合は、1つずつ試すか別のセルに記述してください
pp1 = sns.pairplot(df, hue="species", kind="scatter") # 散布図(デフォルト)
pp2 = sns.pairplot(df, hue="species", kind="reg")     # 散布図に回帰直線を表示
pp3 = sns.pairplot(df, hue="species", kind="kde")     # カーネル密度推定
pp4 = sns.pairplot(df, hue="species", kind="hist")    # ヒストグラム

必須引数(data)のみ指定

# seabornは「sns」のエイリアス名でimport文なしで使える
# import seaborn as sns
pp = sns.pairplot(df)

結果

Python in Excel 入門 - pairplot11
dataのみ引数に指定

セルに「Image」と表示された場合は、Python出力の種類を「Excelの値」に変更してください。

Python in Excel 入門 - py icon
Python in Excel 入門 - kihon7

セル内のイメージを拡大する場合は、セルをクリックし、右上に表示される「参照の作成」アイコンをクリックしてください。

Python in Excel 入門 - pairplot1
Python in Excel 入門 - pairplot2

色分けと凡例(hue, hue_order)

#「species」列のデータ毎に色分け
pp = sns.pairplot(df, hue="species")

結果 色分けされて凡例が表示される

Python in Excel 入門 - pairplot12
hueを指定

任意引数「diag_kind」が指定されていないか「auto」の場合、「hue」を指定すると対角線上のグラフの種類が自動で変わります。
自動で変更させない場合は「diag_kind」を明示的に指定します。

#「species」列のデータ毎に色分け、凡例の表示順を指定
pp = sns.pairplot(df, hue="species", hue_order=["virginica", "versicolor", "setosa"])

結果 色分け、凡例内の要素の順番が変わる

Python in Excel 入門 - pairplot13
hue, hue_order を指定

色の指定(palette)

# seaborn paletteを指定
pp1 = sns.pairplot(df, hue="species", palette="pastel")
# matplotlib colormapも指定できる
pp2 = sns.pairplot(df, hue="species", palette="GnBu")
# 個別に指定もできる
pp3 = sns.pairplot(df, hue="species", palette={"setosa": "#ff0000", "versicolor": "#00ff00", "virginica": "blue"})

結果 

Python in Excel 入門 - pairplot35
paletteにseabornのカラーパレット名(pastel)を指定
Python in Excel 入門 - pairplot14
paletteにmatplotlibのカラーマップ名(GnBu)を指定
Python in Excel 入門 - pairplot15
paletteを辞書型で指定

処理対象の列を指定(vars, x_vars, y_vars)

# 処理対象の列名をリストで指定する
pp1 = sns.pairplot(df, vars=["petal_length", "petal_width"])

結果

Python in Excel 入門 - pairplot16
varsを指定
# 処理対象の列名をリストで指定する
pp2 = sns.pairplot(df, y_vars=["petal_length", "petal_width"], 
                       x_vars=["sepal_length", "sepal_width"])

結果

Python in Excel 入門 - pairplot17
x_vars と y_vars を指定

二変量グラフの種類(kind)

# 二変量グラフ(対角線の位置に表示されるグラフでないほう)の種類
pp1 = sns.pairplot(df, hue="species", kind="scatter") # 散布図(デフォルト)
pp2 = sns.pairplot(df, hue="species", kind="reg")     # 散布図に回帰直線を表示
pp3 = sns.pairplot(df, hue="species", kind="kde")     # カーネル密度推定
pp4 = sns.pairplot(df, hue="species", kind="hist")    # ヒストグラム

結果

Python in Excel 入門 - pairplot18
kind=”scatter” の例
Python in Excel 入門 - pairplot21
kind=”reg” の例
Python in Excel 入門 - pairplot19
kind=”kde” の例
Python in Excel 入門 - pairplot20
kind=”hist” の例

一変量グラフの種類(diag_kind)

# 一変量グラフの種類(対角線の位置に表示されるグラフ)
pp1 = sns.pairplot(df, hue="species", diag_kind="auto") # 自動(デフォルト)
pp2 = sns.pairplot(df, hue="species", diag_kind="hist") # ヒストグラム
pp3 = sns.pairplot(df, hue="species", diag_kind="kde")  # カーネル密度推定
pp4 = sns.pairplot(df, hue="species", diag_kind=None)   # なし

任意引数「diag_kind」が「auto」の場合、「hue」が指定されていると「kde」、「hue」が指定されていないと「hist」と同じ結果になります。

結果

Python in Excel 入門 - pairplot22
diag_kind=”auto” の例
Python in Excel 入門 - pairplot23
diag_kind=”hist” の例
Python in Excel 入門 - pairplot24
diag_kind=”kde” の例
Python in Excel 入門 - pairplot25
diag_kind=None の例

プロットの形状(markers)

# プロットの形状「✖」
pp1 = sns.pairplot(df, hue="species", markers="x")
# プロットの形状「■」「★」「tri_down」
pp2 = sns.pairplot(df, hue="species", markers=["s", "*", "1"])

結果

Python in Excel 入門 - pairplot26
markers=”x” の例
Python in Excel 入門 - pairplot27
markersにリストを指定

グラフのサイズ(height, aspect)

# 高さを指定(単位:inch)
pp1 = sns.pairplot(df, height=1)
# 高さ(単位:inch)と幅(heightに対する比率)を指定
pp2 = sns.pairplot(df, height=1, aspect=2)

結果

Python in Excel 入門 - pairplot28
height を指定
Python in Excel 入門 - pairplot29
height, aspect を指定

右上のグラフたちを非表示(corner)

# cornerをTrueにすると、右上側のグラフが表示されない
pp = sns.pairplot(df, corner=True)

結果 y軸の一番上のラベルが消えたのが謎。

Python in Excel 入門 - pairplot30
corner=True の例

各グラフをさらに設定(plot_kws, diag_kws, grid_kws)

# 一変量グラフを「hist」にして、カラーバーを表示する
# 二変量グラフを「kde」にして、塗りつぶしをFalseにする
pp = sns.pairplot(df, 
  kind="hist",              # 二変量グラフをヒストグラムにする
  diag_kind="kde",          # 一変量グラフをカーネル密度推定にする
  plot_kws={"cbar": True},  # ヒストグラムの設定
  diag_kws={"fill": False}, # カーネル密度推定グラフの設定
)

結果

Python in Excel 入門 - pairplot36
plot_kws, diag_kwsの例
# 戻り値のPairPlotの追加設定(右上にも枠線を表示する)
pp = sns.pairplot(df, grid_kws={"despine": False})

結果

Python in Excel 入門 - pairplot34
grid_kwsに despine プロパティを指定

plot_kws、diag_kwsは、表示するグラフの関数の引数を辞書型で指定します。
grid_kwsは、PairGridオブジェクトのコンストラクタの引数を辞書型で指定します。

辞書のキー値を間違えるとエラーが出たり、無視されたり、あるいは公式ドキュメントに記載のない引数「alpha」というキーが使えたりと、この辺りの仕様がつかみきれなかった…

Python in Excel 入門 - pairplot05
定義されていない引数を指定してみた

注意点

軸のタイトルや凡例に、日本語は表示されないようです。

Python in Excel 入門 - pairplot37

参考

コメント

タイトルとURLをコピーしました