数据分析|R-异常值处理
时间:2022-07-22
本文章向大家介绍数据分析|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)
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
上面就是常见的检测数据集的异常值以及简单的替换异常值的常用方法,结合之前缺失值的处理,即完成了对数据的简单“清洗”过程。
- 协议森林06 瑞士军刀 (ICMP协议)
- Emlog博客系统IIS 7/8伪静态
- Weblogic魔法堂:AdminServer.lok被锁导致启动、关闭域失败
- CentOS6.5菜鸟之旅:安装VirtualBox4.3
- CentOS6.5菜鸟之旅:VirtualBox4.3识别USB设备
- Eclipse魔法堂:修改主题
- 面试题(一)关于内部类的面试题
- MyBatis魔法堂:各数据库的批量Update操作
- 在Win7的IIS上搭建FTP服务及用户授权
- JavaSE(四)之接口、访问控制
- 3X3 九宫格
- JS魔法堂:通过marquee标签实现信息滚动效果
- Java魔法堂:注解用法详解——@Override
- Windows下安装MongoDB
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- (在模仿中精进数据可视化01) 全国38城居住自由指数可视化
- js字符串/数组常用方法总结
- ThinkPHP5+mpdf 实现富文本生成 PDF文件
- nodejs使用readline逐行读取和写入文件
- go语言逐行读取和写入文件
- SpringBoot中Tomcat是如何启动的
- 自定义注解详解及应用
- 微服务开源框架TARS 之 框架服务解析
- dotnet 在 UOS 国产系统上使用 Xamarin Forms 创建 xaml 界面的 GTK 应用
- K8s集群上使用Helm部署2.4.6版本Rancher集群
- VMware下安装CentOS
- leetcode多线程之按序打印
- 表格的实现
- 使用 Node.js 定制你的技术雷达:中篇
- 数据库PostrageSQL-在Windows上从源代码安装