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

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.删除

        删除含有异常值的记录。

  • 9
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于Python中的数据清洗和预处理,有许多常用的库和技术可以使用。以下是一些常见的方法和库: 1. Pandas库:Pandas是一个功能强大的数据分析库,提供了各种数据清洗和预处理的功能。它可以用于数据清洗、缺失值处理、重复值处理、数据转换等。 2. NumPy库:NumPy是一个用于科学计算的库,提供了对多维数组的支持。它可以用于数据过滤、条件选择、数据排序等。 3. 正则表达式:正则表达式是一种强大的文本匹配和处理工具,可以用于数据清洗、提取特定模式的数据等。 4. 数据类型转换:Python中提供了许多内置函数用于数据类型转换,如int()、float()等。可以使用这些函数将数据转换为所需的类型。 5. 缺失值处理:对于存在缺失值的数据,可以使用Pandas库中的dropna()函数删除缺失值,或使用fillna()函数填充缺失值。 6. 重复值处理:对于存在重复值的数据,可以使用Pandas库中的duplicated()函数查找重复值,并使用drop_duplicates()函数删除重复值。 7. 数据标准化:对于存在不同量级或不同分布的数据,可以使用Pandas库或Scikit-learn库中的标准化方法对数据进行标准化,如Z-score标准化、min-max标准化等。 8. 异常值处理:对于存在异常值的数据,可以使用统计学方法或可视化方法进行异常值检测,并根据具体情况进行处理,如删除异常值、替换异常值等。 以上是一些常见的Python数据清洗和预处理方法和库,根据具体需求和数据特点,可以选择合适的方法进行数据清洗和预处理

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值