数据预处理|数据清洗|使用Pandas进行异常值清洗

news2025/1/11 16:51:09

数据预处理|数据清洗|使用Pandas进行异常值清洗

  • 使用Pandas进行异常值清洗
    • 1. 异常值检测
      • 1.1 简单统计分析
      • 1.2 散点图方法
      • 1.3 3σ原则
      • 1.4 箱线图
    • 2. 异常值处理
      • 2.1 直接删除
      • 2.2 视为缺失值
      • 2.3 平均值修正
      • 2.4 盖帽法
      • 2.5 分箱平滑法
      • 2.6 回归插补
      • 2.7 多重插补
      • 2.8 不处理

使用Pandas进行异常值清洗

异常值是指那些在数据集中存在的不合理的值,这里所说不合理的值是偏离正常范围的值,不是错误值。异常值的存在会严重干扰数据分析的结果。

1. 异常值检测

1.1 简单统计分析

最常用的统计量是最大值和最小值,用来判断这个变量的取值是否超出合理的范围。如电商信息表中客户年龄age=199,则该变量的取值存在异常。

  • 例1. 计算成年人的身高、体重公式为:Y=(X-100)×1.2,其中X为身高(cm),Y为标准体重(kg)。
import matplotlib.pyplot as plt
import numpy as np
#假设成年人(18岁以上)正常高度在1.4米至2.0米
x=np.arange(140,200,5) 
y=(x-100)*1.2
plt.rcParams['font.family']='STSong' #图形中显示汉字
plt.rcParams['font.size']=10
plt.title('身高和体重')
plt.plot(x,y,'.')
plt.plot(150,187,'r.') #异常值
plt.plot(166,212,'r.') #异常值
plt.plot(187,208,'r.')
plt.show()

在这里插入图片描述

1.2 散点图方法

通过数据分布的散点图可以检测异常数据。

  • 例2. 分析房屋面积和房屋价格的关系示例。
import matplotlib.pyplot as plt
import numpy as np
x = [225.98,247.07,253.14,254.85,241.58,
     301.01,20.67,288.64, 163.56,120.06,
     207.83,342.75,147.9,53.06,224.72,
     29.51,21.61,483.21, 245.25,
     299.25,343.35] #房屋面积数据
y = [196.63,203.88,210.75,372.74,202.41,
     347.61,24.9,239.34, 140.32,304.15,
     176.84,488.23,128.79,49.64,191.74,
     33.1,30.74,400.02,205.35,330.64,
     283.45] #房屋价格数据
plt.figure(figsize=(6, 5), dpi=100) #创建画布
plt.scatter(x, y,s=40) # 绘制散点图
plt.show()  # 显示图像

在这里插入图片描述

1.3 3σ原则

在正态分布中, σ \sigma σ代表标准差, μ \mu μ代表均值, x = μ x=\mu x=μ即为图像的对称轴。
3 σ 3\sigma 3σ原则认为:数值分布在 ( μ − σ , μ + σ ) (\mu - \sigma , \mu + \sigma ) (μσ,μ+σ)中的概率为0.6827;数值分布在 ( μ − 2 σ , μ + 2 σ ) (\mu - 2\sigma , \mu + 2\sigma ) (μ2σ,μ+2σ)中的概率为0.9544;数值分布在 ( μ − 3 σ , μ + 3 σ ) (\mu - 3\sigma , \mu + 3\sigma ) (μ3σ,μ+3σ)中的概率为0.9974。也就是说,Y 的取值几乎全部集中在 ( μ − 3 σ , μ + 3 σ ) (\mu - 3\sigma , \mu + 3\sigma ) (μ3σ,μ+3σ)区间内,超出这个范围的可能性仅占不到0.3%,属于极个别的小概率事件,因此将超出 ( μ − 3 σ , μ + 3 σ ) (\mu - 3\sigma , \mu + 3\sigma ) (μ3σ,μ+3σ)范围的值都可以认为是异常值,如下图所示。
在这里插入图片描述

3σ原则要求数据服从正态或近似正态分布,且样本数量大于10。

  • 例3. 3σ原则检测异常值示例。
