测试开发技术网站
博客
设计
设计
开发
Python
测试
unittest
运维
Linux基础应用
CI/CD
CI/CD
数据库
数据库
云计算
云计算
云原生
云原生
爬虫
爬虫
数据分析
数据分析
人工智能
人工智能
登录
注册
数据分析----IQR(Interquartile Range)四分位距的理解与应用及Python实现
收藏本文
作者:redrose2100 类别: 日期:2023-04-18 00:02:45 阅读:2018 次 消耗积分:0 分
[【原文链接】数据分析----IQR(Interquartile Range)四分位距的理解与应用及Python实现](http://devops-dev.com/article/579) # 一、IQR(Interquartile Range)四分位距的含义 ## 1.1 IQR的官方定义 IQR 是用于标记离群值的另一种稳健方法。用于检测离群值的 IQR(Interquartile Range,四分位距)方法由 John Tukey 开发,他是开创探索性数据分析的先锋人物。此方法产生于手工计算和绘图时代,因此涉及的数据集通常较小,并且重点放在理解数据的意义上。 盒须图使用四分位数(将数据划分为大小相等的四组点)来绘制数据的形状。盒子代表第 1 个和第 3 个四分位数,它们等于第 25 个和第 75 个百分点。盒子内的线代表第二个四分位数,即中间值。 四分位距(该离群值检测方法正是因此而得名)是第一个和第三个四分位数(盒子边缘)之间的间距。Tukey 认为,如果数据点比第一个四分位数低 1.5 乘 IQR,或比第三个四分位数高 1.5 乘 IQR,就属于离群或极度离群。在经典的盒须图中,须线一直延伸到界限内的最后一个数据点。 四分位距 (IQR) 是一种衡量变异性的方法,它通过将数据集划分为四分位数来实现。四分位数将一个按等级排序的数据集划分为四个相等的部分。即 Q1(第 1 个四分位数)、Q2(第 2 个四分位数)和 Q3(第 3 个四分位数)。IQR 定义为 Q3–Q1,位于 Q3+1.5*IQR 或 Q1-1.5*IQR 之外的数据被视为离群值。 ![](https://redrose2100.oss-cn-hangzhou.aliyuncs.com/img/82396a96-dd35-11ed-bcac-0242ac110004.png) ## 1.2 IQR的通俗理解 IQR的官方定义相对来说显得晦涩了一点,这里简单的解释一下,通俗一点来说就是对一个数据列表从小到大排序,然后分为四份,四分之一位置的点为Q1,四份之二位置的点为Q2,四份之三位置的点为Q3,这样中间的位置点就是Q2,Q3和Q1之间的差为△,也就是IQR的值,然后计算有效数据的上限和下限,上限为Q3+1.5*△,下限为Q1-1.5*△,在(Q1-1.5△,Q3+1.5△)之外的数据则视为离散数据,即无效数据,假如我们有更大规模的数据需要过滤,就可以使用(Q1-1.5△,Q3+1.5△)范围进行有效数据筛选。 # Python代码实现 用python实现当然可以一个一个循环去计算,但是python的numpy库提供了非常好用的封装函数,这里就不再去一个一个计算了,而是直接使用numpy库进行处理了,实现代码如下 ```python import numpy as np def get_iqr_data(datas): q1=np.quantile(datas,0.25) q2=np.median(datas) q3=np.quantile(datas,0.75) iqr=q3-q1 down=q1-1.5*iqr up=q3+1.5*iqr return [q1,q2,q3,iqr,down,up] if __name__=="__main__": x=[1,2,3,4,5,6,7,8,9,10,11] rs=get_iqr_data(x) print(rs) ``` 执行结果如下,当然在执行之前需要却把安装了numpy,如果还没有安装可以直接使用pip install numpy 即可安装 ```bash [3.5, 6.0, 8.5, 5.0, -4.0, 16.0] ``` 通过这里的执行结果可以看住,在数据列表 [1,2,3,4,5,6,7,8,9,10,11] 中,四分之一的点的数据为3.5,这是因为总共11个数,四分之一落在了两个数之间,四分之二的点恰好就是第6个数了,四分之三的点又落在了两个数据之间,所以是8.5,那么这里IQR就是q3-q1即5.0,通过公式计算此时有效范围为(-4.0,16.0),超出此范围的数据为无效数据
始终坚持开源开放共享精神,同时感谢您的充电鼓励和支持!
版权所有,转载本站文章请注明出处:redrose2100, http://blog.redrose2100.com/article/579
上一篇:
MySQL----JDBC无法连接数据库,报The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server的解决办法
下一篇:
JavaScript----JS下载文件重命名不生效即a.download修改文件名不生效的解决办法
搜索
个人成就
出版书籍
《Pytest企业级应用实战》
测试开发技术全栈公众号
测试开发技术全栈公众号
DevOps技术交流微信群
加微信邀请进群
常用网站链接
开源软件洞察
云原生技术栈全景图
Python语言官方文档
Golang官方文档
Docker官方文档
Jenkins中文用户手册
Scrapy官方文档
VUE官方文档
Harbor官方文档
openQA官方文档
云原生开源社区
开源中国
Kubernetes中文文档
Markdown语法官方教程
Kubernetes中文社区
Kubersphere官方文档
BootStrap中文网站
JavaScript中文网
NumPy官方文档
Pandas官方文档
GitLink确实开源网站
数据库排名网站
编程语言排名网站
SEO综合查询网站
数学加减法练习自动生成网站
Kickstart Generator
文章分类
最新文章
最多阅读
特别推荐
×
Close
登录
注册
找回密码
登录邮箱:
登录密码:
图片验证码:
注册邮箱:
注册密码:
邮箱验证码:
发送邮件
注册邮箱:
新的密码:
邮箱验证码:
发送邮件