-
python异常值处理箱型图_Python数据处理:异常值处理方法之3原则
2020-12-07 12:27:57对于异常值的处理,3σ原则是最常使用的一种处理数据异常值的方法。那么,什么叫3σ原则呢?3σ原则,又叫拉依达原则,它是指假设一组检测数据中只含有随机误差,需要对其进行计算得到标准偏差,...一、3σ原则定义异常值是指样本中的个别值,其数值明显偏离其余的观测值。异常值也称离群点,异常值的分析也称为离群点的分析。在进行机器学习过程中,需要对数据集进行异常值剔除或者修正,以便后续更好地进行信息挖掘。对于异常值的处理,3σ原则是最常使用的一种处理数据异常值的方法。那么,什么叫3σ原则呢?3σ原则,又叫拉依达原则,它是指假设一组检测数据中只含有随机误差,需要对其进行计算得到标准偏差,按一定概率确定一个区间,对于超过这个区间的误差,就不属于随机误差而是粗大误差,需要将含有该误差的数据进行剔除。其局限性:仅局限于对正态或近似正态分布的样本数据处理,它是以测量次数充分大为前提(样本>10),当测量次数少的情形用准则剔除粗大误差是不够可靠的。在测量次数较少的情况下,最好不要选用该准则。3σ原则:- 数值分布在(μ-σ,μ+σ)中的概率为0.6827
- 数值分布在(μ-2σ,μ+2σ)中的概率为0.9545
- 数值分布在(μ-3σ,μ+3σ)中的概率为0.9973
深蓝色区域是距平均值小于一个标准差之内的数值范围。在正态分布中,此范围所占比率为全部数值之68%,根据正态分布,两个标准差之内的比率合起来为95%;三个标准差之内的比率合起来为99%。二、3σ原则作用异常值检测是机器学习中重要的一部分,它的任务是发现与大部分其他对象显著不同的对象。大部分机器学习过程都将这种差异信息视为噪声而丢弃。三、Python实现步骤具体步骤如下:
首先需要保证数据列大致上服从正态分布;
计算需要检验的数据列的平均值和标准差;
比较数据列的每个值与平均值的偏差是否超过3倍,如果超过3倍,则为异常值;
剔除异常值,得到规范的数据。
1import numpy as np
2import pandas as pd
3from scipy import stats
4
5
6# 创建数据
7data = [1222,87,77,92,68,80,78,84,77,81,80,80,77,92,86,
8 76,80,81,75,77,72,81,72,84,86,80,68,77,87,
9 76,77,78,92,75,80,78,123,3,1223,1232]
10df = pd.DataFrame(data,columns = ['value'])
11
12# 计算均值
13u = df['value'].mean()
14
15# 计算标准差
16std = df['value'].std()
17
18print(stats.kstest(df, 'norm', (u, std)))
19# 此时,pvalue > 0.05,不拒绝原假设。因此上面的数据服从正态分布
20print('均值为:%.3f,标准差为:%.3f' % (u,std))
21print('------')
22
23
24# 定义3σ法则识别异常值
25# 识别异常值
26error = df[np.abs(df['value'] - u) > 3*std]
27# 剔除异常值,保留正常的数据
28data_c = df[np.abs(df['value'] - u) <= 3*std]
29
30# 输出正常的数据
31print(data_c)
32# 输出异常数据
33print(error) -
R语言︱处理缺失数据&&异常值检验、离群点分析、异常值处理
2019-11-04 00:03:34脏数据包括:缺失值、异常值、不一致的值、重复数据及含有特殊符号(如#、¥、*)的数据 数据清洗:删除原始数据集中的无关数据、重复数据、平滑噪声数据、处理缺失值、异常值等 缺失值处理:删除记录、数据插补和...在数据挖掘的过程中,数据预处理占到了整个过程的60%
脏数据:指一般不符合要求,以及不能直接进行相应分析的数据
脏数据包括:缺失值、异常值、不一致的值、重复数据及含有特殊符号(如#、¥、*)的数据
数据清洗:删除原始数据集中的无关数据、重复数据、平滑噪声数据、处理缺失值、异常值等
缺失值处理:删除记录、数据插补和不处理
主要用到VIM和mice包
install.packages(c(“VIM”,“mice”))
1.处理缺失值的步骤
步骤:
(1)识别缺失数据;
(2)检查导致数据缺失的原因;
(3)删除包含缺失值的实例或用合理的数值代替(插补)缺失值
缺失值数据的分类:
(1)完全随机缺失:若某变量的缺失数据与其他任何观测或未观测变量都不相关,则数据为完全随机缺失(MCAR)。
(2)随机缺失:若某变量上的缺失数据与其他观测变量相关,与它自己的未观测值不相关,则数据为随机缺失(MAR)。
(3)非随机缺失:若缺失数据不属于MCAR或MAR,则数据为非随机缺失(NIMAR)。
2.识别缺失值
NA:代表缺失值;
NaN:代表不可能的值;
Inf:代表正无穷;
-Inf:代表负无穷。
is.na():识别缺失值;
is.nan():识别不可能值;
is.infinite():无穷值。
is.na()、is.nan()和is.infinte()函数的返回值示例
x
is.na(x)
is.nan(x)
is.infinite(x)
x<-NA
TRUE
FALSE
FALSE
x<-0/0
TRUE
TRUE
FALSE
x<-1/0
FALSE
FALSE
TRUE
complete.cases()可用来识别矩阵或数据框中没有缺失值的行,若每行都包含完整的实例,则返回TRUE的逻辑向量,若每行有一个或多个缺失值,则返回FALSE;
3.探索缺失值模式
(1)列表显示缺失值
mice包中的md.pattern()函数可以生成一个以矩阵或数据框形式展示缺失值模式的表格
library(mice)
data(sleep,package=“VIM”)
md.pattern(sleep)
(2)图形探究缺失数据
VIM包中提供大量能可视化数据集中缺失值模式的函数:aggr()、matrixplot()、scattMiss()
library(“VIM”)
aggr(sleep,prop=TRUE,numbers=TRUE)#用比例代替了计数
matrixplot()函数可生成展示每个实例数据的图形
matrixplot(sleep)
浅色表示值小,深色表示值大;默认缺失值为红色。
marginplot()函数可生成一幅散点图,在图形边界展示两个变量的缺失值信息。
library(“VIM”)
marginplot(sleep[c(“Gest”,“Dream”)],pch=c(20),col=c(“darkgray”,“red”,“blue”))
(3)用相关性探索缺失值
影子矩阵:用指示变量替代数据集中的数据(1表示缺失,0表示存在),这样生成的矩阵有时称作影子矩阵。
求这些指示变量间和它们与初始(可观测)变量间的相关性,有且于观察哪些变量常一起缺失,以及分析变量“缺失”与其他变量间的关系。
head(sleep)
str(sleep)
x<-as.data.frame(abs(is.na(sleep)))
head(sleep,n=5)
head(x,n=5)
y<-x[which(sd(x)>0)]
cor(y)
cor(sleep,y,use=“pairwise.complete.obs”)
4.理解缺失值数据的来由和影响
识别缺失数据的数目、分布和模式有两个目的:
(1)分析生成缺失数据的潜在机制;
(2)评价缺失数据对回答实质性问题的影响。
即:
(1)缺失数据的比例有多大?
(2)缺失数据是否集中在少数几个变量上,抑或广泛存在?
(3)缺失是随机产生的吗?
(4)缺失数据间的相关性或与可观测数据间的相关性,是否可以表明产生缺失值的机制呢?
若缺失数据集中在几个相对不太重要的变量上,则可以删除这些变量,然后再进行正常的数据分析;
若有一小部分数据随机分布在整个数据集中(MCAR),则可以分析数据完整的实例,这样仍可得到可靠有效的结果;
若以假定数据是MCAR或MAR,则可以应用多重插补法来获得有铲的结论。
若数据是NMAR,则需要借助专门的方法,收集新数据,或加入一个相对更容易、更有收益的行业。
5.理性处理不完整数据
6.完整实例分析(行删除)
函数complete.cases()、na.omit()可用来存储没有缺失值的数据框或矩阵形式的实例(行):
newdata<-mydata[complete.cases(mydata),]
newdata<-na.omit(mydata)
options(digits=1)
cor(na.omit(sleep))
cor(sleep,use=“complete.obs”)
fit<-lm(Dream~Span+Gest,data=na.omit(sleep))
summary(fit)
7.多重插补
多重插补(MI)是一种基于重复模拟的处理缺失值的方法。
MI从一个包含缺失值的数据集中生成一组完整的数据集。每个模拟数据集中,缺失数据将使用蒙特卡洛方法来填补。
此时,标准的统计方法便可应用到每个模拟的数据集上,通过组合输出结果给出估计的结果,以及引入缺失值时的置信敬意。
可用到的包Amelia、mice和mi包
mice()函数首先从一个包含缺失数据的数据框开始,然后返回一个包含多个完整数据集的对象。每个完整数据集都是通过对原始数据框中的缺失数据进行插而生成的。
with()函数可依次对每个完整数据集应用统计模型
pool()函数将这些单独的分析结果整合为一组结果。
最终模型的标准误和p值都将准确地反映出由于缺失值和多重插补而产生的不确定性。
基于mice包的分析通常符合以下分析过程:
library(mice)
imp<-mice(mydata,m)
fit<-with(imp,analysis)
pooled<-pool(fit)
summary(pooled)
mydata是一个饮食缺失值的矩阵或数据框;imp是一个包含m个插补数据集的列表对象,同时还含有完成插补过程的信息,默认的m=5analysis是一个表达式对象,用来设定应用于m个插补的统计分析方法。方法包括做线回归模型的lm()函数、做广义线性模型的glm()函数、做广义可加模型的gam()、及做负二项模型的nbrm()函数。fit是一个包含m个单独统计分析结果的列表对象;pooled是一个包含这m个统计分析平均结果的列表对象。
library(mice)
data(sleep,package=“VIM”)
imp<-mice(sleep,seed=1234)
fit<-with(imp,lm(Dream~Span+Gest))
pooled<-pool(fit)
summary(pooled)
impimpDream
利用complete()函数可观察m个插补数据集中的任意一个,格式为:complete(imp,action=#)
eg:
dataset3<-complete(imp,action=3)
dataset3
8.处理缺失值的其他方法
软件包
描述
Hmisc
包含多种函数,支持简单插补、多重插补和典型变量插补
mvnmle
对多元正态颁数据中缺失值的最大似然估计
cat
对数线性模型中多元类别型变量的多重插补
arrayImpute\arraryMissPattern、SeqKnn
处理微阵列缺失值数据的实用函数
longitudinalData
相关的函数列表,比如对时间序列缺失值进行插补的一系列函数
kmi
处理生存分析缺失值的Kaplan-Meier多重插补
mix
一般位置模型中混合类别型和连续型数据的多重插补
pan
多元面板数据或聚类的多重插补
(1)成对删除
处理含缺失值的数据集时,成对删除常作为行删除的备选方法使用。对于成对删除,观测只是当它含缺失数据的变量涉及某个特定分析时才会被删除。
cor(sleep,use=“pairwise.complete.obs”)
虽然成对删除似乎利用了所有可用数据,但实际上每次计算只用了不同的数据集,这将会导致一些扭曲,故建议不要使用该方法。
(2)简单(非随机)插补
简单插补,即用某个值(如均值、中位数或众数)来替换变量中的缺失值。注意,替换是非随机的,这意味着不会引入随机误差(与多重衬托不同)。
简单插补的一个优点是,解决“缺失值问题”时不会减少分析过程中可用的样本量。虽然 简单插补用法简单,但对于非MCAR的数据会产生有偏的结果。若缺失数据的数目非常大,那么简单插补很可能会低估标准差、曲解变量间的相关性,并会生成不正确的统计检验的p值。应尽量避免使用该方法。
----------------------------------------------------------------
异常值分析是检验数据是否有录入错误以及含有不合常理的数据;
异常值是指样本中的个别值,其数据明显偏离其余的观测值。异常值也称为离群点,异常值的分析也称为离群点分析。
异常值处理一般分为以下几个步骤:异常值检测、异常值筛选、异常值处理。
其中异常值检测的方法主要有:箱型图、简单统计量(比如观察极(大/小)值),3σ原则
异常值处理方法主要有:删除法、插补法、替换法。
数据不一致:指数据的矛盾性、不相容性;在数据挖掘过程中,不一致数据的产生主要发生在数据集成的过程中,可能是由于被挖掘数据是来自于从不同的数据源、重复存放的数据未能进行一致性地更新造成的。
下面主要是进行异常值检验、离群点分析、异常值处理:
提到异常值不得不说一个词:鲁棒性。就是不受异常值影响,一般是鲁棒性高的数据,比较优质。
一、异常值检验
异常值大概包括缺失值、离群值、重复值,数据不一致。
1、基本函数
summary可以显示每个变量的缺失值数量.
2、缺失值检验
关于缺失值的检测应该包括:缺失值数量、缺失值比例、缺失值与完整值数据筛选。
#缺失值解决方案
sum(complete.cases(saledata)) #is.na(saledata)
sum(!complete.cases(saledata))
mean(!complete.cases(saledata)) #1/201数字,缺失值比例
saledata[!complete.cases(saledata),] #筛选出缺失值的数值
3、箱型图检验离群值
箱型图的检测包括:四分位数检测(箱型图自带)+1δ标准差上下+异常值数据点。
箱型图有一个非常好的地方是,boxplot之后,结果中会自带异常值,就是下面代码中的sp$out,这个是做箱型图,按照上下边界之外为异常值进行判定的。
上下边界,分别是Q3+(Q3-Q1)、Q1-(Q3-Q1)。
sp=boxplot(saledata$“销量”,boxwex=0.7)
title(“销量异常值检测箱线图”)
xi=1.1
sd.s=sd(saledata[complete.cases(saledata),]$“销量”)
mn.s=mean(saledata[complete.cases(saledata),]$“销量”)
points(xi,mn.s,col=“red”,pch=18)
arrows(xi, mn.s - sd.s, xi, mn.s + sd.s, code = 3, col = “pink”, angle = 75, length = .1)
text(rep(c(1.05,1.05,0.95,0.95),length=length(spout[order(sp$out)],
spout)]+rep(c(150,-150,150,-150),length=length(sp$out)),col=“red”)
代码中text函数的格式为text(x,label,y,col);points加入均值点;arrows加入均值上下1δ标准差范围箭头。
箱型图还有等宽与等深分箱法
4、数据去重
数据去重与数据分组合并存在一定区别,去重是纯粹的所有变量都是重复的,而数据分组合并可能是因为一些主键的重复。
数据去重包括重复检测(table、unique函数)以及重复数据处理(unique/duplicated)。
常见的有unique、数据框中duplicated函数,duplicated返回的是逻辑值。
二、异常值处理
常见的异常值处理办法是删除法、替代法(连续变量均值替代、离散变量用众数以及中位数替代)、插补法(回归插补、多重插补)
除了直接删除,可以先把异常值变成缺失值、然后进行后续缺失值补齐。
实践中,异常值处理,一般划分为NA缺失值或者返回公司进行数据修整(数据返修为主要方法)
1、异常值识别
利用图形——箱型图进行异常值检测。
#异常值识别
par(mfrow=c(1,2))#将绘图窗口划为1行两列,同时显示两图
dotchart(inputfile$sales)#绘制单变量散点图,多兰图
pc=boxplot(inputfile$sales,horizontal=T)#绘制水平箱形图
代码来自《R语言数据分析与挖掘实战》第四节。
2、盖帽法
整行替换数据框里99%以上和1%以下的点,将99%以上的点值=99%的点值;小于1%的点值=1%的点值。
(本图来自CDA DSC,L2-R语言课程,常老师所述)
#异常数据处理
q1<-quantile(result$tot_derog, 0.001) #取得时1%时的变量值
q99<-quantile(result$tot_derog, 0.999) #replacement has 1 row, data has 0 说明一个没换
result[resulttot_derog<-q1
result[resulttot_derog<-q99
summary(result$tot_derog) #盖帽法之后,查看数据情况
fix(inputfile)#表格形式呈现数据
which(inputfile$sales==6607.4)#可以找到极值点序号(位置)是啥
把缺失值数据集、非缺失值数据集分开。
#缺失值的处理
inputfiledate)#将日期转换成数值型变量
sub=which(is.na(inputfile$sales))#识别缺失值所在行数
inputfile1=inputfile[-sub,]#将数据集分成完整数据和缺失数据两部分
inputfile2=inputfile[sub,]
3、噪声数据处理——分箱法
将连续变量等级化之后,不同的分位数的数据就会变成不同的等级数据,连续变量离散化了,消除了极值的影响。
4、异常值处理——均值替换
数据集分为缺失值、非缺失值两块内容。缺失值处理如果是连续变量,可以选择均值;离散变量,可以选择众数或者中位数。
计算非缺失值数据的均值,
然后赋值给缺失值数据。
#均值替换法处理缺失,结果转存
#思路:拆成两份,把缺失值一份用均值赋值,然后重新合起来
avg_sales=mean(inputfile1$sales)#求变量未缺失部分的均值
inputfile2$sales=rep(avg_sales,n)#用均值替换缺失
result2=rbind(inputfile1,inputfile2)#并入完成插补的数据
5、异常值处理——回归插补法
#回归插补法处理缺失,结果转存
model=lm(sales~date,data=inputfile1)#回归模型拟合
inputfile2$sales=predict(model,inputfile2)#模型预测
result3=rbind(inputfile1,inputfile2)
6、异常值处理——多重插补——mice包
注意:多重插补的处理有两个要点:先删除Y变量的缺失值然后插补
1、被解释变量有缺失值的观测不能填补,只能删除,不能自己乱补;
2、只对放入模型的解释变量进行插补。比较详细的来介绍一下这个多重插补法。笔者整理了大致的步骤简介如下:
缺失数据集——MCMC估计插补成几个数据集——每个数据集进行插补建模(glm、lm模型)——将这些模型整合到一起(pool)——评价插补模型优劣(模型系数的t统计量)——输出完整数据集(compute)
步骤详细介绍:
函数mice()首先从一个包含缺失数据的数据框开始,然后返回一个包含多个(默认为5个)完整数据集的对象。
每个完整数据集都是通过对原始数据框中的缺失数据进行插补而生成的。 由于插补有随机的成分,因此每个完整数据集都略有不同。
其中,mice中使用决策树cart有以下几个要注意的地方:该方法只对数值变量进行插补,分类变量的缺失值保留,cart插补法一般不超过5k数据集。
然后, with()函数可依次对每个完整数据集应用统计模型(如线性模型或广义线性模型) ,
最后, pool()函数将这些单独的分析结果整合为一组结果。最终模型的标准误和p值都将准确地反映出由于缺失值和多重插补而产生的不确定性。
#多重插补法处理缺失,结果转存
library(lattice) #调入函数包
library(MASS)
library(nnet)
library(mice) #前三个包是mice的基础
imp=mice(inputfile,m=4) #4重插补,即生成4个无缺失数据集
fit=with(imp,lm(sales~date,data=inputfile))#选择插补模型
pooled=pool(fit)
summary(pooled)
result4=complete(imp,action=3)#选择第三个插补数据集作为结果
结果解读:
(1)imp对象中,包含了:每个变量缺失值个数信息、每个变量插补方式(PMM,预测均值法常见)、插补的变量有哪些、预测变量矩阵(在矩阵中,行代表插补变量,列代表为插补提供信息的变量, 1和0分别表示使用和未使用);
同时 利用这个代码impsales 可以找到,每个插补数据集缺失值位置的数据补齐具体数值是啥。
impsales
1 2 3 4
9 3614.7 3393.1 4060.3 3393.1
15 2332.1 3614.7 3295.5 3614.7
(2)with对象。插补模型可以多样化,比如lm,glm都是可以直接应用进去,详情可见《R语言实战》第十五章;(3)pool对象。summary之后,会出现lm模型系数,可以如果出现系数不显著,那么则需要考虑换插补模型;
(4)complete对象。m个完整插补数据集,同时可以利用此函数输出。
其他:
mice包提供了一个很好的函数md.pattern(),用它可以对缺失数据的模式有个更好的理解。还有一些可视化的界面,通过VIM、箱型图、lattice来展示缺失值情况。可见博客:在R中填充缺失数据—mice包
三、离群点检测
离群点检测与异常值主要的区别在于:
异常值针对单一变量,而离群值指的是很多变量综合考虑之后的异常值。
下面介绍一种基于聚类+欧氏距离的离群点检测方法。
基于聚类的离群点检测的步骤如下:数据标准化——聚类——求每一类每一指标的均值点——每一类每一指标生成一个矩阵——计算欧式距离——画图判断。
Data=read.csv(".data.csv",header=T)[,2:4]
Data=scale(Data)
set.seed(12)
km=kmeans(Data,center=3)
print(km)
km$centers #每一类的均值点
#各样本欧氏距离,每一行
x1=matrix(km$centers[1,], nrow = 940, ncol =3 , byrow = T)
juli1=sqrt(rowSums((Data-x1)^2))
x2=matrix(km$centers[2,], nrow = 940, ncol =3 , byrow = T)
juli2=sqrt(rowSums((Data-x2)^2))
x3=matrix(km$centers[3,], nrow = 940, ncol =3 , byrow = T)
juli3=sqrt(rowSums((Data-x3)^2))
dist=data.frame(juli1,juli2,juli3)
##欧氏距离最小值
y=apply(dist, 1, min)
plot(1:940,y,xlim=c(0,940),xlab=“样本点”,ylab=“欧氏距离”)
points(which(y>2.5),y[which(y>2.5)],pch=19,col=“red”)
参考来源于:
https://kknews.cc/zh-cn/tech/e2v4z.html
http://blog.csdn.net/sinat_26917383/article/details/51210793
-
不能bostype没有元数据异常_数据质量 | 脏数据?缺失值、异常值和一致性分析?...
2020-12-30 04:15:02导读:数据质量是数据仓库核心一环,也是数据挖掘中数据准备过程的重要一环,是数据预处理的前提,也是数据挖掘分析结论有效...在常见的数据挖掘工作中,脏数据包括:缺失值、异常值、不一致的值、重复数据及含有特...导读:数据质量是数据仓库核心一环,也是数据挖掘中数据准备过程的重要一环,是数据预处理的前提,也是数据挖掘分析结论有效性和准确性的基础。没有可信的数据,数据仓库形同虚设,数据挖掘构建的模型将是空中楼阁。
数据质量分析的主要任务是检查原始数据中是否存在脏数据。脏数据一般是指不符合要求以及不能直接进行相应分析的数据。在常见的数据挖掘工作中,脏数据包括:缺失值、异常值、不一致的值、重复数据及含有特殊符号(如#、¥、*)的数据。
本文将主要对数据中的缺失值、异常值和一致性进行分析。
作者:张良均 谭立云 刘名军 江建明来源:大数据DT(ID:hzdashuju)
01 缺失值分析数据的缺失主要包括记录的缺失和记录中某个字段信息的缺失,两者都会造成分析结果不准确。下面从缺失值产生的原因及影响等方面展开分析。1. 缺失值产生的原因缺失值产生的原因主要有以下3点:- 有些信息暂时无法获取,或者获取信息的代价太大。
- 有些信息是被遗漏的。可能是因为输入时认为该信息不重要、忘记填写或对数据理解错误等一些人为因素而遗漏,也可能是由于数据采集设备故障、存储介质故障、传输媒体故障等非人为原因而丢失。
- 属性值不存在。在某些情况下,缺失值并不意味着数据有错误。对一些对象来说某些属性值是不存在的,如一个未婚者的配偶姓名、一个儿童的固定收入等。
- 数据挖掘建模将丢失大量的有用信息。
- 数据挖掘模型所表现出的不确定性更加显著,模型中蕴含的规律更难把握。
- 包含空值的数据会使建模过程陷入混乱,导致不可靠的输出。
- 使用简单的统计分析,可以得到含有缺失值的属性的个数以及每个属性的未缺失数、缺失数与缺失率等。
- 对于缺失值的处理,从总体上来说分为删除存在缺失值的记录、对可能值进行插补和不处理3种情况。
02 异常值分析异常值分析是检验数据是否有录入错误,是否含有不合常理的数据。忽视异常值的存在是十分危险的,不加剔除地将异常值放入数据的计算分析过程中,会对结果造成不良影响;重视异常值的出现,分析其产生的原因,常常成为发现问题进而改进决策的契机。异常值是指样本中的个别值,其数值明显偏离其他的观测值。异常值也称为离群点,异常值分析也称为离群点分析。1. 简单统计量分析在进行异常值分析时,可以先对变量做一个描述性统计,进而查看哪些数据是不合理的。最常用的统计量是最大值和最小值,用来判断这个变量的取值是否超出了合理范围。如客户年龄的最大值为199岁,则判断该变量的取值存在异常。2. 3σ原则如果数据服从正态分布,在3σ原则下,异常值被定义为一组测定值中与平均值的偏差超过3倍标准差的值。在正态分布的假设下,距离平均值3σ之外的值出现的概率为P(|x-μ|>3σ)≤0.003,属于极个别的小概率事件。如果数据不服从正态分布,也可以用远离平均值的标准差倍数来描述。3. 箱型图分析箱型图提供了识别异常值的一个标准:异常值通常被定义为小于QL -1.5IQR或大于QU +1.5IQR的值。- QL称为下四分位数,表示全部观察值中有四分之一的数据取值比它小;
- QU称为上四分位数,表示全部观察值中有四分之一的数据取值比它大;
- IQR称为四分位数间距,是上四分位数QU与下四分位数QL之差,其间包含了全部观察值的一半。
▲图3-1 箱型图检测异常值餐饮系统中的销量数据可能出现缺失值和异常值,例如表3-1中数据所示。
▲表3-1 餐饮日销额数据示例分析餐饮系统日销额数据可以发现,其中有部分数据是缺失的,但是如果数据记录和属性较多,使用人工分辨的方法就不切实际,所以这里需要编写程序来检测出含有缺失值的记录和属性以及缺失率个数和缺失率等。在Python的pandas库中,只需要读入数据,然后使用describe()方法即可查看数据的基本情况,如代码清单3-1所示。- 代码清单3-1 使用describe()方法查看数据的基本情况
代码清单3-1的运行结果如下:import pandas as pd
catering_sale = '../data/catering_sale.xls' # 餐饮数据
data = pd.read_excel(catering_sale, index_col='日期')
# 读取数据,指定“日期”列为索引列
print(data.describe())
其中count是非空值数,通过len(data)可以知道数据记录为201条,因此缺失值数为1。另外,提供的基本参数还有平均值(mean)、标准差(std)、最小值(min)、最大值(max)以及1/4、1/2、3/4分位数(25%、50%、75%)。更直观地展示这些数据并且可以检测异常值的方法是使用箱型图。其Python检测代码如代码清单3-2所示。销量
count 200.000000
mean 2755.214700
std 751.029772
min 22.000000
25% 2451.975000
50% 2655.850000
75% 3026.125000
max 9106.440000- 代码清单3-2 餐饮日销额数据异常值检测
运行代码清单3-2,可以得到图3-2所示的箱型图。import matplotlib.pyplot as plt# 导入图像库
plt.rcParams['font.sans-serif'] = ['SimHei']# 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
plt.figure() # 建立图像
p = data.boxplot(return_type='dict') # 画箱型图,直接使用DataFrame的方法
x = p['fliers'][0].get_xdata() # 'flies'即为异常值的标签
y = p['fliers'][0].get_ydata()
y.sort() # 从小到大排序,该方法直接改变原对象
'''
用annotate添加注释
其中有些相近的点,注释会出现重叠,难以看清,需要一些技巧来控制
以下参数都是经过调试的,需要具体问题具体调试
'''
for i in range(len(x)):
if i>0:
plt.annotate(y[i], xy=(x[i],y[i]), xytext=(x[i]+0.05 -0.8/(y[i]-y[i-1]), y[i]))
else:
plt.annotate(y[i], xy=(x[i],y[i]), xytext=(x[i]+0.08,y[i]))
plt.show() # 展示箱型图
▲图3-2 异常值检测箱型图从图3-2可以看出,箱型图中超过上下界的7个日销售额数据可能为异常值。结合具体业务可以把865.0、4060.3、4065.2归为正常值,将22.0、51.0、60.0、6607.4、9106.44归为异常值。最后确定过滤规则为日销额在400元以下或5000元以上则属于异常数据,编写过滤程序,进行后续处理。03 一致性分析数据不一致性是指数据的矛盾性、不相容性。直接对不一致的数据进行挖掘,可能会产生与实际相违背的挖掘结果。在数据挖掘过程中,不一致数据的产生主要发生在数据集成的过程中,可能是由于被挖掘数据来自于不同的数据源、对于重复存放的数据未能进行一致性更新造成的。例如,两张表中都存储了用户的电话号码,但在用户的电话号码发生改变时只更新了一张表中的数据,那么这两张表中就有了不一致的数据。关于作者:张良均,资深大数据挖掘与分析专家、模式识别专家、AI技术专家。有10余年大数据挖掘与分析经验,擅长Python、R、Hadoop、Matlab等技术实现的数据挖掘与分析,对机器学习等AI技术驱动的数据分析也有深入研究。本文摘编自《Python数据分析与挖掘实战》(第2版),经出版方授权发布。延伸阅读《Python数据分析与挖掘实战》点击上图了解及购买推荐语:畅销书全新升级,第1版销售超过10万册,被国内100余所高等院校采用为教材,同时被广大数据科学工作者奉为经典,是该领域公认的事实标准。作者在大数据挖掘与分析等领域有10余年的工程实践、教学和创办企业的经验,不仅掌握行业的最新技术和实践方法,而且洞悉学生和老师的需求与痛点。划重点?干货直达?
往期推荐
元数据:数据治理的基石
数据质量:数据治理的核心
数据仓库(离线+实时)大厂优秀案例汇总(建议收藏)
关于我们:
Q: 关于数据质量,你还想了解什么?
!关注不迷路~ 各种福利、资源定期分享!
戳原文,升职加薪! 你也「在看」吗??
-
python处理异常值的代码_利用Python进行异常值分析实例代码
2021-02-03 20:21:45异常值是指样本中的个别值,也称为离群点,其数值明显偏离其余的观测值。常用检测方法3σ原则和箱型图。其中,3σ原则只适用服从正态分布的数据。...异常值分析是检验数据是否有录入错误以及含有不合常理的数据。忽...异常值是指样本中的个别值,也称为离群点,其数值明显偏离其余的观测值。常用检测方法3σ原则和箱型图。其中,3σ原则只适用服从正态分布的数据。在3σ原则下,异常值被定义为观察值和平均值的偏差超过3倍标准差的值。P(|x−μ|>3σ)≤0.003,在正太分布假设下,大于3σ的值出现的概率小于0.003,属于小概率事件,故可认定其为异常值。
异常值分析是检验数据是否有录入错误以及含有不合常理的数据。忽视异常值的存在是十分危险的,不加剔除地把异常值包括进数据的计算分析过程中,对结果会产生不良影响;重视异常值的出现,分析其产生的原因,常常成为发现问题进而改进决策的契机。
异常值是指样本中的个别值,其数值明显偏离其余的观测值。异常值也称为离群点,异常值的分析也称为离群点分析。
(1)简单统计量分析
可以先对变量做一个描述性统计,进而查看哪些数据是不合理的。最常用的统计量是最大值和最小值,用来判断这个变量的取值是否超出了合理的范围。如客户年龄的最大值为199岁,则该变量的取值存在异常。
(2)3原则
如果数据服从正态分布,在3原则下,异常值被定义为一组测定值中与平均值的偏差超过3倍标准差的值。在正态分布的假设下,距离平均值3之外的值出现的概率为P(|x-|>3)≤0.003,属于极个别的小概率事件。
如果数据不服从正态分布,也可以用远离平均值的多少倍标准差来描述。
(3)箱型图分析
箱型图提供了识别异常值的一个标准:异常值通常被定义为小于QL-1.5IQR或大于QU+1.5IQR的值。QL称为下四分位数,表示全部观察值中有四分之一的数据取值比它小;QU称为上四分位数,表示全部观察值中有四分之一的数据取值比它大;IQR称为四分位数间距,是上四分位数QU与下四分位数QL之差,其间包含了全部观察值的一半。
箱型图依据实际数据绘制,没有对数据作任何限制性要求(如服从某种特定的分布形式),它只是真实直观地表现数据分布的本来面貌;另一方面,箱型图判断异常值的标准以四分位数和四分位距为基础,四分位数具有一定的鲁棒性:多达25%的数据可以变得任意远而不会很大地扰动四分位数,所以异常值不能对这个标准施加影响。由此可见,箱型图识别异常值的结果比较客观,在识别异常值方面有一定的优越性,如图3-1所示。
如下数据:
日期 2015/2/10 2015/2/11 2015/2/12 2015/2/13 2015/2/14
销量额 2742.8 3014.3 865 3036.8
我们对其进行异常值分析
import pandas as pd
catering_sale = 'data2.xls' #餐饮数据
data = pd.read_excel(catering_sale, index_col = u'日期')
#读取数据,指定“日期”列为索引列
import matplotlib.pyplot as plt #导入图像库
plt.rcParams['font.sans-serif'] = ['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False #用来正常显示负号
plt.figure() #建立图像
p = data.boxplot() #画箱线图,直接使用DataFrame的方法
x = p['fliers'][0].get_xdata() # 'flies'即为异常值的标签
y = p['fliers'][0].get_ydata()
y.sort() #从小到大排序,该方法直接改变原对象
#用annotate添加注释
#其中有些相近的点,注解会出现重叠,难以看清,需要一些技巧来控制。
#以下参数都是经过调试的,需要具体问题具体调试。
for i in range(len(x)): if i>0:
plt.annotate(y[i], xy = (x[i],y[i]), xytext=(x[i]
0.05 -0.8/(y[i]-y[i-1]),y[i]))
else:
plt.annotate(y[i], xy = (x[i],y[i]), xytext=(x[i]
0.08,y[i]))
plt.show()
结果如下:
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值
-
数据处理——异常值检测
2018-07-28 09:15:003σ原则又称为拉依达准则,该准则具体来说,就是先假设一组检测数据只含有随机误差,对原始数据进行计算处理得到标准差,然后按一定的概率确定一个区间,认为误差超过这个区间的就属于异常值。 正态分布状况下... -
怎么用matlab剔除数据的异常值(3σ准则)
2020-06-25 10:15:05认为凡超过这个区间的误差,就不属于随机误差而是粗大误差,含有该误差的数据应予以剔除。且3σ适用于有较多组数据的时候。 这种判别处理原理及方法仅局限于对正态或近似正态分布的样本数据处理,它是以测量次数... -
箱式图 添加异常值平均值_什么是脏数据?怎样用箱形图分析异常值?终于有人讲明白了...
2021-01-14 12:21:25导读:数据质量分析是数据挖掘中数据准备过程的重要一环,是数据预处理的前提,...在常见的数据挖掘工作中,脏数据包括:缺失值、异常值、不一致的值、重复数据及含有特殊符号(如#、¥、*)的数据。本文将主要对数据... -
数据预处理——异常值查找与剔除
2020-10-19 20:40:173σ准则是指先假设一组检测数据只含有随机误差,对其进行计算处理得到标准偏差,按一定概率确定一个区间,认为凡超过这个区间的误差,就不属于随机误差而是粗大误差,含有该误差的数据应予以剔除。 这种判别处理原理... -
异常值分析
2018-01-02 16:49:00忽视异常值的存在是十分危险的,不加剔除地把异常值包括进数据的计算分析过程中,对结果会产生不良影响,忽视异常值的出现,分析其产生的原因,常常成为发现问题进而改进决策的契机。 下面分析餐饮数据的异常值 ... -
箱式图 添加异常值平均值_什么是脏数据?干货 | 怎样用箱形图分析异常值?终于有人讲明白了...
2021-01-14 19:21:52导读:数据质量分析是数据挖掘中数据准备过程的重要一环,是数据预处理的前提...在常见的数据挖掘工作中,脏数据包括:缺失值、异常值、不一致的值、重复数据及含有特殊符号(如#、¥、*)的数据。本文将主要对数据... -
python 检查异常值_利用Python进行异常值分析实例代码
2020-12-29 11:10:29前言异常值是指样本中的个别值,也称为离群点,其数值明显偏离其余的观测值。常用检测方法3σ原则和箱型图。其中,3σ原则只适用服从正态分布的数据。...异常值分析是检验数据是否有录入错误以及含有不合常理的数据... -
Python异常值分析
2019-12-14 15:31:30异常值分析是检验数据是否有录入错误以及含有不合常理的数据。忽视异常值的存在是十分危险的,不加剔除地把异常值包括进数据的计算分析过程中,对结果会产生不良影响;重视异常值的出现,分析其产生的原因,常常成为... -
Pandas DataFrame中对异常值的处理
2019-06-06 10:47:28相信大多数朋友们在使用Pandas读取Excel数据(如csv文件)时,表格中往往含有异常的值。这些异常值通过包括三大类: None,null,NaN。但是None和null通常可以通过“==”来判断,相对比较简单,因此本文主要介绍对... -
异常值检测算法
2017-05-13 14:50:17异常值分析是检验数据是否有录入错误以及含有不合常理的数据的过程,忽视异常值的存在是十分危险的,不加剔除地把异常值包括进数据的计算分析过程中,对结果会产生不良影响,重视异常值的出现,分析其产生的原因,... -
不能bostype没有元数据异常_什么是脏数据?怎样用箱形图分析异常值?终于有人讲明白了...
2020-12-30 04:15:12导读:数据质量分析是数据挖掘中数据准备过程的重要一环,是数据预处理的前提,也是数据...在常见的数据挖掘工作中,脏数据包括:缺失值、异常值、不一致的值、重复数据及含有特殊符号(如#、¥、*)的数据。本文将... -
Python-异常值分析
2018-05-29 22:16:55异常值分析是检验数据是否有录入错误以及含有不合常理的数据。忽视异常值的存在是十分危险的,不加剔除地把异常值包括进数据的计算分析过程中,对结果会产生不良影响;重视异常值的出现,分析其产生的原因,常常成为... -
利用Python进行异常值分析实例代码
2020-12-24 11:22:58忽视异常值的存在是十分危险的,不加剔除地把异常值包括进数据的计算分析过程中,对结果会产生不良影响;重视异常值的出现,分析其产生的原因,常常成为发现问题进而改进决策的契机。 异常值是指样本中的个别值,其 -
初学数据挖掘——数据探索(一):数据质量分析:缺失值分析、异常值分析(简单统计量、箱型图、)、一致性...
2020-10-26 09:22:05常见的脏数据:缺失值、异常值、不一致的值、重复数据即含有特殊符号(如#、¥、*)的数据 一、缺失值分析 1、缺失值产生的原因: 1.有些信息暂时无法获取,或获取信息的代价太高。 2.信息被遗漏,可能是人为因素,... -
C#使用拉依达准则(3σ准则)剔除异常数据(.Net剔除一组数据中的奇异值)
2017-07-11 17:45:18它是先假设一组符合正态分布的检测数据只含有随机误差,对其进行计算处理得到标准偏差,按一定概率确定一个区间,认为凡超过这个区间的误差,就不属于随机误差而是粗大误差(奇异值),含有该误差的数据应予以剔除。... -
异常数据处理
2019-07-06 09:49:441.删除含有异常值的记录 2.将异常值视为缺失值,交给缺失值处理方法来处理 3.用平均值来修正 4.不处理 需要强调的是,如何判定和处理异常值,需要结合实际。 # 异常数据处理(异常数据过滤) new_df = df.... -
值对于int32太大或太小_什么是脏数据?干货 | 怎样用箱形图分析异常值?终于有人讲明白了...
2020-11-29 10:41:18导读:数据质量分析是数据挖掘中数据准备过程的重要一环,是数据预处理的前提...在常见的数据挖掘工作中,脏数据包括:缺失值、异常值、不一致的值、重复数据及含有特殊符号(如#、¥、*)的数据。本文将主要对数据... -
OLD:用于单变量和多变量异常值检测的SPSS宏
2020-09-22 13:41:10也含有2种多变量异常值的检测方法,包括马氏距离和两步聚类(SPSS官方方法的简化版)。 1.下载与(Windows)安装 读者可在同名公众号左下角通过“资料课程→课件&工具&数据→各类自制工具”进入下载。对SPSS... -
数据缺失值处理的几个疑问
2019-04-08 13:46:07数据中含有缺失值、异常值,及无意义的数值0. 我的操作步骤是先将数值0替换成缺失值。再对数据进行z-score标准化处理,找出异常值后,也将异常值替换成空值。再统一对缺失值进行填充处理。我的问题是: 1. 我的操作...
-
海泰克5610操作说明.pdf
-
AD9834之C语言驱动程序.zip
-
具有随机干扰的混沌复杂网络的有限时间同步
-
LeetCode02顺时针打印数组
-
K8s的一些概念 Service工作方式和类型
-
MySQL DML 语言(插入、更新与删除数据)
-
C# 可动态调整下拉菜单的内容
-
【C++Primer读书笔记】2.3.2 void*指针
-
零基础一小时极简以太坊智能合约开发环境搭建并开发部署
-
C/C++反汇编解密
-
自动化测试Python3+Selenium3+Unittest
-
C++ 如何判断一个数为回文数
-
SVN详细安装教程
-
下载docker图形监视化工具weaveworks scope过程
-
做好扁平化设计
-
Galera 高可用 MySQL 集群(PXC v5.7+Hapro)
-
深度学习中的五种归一化(BN、LN、IN、GN和SN)方法简介
-
MySQL 高可用工具 heartbeat 实战部署详解
-
华为1+X认证——网络系统建设与运维(初级)
-
javascript学习笔记