python数据可视化之Seaborn(六):回归数据可视化

写在开头:今天分享的是关于线性关系数据绘图的内容,学习连接一样放在后文。html

前文回顾
第一节分享了Seaborn绘图的总体颜色与风格比例调控,可点击连接查看。
python数据可视化之Seaborn(一)
第二节分享了连续、分类、离散数据的绘图颜色的方法,可点击连接查看。
python数据可视化之Seaborn(二)
第三节分享了对于数据分布的绘图方法,可点击连接查看。
python数据可视化之Seaborn(三)
第四节分享了关于数据相关性的一些绘图展现,可点击连接查看。
python数据可视化之Seaborn(四)
第五节分享了关于分类数据的一些绘图展现方法,可点击连接查看。
python数据可视化之Seaborn(五)python

Seaborn可视化内容安排

在Seaborn的学习中安排以下,
1、画风设置:会简单介绍一下绘图风格(一)与颜色风格(二)的设置;
2、绘图技巧:这里会介绍数据集(三)、相关数据(四)、分类数据(五)、线性关系(六)可视化的相关内容;
3、结构网络:本节主要介绍数据识别结构网络的绘图(七)。web

2、Seaborn绘图技巧

线性回归绘图

在咱们拿到数据时每每都会发现数据与数据之间的相关关系相似于线性关系,这种是很广泛的,对于传统的统计每每解决线性的关系数据有较好的效果,特别是在线性回归的时候,绘制线性关系图可以较快的发现数据的拟合以及自身关系,下面咱们首先加载今天使用的包与数据,新加载的stasmodels包会在使用的时候进行说明,网络

import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
import statsmodels
tip = sns.load_dataset("tips")

回归模型图形绘制
在seaborn里有两种主要用来绘制回归图像的函数为regplot()以及lmplot(),这两个函数十分的接近,但也有不一样regplot能够接受许多类型的数据好比numpy arrays或者pandas series或者dataframe等,而lmplot()则将数据看做须要的参数,x,y必须是所谓的整洁的数据。下面展现一个常规绘图,svg

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

在这里插入图片描述
当咱们的自变量x为离散型变量的话,咱们每每直接画图的效果很差,解决的办法能够经过jitter参数添加随机噪声,使得数据不彻底在几个类别上进行回归,也能够经过将类别数据的均值点做为样本点,而后估计其置信区间,函数

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

在这里插入图片描述
更多模型图像绘制
像上面这种线性关系图的拟合与绘制很是简单,但值并不能知足大多数数据的要求。咱们利用anscombe数据集来展现一些更好的拟合绘图操做,首先载入数据对其绘图的点的大小进行调节,学习

anscombe = sns.load_dataset("anscombe")
sns.lmplot(x="x", y="y", data=anscombe.query("dataset=='I'"),
           scatter_kws={"s":130})

在这里插入图片描述
但对于数据集的第二类,咱们经过绘图能够看出,数据明显不是一个线性关系,那么怎么来绘图呢?原来的数据拟合是这样的,这明显不得行,spa

sns.lmplot(x="x", y="y", data=anscombe.query("dataset == 'II'"),
           ci=None, scatter_kws={"s": 130})

在这里插入图片描述
那么能够经过调节order参数使得数据的拟合符合非线性的方式进行,当order的参数值大于1的时候将会使用numpy.polyfit进行多项式拟合,.net

sns.lmplot(x="x", y="y", data=anscombe.query("dataset == 'II'"),
         order=2, ci=None, scatter_kws={"s": 130})

在这里插入图片描述
另外一个问题就是对于异常值的影响如何进行消除,每每当存在一个异常点的时候,若是这个点足够大,那么将会影响回归线的方向,
为了解决这样一个问题,咱们能够经过调整参数robust=True来消除异常值的影响,可是须要注意的是这个方法须要安装statsmodels模块,具体安装方法可自行百度,这里的下载可使用清华镜像,真的快!code

pip install statsmodels -i https://pypi.tuna.tsinghua.edu.cn/simple
sns.lmplot(x="x", y="y", data=anscombe.query("dataset == 'III'"),
           robust=True, ci=None, scatter_kws={"s": 130})

在这里插入图片描述
当因变量是二元变量的时候,虽然仍然可以绘图然效果都不好,为了来解决这样的状况,咱们须要使用逻辑回归,能够调整参数logistic为True,一样这里也须要加载statsmodel模块,才能使用logistic的方法,这里关闭ci的置信区间绘制会加快运算速度,

tips["big_tip"] = (tips.tip / tips.total_bill) > .15
sns.lmplot(x="total_bill", y="big_tip", data=tips,
           logistic=True, y_jitter=.07, ci=None)

在这里插入图片描述
还有一种方法可使用低平滑度的非参回归,这种方法的假设条件最少,而且不绘制置信区间,

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

在这里插入图片描述
而后residplot()函数能够有效的检测简单线性回归是否适合该数据集,其实就是检测数据残差是否存在异方差或者是否正态,若是数据不存在这些问题,那么应该均匀的分布在0的上下两侧,

sns.residplot(x="x", y="y", data=anscombe.query("dataset == 'I'"),
              scatter_kws={"s": 80})

在这里插入图片描述
若是数据的残差存在异方差的话那么绘图就是这个样子的,这样的数据绘制出来的数据就会致使回归的检验出现问题,也就是不能作简单线性回归,

sns.residplot(x="x", y="y", data=anscombe.query("dataset == 'II'"),
              scatter_kws={"s": 130})

在这里插入图片描述
有约束的回归绘图
咱们一般但愿观察不一样类别回归下模型的差别,为此咱们能够调整lmplot()下的hue参数,进行类别的划分,一样也能够设置标记点的形状

sns.lmplot(x="total_bill", y="tip", hue="smoker", data=tips, markers=["o", "^"], palette="Set2")

在这里插入图片描述
而后咱们还能够经过添加col和row的参数变量来对更细致的数据进行分类回归绘图,

sns.lmplot(x="total_bill", y="tip", hue="smoker",
           col="time", row="sex", data=tips, palette="Spectral");

在这里插入图片描述
在其余绘图中绘制回归线
有时咱们须要在其余的类型图中添加回归线,这个时候咱们能够对jointplot()的kind参数进行调整,

sns.jointplot(x="total_bill", y="tip", data=tips, kind="reg")

在这里插入图片描述
一样还能够经过绘制pairplot()中添加分组回归线,

sns.pairplot(tips, x_vars=["total_bill", "size"], y_vars=["tip"],
            hue="smoker", height=5, aspect=.8, kind="reg",palette="Set1")

在这里插入图片描述
须要注意的是在lmplot和pairplot中调整图的大小只能经过height,aspect或者col_wrap等参数进行图形画布的绘制,由于他们都是基于FaceGrid的操做方式,可是对于regplot()这是另外一种绘制回归线的函数则能够经过plt设置画布进行,

f, ax = plt.subplots(figsize=(8, 8))
sns.regplot(x="total_bill", y="tip", data=tips, ax=ax);

在这里插入图片描述
结语
好的,今天的回归线的绘制分享就到这里,后续还要一个小节,本系列就要结束,主要仍是以参考学习为主,但愿本身能学到点东西。后文会再分享一些Facegrid和Pairgrid的用法。
谢谢阅读。
参考
Seaborn绘图