【数据挖掘】四分位数识别数据中的异常值(附代码)

写在前面:
首先感谢兄弟们的订阅,让我有创作的动力,在创作过程我会尽最大能力,保证作品的质量,如果有问题,可以私信我,让我们携手共进,共创辉煌。

路虽远,行则将至;事虽难,做则必成。只要有愚公移山的志气、滴水穿石的毅力,脚踏实地,埋头苦干,积跬步以至千里,就一定能够把宏伟目标变为美好现实。

今天在项目中遇到需要对数据中的异常数据进行处理,现将相关知识总结成文,首先感谢其他优秀作者在网上分享的资料,为撰写本文提供了大量的素材。文章有的部分存在冗余,还请各位看官见谅。

1、概览

四分位数(Quartile)是统计学中分位数的一种形式,它将一组数据由小到大排列后分成四个等份,其中每个等份包含25%的数据。具体来说,四分位数包括三个关键点:

第一四分位数(Q1),也称为较小四分位数,是数据集中第25%的数值。
第二四分位数(Q2),即中位数,是数据集中第50%的数值,也就是数据的中间值。
第三四分位数(Q3),也称为较大四分位数,是数据集中第75%的数值。

第三四分位数第一四分位数的差距又称四分位距(InterQuartile Range,IQR)。

四分位数的计算方法涉及将数据从小到大排序后,根据数据的数量(n)来确定四分位数所在的位置。如果(n+1)能被4整除,则四分位数位于的位置是整数;如果不能整除,则根据具体情况可能需要进行插值或取最接近的整数。

四分位数的应用非常广泛,特别是在统计学中用于描述数据分布的形状和离散程度。例如,在绘制箱线图时,四分位数是非常重要的元素之一,用于展示数据的分布情况。此外,四分位数的计算也有助于识别数据中的异常值和潜在的不一致点。

四分位数在统计学中的箱线图绘制方面应用也很广泛。所谓箱线图就是 由一组数据5 个特征绘制的一个箱子和两条线段的图形,这种直观的箱线图不仅能反映出一组数据的分布特征,而且还可以进行多组数据的分析比较。这五个特征值,即数据的最大值、最小值、中位数和两个四分位数。

在这里插入图片描述

2、进一步介绍

2.1、四分位距 (IQR)

四分位距 (IQR) 是统计离散度的度量,即数据的中间 50% 的分布。它计算为第三四分位数 (Q3) 和第一四分位数 (Q1) 之间的差值。计算公式:IQR = Q3 - Q1

2.2、四分位数

四分位数将按等级排序的数据集分成四个相等的部分。第一四分位数 (Q1) 是下半部分的中位数,第三四分位数 (Q3) 是上半部分的中位数。第二四分位数 (Q2) 是数据集的中位数。

2.3、异常值检测

可以使用 IQR 识别异常值。低于Q1 - 1.5×IQR或者高于Q3 + 1.5×IQR的数据点被视为异常值。

  • 下限 = Q1 − 1.5 × IQR
  • 上限 = Q3 + 1.5 × IQR

2.4、计算过程

给定数据集 X={x1,x2,…,xn},请执行以下步骤:

  • 对数据进行排序:按升序排列数据。
  • 计算Q1和Q3:Q1是前半部分的中位数,Q3是后半部分的中位数。
  • 计算 IQR:IQR = Q3−Q1
  • 确定异常值边界:
    下限:Q1 − 1.5 × IQR
    上限:Q3 + 1.5 × IQR
  • 识别异常值:边界之外的任何数据点都是异常值。

假设有一组数据:4、5、6、7、8、9、10、11、12、13。

首先,将数据从小到大排列:4、5、6、7、8、9、10、11、12、13。
计算四分位数位置:
Q1的位置 = (10+1) × 0.25 = 2.75,因此Q1是6(第2个和第3个数的平均值)。
Q2的位置 = (10+1) × 0.5 = 5.5,因此Q2是8(第5个和第6个数的平均值)。
Q3的位置 = (10+1) × 0.75 = 8.25,因此Q3是11(第8个和第9个数的平均值)。
IQR = 8.25-2.75= 5.5