import pandas as pd
data=[199,78,72,70,68,72,77,78,42,78,74,
      54,80,82,65,62,60] #学生某门课程成绩
s=pd.Series(data) 
dmean=s.mean()
dstd=s.std()
print('\n检测出异常值:')
yz1=dmean-3*dstd
yz2=dmean+3*dstd
for i in range(0,len(data)):
    if (data[i]<yz1)or(data[i]>yz2):
        print(data[i],end=',')
检测出异常值:
199,

1.4 箱线图

箱线图是通过数据集的四分位数形成的图形化描述,是非常简单而且有效的可视化异常值的一种检测方法。

  • 例4. 箱线图检测异常值示例。
import pandas as pd
import matplotlib.pyplot as plt
data=[78,72,32,70,68,72,77,78,
      56,78,74,54,80,82,65,62] 
s=pd.Series(data) 
plt.boxplot(x=s.values,whis=1.5)
plt.show()
#从图中可以看出,检测出的异常值为32。

在这里插入图片描述

2. 异常值处理

异常值处理是数据预处理中的一个重要步骤,它是保证原始数据可靠性,平均值与标准差计算准确性的前提。

2.1 直接删除

直接将含有异常值的记录删除。这种方法简单易行,但缺点也不容忽视,一是在观测值很少的情况下,这种删除操作会造成样本量不足;二是直接删除、可能会对变量的原有分布造成影响,从而导致统计模型的不稳定。

2.2 视为缺失值

利用处理缺失值的方法来处理。这一方法的好处是能够利用现有变量的信息,来填补异常值。需要注意的是,将该异常值作为缺失值处理,需要根据该异常值的特点来进行,此时需要考虑该异常值(缺失值)是完全随机缺失、随机缺失还是非随机缺失的不同情况进行不同处理。

2.3 平均值修正

如果数据的样本量很小的话,也可用前后两个观测值的平均值来修正该异常值。这其实是一种比较折中的方法,大部分的参数方法是针对均值来建模的,用平均值来修正,优点是能克服丢失样本的缺陷,缺点是丢失了样本“特色”。

2.4 盖帽法

将某连续变量均值上下三倍标准差范围外的记录替换为均值上下三倍标准差值,即盖帽处理。如下图所示。
在这里插入图片描述

2.5 分箱平滑法

分箱平滑法是指通过考察“邻居”(周围的值)来平滑存储数据的值。分箱的主要目的是消除异常值,将连续数据离散化,增加粒度。

  • 分箱
    在分箱前,一定要先排序数据,再将它们分配到等深(等宽)的箱子中。
    等深分箱:按记录数进行分箱,每箱具有相同的记录数,每箱的记录数称为箱子的权重,也称箱子的深度。
    等宽分箱:在整个属性值的区间上平均分布,即每个箱的区间范围设定为一个常量,称为箱子的宽度。
    例如客户收入属性income排序后的值(人民币:元):2300,2500, 2800,3000,3500,4000,4500,4800,5000,5300,5500,6000,6200,6700,7000,7200,分箱的结果如下:
    等深分箱。如深度为4,分箱结果为:
    箱1:2300,2500,2800,3000;
    箱2:3500,4000,4500,4800;
    箱3: 5000,5300,5500,6000;
    箱4:6200,6700,7000,7200。
    等宽分箱。如宽度为1200元人民币,分箱结果为:
    箱1:2300,2500,2800,3000,3500;
    箱2:4000,4500,4800,5000;
    箱3:5300,5500,6000,6200;
    箱4: 6700,7000,7800。
  • 数据平滑
    将数据划分到不同的箱子之后,可以运用如下三种策略对每个箱子中的数据进行平滑处理。
    平均值平滑:箱中的每一个值被箱中数值的平均值替换。
    中值平滑:箱中的每一个值被箱中数值的中值替换。
    边界平滑:箱中的最大值和最小值称为箱子的边界,箱中的每一个值被最近的边界值替换。

2.6 回归插补

