1.异常值识别
1.四分位距(IQR)
对一个数据列表从小到大排序,然后分为4份,四分之一位置的点为Q1,四分之二位置的点为Q2,四分之三位置的点为Q3,最左边和最右边分别为Q0和Q4。
超过上四分位+1.5倍IQR距离,或者下四分位-1.5倍IQR距离的点为异常值,即 之外的数据都是无效数据。
IQR和3原则是最常用的异常值识别方法。IQR要比3
原则更加严格。
根据四分位距识别异常值,并绘制箱线图:
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原则
超过均值超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.删除
删除含有异常值的记录。