如何在 Python 中检测和删除异常值
在数据分析和机器学习中,异常值是一个常见的问题。异常值是指与其他观测值显著不同的观测值。异常值可能是由于测量错误、数据输入错误、数据录入错误或其他原因导致的。异常值可能会对数据分析和机器学习模型的准确性产生负面影响。因此,检测和删除异常值是数据分析和机器学习过程中必不可少的一步。在本文中,我们将介绍如何在 Python 中检测和删除异常值。
一、检测异常值
1.箱线图
箱线图是一种常用的检测异常值的方法。箱线图将数据分成四分位数,分别是最小值、下四分位数、中位数、上四分位数和最大值。箱线图中的异常值是指在箱线图上方和下方的点。箱线图可以使用 Python 中的 matplotlib 库绘制。
例如,下面的代码演示了如何使用 matplotlib 库绘制箱线图:
import matplotlib.pyplot as plt
import numpy as np
# 生成随机数据
np.random.seed(10)
data = np.random.normal(100, 20, 200)
# 绘制箱线图
plt.boxplot(data)
plt.show()
上述代码生成了一个包含 200 个元素的随机数组,然后绘制了一个箱线图。箱线图中的中位数为 100,下四分位数为 85,上四分位数为 115,最小值为 46,最大值为 152。箱线图中的异常值是指在箱线图上方和下方的点。
2.标准差
标准差是另一种常用的检测异常值的方法。标准差是指数据集中每个数据点与数据集平均值之间的差异。标准差越大,数据点之间的差异越大。一般来说,如果数据点与平均值之间的差异超过 3 倍标准差,则可以将其视为异常值。可以使用 Python 中的 numpy 库计算标准差。
例如,下面的代码演示了如何使用 numpy 库计算标准差:
import numpy as np
# 生成随机数据
np.random.seed(10)
data = np.random.normal(100, 20, 200)
# 计算标准差
std = np.std(data)
# 计算异常值
outliers = [x for x in data if (x - np.mean(data)) > 3 * std]
print(outliers)
上述代码生成了一个包含 200 个元素的随机数组,然后计算了标准差。最后,代码计算了数据集中的异常值,这些异常值是与平均值之间的差异超过 3 倍标准差的数据点。
二、删除异常值
在检测到异常值后,可以考虑删除这些异常值。删除异常值可能会对数据分析和机器学习模型的准确性产生积极影响。但是,删除异常值也可能会导致数据集的偏斜,因此需要谨慎处理。在删除异常值之前,应该先检查数据集的大小,以确保删除异常值不会导致数据集过小。
可以使用 Python 中的 pandas 库删除异常值。pandas 库提供了许多方法来处理数据集,包括删除行或列、替换值、排序等。
例如,下面的代码演示了如何使用 pandas 库删除异常值:
import pandas as pd
import numpy as np
# 生成随机数据
np.random.seed(10)
data = np.random.normal(100, 20, 200)
# 将数据转换为 DataFrame
df = pd.DataFrame(data, columns=['data'])
# 删除异常值
df = df[df['data'] < np.mean(data) + 3 * np.std(data)]
df = df[df['data'] > np.mean(data) - 3 * np.std(data)]
# 打印数据集大小
print(df.shape)
上述代码生成了一个包含 200 个元素的随机数组,然后将其转换为 DataFrame。然后,代码使用 pandas 库删除数据集中的异常值。最后,代码打印了数据集的大小,以确保删除异常值后数据集的大小仍然足够大。
注意事项:
1.在删除异常值之前,应该先检查数据集的大小,以确保删除异常值不会导致数据集过小。
2.在删除异常值之前,应该先检查数据集的分布,以确保删除异常值不会导致数据集的偏斜。
3.应该使用多种方法来检测异常值,以确保检测到所有的异常值。
4.应该使用多种方法来处理异常值,以确保处理异常值的效果最佳。
5.应该谨慎处理异常值,以确保数据分析和机器学习模型的准确性。