数据挖掘技术-检测与处理异常值

检测与处理异常值

  1. 准备数据

准备数据detail.csv,将数据文件detail.csv放到Linux本地的/course/DataAnalyze/data目录,并读取数据

In[1]:

import os

import pandas as pd

os.chdir('/course/DataAnalyze/data')

detail = pd.read_csv('./detail.csv',index_col=0,encoding = 'gbk', engine = 'python')

  1. 检测与处理异常值
    1. 3σ原则
  1. 自行构建3σ函数,进行异常值识别,如代码 415所示。

代码 415 使用拉依达法则识别异常值

In[15]:

## 定义拉依达法则识别异常值函数

def outRange(Ser1):

    boolInd = (Ser1.mean()-3*Ser1.std()>Ser1) | (Ser1.mean()+3*Ser1.var()< Ser1)

    index = np.arange(Ser1.shape[0])[boolInd]

    outrange = Ser1.iloc[index]

    return outrange

outlier = outRange(detail['counts'])

print('使用拉依达法则判定异常值个数为:',outlier.shape[0])

print('异常值的最大值为:',outlier.max())

print('异常值的最小值为:',outlier.min())

Out[15]:

使用拉依达法则判定异常值个数为: 40

异常值的最大值为: 10.0

异常值的最小值为: 3.0

  1. 拉依达法则具有一定的局限性,即此法则只对正态分布的数据有效,而对其他分布类型的数据无效。
    1. 箱线图分析
  1. 菜品数据售价根据箱线图来识别异常值,如代码 416所示。

代码 416 菜品售价箱线图识别异常值

In[16]:

import matplotlib.pyplot as plt

plt.figure(figsize=(10,8))

p = plt.boxplot(detail['counts'].values,notch=True)   ##画出箱线图

outlier1 = p['fliers'][0].get_ydata()   ##fliers为异常值的标签

plt.savefig('菜品异常数据识别.png')

plt.show()

print('销售量数据异常值个数为:',len(outlier1))

print('销售量数据异常值的最大值为:',max(outlier1))

print('销售量数据异常值的最小值为:',min(outlier1))

Out[16]:

 

销售量数据异常值个数为: 85

销售量数据异常值的最大值为: 10

销售量数据异常值的最小值为: 2

  1. 运行结果可以发现,菜品订单表中的菜品售价存在着为数不少的异常值。
  2. 通过探索知道,在“amount”特征中存在异常值。使用替换法处理这些异常值,如代码 417所示。

代码 417 订单详情表异常数据检测与处理

In[19]:

##定义异常值识别与处理函数

def outRange(Ser1):

    QL = Ser1.quantile(0.25)

    QU = Ser1.quantile(0.75)

    IQR = QU-QL

    Ser1.loc[Ser1>(QU+1.5*IQR)] = QU

    Ser1.loc[Ser1<(QL-1.5*IQR)] = QL

    return Ser1

## 处理销售量和售价的异常值

detail['counts'] = outRange(detail['counts'])

detail['amounts'] = outRange(detail['amounts'])

##查看处理后的销售量和售价的最小值,最大值

print('销售量最小值为:', detail['counts'].min())

print('销售量最大值为:', detail['counts'].max())

print('售价最小值为:', detail['amounts'].min())

print('售价最大值为:', detail['amounts'].max())

Out[19]:

销售量最小值为: 1.0

销售量最大值为: 1.0

售价最小值为:1.0

售价最大值为:99.0

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

知识世界

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值