python数据分析实战指南之异常值处理

  • Post category:Python

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库读取这个文件,并使用箱型图法绘制销售数据的箱型图。然后,计算出销售数据的四分位数,从而计算出销售数据的界限。最后,使用箱型图法,剔除掉超过边界的异常值。