线性关系可视化
许多数据集都有着众多连续变量。数据分析的目的经常就是衡量变量之间的关系,我们之前介绍了可以绘制双变量分布的函数。然而,使用统计模型来估计两个噪声观测组之间的简单关系可能是非常有帮助的。我们在这一章中讨论的函数功能将在线性回归的框架实现。
请注意,seaborn并不是一个统计分析库,这里所做的回归仅仅是粗略的。其目的是在探索性数据分析时,提供快捷的可视化工具,便于人们了解变量间可能存在的关系。(statsmodels)
%matplotlib inline
import numpy as np
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
import seaborn as sns
sns.set(color_codes=True)
np.random.seed(sum(map(ord, "regression")))
tips = sns.load_dataset("tips")
绘制线性回归模型
regplot()
和lmplot()
都可以绘制线性回归曲线。这两个函数非常相似,甚至共有一些核心功能。我将着力讲解二者的区别,这会帮助你选用恰当的工具。
在最简单的调用中,两个函数都会画出双变量的散点图,然后以y~x拟合回归方程和预测值95%置信区间并将其画出。
sns.regplot(x="total_bill", y="tip", data=tips);
sns.lmplot(x="total_bill", y="tip", data=tips);
你应该已经注意到两幅图只有尺寸上的区别。我们在这里只进行简短的解释。目前为止两者间主要的区别是,regplot接受各种格式的x y,包括numpy arrays ,pandas series 或者pandas Dataframe对象。相比之下,lmplot()只接受字符串对象。这种数据格式被称为’long-form’或者’tidy’。除了输入数据的便利性外,regplot()
可以看做拥有lmplot()
特征的一个子集,所以接来下我们将用lmplot()
进行演示。
实际上官方手册这里解释的并不直观。两者区别在于sns.regplot(x=tips[‘total_bill’], y=tips[‘tip’])可以运行,data=~这个参数不必要。但是sns.lmplot(x=tips[‘total_bill’], y=tips[‘tip’], data=tips)就必须传入data=~参数
当一个数据为离散值时,也可以生成一个回归曲线,但是这种散点图往往不是最优的。
sns.lmplot(x="size", y="tip", data=tips);
我们可以通过给离散变量添加随机噪声(“jitter”)的方式使得这些值的分布更加清晰。注意!这些噪声只是改变了散点图,并不影响回归曲线。
sns.lmplot(x="size", y="tip",