seabornライブラリの pairplot関数を使って、ペアプロットのマトリックスを生成するサンプルコードを紹介します。
seabornは、統計データ視覚化ライブラリで Python in Excel のコアライブラリです。pairplot関数を使うと散布図やヒストグラム、カーネル密度推定グラフを一括描画できます。
出力結果例
pairplot 関数の構文
sns.pairplot(data [, 任意引数])
戻り値 | PairGrid |
引数 | 型 | 説明 |
---|---|---|
(data) (必須) | DataFrame | 処理対象のデータ |
hue | string | 色分けする場合、dataの列名 |
hue_order | list(string) | 凡例に表示する値(hueに指定した列内の値)の順番 |
palette | string or dict | プロットの色 RGB値やカラーパレット名で指定する |
vars | list(string) | x軸とy軸に表示するdataの列名 |
x_vars | list(string) | x軸に表示するdataの列名 |
y_vars | list(string) | y軸に表示するdataの列名 |
kind | string | グラフの種類 選択肢:”scatter”, “kde”, “hist”, “reg” デフォルト:”scatter” |
diag_kind | string | 対角線の位置に表示されるグラフの種類 選択肢:”auto”, “hist”, “kde”, None デフォルトは “auto” |
markers | string or list(string) | マーカー(プロットの形) matplotlib marker code で指定する |
height | number | 各グラフの高さ(単位:inch) デフォルトは 2.5 |
aspect | number | 各グラフの幅(heightに対する比率で指定する) デフォルトは 1 |
corner | bool | Trueの場合、対角線の上側のグラフを表示しない デフォルトは False |
dropna | bool | dataから欠損値を削除してプロットするか デフォルトは False |
plot_kws | dict | 二変量のグラフ(対角線の位置に表示されるグラフ以外) の詳細設定 |
diag_kws | dict | 対角線の位置に表示されるグラフの詳細設定 |
grid_kws | dict | 戻り値のPairGridの追加設定 |
サンプルコード
サンプルデータ
データが150件、名称が「IrisDataSet2」のテーブルを使用して説明します。
サンプルデータを取得する方法は、ここを展開してください。
サンプルデータを取得する手順
- 1「数式」タブ→「Pythonの挿入」ボタン→「Pythonサンプルを試す」をクリック
- 2Excelウィンドウ右側に表示されたペーンの「サンプルの挿入」をクリック
- 3サンプルデータのシートが追加されます
Pythonの入力方法や出力種類、DataFrameの定義方法については、以下の記事で詳しく紹介しています。
【超基本】Python in Excel の使い方とルール
Python in Excel の入力方法は難しくはありませんが、Excelのワークシート関数の入力の仕方とは少し勝手が違います。この記事では、Python in Excel の入力の仕方と出力の種類、計算順序やパフォーマンスを向上させるた...
[DataFrame] xl関数の指定方法いろいろ
この記事では、DataFrameの定義、xl関数の使い方や注意点について説明します。DataFrameを使うと、Excelのセル範囲や名前、テーブル、Power Queryのデータを Python in Excel で扱えるようになります。...
前提
以降のサンプルコードは、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)
結果
セルに「Image」と表示された場合は、Python出力の種類を「Excelの値」に変更してください。
セル内のイメージを拡大する場合は、セルをクリックし、右上に表示される「参照の作成」アイコンをクリックしてください。
色分けと凡例(hue, hue_order)
#「species」列のデータ毎に色分け
pp = sns.pairplot(df, hue="species")
結果 色分けされて凡例が表示される
#「species」列のデータ毎に色分け、凡例の表示順を指定
pp = sns.pairplot(df, hue="species", hue_order=["virginica", "versicolor", "setosa"])
結果 色分け、凡例内の要素の順番が変わる
色の指定(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"})
結果
処理対象の列を指定(vars, x_vars, y_vars)
# 処理対象の列名をリストで指定する
pp1 = sns.pairplot(df, vars=["petal_length", "petal_width"])
結果
# 処理対象の列名をリストで指定する
pp2 = sns.pairplot(df, y_vars=["petal_length", "petal_width"],
x_vars=["sepal_length", "sepal_width"])
結果
二変量グラフの種類(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") # ヒストグラム
結果
一変量グラフの種類(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) # なし
結果
プロットの形状(markers)
# プロットの形状「✖」
pp1 = sns.pairplot(df, hue="species", markers="x")
# プロットの形状「■」「★」「tri_down」
pp2 = sns.pairplot(df, hue="species", markers=["s", "*", "1"])
結果
グラフのサイズ(height, aspect)
# 高さを指定(単位:inch)
pp1 = sns.pairplot(df, height=1)
# 高さ(単位:inch)と幅(heightに対する比率)を指定
pp2 = sns.pairplot(df, height=1, aspect=2)
結果
右上のグラフたちを非表示(corner)
# cornerをTrueにすると、右上側のグラフが表示されない
pp = sns.pairplot(df, corner=True)
結果 y軸の一番上のラベルが消えたのが謎。
各グラフをさらに設定(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}, # カーネル密度推定グラフの設定
)
結果
# 戻り値のPairPlotの追加設定(右上にも枠線を表示する)
pp = sns.pairplot(df, grid_kws={"despine": False})
結果
辞書のキー値を間違えるとエラーが出たり、無視されたり、あるいは公式ドキュメントに記載のない引数「alpha」というキーが使えたりと、この辺りの仕様がつかみきれなかった…
注意点
軸のタイトルや凡例に、日本語は表示されないようです。
コメント