返回顶部
首页 > 资讯 > 后端开发 > Python >怎么用Python讲解偏度和峰度
  • 216
分享到

怎么用Python讲解偏度和峰度

2023-06-16 05:06:21 216人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

这篇文章主要介绍“怎么用python讲解偏度和峰度”,在日常操作中,相信很多人在怎么用Python讲解偏度和峰度问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用Python讲解偏度和峰度”的疑惑有所帮助!

这篇文章主要介绍“怎么用python讲解偏度和峰度”,在日常操作中,相信很多人在怎么用Python讲解偏度和峰度问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用Python讲解偏度和峰度”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

首先还是介绍一下偏度和峰度的概念。

怎么用Python讲解偏度和峰度

图1. 偏度和峰度公式

偏度(skewness)又称偏态、偏态系数,是描述数据分布偏斜方向和程度的度量,其是衡量数据分布非对称程度的数字特征。对于随机变量X,其偏度是样本的三阶标准化矩,计算公式如图1中的式(1)所示。

偏度的衡量是相对于正态分布来说,正态分布的偏度为0。因此我们说,若数据分布是对称的,偏度为0;若偏度>0,则可认为分布为右偏,也叫正偏,即分布有一条长尾在右;若偏度<0,则可认为分布为左偏,也叫负偏,即分布有一条长尾在左。正偏和负偏如图2所示,在图2中,左边的就是正偏,右边的是负偏。

怎么用Python讲解偏度和峰度

图2. 偏度的示意图

而峰度(Kurtosis)则是描述数据分布陡峭或平滑的统计量,通过对峰度的计算,我们能够判定数据分布相对于正态分布而言是更陡峭还是平缓。对于随机变量X,其峰度为样本的四阶标准中心矩,计算公式如图1中的式2所示。

当峰度系数>0,从形态上看,它相比于正态分布要更陡峭或尾部更厚;而峰度系数<0,从形态上看,则它相比于正态分布更平缓或尾部更薄。在实际环境当中,如果一个分部是厚尾的,这个分布往往比正态分布的尾部具有更大的“质量”,即含又更多的极端值。我们常用的几个分布中,正态分布的峰度为0,均匀分布的峰度为-1.2,指数分布的峰度为6。

峰度的示意图如图3所示,其中第一个子图就是峰度为0的情况,第二个子图是峰度大于0的情况,第三个则是峰度小于0。

怎么用Python讲解偏度和峰度

图3. 峰度的示意图

在说完基本概念之后,我们就再讲一下怎么基于偏度和峰度进行正态性检验。这里主要有两种方法,一是Omnibus检验,二是jarque - Bera检验。

怎么用Python讲解偏度和峰度

图4. Omnibus和JB检验的公式

Omnibus检验的公式如图4中公式(3)所示,式中Z1和Z2是两个正态化函数,g1和g2则分别是偏度和峰度,在Z1和Z2的作用下,K的结果就接近于卡方分布,我们就能用卡方分布来检验了。这个公式的原理比较复杂,大家如想了解可自行查找相关资料。

Jarque - Bera检验的公式如图4中公式(4)所示,式中n是样本量,这个结果也是接近于卡方分布,其原理也不在这里赘述。这两个检验都是基于所用数据是正态分布的,即有如下假设。

原假设H0:数据是正态分布的。

备择假设H1:数据不是正态分布。

下面我们用代码来说明一下偏度和峰度。

首先看一下数据,这个数据很简单,只有15行2列。数据描述的是火灾事故的损失以及火灾发生地与最近消防站的距离,前者单位是千元,后者单位是千米,数据如图5所示。其中distance指火灾发生地与最近消防站的距离,loss指火灾事故的损失。

怎么用Python讲解偏度和峰度

图5. 数据示例

下面是代码,首先导入需要的库。

import pandas as pd  import matplotlib.pyplot as plt  import statsmodels.stats.api as sms  import statsmodels.fORMula.api as smf  from statsmodels.compat import lzip  from statsmodels.graphics.tsaplots import plot_acf

接下来是读取数据并作图,这些代码都非常简单,笔者不做过多的解释。

file = r'C:\Users\data.xlsx'  df = pd.read_excel(file)  fig, ax = plt.subplots(figsize=(8,6))  plt.ylabel('Loss')  plt.xlabel('Distance')  plt.plot(df['distance'], df['loss'], 'bo-', label='loss')  plt.legend()  plt.show()

