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

相关推荐
秀儿还能再秀32 分钟前
淘宝母婴购物数据可视化分析(基于脱敏公开数据集)
python·数据分析·学习笔记·数据可视化
计算机老学长1 小时前
基于Python的商品销量的数据分析及推荐系统
开发语言·python·数据分析
千益1 小时前
玩转python:系统设计模式在Python项目中的应用
python·设计模式
&白帝&1 小时前
Java @PathVariable获取路径参数
java·开发语言·python
Shepherdppz2 小时前
python量化交易——金融数据管理最佳实践——使用qteasy大批量自动拉取金融数据
python·金融·量化交易
互联网杂货铺3 小时前
python+pytest 接口自动化测试:参数关联
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·pytest
筱涵哥3 小时前
Python默认参数详细教程:默认参数位置错误,动态默认值,__defaults__属性,动态默认值处理,从入门到实战的保姆级教程
开发语言·python
yzztin3 小时前
Python 导包和依赖路径问题
python
pk_xz1234563 小时前
介绍如何基于现有的可运行STGCN(Spatial-Temporal Graph Convolutional Network)模型代码进行交通流预测的改动
python
用户8134411823613 小时前
Python基础
python