数据分析|R-异常值处理

简介: 数据分析|R-异常值处理

本文首发于“生信补给站”公众号 数据分析|R-异常值处理

前面介绍了拿到脏数据后,对缺失值的处理数据分析|R-缺失值处理,今天分享一下另一种脏数据-异常值的处理。

   异常值一般会拉高或拉低数据的整体情况,因此需要对异常值进行处理。


一 异常值检验


1.1  箱线图方法

绘制箱线图,并标注出异常值


set.seed(1)
test <- c(rnorm(100, mean = 5, sd = 1), runif(100, min = 0.1, max = 50))
library(ggplot2)
ggplot(data=NULL,mapping=aes(x='',y=test))+geom_boxplot(outlier.colour = 'red', outlier.shape = 17)


image.png

1.2 平均值±3个标准差方法


set.seed(1)
test <- c(rnorm(100, mean = 5, sd = 1), runif(100, min = 0.1, max = 50))
min<-mean(test)-3*sd(test)   
max<-mean(test)+3*sd(test)
#返回异常值的下标
which(test > max)
#返回异常值的数值
test[which(test > max)]


1.3  四分位数和四分位距方法

#获取上下四分位数和四分位距


set.seed(1)
test <- c(rnorm(100, mean = 5, sd = 1), runif(100, min = 0.1, max = 50))
Q_xia <- quantile(test, probs = 0.25)
Q_shang <- quantile(test, probs = 0.75)
Q_range <- Q_shang - Q_xia
Q_xia ; Q_shang ; Q_range
     25% 
4.959337 
     75% 
18.87708 
     75% 
13.91775 

#找出异常点


which(test > Q_shang + 1.5*Q_range)
[1] 111 114 115 118 119 125 130 143 150 152 160 183 193 200
value[which(test > Q_shang + 1.5*Q_range)]
[1] 48.07436 47.40352 40.94987 47.67244 47.69126 46.20603 42.71467 45.52748
 [9] 47.15356 46.65220 46.74110 44.02792 49.08002 46.46977

   以上的三种方法均可以找到数据集中的异常值,下面介绍常见的处理异常值的方式。


二 异常值处理


   异常值一般有删除或替换两种处理方式。删除简单,但可能也造成数据信息丢失,下面主要说一下替换。


2.1  用上四分位数的1.5倍四分位距或下四分位数的1.5倍四分位距替换


#设定数据集
set.seed(1)
test <- c(rnorm(100, mean = 5, sd = 1), runif(100, min = 0.1, max = 50))
test1 <- test
#查看原始数据情况
test[c(111,114,115)]
[1] 48.07436 47.40352 40.94987
#查看替换后数据情况
imp1 <- Q_shang + 1.5*Q_range
test1[which(test1 > Q_shang + 1.5*Q_range )] <- imp1
test1[c(111,114,115)]
39.7537 39.7537 39.7537

当然也可以根据实际情况用中位数或者均值替代。


2.2 盖帽法

   令数据集合中90%以上的点值赋值为90%时候的值;小于10%的点值赋值为10%时候的值,百分比数据可根据实际情况调整,仅供参考。

#设定数据集


set.seed(1)
test <- c(rnorm(100, mean = 5, sd = 1), runif(100, min = 0.1, max = 50))
test2 <- test

#查看原始数据q10,q90


q10 <- quantile(test2, 0.1)
q90 <- quantile(test2, 0.9)
q10 ; q90 
 10% 
4.249007 
     90% 
35.23009 
head(test2[which(test2 < q10)])
[1] 4.164371 4.179532 2.785300 3.010648 3.529248 3.622940

#对数据进行替换


test2[test2 < q10] <- q10
test2[test2 > q90] <- q90

#查看替换结果


summary(test2) 
 Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  4.249   4.959   6.169  12.701  18.877  35.230 


   上面就是常见的检测数据集的异常值以及简单的替换异常值的常用方法,结合之前缺失值的处理,即完成了对数据的简单“清洗”过程。

相关文章
|
6月前
|
算法 数据挖掘
R语言——AVOCADO“(异常植被变化检测)算法(1990-2015数据分析)监测森林干扰和再生(含GEE影像下载代码)
R语言——AVOCADO“(异常植被变化检测)算法(1990-2015数据分析)监测森林干扰和再生(含GEE影像下载代码)
97 1
|
5月前
|
SQL 分布式计算 DataWorks
DataWorks操作报错合集之在运行数据分析任务时,底层依赖服务alisa.olap.submitjob出现了异常,如何解决
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
6月前
|
机器学习/深度学习 运维 算法
Python数据分析中的异常检测与处理方法
在Python数据分析中,异常数据是一个常见但又十分重要的问题。本文将介绍几种常见的异常检测与处理方法,包括基于统计学方法、机器学习方法以及深度学习方法。通过对异常数据的有效检测与处理,可以提高数据分析的准确性和可信度,从而更好地指导业务决策。
|
运维 数据挖掘 Python
python 数据分析异常检测anomaly detection
python 数据分析异常检测anomaly detection
217 0
python 数据分析异常检测anomaly detection
|
机器学习/深度学习 运维 算法
【Python数据分析基础】: 异常值检测和处理
【Python数据分析基础】: 异常值检测和处理
【Python数据分析基础】: 异常值检测和处理
|
3月前
|
数据采集 数据可视化 数据挖掘
数据分析大神养成记:Python+Pandas+Matplotlib助你飞跃!
在数字化时代,数据分析至关重要,而Python凭借其强大的数据处理能力和丰富的库支持,已成为该领域的首选工具。Python作为基石,提供简洁语法和全面功能,适用于从数据预处理到高级分析的各种任务。Pandas库则像是神兵利器,其DataFrame结构让表格型数据的处理变得简单高效,支持数据的增删改查及复杂变换。配合Matplotlib这一数据可视化的魔法棒,能以直观图表展现数据分析结果。掌握这三大神器,你也能成为数据分析领域的高手!
62 2
|
3月前
|
机器学习/深度学习 数据采集 数据可视化
基于爬虫和机器学习的招聘数据分析与可视化系统,python django框架,前端bootstrap,机器学习有八种带有可视化大屏和后台
本文介绍了一个基于Python Django框架和Bootstrap前端技术,集成了机器学习算法和数据可视化的招聘数据分析与可视化系统,该系统通过爬虫技术获取职位信息,并使用多种机器学习模型进行薪资预测、职位匹配和趋势分析,提供了一个直观的可视化大屏和后台管理系统,以优化招聘策略并提升决策质量。
156 4
|
3月前
|
机器学习/深度学习 算法 数据挖掘
2023 年第二届钉钉杯大学生大数据挑战赛初赛 初赛 A:智能手机用户监测数据分析 问题二分类与回归问题Python代码分析
本文介绍了2023年第二届钉钉杯大学生大数据挑战赛初赛A题的Python代码分析,涉及智能手机用户监测数据分析中的聚类分析和APP使用情况的分类与回归问题。
74 0
2023 年第二届钉钉杯大学生大数据挑战赛初赛 初赛 A:智能手机用户监测数据分析 问题二分类与回归问题Python代码分析
|
27天前
|
机器学习/深度学习 数据采集 数据可视化
数据分析之旅:用Python探索世界
数据分析之旅:用Python探索世界
23 2
|
2月前
|
数据采集 数据可视化 数据挖掘
数据分析大神养成记:Python+Pandas+Matplotlib助你飞跃!
【9月更文挑战第2天】数据分析大神养成记:Python+Pandas+Matplotlib助你飞跃!
53 5