数据建模中利用3σ剔除异常值进行数据清洗

方法原理:

        3σ准则又称为拉依达准则,它是先假设一组检测数据只含有随机误差,对其进行计算处理得到标准偏差,按一定概率确定一个区间,认为凡超过这个区间的误差,就不属于随机误差而是粗大误差,含有该误差的数据应予以剔除。
        在正态分布中σ代表标准差,μ代表均值。x=μ即为图像的对称轴
3σ原则:
        数值分布在(μ-σ,μ+σ)中的概率为0.6827
        数值分布在(μ-2σ,μ+2σ)中的概率为0.9544
        数值分布在(μ-3σ,μ+3σ)中的概率为0.9974
        可以认为,Y 的取值几乎全部集中在(μ-3σ,μ+3σ)区间内,超出这个范围的可能性仅占不到0.3%。

示例数据:

日期商品编码销售数量
02020-12-01A0051
12020-12-01A0142
22020-12-01A0073
32020-12-01A0124
42020-12-01A0095
52020-12-01A0196
62020-12-01A0087
72020-12-01A0198
82020-12-01A0029
92020-12-02A00510

 现在利用3σ剔除异常值的操作。

df_avg = df['销售数量'].mean() # 计算均值
df_std = df['销售数量'].std()  # 计算标准差
df['z_score'] = (df['销售数量'] - df_avg)/ df_std 
print(display(df))
df = df.loc[(df['z_score']>-3)&(df['z_score']<3)]    # 过滤掉销量过高的数据,排除一下异常值干扰
df = df.drop('z_score',axis =1)
print('均值:',df_avg)
print('标准差:',df_std)
均值: 5.5
标准差: 3.0276503540974917

查看处理后的结果:

日期商品编码销售数量
02020-12-01A0051
12020-12-01A0142
22020-12-01A0073
32020-12-01A0124
42020-12-01A0095
52020-12-01A0196
62020-12-01A0087
72020-12-01A0198
82020-12-01A0029
92020-12-02A00510

        可以看到结果没有变 ,现在人工加入一个异常值,看看能不能被过滤掉。

        利用loc函数方法进行添加。

df.loc[10]=['2020-12-02','A007',1000]
df

         再运行一下3σ剔除异常值的操作代码,查看结果,异常数据销售数量为1000已经剔除掉

日期商品编码销售数量
02020-12-01 00:00:00A0051
12020-12-01 00:00:00A0142
22020-12-01 00:00:00A0073
32020-12-01 00:00:00A0124
42020-12-01 00:00:00A0095
52020-12-01 00:00:00A0196
62020-12-01 00:00:00A0087
72020-12-01 00:00:00A0198
82020-12-01 00:00:00A0029
92020-12-02 00:00:00A00510
  • 0
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数据闲逛人

谢谢大嘎喔~ 开心就好

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值