对于两个相关变量之间的变化模式,通过回归插补适合一个函数来平滑数据。若是变量之间存在依赖关系,也就是 y = f ( x ) y=f(x) y=f(x),那么就可以设法求出依赖关系 f f f,再根据 x x x来预测 y y y,这也是回归问题的实质。实际问题中更为常见的假设是 p ( y ) = N ( f ( x ) ) p(y)=N(f(x)) p(y)=N(f(x)) N N N为正态分布。假设 y y y是观测值并且存在异常值,求出的 x x x y y y之间的依赖关系,再根据 x x x来更新 y y y的值,这样就能去除其中的异常值,这也是回归消除异常值的原理 。

2.7 多重插补

多重插补的处理有两个要点:先删除y变量的缺失值然后插补。需要注意以下两个方面,一是被解释变量有缺失值时不能填补,只能删除;二是只对放入模型的解释变量进行插补。

2.8 不处理

根据该异常值的性质特点,使用更加稳健模型来修饰,然后直接在该数据集上进行数据挖掘。

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

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

相关文章

通过Rothko罗斯科绘画学习CSS盒子

本文章属于学习笔记&#xff0c;在https://www.freecodecamp.org/chinese/learn/2022/responsive-web-design/中练习 1、使用 padding 简写属性来增加两个元素之间的空间到。 .canvas {} .frame { padding:50px; }2、overflow 设置为 hidden - 将画布更改回其原始尺寸。overfl…

193基于matlab的基于两轮驱动机器人的自适应轨迹跟踪算法

基于matlab的基于两轮驱动机器人的自适应轨迹跟踪算法&#xff0c;将被跟踪轨迹分段作为跟踪直线处理&#xff0c;相邻离散点之间为一段新的被跟踪轨迹。程序已调通&#xff0c;可直接运行。 193 自适应轨迹跟踪算法 两轮驱动机器人 - 小红书 (xiaohongshu.com)

matplotlib如何设置中文为宋体,英文为新罗马Times New Roman

问题描述 论文附图通常需要将中文设置为宋体&#xff0c;英文设置为新罗马字体&#xff08;Times New Roman&#xff09;。matplotlib中可以这样设置字体&#xff1a; plt.rcParams[font.sans-serif] [SimSun] plt.rcParams[font.sans-serif] [Times New Roman]但是这样设置…

<DFS剪枝>数字王国之军训排队

其实就是将搜索过程一些不必要的部分直接剔除掉。 剪枝是回溯法的一种重要优化手段&#xff0c;往往需要先写一个暴力搜索&#xff0c;然后找到某些特殊的数学关系&#xff0c;或者逻辑关系&#xff0c;通过它们的约>束让搜索树尽可能浅而小&#xff0c;从而达到降低时间复杂…

绪论——算法设计原则【数据科学与工程算法基础】

一、题记 最近情绪不太稳定&#xff0c;些许烦躁&#xff0c;也就一直没践行前边说的“学习记录”的想法。现在开始做了&#xff0c;春华易逝&#xff0c;正当时&#xff0c;有想法就去做&#xff0c;踌躇懊悔是这个年纪最不该做的事。 二、前言 之前说了分块做这个系列&#x…

动态规划:4种遍历方向图解+Python实现

前言 动态规划类题型在遍历过程中&#xff0c;根据状态转移函数的不同&#xff0c;代码实现时遍历的方向也会有所差异。总的来说&#xff0c;一共可以总结为下图四种模式&#xff1a; 红色五角星表示当前要计算的状态值&#xff1b;白底箭头代表哪些状态要提前算出来&#xf…

VSCode ARM CortexM 开发

VSCode ARM CortexM 开发: http://coffeelatte.vip.cpolar.top/post/software/applications/vscode/vscode_arm_cortexm_开发/ 文章目录 VSCode ARM CortexM 开发: <http://coffeelatte.vip.cpolar.top/post/software/applications/vscode/vscode_arm_cortexm_%E5%BC%80%E5%…

三星计划将其NAND闪存芯片价格上调最高20%

韩国媒体一份报告显示&#xff0c;三星电子的内存业务成功挺过了去年的市场低迷时期。最近&#xff0c;其减产策略终于见效&#xff0c;芯片价格随之上升。 据报导&#xff0c;今年第一季度&#xff0c;三星计划将其NAND闪存芯片价格上调最高20%&#xff0c;目标是恢复其内存芯…

