【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 ########## 
相关推荐
BB_CC_DD7 分钟前
超简单搭建AI去水印和图像修复算法lama-cleaner二
人工智能·深度学习
珠海西格电力8 分钟前
零碳园区物流园区架构协同方案
人工智能·物联网·架构·能源
向成科技8 分钟前
新品 | 向成电子XC3576M小体积主板,全面适配国产麒麟操作系统
人工智能·ai·解决方案·硬件·国产操作系统·麒麟系统·主板
水如烟26 分钟前
孤能子视角:人工智能的“安全对齐“与“共享学习“
人工智能
夏天是冰红茶27 分钟前
小目标检测:PinwheelConv详解
人工智能·目标检测·计算机视觉
老蒋新思维33 分钟前
创客匠人启示:破解知识交付的“认知摩擦”——IP、AI与数据的三角解耦模型
大数据·人工智能·网络协议·tcp/ip·重构·创客匠人·知识变现
爱笑的眼睛1139 分钟前
深入解析Matplotlib Axes API:构建复杂可视化架构的核心
java·人工智能·python·ai
爱埋珊瑚海~~41 分钟前
基于MediaCrawler爬取热点视频
大数据·python
百***074541 分钟前
GPT-5.2 极速接入指南:流程详解与主流模型对比
网络·人工智能·gpt
工程师丶佛爷43 分钟前
从零到一MCP集成:让模型实现从“想法”到“实践”的跃迁
大数据·人工智能·python