结果如图6所示,从结果中我们可以看到这些点大致在一条直线上,那么我们就用一元线性回归来拟合这些数据。

怎么用Python讲解偏度和峰度

图6. 数据连线图

下面是生成模型,并输出模型的结果。

expr = 'loss ~ distance'  results = smf.ols(expr, df).fit() #生成回归模型  print(results.summary())

结果如图7所示。从图中我们可以看到,Prob (F-statistic)的值为1.25e-08,这个值非常小,说明我们的一元线性回归模型是正确的,也就是loss和distance的线性关系是显著的。而图中还可以看到Skew=-0.003,说明这部分数据非常接近正态分布,而Kurtosis=1.706,说明我们的数据比正态分布更陡峭,是一个尖峰。此外,从图中还可以看到Omnibus=2.551,Prob(Omnibus)=0.279,Jarque-Bera (JB)=1.047,Prob(JB)=0.592,这里我们很难直接从Omnibus和Jarque-Bera的数值来判断是否支持前面的备择假设,但我们可以从Prob(Omnibus)和Prob(JB)这两个数值来判断,因为这两个数值都比较大,那么我们就无法拒绝前面的原假设,即H0是正确的,说明我们的数据是服从正态分布的。

怎么用Python讲解偏度和峰度

图7. 模型结果说明

接下来我们再验证一下Skew、Kurtosis、Omnibus和Jarque-Bera (JB)这些数值,用的是statsmodels自带的方法。代码如下。

omnibus_label = ['Omnibus K-squared test', 'Chi-squared(2) p-value']  omnibus_test = sms.omni_normtest(results.resid) #omnibus检验  omnibus_results = lzip(omnibus_label, omnibus_test)  jb_label = ['Jarque-Bera test', 'Chi-squared(2) p-value', 'Skewness', 'Kurtosis']  jb_test = sms.jarque_bera(results.resid) #jarque_bera检验  jb_results = lzip(jb_label, jb_test)  print(omnibus_results)  print(jb_results)

这里omnibus_label和jb_label是两个list,里面包含了我们所要检验的项目名称,sms.omni_normtest就是statsmodels自带的omnibus检验方法,sms.jarque_bera就是statsmodels自带的jarque_bera检验方法。results.resid是残差值,一共有15个值,我们的数据本身就只有15个点,这里的每个残差值就对应前面的每个数据点,sms.omni_normtest和sms.jarque_bera就是通过残差值来进行检验的。而lzip这个方法很少见,其用法和python中原生函数zip差不多,笔者在这里更多地是想让大家了解statsmodels,所以用了lzip,这里直接用zip也是可以的,至于lzip和zip的区别,留给大家自行去学习。而上面得到的结果如图8所示。从图8中可以看到,我们得到的结果和前面图7中的结果一模一样。这里用sms.omni_normtest和sms.jarque_bera来进行验证,主要是对前面图7中的结果的一个解释,帮助大家更好地学习statsmodels。

怎么用Python讲解偏度和峰度

到此,关于“怎么用Python讲解偏度和峰度”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: 怎么用Python讲解偏度和峰度

