数据清洗第3篇章 - 数据异常处理

数据清洗 是数据分析过程中至关重要的一步,它确保数据的准确性、一致性和完整性。这不仅有助于提高分析结果的可靠性和有效性,还能为算法建模决策提供高质量的数据基础。在进行数据分析和建模的过程中,大量的时间花在数据准备上:加载、清理、转换和重新排列,这样的工作占用了工程师 80% 以上的时间。所以掌握常用的数据清洗方法,将帮助我们能更高效、更高质量完成数据清洗工作。

我们将从易到难来讲述数据清洗系列三篇章,本文为第三篇章:数据异常处理,包括基础常量法、标准差法、四分位距法、 Isolation Forest 机器学习方法,我们将理论和实践结合,层层递进一步一步掌握缺数据异常的识别、处理方法。

第一篇章:处理缺失值和重复值

第二篇章:数据转换处理

1、基础常量法

如果我们已经很清晰筛选异常数据的规则,例如大于什么值或者小于什么值时,数据则是为异常的数据,那么我们可以直接按规则筛选出异常数据。如下所示,我们定义大于 60 的数据则为异常数据

python 复制代码
import pandas as pd
data = pd.Series([50, 49, 51, 50, 49, 51, 50, 49, 51, 50, 49, 51, 100])
# 检测异常值
outliers = data[data > 60]
outliers

# ----输出----
12    100
dtype: int64

2、标准差法

标准差法是一种常用的识别异常值的方法,它基于数据的均值和标准差来判断哪些数据点偏离正常范围。需要注意的是:

  • 适用性:标准差法假设数据是正态分布的,对于偏态分布的数据可能不适用。

  • 选择阈值:根据具体情况选择合适的倍数(2或3倍标准差),以避免误判正常数据为异常值。

python 复制代码
import pandas as pd
data = pd.Series([50, 49, 51, 50, 49, 51, 50, 49, 51, 50, 49, 51, 100])
# 计算均值和标准差
mean = data.mean()
std_dev = data.std()
# 设置阈值(通常是2或3倍标准差)
threshold = 3
# 检测异常值
outliers = data[(data - mean).abs() > threshold * std_dev]
outliers

# --输出--
12    100
dtype: int64
3、四分位距法

四分位距法是一种基于统计学的异常值识别方法,适用于数据分布不对称的情况。它通过计算数据的四分位数来识别异常值。需要注意的是:

  • 鲁棒性:四分位距法对极值不敏感,因此适用于非正态分布的数据。

  • 调节系数:1.5是常用的系数,可以根据具体需求调整以提高识别的灵敏度。

python 复制代码
import pandas as pd

data = pd.Series([50, 48, 51, 50, 49, 51, 50, 49, 51, 50, 49, 51, 100])

# 计算四分位数
Q1 = data.quantile(0.25)
Q3 = data.quantile(0.75)
IQR = Q3 - Q1

# 设置上下限
lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR

# 检测异常值
outliers = data[(data < lower_bound) | (data > upper_bound)]
outliers

# ----输出----
12    100
dtype: int64
4、Isolation Forest

Isolation Forest 是一种基于树结构的异常值检测方法,特别适合处理高维数据集。它通过随机选择特征和分割值来构建多棵树,从而隔离数据点。异常值通常更容易被隔离,因为它们需要更少的分割。需要注意的是:

  • 参数调整:contamination 参数表示数据集中异常值的比例,需要根据具体情况调整。

  • 随机性:Isolation Forest 是一种随机算法,设置随机种子(random_state)可以确保结果可重复。

  • 适用场景:适合大规模、高维数据集的异常检测。

python 复制代码
from sklearn.ensemble import IsolationForest

data = pd.Series([50, 49, 51, 50, 49, 51, 50, 49, 51, 50, 49, 51, 100])
# 转换数据为二维数组
data_reshaped = data.values.reshape(-1, 1)
# 初始化IsolationForest,contamination:数据集中异常点的比例,用于确定阈值
iso_forest = IsolationForest(contamination=0.1, random_state=42)

# 训练模型
iso_forest.fit(data_reshaped)

# 预测异常值, 结果: -1 表示异常,1 表示正常
outliers = iso_forest.predict(data_reshaped)
data[outliers == -1]

# ----输出----
12    100
dtype: int64

本文,我们详细介绍了在数据清洗中我们可以如何进行数据异常处理包括基础常量法、标准差法、四分位距法、 Isolation Forest 机器学习方法,希望对阅读本文的读者有一定的学习提升和借鉴启发,不足之处也欢迎留言指出。

如果你喜欢本文,欢迎点赞,并且关注我们的微信公众号:Python数据挖掘分析,我们会持续更新数据挖掘分析领域的好文章,让大家在数据挖掘分析领域持续精进提升,成为更好的自己!

添加本人微信(coder_0101),或者通过扫描下面二维码添加二维码,拉你进入行业技术交流群,进行技术交流~

扫描以下二维码,加入 Python数据挖掘分析 群,在群内与众多业界大牛互动,了解行业发展前沿~

相关推荐
刘立军13 分钟前
本地大模型编程实战(26)用langgraph实现基于SQL数据构建的问答系统(5)
人工智能·后端·python
初心_202420 分钟前
2. python协程/异步编程详解
java·前端·python
Psycho_MrZhang36 分钟前
Pytorch 反向传播
人工智能·pytorch·python
杜子腾dd1 小时前
8.Excel:数据验证和下拉列表
数据分析·excel
这里有鱼汤1 小时前
别怪 Python 慢,是你 import 的姿势不对!我亲测提速 3~5 倍
后端·python
hyhrosewind1 小时前
Python数据容器:数据容器的分类、数据容器特点总结、各数据容器遍历的特点、数据容器通用操作(统计,转换,排序)
python·数据容器的分类·各数据容器的特点·各数据容器的遍历·数据容器的通用操作·统计,转换,排序
灏瀚星空1 小时前
从基础到实战的量化交易全流程学习:1.3 数学与统计学基础——线性代数与矩阵运算 | 矩阵基础
笔记·python·学习·线性代数·数学建模·金融·矩阵
Amctwd1 小时前
【LLM】解析RAG增强检索技术:原理、实现与应用
python
乐享极致1 小时前
Python 数据可视化进阶:精准插入图表到指定 Excel 工作表
python·信息可视化·excel
火云牌神2 小时前
本地大模型编程实战(28)查询图数据库NEO4J(1)
python·llm·neo4j·langgraph