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

数据预处理|数据清洗|使用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://xiahunao.cn/news/2869018.html

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

相关文章

creator-webview加载优化

title: creator-webview加载优化 categories: Cocos2dx tags: [cocos2dx, creator, webview, 优化, 加载, 性能] date: 2024-03-02 13:17:20 comments: false mathjax: true toc: true creator-webview加载优化 前篇 Android WebView shouldInterceptRequest - https://www.ji…

Java微服务 第二十一章 Java多线程安全与锁

🌹作者主页:青花锁 🌹简介:Java领域优质创作者🏆、Java微服务架构公号作者😄 🌹简历模板、学习资料、面试题库、技术互助 🌹文末获取联系方式 📝 往期热门专栏回顾 专栏描述Java项目实战介绍Java组件安装、使用;手写框架等Aws服务器实战Aws Linux服务器上操作…

大数据分析-基于python的电影票房预测系统设计与实现

一 概要 近些年来&#xff0c;随着电影行业变得越来越热门&#xff0c;也为影院带来不小的票房收入。传统的影院都是依靠个人经验进行排片&#xff0c;但是由于影片的票房收入可能受多种因素的影响&#xff0c;排片多的电影最后的票房会远低于预期值&#xff0c;导致影院因安排…

2024年新算法:基于苦鱼优化算法BFO的城市三维无人机路径规划(复杂地形三维航迹路径规划)

摘要&#xff1a;本文提出了一种利用苦鱼优化算法&#xff08;Bitterling fish optimization&#xff0c;BFO&#xff09;来解决城市环境下无人机三维路径规划问题的方法。这种方法将复杂的无人机航迹规划任务转化为一个优化问题&#xff0c;然后运用苦鱼优化算法BFO来解决这个…

前端学习笔记 | WebAPIs(DOM+BOM)

一、作用和分类 1、基本概念 作用&#xff1a;使用JS去操作HTML和浏览器 分类&#xff1a;DOM&#xff08;文档对象模型&#xff09;和BOM&#xff08;浏览器对象模型&#xff09; html的标签JS的DOM对象 2、获取DOM对象-参数必须加引号 &#xff08;1&#xff09;选择匹配的第…

IO控制继电器电路

一、U1光耦&#xff1a; 分离高低压&#xff0c;防止高压干扰&#xff0c;实现电气隔离。 二、D5 二极管 1N4148&#xff1a; 续流二极管&#xff0c;保护元件不被感应电压击du穿或烧坏&#xff0c;以并联的方式接到产生感应电动势的元件两端&#xff0c;并与其形成回路&…

LCR 110

