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

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

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

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

第二篇章:数据转换处理

1、基础常量法

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

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倍标准差),以避免误判正常数据为异常值。

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是常用的系数,可以根据具体需求调整以提高识别的灵敏度。

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)可以确保结果可重复。

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

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数据挖掘分析 群,在群内与众多业界大牛互动,了解行业发展前沿~

图片

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

coder_风逝

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值