python数据可视化之Seaborn(六)

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

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

Seaborn可视化内容安排

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

二、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必须是所谓的整洁的数据。下面展示一个常规绘图,

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})

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

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

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

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

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

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绘图

发布了12 篇原创文章 · 获赞 51 · 访问量 2262

猜你喜欢

转载自blog.csdn.net/qq_35149632/article/details/104450558
今日推荐