3、代码

下面分享使用四分位数实现2中异常值的处理代码

  • 异常值使用均值代替
  • 直接将有异常值的删除

import numpy as np"""
寻找异常值的方法很多,但是找到异常值后,处理方式只有2种:
1、使用其他数据(均值、中值、众数)填充
2、直接删除
"""
# Function to handle outliers, 异常值使用NaN填充
def handle_outliers_1(df, columns_name):for column in columns_name:                # df.columnprint("column name:", column)Q1 = df[column].quantile(q=0.25)       # 下四分位Q3 = df[column].quantile(q=0.75)       # 上四分位IQR = Q3 - Q1                          # IQRlower_bound = Q1 - 1.5 * IQR           # 下边缘upper_bound = Q3 + 1.5 * IQR           # 上边缘# 异常值使用nan填充df[column] = np.where((df[column] < lower_bound) | (df[column] > upper_bound), np.nan, df[column])return df# Function to handle outliers, 异常值索引找到,直接删除该数据
def handle_outliers_2(df, columns_name):out_index = []for column in columns_name:                # df.columnprint("column name:", column)Q1 = df[column].quantile(q=0.25)       # 下四分位Q3 = df[column].quantile(q=0.75)       # 上四分位IQR = Q3 - Q1                          # IQRlower_bound = Q1 - 1.5 * IQR           # 下边缘upper_bound = Q3 + 1.5 * IQR           # 上边缘# 寻找异常点, 获得异常点索引值, 删除索引值所在行数据rule = (df[column] < lower_bound) | (df[column] > upper_bound)  out = df[column].index[rule]print("异常索引:", out)out_index += out.tolist()  df.drop(out_index, inplace=True)return df

4、优缺点

四分位数处理异常值的优点和缺点可以归纳如下:

  • 优点:
    鲁棒性强:四分位数对数据中的异常值具有较强的鲁棒性。即使数据集中存在一部分的极大或极小异常值,也不会对四分位数的计算产生显著影响,因此不会影响对异常值的识别。
    计算量小:相比其他统计方法,如计算样本方差或多次校验等,四分位数的计算量更小,异常识别的效率更高,特别适用于处理大量数据时的异常值识别。
    直观易懂:四分位数作为一种统计指标,其原理简单直观,容易被大众理解和接受。通过四分位数,可以快速地了解数据的分布情况,包括中位数、数据的离散程度等。
    敏感性高:四分位数对于数据的变化比较敏感,即使数据只有微小的变化,也可能会引起四分位数的较大变化。这使得四分位数能够更准确地反映数据的变化情况。
    描述性强:四分位数可以简洁地描述一组数据的分布情况,尤其是对于偏态分布的数据,可以更好地反映数据的集中趋势和离散程度。

  • 缺点:
    对异常值敏感:虽然四分位数在处理异常值时具有一定的鲁棒性,但在某些情况下,它仍然可能受到异常值的影响。如果数据集中存在一些非常大的或非常小的异常值,可能会导致四分位数的值发生较大的变化。
    不具备原始数据的精确信息:四分位数只能提供关于数据分布的粗略信息,而无法提供原始数据的具体数值和离散程度。因此,在某些需要精确分析数据的情况下,四分位数可能无法满足需求。
    对数据分布的要求严格:四分位数需要数据满足一定的分布条件,如正态分布等。如果数据不满足这些条件,四分位数可能无法准确地反映数据的分布情况。
    无法衡量波动大小:四分位数虽然可以描述数据的分布情况,但无法直接衡量数据的波动大小。如果需要了解数据的波动情况,可能需要结合其他统计指标进行分析。

总的来说,四分位数在处理异常值时具有其独特的优点和缺点。在实际应用中,需要根据具体情况和需求选择合适的统计方法进行分析。

