处理异常值的应用场景
在收集数据的过程中,可能由于人为录入错误等原因,会出现明显不合法的数据,需要在进一步分析之前对这些值进行判定并且处理,才能得到合理的数据分析和挖掘的结果。
预览
对异常值采用以下方案判定:
- 区间判定(普通统计量)
- 箱型图判定
对于异常值的处理遵照缺失值的处理方案。
*注:对于箱型图的相关知识请看。
例子
小呆被交代一项任务,统计一下这个星期各个洗发露的销量,小呆打开营销同事的记录本shampoo_sales.csv,看到
shampoo_sales.csv
品牌,日期,销量
沙宣,20190101,200
沙宣,20190102,185
沙宣,20190103,1000
沙宣,20190104,210
沙宣,20190105,201
沙宣,20190106,223
沙宣,20190107,195
···
沙宣,20190501,2000
···
怎么有些天销量这么高吗?我记得好像这星期都是正常的销售啊,肯定是登记的人搞错了。小呆想着怎么有哪些判定标准判断呢,要么用去年日销量最高判定,于是写下代码
import pandas as pd
sales = pd.read_csv('shampoo_sales.csv', encoding = 'gb2312')
sl = sales.set_index(['品牌', ' 日期'])
print(sl[sl['销量']>500])
结果显示
品牌 日期 销量
沙宣 20190103 1000
20190501 750
看来只有这两天可能是有点问题的。这样判定是不是有点武断啊,我用其他方法在试试看,于是小呆写下代码
import matplotlib.pyplot as plt
sl.plot.box(title = '销量')
结果如下:
欸,这个好像和我在《商务与经济统计》上面学到的箱型图不太一样。小呆问小瓜。是的,在实际使用中的箱型图与书中的箱型图是不一样的,有空你看看我写的科普吧。
小呆看完,原来如此,在上界下界并不一定是正常值的最大值和最小值啊。怪不得上界到上四分位与下界到下四分位距离不一样长。
不过这样也可以判定这里有两个异常值嘛。
那该怎么处理他呢?小呆问小瓜,小瓜说当他不存在,应该怎么补就怎么补充吧
小呆回想了昨天的工作,用平均值补充吧,于是写下代码
sl[sl['销量']>500] = sl[sl['销量']<500].mean()
结果如下
销量
品牌 日期
沙宣 20190101 200
20190102 185
20190103 202.33333
20190104 210
20190105 201
20190106 223
20190107 195
20190501 202.33333
嗯,搞定,小呆把结果交给老大。
文章导引列表:
机器学习
- 小瓜讲机器学习——分类算法(一)logistic regression(逻辑回归)算法原理详解
- 小瓜讲机器学习——分类算法(二)支持向量机(SVM)算法原理详解
- 小瓜讲机器学习——分类算法(三)朴素贝叶斯法(naive Bayes)
- 待续
数据分析
- 小呆学数据分析——使用pandas中的merge函数进行数据集合并
- 小呆学数据分析——使用pandas中的concat函数进行数据集堆叠
- 小呆学数据分析——pandas中的层次化索引
- 小呆学数据分析——使用pandas的pivot进行数据重塑
- 小呆学数据分析——用duplicated/drop_duplicates方法进行重复项处理
- 小呆学数据分析——缺失值处理(一)
- 小呆学数据分析——异常值判定与处理(一)
- 小瓜讲数据分析——数据清洗
数据可视化