【天池基础知识】直方图,Q~Q图、KDE分布图+对应的官方API文档

目的

直方图和Q-Q图的目的:是为了看看数据是不是符合正态分布或者是不是对角线分布,这样对数据的采取的时候会更加有效一些(比如那些不太行的数据,偏离太多的数据我们删除,那些分布太高的可以用对数进行降低数据等等)

KDE图的目的:更好对比训练集与测试集的分布区别,理解起来更加的准确

直方图+Q~Q图

1、单个 - 代码

plt.figure(figsize=(10,5))

ax=plt.subplot(1,2,1)
sns.distplot(train_data['V0'],fit=stats.norm)
ax=plt.subplot(1,2,2)
res = stats.probplot(train_data['V0'], plot=plt)

在这里插入图片描述

2、多个 - 代码

train_cols = 6
train_rows = len(train_data.columns)
plt.figure(figsize=(4*train_cols,4*train_rows))

i=0
for col in train_data.columns:
    i+=1
    ax=plt.subplot(train_rows,train_cols,i)
    sns.distplot(train_data[col],fit=stats.norm)
    
    i+=1
    ax=plt.subplot(train_rows,train_cols,i)
    res = stats.probplot(train_data[col], plot=plt)
plt.show()

在这里插入图片描述

KDE分布图

1、单个 - 代码

ax = sns.kdeplot(train_data['V0'], color="Red", shade=True)
ax = sns.kdeplot(test_data['V0'], color="Blue", shade=True)
ax.set_xlabel('V0')
ax.set_ylabel("Frequency")
ax = ax.legend(["train","test"])

在这里插入图片描述

2、多个 - 代码

dist_cols = 6
dist_rows = len(test_data.columns)
plt.figure(figsize=(4*dist_cols,4*dist_rows))

i=1
for col in test_data.columns:
    ax=plt.subplot(dist_rows,dist_cols,i)
    ax = sns.kdeplot(train_data[col], color="Red", shade=True)
    ax = sns.kdeplot(test_data[col], color="Blue", shade=True)
    ax.set_xlabel(col)
    ax.set_ylabel("Frequency")
    ax = ax.legend(["train","test"])
    
    i+=1
plt.show()

在这里插入图片描述

官方API解读

1、subplot ~> 戳一戳:官方文档

官方说类似于一个包装器,代码一般以subplot(nrows, ncols, index, **kwargs)形式出现.

顾名思义:

  • nrows代表行
  • ncols代表列
  • index代表具体的图片位置
  • **kwargs代表的是可以添加任意的多个在api中可以找到的参数进去,但是一般都是三个参数,而且默认为(1,1,1)

我个人理解,可以把他看作一个展示布局,就是比如上方实例中,plt.subplot(1,2,1)plt.subplot(1,2,2),就是代表有俩张图片,分布的格式为一行俩列,一张位于第一列,一张位于第二列(这个是自动向右填充,而不是一定规定死的)

所以在循环输出多个图片中,一般都是:ax=plt.subplot(train_rows,train_cols,i)

2、sns.distplot ~> 戳一戳:官方文档

官方给定参数:

seaborn.distplot(a=None, bins=None, hist=True,
	 kde=True, rug=False, fit=None, hist_kws=None,
	  kde_kws=None, rug_kws=None, fit_kws=None,
	   color=None, vertical=False, norm_hist=False,
	    axlabel=None, label=None, ax=None, x=None)

名词解释:

a:系列、一维数组或列表
观察到的数据。如果这是一个具有name属性的 Series 对象,则该名称将用于标记数据轴

bins
如果未指定,则使用作为参考的规则来尝试找到有用的默认值

hist:布尔值
是否绘制(规范)直方图

kde:布尔值
是否绘制高斯核密度估计

rug:布尔值
是否在支撑轴上绘制地毯图。

fit:随机变量对象
一个带有fit方法的对象,返回一个元组,该元组可以传递给一个 pdf方法,一个位置参数跟随一个值网格来评估 pdf。

hist:关键字参数matplotlib.axes.Axes.hist.

kde:关键字参数seaborn.kdeplot.

rug:关键字参数seaborn.rugplot.

color:颜色
绘制除拟合曲线之外的所有内容的颜色

vertica:布尔值
如果为 True,则观察值位于 y 轴上。

norm_hist:布尔值
如果为 True,则直方图高度显示密度而不是计数。
如果绘制了 KDE 或拟合密度,则暗示这一点。

