python如何实现对于数据中异常值的处理,python如何处理异常值

  python如何实现对于数据中异常值的处理,python如何处理异常值

  除了缺失值,异常值也是数据中常见的噪声,但并不是所有的异常值都需要处理。异常值产生的原因很多,根据实际业务往往可以分为“真异常”和“假异常”。

  有时候一个具体业务动作的变化会引起“真异常”。此时,异常值反映的是真实情况。如果直接处理掉,可能会遗漏信息。类似于缺失值处理的过程,在异常分析之前需要进行数据读取和简单的描述统计。

  注释大纲:

  ~ ~数据读取

  ~ ~数据概述

  ~ ~异常值识别

  ~ ~异常值处理

  1.数据读取

  导入excel数据,这里的数据来自“猴聊人”发布的数据。

  百度网盘:https://pan.baidu.com/s/14Ulh_S1JqZUAD02-M_3Zlw

  提货代码:wg18

  进口熊猫作为pd

  将numpy作为np导入

  Data=pd.read_excel(朝阳医院2018年销售数据。xlsx ,标题=0,工作表名称=0)

  # header表示读取第一行作为列名,sheetname表示读取工作表。您也可以直接使用sheet的名称。

  2.数据概述

  在读取数据后,我们需要检查数据的基本结构,包括但不限于行数和列数(名称)、数据类型、数据分布等。

  #检查行数和列数

  数据.形状

  (6578, 7)

  #查看前10行数据

  data.head(10)

  购买时间、社会保障卡号、商品代码、商品名称、销售数量、应收金额、实付金额

  0 2018年1月01日星期五1.616528e 06 236701.0强大的VC银翘平板6.0 82.8 69.00

  1 2018年1月2日星期六1.616528e 06 236701.0清热解毒口服液1.0 28.0 24.64

  2018-01-06星期三1.260283e 07 236701.0肝康2.0 16.8 15.00

  3 2018年1月11日星期一1.007034e 10 236701.0三九感冒灵1.0 28.0 28.00

  4 2018年1月15日星期五1.015543e 08 236701.0三九感冒灵8.0 224.0 208.00

  5 2018年1月20日星期三1.338953e 07 236701.0三九感冒灵1.0 28.0 28.00

  6 2018年1月31日星期日1.014649e 08 236701.0三九感冒灵2.0 56.0 56.00

  7 2018年2月17日星期三1.117733e 07 236701.0三九感冒灵5.0 149.0 131.12

  8 2018年2月22日星期一1.006569e 10 236701.0三九感冒灵1.0 29.8 26.22

  9 2018年2月24日星期三1.338953e 07 236701.0三九感冒灵4.0 119.2 104.89

  #数字数据的分布

  data.describe()

  社会保障卡号、商品代码、销售数量、应收金额、实收金额

  计数6.575000 e 03 6.575000 e 03 6575.000000 6575.000000 6575.000000

  平均值6.092179 e 09 1.015458 e 06 2.385095 50 46 . 5465463656

  标准4.889081 e 09 5.126518 e 05 2.3737702 87 80 . 58678687

  最低1.616528 e 06 2.367010 e 05-10.000000-374.0000000-374.0000000

  25% 1.014234 e 08 8.614560 e 05 1.000000 14.000000 12.320000

  50% 1.001650 e 10 8.615070 e 05 2.000000 28.000000 26.600000

  75% 1.004882 e 10 8.689265 e 05 2.000000 59.600000 53.000000

  最大值1.283612 e 10 2.367012 e 06 50.000000 2950.000000 2650.000000

  销售数量、应收金额、实收金额都是负数,金额字段相当离散。

  3.异常值的识别

  异常值的测量标准有很多,比较常见的有描述性统计、三西格马法、箱线图等。

  描述性统计:例如,在前面的数据概述步骤中,基于描述性统计方法,发现销售数量等字段存在负数,与基本认知不符。

  Neg_list=[销售数量,应收金额,实收金额]

  对于neg_list中的项目:

  .neg_item=data[item]0

  .print(存在item小于0的 str(neg_item.sum())。

  .

  有16个销售数量小于0。

  有16笔应收账款小于0。

  有16笔实收金额小于0。

  #在此删除小于0的记录。

  对于neg_list中的项目:

  .对于范围内的I(0,len(data)):

  .如果数据[项目][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。当数值超过这个距离时,可以认为是异常值。

  对于neg_list中的项目:

  .data[item _ zscore ]=(data[item]-data[item]。mean())/data[item]。标准()

  .z _异常=abs(data[item _zscore])3

  .打印(项目有 str(z _ anomaly . sum())异常值)

  .

  销售数量中有190个异常值。

  应收金额有98个异常值。

  实收金额有106个异常值

  箱线图:IQR(差值)=U(上四分位数)-L(下四分位数)

  上限=U 1.5IQR

  下限=L-1.5IQR

  对于neg_list中的项目:

  .iqr=数据[项目]。分位数(0.75) -数据[项目]。分位数(0.25)

  .q _异常_L=数据[项目]数据[项目]。分位数(0.25) - 1.5 * iqr

  .q _异常_U=数据[项目]数据[项目]。分位数(0.75) 1.5 * iqr

  .打印(项目有 str(q _ anomaly _ l . sum()q _ anomaly _ u . sum())异常值)

  .

  销售数量中有974个异常值。

  应收金额有513个异常值。

  实收金额有537个异常值

  4、异常值处理

  对于异常值,可以删除,不做处理,或者作为缺失值处理,采用缺失值的处理方法。

  对于离散度过大的领域,也可以采用对数变换和分类数据变换来减少或消除离群值的影响,但同时也意味着可能会丢失部分数据信息。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: