[seaborn][regplot] 散布図と線形回帰を描画

Python in Excel 入門 - regplot 18 legend コアライブラリ
凡例の表示例
この記事は約10分で読めます。

seabornライブラリの regplot関数を使って、散布図と線形回帰を描画するサンプルコードを紹介します。
seabornは、統計データ視覚化ライブラリで Python in Excel のコアライブラリの1つです。regplot関数を使うと散布図とトレンドラインの線形回帰を一括描画できます。

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

出力結果例

Python in Excel 入門 - regplot 18 legend
凡例の表示例

regplot 関数の構文

sns.regplot(data=None, x=None, y=None [, 任意引数])
戻り値matplotlib Axes
引数説明
dataDataFrame処理対象のデータ
x, ystring or
Series or
配列
x軸とy軸に表示するdataの列名
または、Seriesオブジェクト
x_estimator関数ベクトル -> スカラーをマップする関数
x の値に対する関数の戻り値がプロットされる。
x が離散値である場合に役立つ。
x_binsint or
vector
x の値をビン分割し中心傾向と信頼区間を推定する。
ビン分割は散布図の描画にのみ使用される。
x_cistringx の離散値の中心傾向をプロットするときに使用される
信頼区間のタイプ
選択肢:”ci”(引数 ci の値に従う)
    ”sd”(各ビンの観測値の標準偏差を表示)
デフォルト:”ci”
scatterbool散布図を描画するか否か
デフォルト:True
fit_regbool線形回帰モデルを描画するか否か
デフォルト:True
ciint回帰推定の信頼区間(%)
回帰直線の周囲の半透明のバンドが描画される
デフォルト:95
n_bootintci を推定するためのブートストラップサンプリングの回数
デフォルト:1000
unitsstringx や y の観測値がサンプリング単位でネストされている場合、
その変数名を指定する。マルチレベルのブートストラップによって
信頼区間を計算し、回帰推定や描画には影響を与えない。
seedint、他int、numpy.random.Generator、
numpy.random.RandomStateを指定
再現可能なブートストラップのためのシードまたは乱数ジェネレータ
orderint1より大きい値を指定すると、numpy.polyfit を使用して
多項式回帰を推定する
デフォルト:1
logisticboolTrue の場合、y がバイナリ値であると仮定し、
statsmodels のロジスティック回帰モデルを使用する。
※線形回帰よりも計算量が多いため、引数 n_boot の数を減らすか、
引数 ci を None にすることを推奨
デフォルト:False
lowessboolTrue の場合、statsmodels のノンパラメトリック lowess モデル
(局所加重線形回帰)を使用する。信頼区間は描画されない。
デフォルト:False
robustboolTrue の場合、statsmodels のロバスト回帰モデルを使用する。
これにより外れ値の重みが軽減される。
※線形回帰よりも計算量が多いため、引数 n_boot の数を減らすか、
引数 ci を None にすることを推奨
デフォルト:False
logxboolTrue の場合、y ~ log(x) の形式の線形回帰を使用する
※ x が正の値である必要があることに注意
デフォルト:False
x_partial,
y_partial
stringプロットする前に、x または y 変数から回帰する交絡変数
truncatebool回帰直線をデータの範囲内に描画するか
False の場合、x 軸の範囲まで拡張される
デフォルト:True
x_jitter,
y_jitter
float一様なランダムノイズを x または y 変数に追加する場合の
ノイズのサイズ。ノイズは散布図の外観にのみ影響し、
離散値を取る変数をプロットするときに役立つ。
labelstring凡例のラベル
colorstringプロットの色
Specifying colors
markerstringマーカー(プロットの形)
matplotlib marker code で指定する
デフォルト:”o”
scatter_kws,
line_kws
dictmatplotlib.pyplot の scatter関数,
plot関数に渡す追加の設定
axmatplotlib Axesプロットを描画するための Axes オブジェクト
regplot 関数の引数一覧(「引数」列に「必須」の記載がないものはすべて任意引数)

サンプルコード

サンプルデータ
データが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, x, y変数が定義済みであることを前提としています。

# 別のセルに定義しておく
df = xl("IrisDataSet2[#すべて]", headers=True)

# 特定の列のDataFrameの場合
x = xl("IrisDataSet2[[#すべて],[sepal_length]]", headers=True)
y = xl("IrisDataSet2[[#すべて],[petal_length]]", headers=True)
# 同じセルに記述してもよい
df = xl("IrisDataSet2[#すべて]", headers=True)
sns.regplot(data=df, x="sepal_length", y="petal_length")

また、複数のregplot関数の例を列挙して記述していますが、実際に試してみる場合はそれぞれ別のセルに記述してください。(列挙して記述するとプロットが重なって表示されます。)

# こんな風に複数記述されている場合は、1つずつ試すか別のセルに記述してください
sns.regplot(x=x, y=y, x_bins=25, x_ci="sd") # 標準偏差
sns.regplot(x=x, y=y, ci=100)               # 信頼区間100%
sns.regplot(x=x, y=y, ci=80)                # 信頼区間80%