axlabel:字符串,False 或 None
支撑轴标签的名称。如果为 None,将尝试从 a.name 中获取,如果为 False,则不设置标签。

label:图的相关组件的图例标签

ax:如果提供,请在此轴上绘制

在这里插入图片描述
在这里插入图片描述

kde=False:不绘制和直方图与平齐的曲线在这里插入图片描述在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3、stats.probplot ~> 戳一戳:官方文档

①stats.probplot属于scipy库中
②plt代表的是matplotlab.pyplot库

全部参数以及默认值:

scipy.stats.probplot(x, sparams=(), dist=‘norm’, fit=True, plot=None, rvalue=False)

参数说明:
x:创建绘图的样本/响应数据

sparams:
特定于分布的形状参数(形状参数加上位置和比例)

dist:
分布或分布函数名称。对于正态概率图,默认值为“norm”。看起来很像 stats.distributions 实例的对象(即它们有一个ppf方法)也被接受

fit:布尔类型
如果为真(默认),则将最小二乘回归(最佳拟合)线拟合到样本数据

plot:
如果给定,则绘制分位数。如果给定且fit为 True,则还绘制最小二乘拟合。 plot是一个必须有方法“plot”和“text”的对象。可以使用matplotlib.pyplot模块或 Matplotlib Axes 对象,或具有相同方法的自定义对象。默认为无,这意味着不创建绘图。

注意注意注意注意注意;
文档中明确说明了,scipy.stats.probplot不能和Q-Q图与P-P图进行混淆一谈。

ppplot : 概率-概率图
比较样本和理论概率(百分位数)。

qqplot : 分位数-分位数图
比较样本和理论分位数

probplot : 概率图
与 QQ 图相同,但概率以理论分布的比例(x 轴)显示,y 轴包含样本数据的未缩放分位数。

在这里插入图片描述

虽然确实不能把这三种图混为一谈,但是绘制Q-Q图的时候还是使用的stats.probplot函数,约定俗称的东西,记住就行。

4、kdeplot ~> 戳一戳:官方链接

全部参数:

seaborn.kdeplot(x=None, *, y=None, shade=None, 
	vertical=False, kernel=None, bw=None, 
	gridsize=200, cut=3, clip=None, legend=True, 
	cumulative=False, shade_lowest=None, cbar=False,
	cbar_ax=None, cbar_kws=None, ax=None,
 	weights=None, hue=None, palette=None, hue_order=None,
 	hue_norm=None, multiple='layer', 
 	common_norm=True, common_grid=False, levels=10, thresh=0.05, 
 	bw_method='scott', bw_adjust=1, log_scale=None,
 	color=None, fill=None, data=None, data2=None, 
  	warn_singular=True, **kwargs)

咱就是说,它的可选参数有很多很多很多很多,主要是最后面还加了一个**kwarg,可见其功能的强大之处,根据上面的例子,其实我想大家也都会看官方文档了,这个我就不介绍了,太占据版面了。直接搞几个官方的例子去看看这些运用以后是一个什么效果。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

multiple{{“layer”, “stack”, “fill”}}
在这里插入图片描述
在这里插入图片描述

其实官方文档里面有很多很多这种图片以及对应的代码,大家有需求就可以直接去查,我在这就不全部都介绍一遍了。

为啥要看API

其实我一开始也不怎么看API,都是直接看别人的CSDN博客去理解对应的参数是什么意思。这其实也只是我第二次详细的看API,上一次就是昨天发的那一篇boxplot箱型图的API解读。

我才仔细的看了俩次就摸清楚看API的好处以及方法,大家都比我聪明很多,我觉得应该也能自己老老实实看几篇API,然后慢慢琢磨,就能看懂API了。

说偏题了,看API的好处真的很多,因为你看的别人的文档,都是别人自己总结的,当然也不缺乏那种把API直接翻译不思考的,但是无论是哪一种,都证明他们会看API,并且不是所有博客会把全部参数都给你讲一遍意思,告诉你这个参数实现是什么样子的,所以想要彻彻底底搞懂一个东西,还是老老实实看官方文档,又香又棒~

我更希望的是,我这一篇文章看的人很少很少,这样是不是就代表,大家都去官方看API文档了,这才是写博客的意义了吧,不仅仅是让大家知道什么是API,里面具体是什么意思,也让大家学会如何用API去学习。毕竟这篇博客我是给自己记录用的~

  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Bessie_Lee_gogogo

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值