LCR 110 问题 例子 思路 使用dfs便利所有边 代码 class Solution { public:vector<vector<int>> res;void deep(vector<vector<int>>& graph, int id, vector<int>& buf){if(idgraph.size()-1){res.push_back(buf);return;}for(int …

AST解web控制流平坦化

此代码可以解决大部分 while if else 控制流平坦化原理&#xff1a; 先将 if 语句转为 switch 语句&#xff0c;再将 switch 分支合并&#xff0c;最后删除已合并的分支&#xff08;具体看代码&#xff09; 实现效果图 首先安装依赖&#xff1a; npm install babel/parser npm…

uniapp——第2篇:编写vue语法

前提&#xff0c;建议先学会前端几大基础&#xff1a;HTML、CSS、JS、Ajax&#xff0c;还有一定要会Vue!&#xff08;Vue2\Vue3&#xff09;都要会&#xff01;&#xff01;&#xff01;不然不好懂 一、去哪写&#xff1f; 就在【pages】的你的人一个页面文件夹里的【.vue】文…

免费接口调用 招标信息自动抽取|招标信息|招标数据解析接口

一、开源项目介绍 一款多模态AI能力引擎&#xff0c;专注于提供自然语言处理&#xff08;NLP&#xff09;、情感分析、实体识别、图像识别与分类、OCR识别和语音识别等接口服务。该平台功能强大&#xff0c;支持本地化部署&#xff0c;并鼓励用户体验和开发者共同完善&#xf…

火车订票管理系统|基于springboot框架+ Mysql+Java+B/S结构的火车订票管理系统设计与实现(可运行源码+数据库+设计文档)

推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 目录 前台功能效果图 管理员功能登录前台功能效果图 用户功能模块 系统功能设计 数据库E-R图设计 lunwen…

bpmn-js中实现shape的内置属性、节点的默认配置

bpmn-js中使用elementfactory模块来构建一个元素的结构,其构建构成和元素属性的组成可参考:聊一聊bpmn-js中的elementFactory模块https://blog.csdn.net/chf1142152101/article/details/136294768。构建元素的属性会自动帮我们生成一个对应类型的shape的Id,其余属性均为空,…

洛谷P1182数列分段

题目描述 对于给定的一个长度为 N 的正整数数列 &#xff0c;现要将其分成 M&#xff08;M≤N&#xff09;段&#xff0c;并要求每段连续&#xff0c;且每段和的最大值最小。 关于最大值最小&#xff1a; 例如一数列 4 2 4 5 14 2 4 5 1 要分成 33 段。 将其如下分段&#…

Python类属性和对象属性大揭秘!

​ 在Python中&#xff0c;对象和类紧密相连&#xff0c;它们各自拥有一些属性&#xff0c;这些属性在我们的编程中起着至关重要的作用。那么&#xff0c;什么是类属性和对象属性呢&#xff1f;别急&#xff0c;让我慢慢给你解释。 类属性 首先&#xff0c;类属性是定义在类本…

计算机二级Python题目13

目录 1. 基本题 1.1 基本题1 1.2 基本题2 1.3 基本题3 2. turtle画图 3. 大题 3.1 大题1 3.2 大题2 1. 基本题 1.1 基本题1 lseval(input()) s"" for item in ls:if type(item)type("香山"):s item print(s) 1.2 基本题2 import random random.se…

学习使用js获取当前ip地址的方法,使用第三方API获取ip地址

学习使用js获取当前ip地址的方法,使用第三方API获取ip地址 使用 DNS 查询使用第三方 API 使用 DNS 查询 DNS 是一种用于解析主机名为 IP 地址的系统。可以使用 JavaScript DNS 查询来获取本机IP地址。下面是如何使用 JavaScript 进行DNS查询的示例代码。 <p class"loc…

腾讯云2核4g服务器能多少人在线?2核4G云服务器支持多少并发?

腾讯云轻量2核4G5M带宽服务器支持多少人在线访问&#xff1f;5M带宽下载速度峰值可达640KB/秒&#xff0c;阿腾云以搭建网站为例&#xff0c;假设优化后平均大小为60KB&#xff0c;则5M带宽可支撑10个用户同时在1秒内打开网站&#xff0c;并发数为10&#xff0c;经阿腾云测试&a…

嵌入式开发基础总结

学习目标 1.了解嵌入式开发 2.开发环境的搭建 3.Linux操作系统的基本操作 一、了解嵌入式开发 以应用为中心&#xff0c;以计算机技术为基础&#xff0c;软硬件可裁剪&#xff0c;适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。 1.嵌入式可以干…

[蓝桥杯练习题]确定字符串是否包含唯一字符/确定字符串是否是另一个的排列

确定字符串是否包含唯一字符 #include<bits/stdc.h> using namespace std; int main(){ios::sync_with_stdio(0);cin.tie(nullptr);cout.tie(nullptr);map<char,int>m;string s;cin>>s;for(int i0;i<s.size();i){if(isalpha(s[i]))s[i]tolower(s[i]);if(…

第十三届蓝桥杯(C/C++ 大学B组)

目录 试题 A: 九进制转十进制 试题 B: 顺子日期 试题 C: 刷题统计 试题 D: 修剪灌木 试题 E: X 进制减法 试题 F: 统计子矩阵 试题 G: 积木画 试题 H: 扫雷 试题 I: 李白打酒加强版 试题 J: 砍竹子 试题 A: 九进制转十进制 九进制正整数 ( 2022 )转换成十进制等于多…