【Educoder数据挖掘实训】异常值检测-3σ法

【Educoder数据挖掘实训】异常值检测-3σ法

开挖!

这个异常值检测基于的是两点:

  1. 数据往往遵循正态分布
  2. 在正态分布中, μ − 3 σ , μ + 3 σ \\mu - 3\\sigma, \\mu +3\\sigma μ−3σ,μ+3σ包含了正态分布中 99.74 % 99.74\% 99.74%的数据。

所以一个很容易想到的方法就是舍弃在上述区间之外的数。

代码实现也比较容易,跟上一个实训箱线图代码实现一般无二。

只需要借住 S e r i e s Series Series中的函数 m e a n mean mean计算平均值、 s t d std std计算标准差即可。

python 复制代码
import pandas as pd
import matplotlib.pyplot as plt
from scipy import stats
import numpy as np

data = pd.read_csv("src/death.csv", index_col='Unnamed: 0')

data = data.dropna(axis=1, thresh=data.shape[0] * 0.2)
data = data.dropna(axis=0, thresh=data.shape[1] * 0.2)

a = pd.isna(data).sum()
cols = [x for i, x in enumerate(a.index) if a[i] > 0]

mode_list = 'FIPS Admin2'
for i in cols:
    if mode_list.find(i) != -1:
        data[i] = data[i].fillna(data[i].mode().iloc[0])
    else:
        data[i] = data[i].fillna(data.mean()[i])


cols = '2008/10/20,2008/11/20,2008/12/20'.split(',')
x = data[cols]

########## Begin ########## 
# 3σ 原则检测异常值
bar, sigma = x.mean(), x.std()

outliers_index = (x < bar - 3 * sigma) | (x > bar + 3 * sigma)
# 删除异常值

x = x[~outliers_index]

# 打印各列异常值个数 
print(outliers_index.sum())

########## End ########## 
相关推荐
Microvision维视智造7 小时前
产品尺寸一年一换,视觉系统能跟几次?
人工智能·计算机视觉·机器人·视觉检测·机器视觉
@嵌入式扫地僧7 小时前
TFLite Micro STM32/ESP32 开箱即用推理骨架 + INT8 量化脚本实战:零调试跑通端侧 AI 推理完整步骤
人工智能·嵌入式硬件·tinyml·端侧ai·tflite micro
IT_陈寒7 小时前
JavaScript的这个隐式转换特性差点让我加班到凌晨
前端·人工智能·后端
byte轻骑兵7 小时前
【BlueZ 】hci 模块:用户态 HCI 层的核心封装与消息处理
linux·人工智能·bluez·电脑蓝牙·嵌入式蓝牙
计算机编程-吉哥7 小时前
脑肿瘤MRI智能识别系统:基于深度学习的像素级脑肿瘤语义分割平台【计算机毕业设计选题推荐】
人工智能·python·深度学习·算法·毕业设计·课程设计·大数据毕业设计选题推荐
小木_.7 小时前
Python 离线识别滑块缺口距离,项目推荐
开发语言·python·滑块识别·人机验证·滑块缺口·缺口识别
阿里云大数据AI技术7 小时前
Al Search x ES Agent Builder:让数据活起来,从搜索走向行动
人工智能·elasticsearch·agent
Cenxi7 小时前
Python字符串方法练习手册
人工智能·python
摘星星的屋顶7 小时前
2026年8月31日~2026年9月13日周报
人工智能·学习
liliangcsdn7 小时前
因子权重矩阵处理-因子权重收缩Shrinkage算法的探索
开发语言·python·机器学习