• 数据的异常值和重复值怎么处理?拿去抄作业!


    在进行数据分析的时候除了有缺失值之外,还可能遇到异常值和重复值。

    异常值

    异常值

    偏离正常范围的值,不是错误值。出现的频率很低,但是会对数据分析造成偏差

    常采用盖帽法或者数据离散化进行处理

    1、异常值的判断

    也叫n个标准差法,均值±n个标准差内的数据叫做正常值,一般为2-3个标准差

    计算均值和标准差

    1. import numpy as np
    2. import pandas as pd
    3. data = pd.read_excel('university.xlsx')
    4. jz = data['报名人数'].mean()
    5. print(jz)
    6. bzc = data['报名人数'].std()
    7. print(bzc)

    结果:

    1. > 1525.2222222222222
    2. > 4975.899109579891

    搭配any(),查看是否有超过上下限的数据,这种数据为异常值

    1. top = data['报名人数'].mean() + 2 * data['报名人数'].std()
    2. bottom = data['报名人数'].mean() - 2 * data['报名人数'].std()

    结果:

    1. > 11477.020441382005 
    2. > -8426.57599693756

    是否有超过下限的情况

    any(data.报名人数 < bottom)   # 结果:False
    

    是否有超过上限的情况

    any(data.报名人数 > top)  # 结果:True
    

    查看【报名人数】为正常值的数据

    data[data['报名人数'].between(bottom,top)]
    

    可以看出少了索引为4和12的数据,该数据报名人数分别为17388和20000,超出上限11477.020441382005

    也可以画个直方图看一下数据的分布情况,感受一下:

    data.报名人数.plot(kind ='hist')
    

    箱线法

    上四分位数:取3/4位置的数 下四分位数:取1/4位置的数 分位差 = 上四分位数- 下四分位数

    上界 = 上四分位数 + 1.5分位差 下界= 下四分位数 - 1.5分位差

    上界 、下界范围之内的数据叫做正常值,范围之外的叫做异常值。

    # 下四分位数Q1 = data.报名人数.quantile(0.25)print(Q1)# 上四分位数Q3 =data.报名人数.quantile(0.75)print(Q3)# 分位差IQR = Q3 - Q1print(IQR)# 上界print(Q3 + 1.5 * IQR)# 下界print(Q1 - 1.5 * IQR)# 是否有超出上界的数据print(any(data.报名人数 > Q3 + 1.5 * IQR))# 是否有低于下界的数据print(any(data.报名人数 < Q1 - 1.5 * IQR))
    

    结果:

    > 134.5206.572.0314.526.5TrueTrue
    

    箱线图看一下:

    data.报名人数.plot(kind = 'box')
    

    结果:

    说明有超出上限和下限的值

    2、异常值的处理

    方法一:

    用小于上限最大值去替换超出上限的异常值 用大于下限最小值去替换低于下限的异常值

    数据准备:(新增一列【new_报名人数】数据,是为了替换异常值后做对比)

    data['new_报名人数'= data['报名人数']
    

    计算小于上限的最大值,作为替换值

    # 计算小于上限的最大值,作为替换值UL = Q3 + 1.5 * IQR# 低于上限的最大值replace_value = data.new_报名人数[data.new_报名人数 < UL].max()# 用替换值替换超出上限的数据:data.loc[data.new_报名人数>UL,'new_报名人数'= replace_valuedata
    

    最终:

    方法二:

    低于百分之一分位数的数据用百分之一分位数替换 高于百分之九十九分位数的数据用百分之九十九分位数替换

    计算百分之一分位数、百分之九十九分位数

    # 百分之一分位数P1=data.new_报名人数.quantile(0.01)# 百分之九十九分位数P99=data.new_报名人数.quantile(0.99)
    

    进行替换

    data.loc[data['new_报名人数']>P99,'new_报名人数'= P99data.loc[data['new_报名人数']<P1,'new_报名人数'= P1
    

    重复值

    一般保留第一条重复数据,对其他重复数据进行移除。

    判断重复值 df.duplicated

    df.duplicated(subset=None, keep='first')

    参数说明:subset:列标签,默认使用所有列,若只考虑用某些列来识别重复项,可指定列 keep,默认first,保留重复值的第一项,也可以指定last,保留最后一项重复值数据

    返回的是一个视图

    data.duplicated()
    

    True为重复数据

    取出重复值

    data[data.duplicated()]
    

    结果:

    按照指定列判断重复数据

    data[data.duplicated(subset=['学院','报名人数'])]

    删除重复数据 df.drop_duplicates

    一般有重复数据后可以删除

    df.drop_duplicates(subset=None, keep='first', inplace=False)

    subset:默认全部列,可以指定特定列来判断重复数据 keep:保留重复数据的第一条数据 inplace:是否就地操作,默认False,返回一个视图 True,就地操作,直接在原数组数据上删除重复值

    data.drop_duplicates(inplace=True)data
    

    删除后无重复数据。

    -END-

    扫码添加请备注:python,进群与宋老师面对面交流:517745409

     

     

  • 相关阅读:
    代数科学计算:LiveMath Maker v3.6.0 cRACK
    LuatOS-SOC接口文档(air780E)-- iconv - iconv操作
    大模型,重构自动驾驶
    网络技术一:计算机网络概述
    ATF(TF-A)之UBSAN动态代码分析
    第七章 查找 七、红黑树
    Linux常见操作命令(1)
    UDS协议从入门到精通系列:附录表应用
    设备树源码(即xxx.dts或xxx.dtsi文件)的格式
    大一新生?职场新人?想买电脑该怎么选?
  • 原文地址:https://blog.csdn.net/qiqi1220/article/details/126874655