建设专业网站运营团队,笑话网站程序,大庆市让胡路区规划建设局网站,祈网网站建设Seaborn本身并不是为了统计分析而生的#xff0c;seaborn中的回归图主要用于添加视觉指南#xff0c;以帮助在探索性数据分析EDA中强调存在于数据集的模式。
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import warningssns.set(stylewhiteg…Seaborn本身并不是为了统计分析而生的seaborn中的回归图主要用于添加视觉指南以帮助在探索性数据分析EDA中强调存在于数据集的模式。
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import warningssns.set(stylewhitegrid, color_codesTrue)
plt.rc(figure,autolayoutTrue,figsize(6, 5),titlesize18,titleweightbold,
)
plt.rc(axes,labelweightbold,labelsizelarge,titleweightbold,titlesize16,titlepad10,
)
%config InlineBackend.figure_format retina
warnings.filterwarnings(ignore)tips sns.load_dataset(tips,data_homedata,cacheTrue)
tips.head()total_billtipsexsmokerdaytimesize016.991.01FemaleNoSunDinner2110.341.66MaleNoSunDinner3221.013.50MaleNoSunDinner3323.683.31MaleNoSunDinner2424.593.61FemaleNoSunDinner4 绘制线性回归模型的函数
seaborn中主要通过regplot()和lmplot()两个函数来显示线性回归关系两个函数之间共享核心功能。但是了解两者的不同之处非常重要这样就可以快速为特定工作选择正确的工具。
在原始调用中两个函数都绘制了两个变量x和y然后拟合回归模型y~x并绘制得到回归线和该回归的95%置信区间
sns.regplot(xtotal_bill, ytip, datatips)Axes: xlabeltotal_bill, ylabeltipsns.lmplot(xtotal_bill, ytip, datatips)seaborn.axisgrid.FacetGrid at 0x139b79510可以看到除了图形形状不同两幅图结果是完全一致的。需要了解的一个主要区别是regplot()接受多种格式的x和y变量包括简单的numpy数组pandas的Series对象或者DataFrame对象。而lmplot()将data作为必须参数x和y变量必须被制定为字符串。这种数据格式被称为“长格式”或“整齐”数据。
当其中一个变量是离散值时可以拟合线性回归。但是这种数据集生成的简单散点图通常不是最优的
sns.lmplot(xsize, ytip, datatips)seaborn.axisgrid.FacetGrid at 0x139dc6090一种选择是向离散值添加随机噪声“抖动”以使这些值分布更清晰。注意抖动仅用于散点图数据不会影响回归线
sns.lmplot(xsize, ytip, datatips, x_jitter0.05)seaborn.axisgrid.FacetGrid at 0x139f87ad0第二种选择是综合每个离散箱中的观测值以绘制集中趋势的估计值和置信区间
sns.lmplot(xsize, ytip, datatips, x_estimatornp.mean)seaborn.axisgrid.FacetGrid at 0x13a1adad0拟合不同模型
上面使用的简单线性模型对于某些类型的数据集并不适用。Anscombe数据集展示了一些实例其中简单线性模型回归提供了相同的关系估计但却有肉眼可见的差异。例如在第一种情况下线性回归是一个很好的模型
anscombe sns.load_dataset(anscombe, data_homedata, cacheTrue)
anscombe.head()datasetxy0I10.08.041I8.06.952I13.07.583I9.08.814I11.08.33
sns.lmplot(xx, yy, dataanscombe.query(datasetI), ciNone, scatter_kws{s:80})seaborn.axisgrid.FacetGrid at 0x13a23e590第二个数据集的线性关系是相同的但是图表清楚地表明这并不是一个好模型
sns.lmplot(xx, yy, dataanscombe.query(datasetII), ciNone, scatter_kws{s:80})seaborn.axisgrid.FacetGrid at 0x13a5e35d0在这些存在高阶关系的情况下regplot()和lmplot()可以拟合多项式回归模型来探索数据集中的简单非线性趋势
sns.lmplot(xx, yy, dataanscombe.query(datasetII), order2, ciNone, scatter_kws{s:80})seaborn.axisgrid.FacetGrid at 0x13db94950在存在异常值的情况下拟合稳健回归可能会很有用该回归使用了一种不同的损失函数来降低相对较大的残差的权重
sns.lmplot(xx, yy, dataanscombe.query(datasetIII), robustTrue, ciNone, scatter_kws{s:80})seaborn.axisgrid.FacetGrid at 0x13dbc48d0当y变量是二进制时在这种情况下的解决方案是拟合逻辑回归
tips[big_tip] (tips.tip / tips.total_bill) .15sns.lmplot(xtotal_bill, ybig_tip, datatips, logisticTrue, y_jitter0.03)seaborn.axisgrid.FacetGrid at 0x13dd46550一种完全不同的方法是使用lowess smoother拟合非参数回归。尽管它是计算密集型的这种方法的假设最少因此目前置信区间根本没有计算
sns.lmplot(xtotal_bill, ytip, datatips, lowessTrue)seaborn.axisgrid.FacetGrid at 0x13db8a550residplot()函数可以用作检查简单回归模型是否适合数据集的有效工具。它拟合并删除简单的线性回归然后绘制每个观察值的残差值。理想情况下这些值应在y0周围随机散步
sns.residplot(xx, yy, dataanscombe.query(datasetI), scatter_kws{s:80})Axes: xlabelx, ylabely如果残差存在结构形状则表明简单的线性回归不合适
sns.residplot(xx, yy, dataanscombe.query(datasetII), scatter_kws{s:80})Axes: xlabelx, ylabely其他变量关系
上面的图显示了探索一对变量之间关系的许多方法。然而一个更有趣的问题是“这两个变量之间的关系如何随第三个变量的变化而变化”这就是regplot()和lmplot()最大的区别所在。regplot()总是表现单一的关系lmplot()把regplot()和FacetGrid结合以提供一个简单的界面显示facet图的线性回归使得可以探索最多三个其他分类变量的交互。
分离关系的最佳方法是在同一轴上绘制两个级别并使用颜色来区分它们
sns.lmplot(xtotal_bill, ytip, huesmoker, datatips)seaborn.axisgrid.FacetGrid at 0x1488b2b50再添加另一个变量可以绘制多个facet其中每个级别的变量出现在网格的行或列中
sns.lmplot(xtotal_bill, ytip, huesmoker, coltime, datatips)seaborn.axisgrid.FacetGrid at 0x148895950sns.lmplot(xtotal_bill, ytip, huesmoker, coltime, rowsex, datatips)seaborn.axisgrid.FacetGrid at 0x13feba550控制绘图的大小和形状
之前我们注意到regplot()和lmplot()生成的默认图看起来相同但却有不同的大小和形状。这是因为regplot()是一个“轴级”函数它绘制在特定的轴上。这意味着我们可以自己制作多面板图形并精确控制回归图的位置。如果没有明确提供轴对象它只使用“当前活动”轴这就是默认绘图与大多数其他 matplotlib 函数具有相同大小和形状的原因。要控制大小就需要先创建一个图形对象。
f, ax plt.subplots(figsize(5,6))
sns.regplot(xtotal_bill, ytip, datatips, axax)Axes: xlabeltotal_bill, ylabeltip相比之下lmplot()图的大小和形状是通过size和aspect参数控制这些参数适用于绘图中的每个facet而不是整个图形本身。
sns.lmplot(xtotal_bill, ytip, colday, datatips, col_wrap2, height3)seaborn.axisgrid.FacetGrid at 0x1488a9a10sns.lmplot(xtotal_bill, ytip, colday, datatips, aspect.5)seaborn.axisgrid.FacetGrid at 0x14e4c8410其他绘制回归的方法
joinplot()可以通过传递kindreg来显示轴上的线性回归拟合。
sns.jointplot(xtotal_bill, ytip, datatips, kindreg)seaborn.axisgrid.JointGrid at 0x14e433d10使用pairplot()函数与参数kindreg将regplot()和PairGrid结合起来来显示数据集中变量的线性关系。请注意这与lmplot()的不同之处。在下图中两个轴在第三变量上的两个级别上没有显示相同的关系。
sns.pairplot(tips, x_vars[total_bill, size], y_vars[tip], height5, aspect.8, kindreg)seaborn.axisgrid.PairGrid at 0x14e990110和lmplot()相同但不同于joingplot()额外的分类变量调节是通过hue参数内置在pairplot()中的。
sns.pairplot(tips, x_vars[total_bill, size], y_vars[tip], huesmoker, height5, aspect.8, kindreg)seaborn.axisgrid.PairGrid at 0x14ef3b990