数据预处理之异常值(python)

除了缺失值外,异常值也是数据中常有的噪音,但并非异常值都需要被处理,异常值出现的原因有很多,结合实际业务,他们往往可以被分为“真异常”和“假异常”。
有时特定业务动作的变化会引发“真异常”,此时异常值反应的是真实情况,如果直接处理掉,可能就错失了信息。与缺失值处理的过程类似,在进行异常分析之前,需要进行数据读取与简单描述统计。

笔记大纲:
~~·数据读取
~~·数据概览
~~·异常值识别
~~·异常值处理

1、数据读取
导入excel数据,这里的数据来源于“猴子聊人物”所发布的数据资料。
百度网盘:https://pan.baidu.com/s/14Ulh_S1JqZUAD02-M_3Zlw
提取码:wg18

>>> import pandas as pd
>>> import numpy as np

>>> data = pd.read_excel('朝阳医院2018年销售数据.xlsx', header=0, sheetname=0)
# header表示读取第一行作为列名,sheetname为读取sheet1,你也可以直接用sheet的名字

2、数据概览
在进行数据读取之后,我们需要查看数据的基本结构,包含但不限于行列数(名)、数据类型、数据分布等。

# 查看行列数
>>> data.shape
(6578, 7)
# 查看前10行数据 
>>> data.head(10)
                 购药时间          社保卡号      商品编码     商品名称  销售数量   应收金额    实收金额
0  2018-01-01 星期五  1.616528e+06  236701.0  强力VC银翘片   6.0   82.8   69.00
1  2018-01-02 星期六  1.616528e+06  236701.0  清热解毒口服液   1.0   28.0   24.64
2  2018-01-06 星期三  1.260283e+07  236701.0       感康   2.0   16.8   15.00
3  2018-01-11 星期一  1.007034e+10  236701.0    三九感冒灵   1.0   28.0   28.00
4  2018-01-15 星期五  1.015543e+08  236701.0    三九感冒灵   8.0  224.0  208.00
5  2018-01-20 星期三  1.338953e+07  236701.0    三九感冒灵   1.0   28.0   28.00
6  2018-01-31 星期日  1.014649e+08  236701.0    三九感冒灵   2.0   56.0   56.00
7  2018-02-17 星期三  1.117733e+07  236701.0    三九感冒灵   5.0  149.0  131.12
8  2018-02-22 星期一  1.006569e+10  236701.0    三九感冒灵   1.0   29.8   26.22
9  2018-02-24 星期三  1.338953e+07  236701.0    三九感冒灵   4.0  119.2  104.89
# 数值型数据的分布情况
>>> data.describe()
               社保卡号          商品编码         销售数量         应收金额         实收金额
count  6.575000e+03  6.575000e+03  6575.000000  6575.000000  6575.000000
mean   6.092179e+09  1.015458e+06     2.385095    50.478935    46.321582
std    4.889081e+09  5.126518e+05     2.373702    87.607883    80.987682
min    1.616528e+06  2.367010e+05   -10.000000  -374.000000  -374.000000
25%    1.014234e+08  8.614560e+05     1.000000    14.000000    12.320000
50%    1.001650e+10  8.615070e+05     2.000000    28.000000    26.600000
75%    1.004882e+10  8.689265e+05     2.000000    59.600000    53.000000
max    1.283612e+10  2.367012e+06    50.000000  2950.000000  2650.000000

销售数量、应收金额和实收金额存在负数,且金额字段离散程度较大。

3、异常值识别
异常值的测量标准有很多,比较常见的是描述性统计法、三西格玛法、箱型图等:
①描述性统计:比如在之前的数据概览步骤中,基于描述性统计方法,发现销售数量等字段存在负数,这与基本认知是不符的。

>>> neg_list = ['销售数量', '应收金额', '实收金额']
>>> for item in neg_list:
...     neg_item = data[item]<0
...     print(item + '小于0的有' + str(neg_item.sum()) + '个')
...
销售数量小于0的有16个
应收金额小于0的有16个
实收金额小于0的有16个

# 此处将小于0的记录删除
>>> for item in neg_list:
...     for i in range(0, len(data)):
...         if data[item][i]<0:
...             data = data.drop(i)
...     neg_item = data[item]<0
...     print(item + '小于0的有' + str(neg_item.sum()) + '个')
...
销售数量小于0的有0个
应收金额小于0的有0个
实收金额小于0的有0个

②三西格玛:当数据服从正态分布时,99%的数值应该位于距离均值3个标准差之内的距离,P(|x−μ|>3σ)≤0.003,当数值超出这个距离,可以认为它是异常值。

>>> for item in neg_list:
...     data[item + '_zscore'] = (data[item] - data[item].mean())/data[item].std()
...     z_abnormal = abs(data[item + '_zscore'])>3
...     print(item + '中有' + str(z_abnormal.sum()) + '个异常值')
...
销售数量中有190个异常值
应收金额中有98个异常值
实收金额中有106个异常值

③箱型图:IQR(差值) = U(上四分位数) - L(下四分位数)
上界 = U + 1.5IQR
下界 = L-1.5IQR

>>> for item in neg_list:
...     iqr = data[item].quantile(0.75) - data[item].quantile(0.25)
...     q_abnormal_L = data[item] < data[item].quantile(0.25) - 1.5 * iqr
...     q_abnormal_U = data[item] > data[item].quantile(0.75) + 1.5 * iqr
...     print(item + '中有' + str(q_abnormal_L.sum() + q_abnormal_U.sum()) + '个异常值')
...
销售数量中有974个异常值
应收金额中有513个异常值
实收金额中有537个异常值

4、异常值处理
对于异常值,可以删除、可以不处理,也可以将其当做缺失值,采用缺失值的处理办法。
对于离散程度过大的字段,也可以采取对数转化、分类数据转化等方法,减轻或消除异常值带来的影响,但同时这也意味着可能损失部分数据信息。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,948评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,371评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,490评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,521评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,627评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,842评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,997评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,741评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,203评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,534评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,673评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,339评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,955评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,770评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,000评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,394评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,562评论 2 349

推荐阅读更多精彩内容

  • 数据形式 数据读取 数据预处理 数据收集及读取 很多人认为数据分析就是将数据可视化或者对数据趋势做出预测,其实是不...
    Clemente阅读 2,143评论 0 5
  • 关于Mongodb的全面总结 MongoDB的内部构造《MongoDB The Definitive Guide》...
    中v中阅读 31,912评论 2 89
  • 在数据分析之前对数据进行预处理是十分必要的,这一过程能帮我们清除或处理掉数据中的噪音,为后续的分析和建模工作做准备...
    Taodede阅读 5,309评论 0 1
  • 请点击蓝字收听朗读音频 《最后一滴沧海》作者:赵真仁 我带着无人问津的秘密, 坐在海浪之上, 木头和窗帘外, 众神...
    暖逸阅读 252评论 0 1
  • 我不是她的谁,那她是我的谁呢
    自燃式阅读 40评论 0 0