Python数学建模之异常值识别与处理

本文介绍了异常值识别的几种常见方法,如IQR规则、3原则、绝对中位差MAD、DBSCAN聚类和孤立森林,以及针对异常值的处理策略,包括视为缺失值、平均值修正和删除等。通过Python示例展示了如何在实际数据中应用这些技术。
摘要由CSDN通过智能技术生成

1.异常值识别

1.四分位距(IQR)

        对一个数据列表从小到大排序,然后分为4份,四分之一位置的点为Q1,四分之二位置的点为Q2,四分之三位置的点为Q3,最左边和最右边分别为Q0和Q4。

\Delta =Q3-Q1

       超过上四分位+1.5倍IQR距离,或者下四分位-1.5倍IQR距离的点为异常值,即  (Q1-1.5\Delta ,Q3+1.5\Delta )之外的数据都是无效数据。

        IQR和3\sigma原则是最常用的异常值识别方法。IQR要比3\sigma原则更加严格。

        根据四分位距识别异常值,并绘制箱线图:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# 读取Excel文件
df = pd.read_excel('data.xlsx')

# 获取指定列的数据
columns = ['Column1', 'Column2', 'Column3']
data = df[columns]

# 计算四分位数
q1 = np.percentile(data, 25, axis=0)
q3 = np.percentile(data, 75, axis=0)

# 计算四分位距
iqr = q3 - q1

# 定义异常值的边界
lower_bound = q1 - 1.5 * iqr
upper_bound = q3 + 1.5 * iqr

# 打印异常值
outliers = data[(data < lower_bound) | (data > upper_bound)]
print("异常值:\n", outliers)

# 绘制箱线图
plt.boxplot(data, vert=False, labels=columns)
plt.title('Boxplot')
plt.xlabel('Value')
plt.show()

2.3\sigma原则

        超过均值超3倍标准差,或均值-3倍标准差的点为异常值。

3.绝对中位差MAD

        通过计算数据点与中位数之间的绝对偏差,然后找出这些偏差的中位数,从而检测出异常值。

4.DBSCAN

        既不是核心样本也不是任何簇中成员的数据点,则为异常值。

5.孤立森林

        如果一个数据点的异常分数高于阈值,则它被认为是异常值。

2.异常值处理

1.视为缺失值

        视为缺失值,利用缺失值处理的方法进行处理。这是异常值处理最为常用的一种方法。

        缺失值处理的方法见这篇博文:http://t.csdnimg.cn/ip2qC 

        用四分位法识别异常值,并将其替换为缺失值:

import pandas as pd
import numpy as np

# 读取Excel文件
df = pd.read_excel('data.xlsx')

# 获取指定列的数据
columns = ['Column1', 'Column2', 'Column3']
data = df[columns]

# 使用四分位法识别异常值并将其视为缺失值进行处理
for column in data.columns:
    # 计算四分位数和四分位距
    q1 = data[column].quantile(0.25)
    q3 = data[column].quantile(0.75)
    iqr = q3 - q1
    
    # 计算异常值的边界
    lower_bound = q1 - 1.5 * iqr
    upper_bound = q3 + 1.5 * iqr
    
    # 将异常值替换为缺失值
    data[column] = data[column].mask((data[column] < lower_bound) | (data[column] > upper_bound), np.nan)

# 将处理后的数据输出到新的Excel文件
output_file = 'processed_data.xlsx'
data.to_excel(output_file, index=False)
print(f"处理后的数据已保存到 {output_file} 文件中。")

2.平均值修正

        用前后两个观测值平均值修正异常值。

3.盖帽法

        替换数据框里99%以上和%1以下的点。

4.删除

        删除含有异常值的记录。

  • 10
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值