使用3sigma原则去除数据表中的极端值

一、基本概念

在正态分布中σ代表标准差,μ代表均值。x=μ即为图像的对称轴

3σ原则为:

数值分布在(μ-σ,μ+σ)中的概率为0.6826(1)

数值分布在(μ-2σ,μ+2σ)中的概率为0.9545(2)

数值分布在(μ-3σ,μ+3σ)中的概率为0.9973(3)

可以认为,Y 的取值几乎全部集中在(μ-3σ,μ+3σ)区间内,超出这个范围的可能性仅占不到0.3%

我们认为在(3)范围之外的数据可以看作极端值

二、适用条件

1、数据正态分布或近似正态分布的情况

2、测量次数充分大的情况

三、代码展示

import numpy as np
import pandas as pd
import matplotlib as mpl
from scipy import stats #导入K-S检验
import matplotlib.pyplot as plt
data=pd.read_csv(r'data_demo.csv')#读取数据
data.head(5)#输出前五行

测试数据的前五行展示如下:

使用3sigma原则去除数据表中的极端值
data.describe().T

使用3sigma原则去除数据表中的极端值

测试数据>30符合条件2

#检验正态性
for col in data.columns:
    u = data[col].mean()
    std = data[col].std()
    print(col,stats.kstest(data[col], 'norm', (u, std)))

使用3sigma原则去除数据表中的极端值

使用KS检验依次检验各个变量的正态性
可以看出各个变量的P值均>0.05不能拒绝原假设,认为各个变量均服从正态分布

符合条件1

定义3sigma准则函数

#使用3sigma准则除去极端值
def three_sigma(df):#定义函数
    way = (df.mean() - 3 * df.std() < df) &(df.mean() + 3 * df.std() > df) #使用法则取得非极端值
    index = np.arange(df.shape[0])[way] #获取非极端值索引
    output= df.iloc[index] #获取位置
    return output#输出位置
for col in data.columns:
    data[col]=three_sigma(data[col])

使用3sigma原则删除数据表中各个变量所对应的极端值

去除极端值之后的情况

data.describe().T

使用3sigma原则去除数据表中的极端值

Original: https://blog.csdn.net/qq_51397866/article/details/126211257
Author: qq_51397866
Title: 使用3sigma原则去除数据表中的极端值

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/758016/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球