【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 ########## 
相关推荐
薛定e的猫咪7 分钟前
【论文精读】ICLR 2023 --- 作为离线强化学习强表达能力策略类的扩散策略
人工智能·深度学习·机器学习·stable diffusion
连线Insight15 分钟前
当考公遇上AI,粉笔能吸引用户付费吗?
人工智能
●VON20 分钟前
开源 vs 商业:主流AI生态概览——从PyTorch到OpenAI的技术格局之争
人工智能·pytorch·开源
用户414292960723937 分钟前
批量商品信息采集工具获取商品详情的完整方案
爬虫·数据挖掘·数据分析
乾元1 小时前
AI 在网络工程中的 12 个高频场景深度实战(Cisco / Huawei 双体系)
人工智能
用户41429296072391 小时前
淘宝实时商品API接口:采集竞品商品详情页的价格、SKU 规格、库存数量、卖点文案、图文内容、售后政策(运费、退换货规则)、评价核心标签
数据挖掘·数据分析·数据可视化
愚戏师1 小时前
Python3 多线程
linux·运维·服务器·python
子午2 小时前
【食物识别系统】Python+TensorFlow+Vue3+Django+人工智能+深度学习+卷积网络+resnet50算法
人工智能·python·深度学习
曾经的三心草2 小时前
基于正倒排索引的Java文档搜索引擎2-实现Index类
java·python·搜索引擎
Dev7z2 小时前
基于深度学习和图像处理的药丸计数与分类系统研究
图像处理·人工智能·深度学习