【析】一类动态车辆路径问题模型和两阶段算法

一类动态车辆路径问题模型和两阶段算法 摘要 针对一类动态车辆路径问题&#xff0c;分析4种主要类型动态信息对传统车辆路径问题的本质影响&#xff0c;将动态车辆路径问题(Dynamic Vehicle Routing Problem, DVRP)转化为多个静态的多车型开放式车辆路径问题(The Fleet Size a…

Java基础-复制

复制 前言引用拷贝浅拷贝深拷贝重写clone()方法序列化 前言 在编码中,我们可能会遇到需要将对象的属性复制到另一个对象中,这种情况叫做拷贝. 拷贝与Java内存结构有密切关系,拷贝有三种情况,引用拷贝,深拷贝和浅拷贝,下面来了解一下. 引用拷贝 引用拷贝会生成一个新的对象引…

微信小程序基础面试题

1、简述微信小程序原理 小程序本质就是一个单页面应用&#xff0c;所有的页面渲染和事件处理&#xff0c;都在一个页面内进行&#xff0c;但又可以通过微信客户端调用原生的各种接口&#xff1b;它的架构&#xff0c;是数据驱动的架构模式&#xff0c;它的UI和数据是分离的&am…

Windows上Git LFS的安装和使用

到Git LFS官网下载 传送门 初始化GitHub LFS和Git仓库 在仓库目录中运行&#xff1a; git lfs install再运行&#xff1a; git init跟踪大文件 git lfs track "*.zip"添加并提交文件 git add . git commit -m "Add large files"上传到我的github 配…

3.15作业

什么是IP地址&#xff1a;IP地址的作用是在网络中唯一标识和定位设备 IP地址和MAC地址的区别&#xff1a;IP地址是逻辑地址&#xff0c;网络层标识设备&#xff0c;可以更改&#xff0c;是全球互联网的唯 一 标识 MAC地址是物…

【CTF笔记】 CTF web方向笔记分享 免费 附预览图

个人不怎么记东西&#xff0c;笔记不多&#xff0c;师傅们凑合看… 百度网盘&#xff1a;https://pan.baidu.com/s/1PspihUX28Y_AOQZPurHqKA 麻烦各位师傅帮忙填写一下问卷&#xff0c;提取码在问卷填写结束后显示~ 【https://www.wjx.cn/vm/mBBTTKm.aspx# 】 &#xff08;…

大型政企寻求“智能化配方”,谁是“偏方”,谁是“验方”?

文 | 智能相对论 作者 | 叶远风 两会落幕&#xff0c;“人工智能”已成为国策&#xff0c;而全面推进智能化建设&#xff0c;大型政企首当其冲、责无旁贷——它们既是智能化转型升级的重要构成部分&#xff0c;也能直接在垂直领域形成价值引领、以点带片。 当智能成为大型政…

某鱼弹幕逆向

声明: 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;不提供完整代码&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01;wx a15018…

对称加密算法(DES、AES)

加密密钥 解密密钥 DES现在基本不再使用 3DES处理速度慢 AES通常用于移动通信系统加密以及基于SSH协议的软件

使用docker-compose部署Redis集群

一、部署三主三从的Redis集群 分别为6个节点建立挂载目录&#xff0c;每个目录下建立数据、配置、日志文件夹。 docker-compose内容如下&#xff1a; version: 3 services:redis1:image: redis:6.2.3restart: alwaysports:- "6379:6379"- "16379:16379"v…

【LeetCode热题100】138. 随机链表的复制(链表)

一.题目要求 给你一个长度为 n 的链表&#xff0c;每个节点包含一个额外增加的随机指针 random &#xff0c;该指针可以指向链表中的任何节点或空节点。 构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成&#xff0c;其中每个新节点的值都设为其对应的原节点的值…

【Javascript】变量和数据类型

目录 1.JavaScript介绍 内部JavaScript 外部JavaScript 内联JavaScript JavaScript输入输出语法 2.变量 2.1定义变量 2.2变量的命名规则和规范 2.3let和var区别 3.数据类型 3.1数字类型 3.2 字符串类型 3.3 布尔类型&#xff08;boolean&#xff09; 3.4 未…