本文链接: https://lsjlt.com/news/282484.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 怎么用Python讲解偏度和峰度
    这篇文章主要介绍“怎么用Python讲解偏度和峰度”,在日常操作中,相信很多人在怎么用Python讲解偏度和峰度问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用Python讲解偏度和峰度”的疑惑有所帮助!...
    99+
    2023-06-16
  • 用Python讲述冯绍峰和赵丽颖的爱情故
    昨天刷头条时得知赵丽颖当妈妈了。作为一名程序员突发奇想,不如用Python简单叙述一下冯绍峰和赵丽颖的爱情故事,于是有了本文。 代码十分简单,适合编程小白和有一些Python基础的准程序员,其中用到了if-else条件语句,for、whi...
    99+
    2023-01-30
    爱情 Python 冯绍峰
  • Python NumPy灰度图像的压缩原理讲解
    灰度图像是对图像的颜色进行变换,如果要对图像进行压缩该怎么处理呢? 1、矩阵运算中有一个概念叫做奇异值和特征值。 设A为n阶矩阵,若存在常数λ及n维非零向量x,使得Ax=λx,则称λ是矩阵A的特征值,x是A属于特征值...
    99+
    2022-06-02
    Python NumPy 图像压缩
  • CSS3使用过度动画和缓动效果案例讲解
    transition过渡: 四个小属性 属性 意义 ...
    99+
    2024-04-02
  • python偏函数怎么使用
    这篇文章主要介绍python偏函数怎么使用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!说明当函数的参数太多,需要简化时,使用functools.partial可以创建一个新的函数。2、这个新的函数可以固定原始函数的...
    99+
    2023-06-20
  • C语言 超详细讲解算法的时间复杂度和空间复杂度
    目录1.前言1.1 什么是数据结构?1.2 什么是算法?2.算法效率2.1 如何衡量一个算法的好坏2.2 算法的复杂度2.3 复杂度在校招中的考察3.时间复杂度3.1 时间复杂度的概...
    99+
    2024-04-02
  • numpy怎么增加维度和删除维度
    这篇“numpy怎么增加维度和删除维度”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“numpy怎么增加维度和删除维度”文章吧...
    99+
    2023-07-05
  • python进度条库tqdm怎么用
    这篇文章给大家分享的是有关python进度条库tqdm怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1.tqdm模块是python进度条库, 主要分为两种运行模式1.1基于迭代对象运行: tqdm(iter...
    99+
    2023-06-29
  • 怎么用Python添加进度条
    这篇文章主要讲解了“怎么用Python添加进度条”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用Python添加进度条”吧!undefined下文将介绍 4 个常用的 Python 进度...
    99+
    2023-06-02
  • 深度解析Python线程和进程
    目录什么是进程什么是线程线程与进程的区别并行与并发Python中的多进程Python中进程操作线程Python的threading模块锁Lock:全局解释器锁(GIL)参考文章:什么...
    99+
    2024-04-02
  • Win8笔记本用户应对CPU、硬盘温度偏高解决方案
    Win8在速度上的确很给力(围观Win8挑战Win7性能),把硬件性能都发挥到淋漓尽致,但是CPU、硬盘温度视乎比Win7要高了些,因为CPU、硬盘长期处于高占有率,导致温度飙升,正常情况下这是不科学的。觉得Win8温度...
    99+
    2023-06-05
    Win8 笔记本 CPU 硬盘 温度 用户 解决
  • div怎么设置百分比宽度和高度
    本篇内容主要讲解“div怎么设置百分比宽度和高度”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“div怎么设置百分比宽度和高度”吧! 实践实例说明: 1、设定...
    99+
    2024-04-02
  • HTML怎么定义表格的宽度和高度
    今天小编给大家分享一下HTML怎么定义表格的宽度和高度的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了...
    99+
    2024-04-02
  • python深度学习tensorflow怎么使用
    本篇内容主要讲解“python深度学习tensorflow怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“python深度学习tensorflow怎么使用”吧!1、编辑器编写tensorf...
    99+
    2023-07-02
  • python光学仿真相速度和群速度计算理解学习
    目录波动模型相速度群速度从编程的角度来说,波动光学在某些情况下可以简单地理解为在光线模型的基础上,引入一个相位项。 波动模型 一般来说,三个特征可以确定空间中的波场:频率、振幅和相位...
    99+
    2024-04-02
  • CSS怎么实现进度条和订单进度条
    这篇文章主要讲解了“CSS怎么实现进度条和订单进度条 ”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“CSS怎么实现进度条和订单进度条 ”吧!简单地效果图如下...
    99+
    2024-04-02
  • Python怎么实现图的广度和深度优先路径搜索算法
    本篇内容主要讲解“Python怎么实现图的广度和深度优先路径搜索算法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python怎么实现图的广度和深度优先路径搜索算法”吧!前言图是一种抽象数据结构...
    99+
    2023-06-30
  • python怎么获取list长度
    这篇文章主要介绍“python怎么获取list长度”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“python怎么获取list长度”文章能帮助大家解决问题。前言;Python是一种非常具有表现力的语言...
    99+
    2023-06-29
  • python驼峰命名法怎么使用
    Python中使用驼峰命名法,可以遵循以下规则:1. 类名使用大写字母开头,后续单词的首字母也采用大写字母。例如:MyClass。2. 函数名、方法名、变量名使用小写字母开头,后续单词的首字母采用大写字母。例如:myFunction。3...
    99+
    2023-08-09
    python
  • Python的迭代进度条Tqdm怎么用
    本篇内容介绍了“Python的迭代进度条Tqdm怎么用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Tqd...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作