5、总结

四分位数是一种描述数据分布的方法,通过将数据分成四个等份,可以更容易地理解数据的整体情况。同时,四分位数也可以用于识别和处理数据中的异常值。好了,今天的分享就到这里,让我们下期见。

参考资料

https://mp.weixin.qq.com/s/R_ZufPCTgsDiRSZKX4OINg
https://zhuanlan.zhihu.com/p/344502263
https://blog.csdn.net/qq_40676033/article/details/100928659

在这里插入图片描述

请扫码关注下方的公众号,让我们共同进步吧。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/15776.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STM32F1之OV7725摄像头

目录 1. 摄像头简介 2. OV7725 摄像头简介 3. OV7725 引脚 4. OV7725 功能框架图 5. SCCB时序 5.1 SCCB 的起始、停止信号及数据有效性 5.2 SCCB 数据读写过程 1. 摄像头简介 在各类信息中&#xff0c;图像含有最丰富的信息&#xff0c;作为机…

SVM原问题与对偶问题

目的&#xff1a;求出我们的f(X)&#xff0c;它代表着我们X映射到多维的情况&#xff0c;能够帮我们在多维中招到超平面进行分类。 1.优化问题&#xff1a; 1.1推荐好书&#xff1a; 1.2 优化理论中的原问题&#xff1a; 原问题和限制条件如下&#xff1a; 这是一个泛化性…

【漏洞复现】英飞达医学影像存档与通信系统 WebJobUpload 任意文件上传漏洞

0x01 产品简介 英飞达医学影像存档与通信系统 Picture Archiving and Communicaton System&#xff0c;它是应用在医院影像科室的系统&#xff0c;主要的任务就是把日常产生的各种医学影像(包括核磁&#xff0c;CT&#xff0c;超声&#xff0c;各种X光机&#xff0c;各种红外仪…

LeetCode - 数组 - 四数之和

题目地址 描述 给你一个由 n 个整数组成的数组 nums &#xff0c;和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] &#xff08;若两个四元组元素一一对应&#xff0c;则认为两个四元组重复&#xff09;&#x…

cs与msf权限传递以及mimikatz抓取win2012明文密码

简单的介绍 cs与msf的简单介绍 我查找过资料得出&#xff0c;Cobalt Strike 的前身是 Armitage&#xff0c;而 Armitage 又可以理解为 Metasploit Framework 的图形界面版&#xff0c;因此 Cobalt Strike 与 Metasploit Framework 在很多地方都是兼容的&#xff0c;所以我们便…

人工智能 框架 paddlepaddle 飞桨 使用指南 使用例子 线性回归模型demo 详解

安装过程&使用指南&线性回归模型 使用例子 本来预想 是安装 到 conda 版本的 11.7的 但是电脑没有gpu 所以 安装过程稍有变动,下面简单讲下 conda create -n paddle_env117 python=3.9 由于想安装11.7版本 py 是3.9 所以虚拟环境名称也是 paddle_env117 activa…

下载和安装AD19 - Altium Designer 19.1.9 Build 167

虽然有AD24 的安装资源&#xff0c;但是我比较喜欢19 这个数字[doge] 下载 仍然是从毛子网站源头进货&#xff1a;https://rutracker.net/forum/viewtopic.php?t5754276&#xff0c;网盘: https://pan.baidu.com/s/1ic31N4h7HS2FBu7JFll0YQ?pwdvjum 提取码: vjum 安装 压…

【DevOps】深入了解RabbitMQ:AMQP协议基础、消息队列工作原理和应用场景

目录 一、核心功能 二、优势 三、核心概念 四、工作原理 五、交换机类型 六、消息确认 七、持久性和可靠性 八、插件和扩展 九、集群和镜像队列 十、客户端库 十一、管理界面 十二、应用场景 RabbitMQ是一个基于AMQP协议的消息队列中间件&#xff0c;提供高可用、可…

