【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 ########## 
相关推荐
xier_ran1 分钟前
【infra之路】AI 编译器学习笔记(四):PatternRewriter 与贪心 driver
人工智能·笔记·学习
智享 AI 科技2 分钟前
2026年AI私域系统怎么选?从功能到服务的全维度对比
大数据·人工智能·经验分享
镜象科技5 分钟前
AI心理健康解决方案服务商行业趋势:镜象科技如何引领校园心理健康数字化升级
人工智能·科技
威嵌神州8 分钟前
10.1 寸集成加密专网加固平板|外场加密通信硬件基线选型评估
人工智能·嵌入式硬件·平板
在夜里告别98913 分钟前
视频掉帧怎么用AI补帧
人工智能
寻道码路16 分钟前
大模型工程化实战(十八):全息地图——十七篇判据拼成一张「拿处境一查,就知道看哪篇、抓哪个决策、抄哪段代码」的检索图
人工智能·大模型·ai工程化·大模型工程化·agent工程化·rag工程化
JuiceFS17 分钟前
地平线 EB 级存储工程实践
人工智能·后端·自动驾驶
JAVA_AI人工智能项目实战24 分钟前
Agent核心架构(四层架构、ReAct、OTAC、自主决策、Multi-Agent)
人工智能·语言模型·自然语言处理·架构
电商API_1800790524732 分钟前
闲鱼商品列表API接口商品详情API接口请求示例(含一份真实响应数据示例)
android·数据挖掘·网络爬虫·跨境电商·反向海淘
坐吃山猪37 分钟前
FDE前沿部署工程师
人工智能·开发