Python

Python seaborn チュートリアル プロット機能 回帰モデルを可視化 (1)

原文のドキュメントはこちらから。

多くのデータセットには複数の量的変数が含まれており、分析の目的は、それらの変数を互いに関連付けることである。以前に、2つの変数の合同分布を示すことでこれを達成できる関数について議論した。しかし、統計モデルを使用して、2つのノイズの多いオブザベーションのセット間の単純な関係を推定することは、効率が良い。

Tukeyの精神では、seabornの回帰プロットは、主に、探索的データ分析の際にデータセットのパターンを強調するのに役立つ視覚的なガイドを追加することを目的としている。つまり、seabornはそれ自体が統計分析のためのパッケージではない。回帰モデルの適合性に関連する定量的な測定値を得るためには、statsmodelsを使うべきある。(seabornの目標は、可視化によってデータセットを素早く簡単に探索方法を提供することである)

import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
sns.set_theme(color_codes=True)
tips = sns.load_dataset("tips")

線形回帰モデルを描画する関数

seabornの2つの主要な関数は、回帰によって決定された線形関係を視覚化するために使用される。これらの関数、regplot()とlmplot()は密接に関連しており、コア機能の多くを共有している。しかし、特定の作業に適したツールを素早く選択できるように、これらの違いを理解することが重要。

最も単純な呼び出しでは、両方の関数は、2つの変数xとyの散布図を描き、回帰モデルy ~ xを適合させ、その結果の回帰直線と回帰の95%信頼区間をプロットする。

import seaborn as sns
import matplotlib.pyplot as plt
sns.set_theme(color_codes=True)
tips = sns.load_dataset("tips")

sns.regplot(x="total_bill", y="tip", data=tips)

plt.show()
import seaborn as sns
import matplotlib.pyplot as plt
sns.set_theme(color_codes=True)
tips = sns.load_dataset("tips")

sns.lmplot(x="total_bill", y="tip", data=tips)

plt.show()

結果として得られるプロットは、図の形状が異なる以外は同じであることに注意が必要。これがなぜそうなのかについては後述する。今のところ、知っておくべき他の主な違いは、regplot() は、単純な numpy 配列、pandas 直列オブジェクト、あるいは data に渡された pandas DataFrame オブジェクト内の変数への参照など、様々な形式で x および y 変数を渡せることである。対照的に、lmplot() はデータを必須パラメータとし、x および y 変数は文字列として指定する必要がある。このデータ形式は「ロングフォーム」または「整頓された」データと呼ばれる。この入力の柔軟性以外に、regplot() は lmplot() の機能のサブセットを持っているため、後者を使用してデモを行う。

変数の1つが離散的な値を取る場合、線形回帰を適合させることができるが、この種のデータセットによって生成される単純な散布図は、しばしば最適ではない。

import seaborn as sns
import matplotlib.pyplot as plt
sns.set_theme(color_codes=True)
tips = sns.load_dataset("tips")

sns.lmplot(x="size", y="tip", data=tips)

plt.show()

1つのオプションは離散値にランダム・ノイズ(”ジッタ”)を追加して、それらの値の分布をより明確にすることである。ジッタは散布図データにのみ適用され、回帰直線の適合自体には影響しないことに注意が必要。

import seaborn as sns
import matplotlib.pyplot as plt
sns.set_theme(color_codes=True)
tips = sns.load_dataset("tips")

sns.lmplot(x="size", y="tip", data=tips, x_jitter=.05)

plt.show()

2番目のオプションは、信頼区間とともに中心傾向の推定値をプロットするために、各離散のビンでのオブザベーションを折りたたむことである。

import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
sns.set_theme(color_codes=True)
tips = sns.load_dataset("tips")

sns.lmplot(x="size", y="tip", data=tips, x_estimator=np.mean)

plt.show()