[MRCTF2020]Xor

32位程序 主要逻辑 flagMSAWB~FXZ:J:tQJ"N bpdd}8g for i in range(len(flag)):print(chr(ord(flag[i])^i),end)

react 权限树形结构实现

项目背景 react ant design 实现效果 1 将后台返回的平铺数据 , 转成树形结构 const [roleId, setRoleId] useState() //存储角色id// 弹权限弹窗const empowerHandle async record > {setRoleId(record.roleId)//获取单独的权限const res1 await getPermission({ role…

力扣96. 不同的二叉搜索树

Problem: 96. 不同的二叉搜索树 文章目录 题目描述思路复杂度Code 题目描述 思路 一个数字做根节点的话可能的结果为&#xff1a;其左边数字做子树的组合数字乘以其右边数字做子树的个数之积 1.创建备忘录memo&#xff1b; 2.递归分别求取当前数字左边和右边数字做子树的数量&…

Vue 中 diff 算法原理

1. Diff 概念 vue 基于虚拟 DOM 做更新 。diff 的核心就是比较两个虚拟节点的差异 。Vue 的 diff 算法是平级比较,不考虑跨级比较的情况。内部采用深度递归的方式 + 双指针的方式进行比较。 2. Vue2 Diff 比较流程. 1.1先比较是否是相同节点 key tag 1.2相同节点比较属性,并…

【数据结构与算法 刷题系列】移除链表元素

&#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a;数据结构与算法刷题系列&#xff08;C语言&#xff09; 期待您的关注 目录 一、问题描述 二、解题思路 三、源代码实现 一、问题…

基于trunk、yew构建web开发脚手架

trunk 构建、打包 rust wasm 程序&#xff1b;yewweb 前端开发库&#xff1b; 项目仓库yew-web trunk 之前已经简单介绍了trunk,全局安装&#xff1a; $> cargo install --locked trunk常用命令&#xff1a; trunk build 基于wasm-bindgen构建 wasm 程序。trunk watch …

vue17:v-bind对css样式的控制增强

代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><styl…

『USB3.0Cypress』FPGA开发(3)GPIF II短包零包时序分析

文章目录 1.时序参数2.FX3_PCLK3.短包和零包3.1短包时序3.2零包ZLP时序 4.传送门 1.时序参数 AN65974文档中明确了操作GPIF II接口时的时序参数&#xff0c;上一篇文章中给出了读写时序图&#xff0c;本篇第二节给出ZLP写周期时序&#xff0c;这里说明相关的时序参数。应该注意…

用户态下屏蔽全局消息钩子 —— ClientLoadLibrary 指针覆盖

目录 前言 一、研究 SetWindowsHookEx 的机制 二、概念验证 三、运行效果分析 四、总结与展望 参考文献 原文出处链接&#xff1a;[https://blog.csdn.net/qq_59075481/article/details/139206017] 前言 SetWindowsHookEx 函数帮助其他人员注入模块到我们的进程&#x…

【代码随想录训练营】【Day 27 and 28】【回溯1-2】| Leetcode 77, 216, 17

【代码随想录训练营】【Day 27 and 28】【回溯1-2】| Leetcode 77, 216, 17 需强化知识点 组合问题&#xff1a;感受遍历的横向和纵向 题目 77. 组合 注意path要深拷贝 class Solution:def combine(self, n: int, k: int) -> List[List[int]]:result []def backtrac…

Kubernetes(k8s) v1.30.1 本地集群部署 安装metallb 支持LoadBalancer 生产环境 推荐 BGP模式部署

1 metallb 安装参考:Kubernetes(k8s) v1.30.1 本地集群部署 默认不支持LoadBalancer metallb来解决-CSDN博客 2 删除 Layer 2 模式 配置 kubectl delete -f IPAddressPool.yaml kubectl delete -f L2Advertisement.yaml kubectl delete -f discuz-srv.yaml 3 配置 k8s Metal…