异常值处理

Posted 654321cc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了异常值处理相关的知识,希望对你有一定的参考价值。

‘‘‘
【课程2.2】  异常值处理

异常值是指样本中的个别值,其数值明显偏离其余的观测值。
异常值也称离群点,异常值的分析也称为离群点的分析

异常值分析 → 3σ原则 / 箱型图分析
异常值处理方法 → 删除 / 修正填补

‘‘‘
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from scipy import stats
% matplotlib inline
# 异常值分析
# (1)3σ原则:如果数据服从正态分布,异常值被定义为一组测定值中与平均值的偏差超过3倍的值 → p(|x - μ| > 3σ) ≤ 0.003

data = pd.Series(np.random.randn(10000)*100)
# 创建数据

u = data.mean()  # 计算均值
std = data.std()  # 计算标准差
stats.kstest(data, norm, (u, std))
print(均值为:%.3f,标准差为:%.3f % (u,std))
print(------)
# 正态性检验

fig = plt.figure(figsize = (10,6))
ax1 = fig.add_subplot(2,1,1)
data.plot(kind = kde,grid = True,style = -k,title = 密度曲线)
plt.axvline(3*std,hold=None,color=r,linestyle="--",alpha=0.8) 
plt.axvline(-3*std,hold=None,color=r,linestyle="--",alpha=0.8) 
# 绘制数据密度曲线

ax2 = fig.add_subplot(2,1,2)
error = data[np.abs(data - u) > 3*std]
data_c = data[np.abs(data - u) <= 3*std]
print(异常值共%i条 % len(error))
# 筛选出异常值error、剔除异常值之后的数据data_c

plt.scatter(data_c.index,data_c,color = k,marker=.,alpha = 0.3)
plt.scatter(error.index,error,color = r,marker=.,alpha = 0.5)
plt.xlim([-10,10010])
plt.grid()
# 图表表达

  输出:

均值为:0.594,标准差为:100.301
------
异常值共26条

技术分享图片

 

# 异常值分析
# (2)箱型图分析

fig = plt.figure(figsize = (10,6))
ax1 = fig.add_subplot(2,1,1)
color = dict(boxes=DarkGreen, whiskers=DarkOrange, medians=DarkBlue, caps=Gray)
data.plot.box(vert=False, grid = True,color = color,ax = ax1,label = 样本数据)
# 箱型图看数据分布情况
# 以内限为界

s = data.describe()
print(s)
print(------)
# 基本统计量

q1 = s[25%]
q3 = s[75%]
iqr = q3 - q1
mi = q1 - 1.5*iqr
ma = q3 + 1.5*iqr
print(分位差为:%.3f,下限为:%.3f,上限为:%.3f % (iqr,mi,ma))
print(------)
# 计算分位差

ax2 = fig.add_subplot(2,1,2)
error = data[(data < mi) | (data > ma)]
data_c = data[(data >= mi) & (data <= ma)]
print(异常值共%i条 % len(error))
# 筛选出异常值error、剔除异常值之后的数据data_c

plt.scatter(data_c.index,data_c,color = k,marker=.,alpha = 0.3)
plt.scatter(error.index,error,color = r,marker=.,alpha = 0.5)
plt.xlim([-10,10010])
plt.grid()
# 图表表达

  输出:

count    10000.000000
mean         0.594413
std        100.300761
min       -403.701752
25%        -67.282512
50%          0.169174
75%         68.517439
max        371.346823
dtype: float64
------
分位差为:135.800,下限为:-270.982,上限为:272.217
------
异常值共71条

技术分享图片

 

以上是关于异常值处理的主要内容,如果未能解决你的问题,请参考以下文章

使用片段中的处理程序时出现非法状态异常

Java异常处理机制

java 反射代码片段

java.util.MissingResourceException: Can't find bundle for base name init, locale zh_CN问题的处理(代码片段

怎么处理Java中的异常

使用实体框架迁移时 SQL Server 连接抛出异常 - 添加代码片段