首页 › 问答 › Linux › 正文 R语言怎么做异常值分析?如何检测和移除Outliers? 2026-04-29 01:30:26 约 1 分钟读完 39 阅 文章导读 首先,对我们来说,检测数据集中是否存在异常值非常重要。 📋 目录 Ⅰ 异常值分析 - 准备就绪! Ⅱ 结论 A A 博客文档招聘获取支持联系销售异常值分析 - 准备就绪! 首先,对我们来说,检测数据集中是否存在异常值非常重要。 那么,让我们开始吧。我们使用了自行车租赁计数预测数据集。你可以在这里找到该数据集! 1. 加载数据集 最初,我们使用 read.csv() 函数将数据集加载到 R 环境中。 在进行异常值检测之前,我们执行了缺失值分析,以检查是否存在任何 NULL 或缺失值。为此,我们使用了 sum(is.na(data)) 函数。 #删除所有现有对象 rm(list = ls()) #设置工作目录 setwd("D:/Ediwsor_Project - Bike_Rental_Count/") getwd() #加载数据集 bike_data = read.csv("day.csv",header=TRUE) ### 缺失值分析 ### sum(is.na(bike_data)) summary(is.na(bike_data)) #从上述结果可以看出,该数据集不包含任何缺失值。 此处数据不包含任何缺失值 2. 使用 Boxplot 函数检测异常值 现在是检测数据集中异常值存在与否的时候了。为实现这一点,我们使用 c() 函数将数值型数据列保存到一个单独的数据结构/变量中。 此外,我们使用 boxplot() 函数检测数值型变量中是否存在异常值。 箱线图: 异常值检测-箱线图方法 从图表中可以清楚看出,变量 ‘hum’ 和 ‘windspeed’ 的数据值中包含异常值。 3. 将异常值替换为 NULL 值 现在,在 R 中完成异常值分析后,我们将 boxplot() 方法识别出的异常值替换为 NULL 值,以便后续操作,如下所示。 ##############################异常值分析 -- 检测########################### # 1. 数据值中的异常值仅存在于连续/数值型数据变量中。因此,我们需要将所有数值型和分类型独立变量存储到一个单独的数组结构中。 col = c('temp','cnt','hum','windspeed') categorical_col = c("season","yr","mnth","holiday","weekday","workingday","weathersit") # 2. 使用箱线图检测数值型/连续数据列中是否存在异常值。 boxplot(bike_data[,c('temp','atemp','hum','windspeed')]) # 从上述可视化结果可以看出,数据变量 'hum' 和 'windspeed' 的数据值中包含异常值。 #异常值分析 -- 移除异常值 # 1. 从箱线图中,我们识别出了异常值的存在。即,位于上四分位数之上和下四分位数之下的数据值可被视为异常值。 # 2. 现在,我们将异常数据值替换为 NULL。 for (x in c('hum','windspeed')) { value = bike_data[,x][bike_data[,x] %in% boxplot.stats(bike_data[,x])$out] bike_data[,x][bike_data[,x] %in% value] = NA } #检查上述定义的列中异常值是否已被替换为 NULL sum(is.na(bike_data$hum)) sum(is.na(bike_data$windspeed)) as.data.frame(colSums(is.na(bike_data))) 4. 验证所有异常值已被替换为 NULL 现在,我们使用 sum(is.na()) 函数检查缺失数据是否存在,即异常值是否已正确转换为缺失值。 输出: > sum(is.na(bike_data$hum)) [1] 2 > sum(is.na(bike_data$windspeed)) [1] 13 > as.data.frame(colSums(is.na(bike_data))) colSums(is.na(bike_data)) instant 0 dteday 0 season 0 yr 0 mnth 0 holiday 0 weekday 0 workingday 0 weathersit 0 temp 0 atemp 0 hum 2 windspeed 13 casual 0 registered 0 cnt 0 结果是,我们已将 ‘hum’ 列中的 2 个异常点和 ‘windspeed’ 列中的 13 个异常点转换为缺失 (NA) 值。 5. 删除包含缺失值的列 最后,我们使用 ‘tidyr’ 库中的 drop_na() 函数通过删除 NULL 值来处理缺失值。 #删除空值 library(tidyr) bike_data = drop_na(bike_data) as.data.frame(colSums(is.na(bike_data))) 输出: 结果,所有异常值现已被有效移除! > as.data.frame(colSums(is.na(bike_data))) colSums(is.na(bike_data)) instant 0 dteday 0 season 0 yr 0 mnth 0 holiday 0 weekday 0 workingday 0 weathersit 0 temp 0 atemp 0 hum 0 windspeed 0 casual 0 registered 0 cnt 0 结论 至此,我们已经到达本主题的结尾。如果您遇到任何问题,请随时在下方评论。有关 R programming 的更多类似文章,请持续关注!! 在此之前,祝您学习愉快!!:) 感谢与 Community 一起学习。请查看我们提供的计算、存储、网络和管理数据库服务。 了解更多我们的产品