数据清洗是数据分析过程中至关重要的一步,它确保数据的准确性、一致性和完整性。这不仅有助于提高分析结果的可靠性和有效性,还能为算法建模决策提供高质量的数据基础。在进行数据分析和建模的过程中,大量的时间花在数据准备上:加载、清理、转换和重新排列,这样的工作占用了工程师 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数据挖掘分析 群,在群内与众多业界大牛互动,了解行业发展前沿~