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

news2025/3/18 12:19:39

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

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

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

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.column
        print("column name:", column)
        Q1 = df[column].quantile(q=0.25)       # 下四分位
        Q3 = df[column].quantile(q=0.75)       # 上四分位
        IQR = Q3 - Q1                          # IQR
        lower_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.column
        print("column name:", column)
        Q1 = df[column].quantile(q=0.25)       # 下四分位
        Q3 = df[column].quantile(q=0.75)       # 上四分位
        IQR = Q3 - Q1                          # IQR
        lower_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.coloradmin.cn/o/1694507.html

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

相关文章

Android四大组件 Broadcast广播机制

一 概述 广播 (Broadcast) 机制用于进程或线程间通信&#xff0c;广播分为广播发送和广播接收两个过程&#xff0c;其中广播接收者 BroadcastReceiver 是 Android 四大组件之一。BroadcastReceiver 分为两类&#xff1a; 静态广播接收者&#xff1a;通过 AndroidManifest.xm…

开源模型应用落地-食用指南-以最小成本博最大收获

一、背景 时间飞逝&#xff0c;我首次撰写的“开源大语言模型-实际应用落地”专栏已经完成了一半以上的内容。由衷感谢各位朋友的支持,希望这些内容能给正在学习的朋友们带来一些帮助。 在这里&#xff0c;我想分享一下创作这个专栏的初心以及如何有效的&#xff0c;循序渐进的…

机器视觉-硬件

机器视觉-硬件 镜头焦距凸透镜焦点不止一个相机镜头由多个镜片组成对焦和变焦 镜头光圈光圈的位置光圈系数F 镜头的景深景深在光路中的几何意义 远心镜头远心镜头的种类远心镜头特性应用场景 镜头的分辨率镜头反差镜头的MTF曲线镜头的靶面尺寸镜头的几何相差相机镜头接口螺纹接…

私域流量的真谛:构建并运营属于你自己的私域生态

大家好&#xff0c;我是来自一家专注于私域电商行业的软件开发公司的产品经理&#xff0c;拥有超过七年的行业经验。今天&#xff0c;我想和大家聊聊私域流量的真正含义&#xff0c;以及为何我们应该关注并努力打造属于自己的私域生态。 什么是私域流量&#xff1f; 私域流量&…

文心大模型4.0创建智能体:资深研发专家一对一辅导

目录 前言 一、什么是文心智能体平台&#xff1f; 1、通过平台能做什么 2、平台的优势 3、智能体类型 二、如何访问和使用这个智能体&#xff1f; 1、零代码开发&#xff1a;一句话创建智能体 2、资深研发专家一对一辅导智能体介绍 总结 前言 在当今快节奏和高度竞争的…

【高时效通路】

一 高时效通路 1.1 pathchdumper 实时数据拉取、实时数据处理、5分钟微批dump来加速时效性&#xff0c;具体来说&#xff1a; 实时数据拉取&#xff08;Fetcher&#xff09;&#xff1a;基于Databus Fetcher基建&#xff0c;直接对接F0层实时拉取最新数据&#xff0c;保证该…

哥白尼哨兵系列卫星数据不能下载的解决方法

自2023年1月24日起&#xff0c;一个新的哥白尼数据空间生态系统已经启动&#xff0c;为所有哨兵数据&#xff08;Sentinel-1, Sentinel-2, Sentinel-3 and Sentinel-5P&#xff09;提供可视化和数据处理&#xff0c;地址为&#xff1a;https://dataspace.copernicus.eu/。详细介…

Linux驱动(2)---Linux内核的组成

1.Linux内核源码目录 arch包含和硬件体系相关结构相关源码&#xff0c;每个平台占用一个目录 block&#xff1a;块设备驱动程序I/O调度 crypto&#xff1a;常用加密和三列算法&#xff0c;还有一些压缩和CRC校验算法。 documentation:内核个部分的通用解释和注释.。 drive…

护眼小贴士:学生如何正确使用台灯?