データの指定1(x, y に列名)

# seabornは「sns」のエイリアス名でimport文なしで使える
# import seaborn as sns
sns.regplot(data=df, x="sepal_length", y="petal_length")

結果

Python in Excel 入門 - regplot 01
dataを指定

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

Python in Excel 入門 - py icon
画像付き説明は、ここを展開してください。
Python in Excel 入門 - kihon7

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

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

データの指定2(x, y にオブジェクト)

# x, y は別セルで定義済み(「前提」セクションを参照)
sns.regplot(x=x, y=y, color="m")

結果 わかりずらいので色(マゼンタ)も変えてみた(プロットはdata指定の例と全く同じ)

Python in Excel 入門 - regplot 02
x, yにDataFrameを指定

ビン分割(x_bins)

sns.regplot(x=x, y=y, x_bins=50)

結果 大まかに分割。散布図だけ変わる。

Python in Excel 入門 -
x_bins=50 の例

信頼区間(x_ci, ci)

sns.regplot(x=x, y=y, x_bins=25, x_ci="sd") # 標準偏差
sns.regplot(x=x, y=y, ci=100)               # 信頼区間100%
sns.regplot(x=x, y=y, ci=80)                # 信頼区間80%

結果 回帰直線の周囲の半透明のバンドの幅が変わる

Python in Excel 入門 - regplot 04 sd
x_bins=25, x_ci=”sd” の例
Python in Excel 入門 - regplot 05 ci100
ci=100 の例
Python in Excel 入門 - regplot 06 ci80
ci=80 の例

公式サイトを見ると、
引数 x_ci には0~100の範囲の int も指定できるようなのですが、int を指定しても描画は何も変わらずでした。エラーにもならない。謎。

散布図、回帰モデルを非表示(scatter, fit_reg)

sns.regplot(x=x, y=y, scatter=False) # 散布図を非表示
sns.regplot(x=x, y=y, fit_reg=False) # 回帰直線を非表示

結果 

Python in Excel 入門 - regplot 07 scatter
scatter=False の例
Python in Excel 入門 - regplot 08 fit reg
fit_reg=False の例

色々な回帰モデル(order, lowess, logx)

# 多項式回帰
sns.regplot(x=x, y=y, order=3)

結果

Python in Excel 入門 - regplot 09 order
order=3 の例
# ノンパラメトリック lowess モデル(局所加重線形回帰)
sns.regplot(x=x, y=y, lowess=True)

結果

Python in Excel 入門 - regplot 10 lowess
lowess=True の例
# y ~ log(x) の形式の線形回帰
sns.regplot(x=x, y=y, logx=True)

結果

Python in Excel 入門 -
logx=True の例

回帰ラインの描画範囲(truncate)

sns.regplot(x=x, y=y, truncate=True) # デフォルト
sns.regplot(x=x, y=y, truncate=False)

結果 False にすると、回帰ラインが枠内いっぱいに描画される

Python in Excel 入門 - regplot 12 truncate
truncate=True の例
Python in Excel 入門 - regplot 13 truncate
truncate=False の例

ランダムノイズを追加(x_jitter, y_jitter)

sns.regplot(x=x, y=y, x_jitter=0.2)

結果

Python in Excel 入門 -
x_jitter=0.2 の例

色、プロットの形状(color, marker)

# 色を「cyan」、プロットの形状を「♦(thin_diamond)」
sns.regplot(x=x, y=y, color="c", marker="d")

結果

Python in Excel 入門 - regplot 16 color
color=”c”, marker=”d” の例

凡例を表示(label)

# species別にDataFrameを取得する
df = xl("IrisDataSet2[#すべて]", headers=True)
setosa = df.query('species == "setosa"')
x1 = setosa["sepal_length"]
y1 = setosa["petal_length"]
versicolor = df.query('species == "versicolor"')
x2 = versicolor["sepal_length"]
y2 = versicolor["petal_length"]
virginica = df.query('species == "virginica"')
x3 = virginica["sepal_length"]
y3 = virginica["petal_length"]

# グラフと凡例を表示
ax = sns.regplot(x=x1, y=y1, label="setosa")
ax = sns.regplot(x=x2, y=y2, label="versicolor")
ax = sns.regplot(x=x3, y=y3, label="virginica")
ax.legend()

結果

Python in Excel 入門 - regplot 17 legend
凡例の表示例

各グラフをさらに設定(scatter_kws, line_kws)

sns.regplot(
  x=x, y=y,
  scatter_kws={"edgecolors":"m", "linewidths":2.0}, # 散布図の設定
  line_kws={"linestyle": "--"},                     # 回帰ラインの設定
)

結果

Python in Excel 入門 - regplot 19 kws
scatter_kws, line_kws の設定例

注意点

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

Python in Excel 入門 - regplot 20
日本語は表示できない

参考

コメント

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