Python数据分析实战指南之异常值处理
什么是异常值
异常值(outliers)是指数据样本中与其他样本明显不同的观测点,可能由于检测误差、记录误差或者真实的现象造成。异常值在数据分析中很常见,因为它们可能对数据分析结果产生明显的影响,因此需要对其进行处理。
异常值的处理方法
1. 标准差法
标准差法(SD method)是最常用的处理异常值的方法之一。它的基本原理是假设数据服从正态分布,在这个假设下,若某观测值超过平均值 ± 3倍标准差的范围,则认定该观测值为异常值。对于非正态分布的数据,标准差法不一定适用。
import numpy as np
data = np.array([1, 2, 3, 4, 5, 100])
mean = np.mean(data)
std = np.std(data)
lower_bound = mean - 3 * std
upper_bound = mean + 3 * std
outliers = data[(data < lower_bound) | (data > upper_bound)]
2. 箱型图法
箱型图(box plot)法也是常用的处理异常值的方法之一。箱型图用五个数值来描述数据分布的特征,包括数据的最小值、上四分位数(Q1)、中位数(median)、下四分位数(Q3)和最大值。如果一个数据点落在上下限之外,就被认为是异常值。
import matplotlib.pyplot as plt
data = np.array([1, 2, 3, 4, 5, 100])
fig, ax = plt.subplots()
ax.boxplot(data)
示例说明
示例1:使用标准差法处理气温数据中的异常值
import pandas as pd
df = pd.read_csv('temperature.csv')
mean = df['temperature'].mean()
std = df['temperature'].std()
cutoff = std * 3
lower = mean - cutoff
upper = mean + cutoff
new_df = df[(df['temperature'] > lower) & (df['temperature'] < upper)]
在此示例中,我们假设temperature.csv
文件包含了一组气温数据。我们使用pandas
库读取这个文件,并计算出气温数据的平均值和标准差。然后使用标准差法,剔除掉超过平均值 ± 3倍标准差的异常值。
示例2:使用箱型图法处理销售数据中的异常值
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv('sales.csv')
fig, ax = plt.subplots()
ax.boxplot(df['sales'])
q1 = df['sales'].quantile(0.25)
q3 = df['sales'].quantile(0.75)
iqr = q3 - q1
lower = q1 - 1.5 * iqr
lower = q3 + 1.5 * iqr
new_df = df[(df['sales'] > lower) & (df['sales'] < upper)]
在此示例中,我们假设sales.csv
文件包含了一组销售数据。我们使用pandas
库读取这个文件,并使用箱型图法绘制销售数据的箱型图。然后,计算出销售数据的四分位数,从而计算出销售数据的界限。最后,使用箱型图法,剔除掉超过边界的异常值。