随着电子设备的普及和长时间的用眼&#xff0c;长时间盯着屏幕或学习&#xff0c;眼睛需要不断调节焦距&#xff0c;导致眼睛肌肉疲劳&#xff0c;进而引发视力下降。这种现象在年轻一代甚至青少年中尤为普遍&#xff0c;这种疲劳状态不仅影响眼睛的舒适度&#xff0c;还会导致…

【Linux】网络层——IP协议

欢迎来到Cefler的博客&#x1f601; &#x1f54c;博客主页&#xff1a;折纸花满衣 &#x1f3e0;个人专栏&#xff1a;Linux 目录 &#x1f449;&#x1f3fb;IP协议基本概念&#x1f449;&#x1f3fb;IP的协议头格式&#x1f449;&#x1f3fb;IP协议的网段划分五类IP地址子…

fastapi中实现多个路由请求

大家伙&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂。 前言 最近在写机器人相关的接口&#xff0c;顺手学了学python&#xff0c;发现这是个好东西&#xff0c;写代码效率比java要高很多&#xff0c;比如写个词云呀&#xff0c;写个回调呀&am…

从参数变化解读 MySQL 8.2.0 发版说明

↑ 关注“少安事务所”公众号&#xff0c;欢迎⭐收藏&#xff0c;不错过精彩内容~ 日前&#xff0c;MySQL 8.2.0 创新版本已正式上线&#xff0c;并提供安装包下载&#xff0c;但 docker 镜像尚未更新。 在 MySQL 8.1.0 刚发版时也做过分析&#xff0c;欢迎阅读&#xff1a; 重…

云部署最简单python web

最近在玩云主机&#xff0c;考虑将简单的web应用装上去&#xff0c;通过广域网访问一下&#xff0c;代码很简单&#xff0c;所以新手几乎不会碰到什么问题。 from flask import Flaskapp Flask(__name__)app.route(/) def hello_world():return Hello, World!app.route(/gree…

html通过数据改变,图片跟着改变

改变前 改变后 通过数据来控制样式展示 <template><div>通过num控制图标是否更改{{num}}<div class"box"><!-- 如果num大于1则是另一种&#xff0c;样式&#xff0c;如果小时1&#xff0c;则是另一种样式 --><div class"item&qu…

字节面试:百亿级数据存储,怎么设计?只是分库分表吗?

尼恩&#xff1a;百亿级数据存储架构起源 在40岁老架构师 尼恩的读者交流群(50)中&#xff0c;经常性的指导小伙伴们改造简历。 经过尼恩的改造之后&#xff0c;很多小伙伴拿到了一线互联网企业如得物、阿里、滴滴、极兔、有赞、希音、百度、网易、美团的面试机会&#xff0c…

WGCLOUD可以使用短信告警通知吗

支持的 以下是官网的说明 告警报警配置说明 - WGCLOUD

2024.5.25晚训题解

这套题挺简单的。。。 A题 AC率差不多100% B题 AC率差不多75% C题 AC率也差不多75% D题 AC率 50% E题 AC率 25% 向着top 1%出发 A题题解 Stair, Peak, or Neither? 简单判断题&#xff0c;自己写 #include<bits/stdc.h> using namespace std; int A[5]; int main() {…

增强版 Kimi:AI 驱动的智能创作平台,实现一站式内容生成(图片、PPT、PDF)!

前言 基于扣子 Coze 零代码平台&#xff0c;我们从零到一轻松实现了专属 Bot 机器人的搭建。 AI 大模型&#xff08;LLM&#xff09;、智能体&#xff08;Agent&#xff09;、知识库、向量数据库、知识图谱&#xff0c;RAG&#xff0c;AGI 的不同形态愈发显现&#xff0c;如何…

HarmonyOS鸿蒙应用开发——ArkTS的“内置组件 + 样式 + 循环和条件渲染”

一、内置组件是咩&#xff1f; 学过前端的都知道&#xff0c;一个组件就是由多个组件组成的&#xff0c;一个组件也可以是多个小组件组成的&#xff0c;组件就是一些什么导航栏、底部、按钮......啥的&#xff0c;但是组件分为【自定义组件】跟【内置组件】 【自定义组件】就…

微信小程序毕业设计-智慧旅游平台系统项目开发实战(附源码+演示视频+LW)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;微信小程序毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计…