开发者

python使用箱型图剔除异常值的实现方法

目录
  • 箱型图
  • pandas.DataFrame.quantile
    • 参数:
    • 返回:(Series or DataFrame)
    • 示例:
  • 代码实现 
    • 参考
      • 总结

        箱型图

        python使用箱型图剔除异常值的实现方法

        将一组数据从大到小排列,分别计算出,

        • 上四分位数3: 75%分位点所对应的值
        • 中位数2:         50%分位点对应的值
        • 下四分位数1: 25%分位点所对应的值
        • 上边缘(须):            Q3+1.5(Q3-Q1)
        • 下边缘(须):  &nbswww.devze.comp; &n编程客栈bsp;       Q1-1.5(Q3-Q1)

        数据的合理范围为:

        1 − 1.5www.devze.com(3 − 1)  ≤    ≤  3 + 1.5(3 − 1)

             &http://www.devze.comnbsp;  和使用3σ准则剔除异常值相比,箱线图不需要数据服从正态分布,能真实直观的表现数据形状;箱线图以四分位数和四分位距作为判断异常值的标准,四分位数具有一定的耐抗性,多达 25%的数据可以变得任意远而不会很大地扰动四分位数,使得异常值无法对数据形状造成巨大影响,因此箱形图识别异常值的结果比较客观。

        pandas.DataFrame.quantile

        对于dataframe形式的数据,可以直接调用DataFrame.quantile(),以快速计算箱型图的分位点。

        DataFrame.quantile(q=0.5, axis=0, numeric_only=True, interpolation='linear')

        参数:

        • q:float or array-like, default 0.5 (50% quantile),0 &le开发者_JS学习; q ≤ 1之间的值,即要计算的分位数;
        • axisandroid:{0, 1, ‘index’, ‘columns’}, default 0,对于行,等于0或“索引”,对于列,等于1或“列”;
        • numeric_only:bool, default True,如果为False,则还将计算日期时间和时间增量数据的分位数;
        • interpolation:{‘linear’, ‘lower’, ‘higher’, ‘midpoint’, ‘nearest’},当所需分位数位于两个数据点i和j之间时,此可选参数指定要使用的插值方法。

        返回:(Series or DataFrame)

        • 如果q是数组,则将返回DataFrame,其中index为q,列为self的列,值为分位数。
        • 如果q为float,则index是self的列,值为分位数

        示例:

        import pandas as pd
        import numpy as np
         
        # 生成数据
        d = pd.DataFrame({"SO2":[-1000, 5, 5, 10, 9, 12, 11, 100],
                             "NO2":[12, 52, 14, 10, 10, 23, 15, 9],
                             "CO2":[15, 23, 0, 24, 25, 7, 4, 715],
                             "O3":[17, 23, 33, 10000, 11, 47, 5, 22] })

        q 为 float:

        python使用箱型图剔除异常值的实现方法

        q 为 数组: 

        python使用箱型图剔除异常值的实现方法

        代码实现 

        # 箱型图判断异常点
        def box_outlier(data):
            df = data.copy(deep=True)
            out_index = []
            for col in df.columns:             # 对每一列分别用箱型图进行判断
                Q1 = df[col].quantile(q=0.25)       # 下四分位
                Q3 = df[col].quantile(q=0.75)       # 上四分位
                low_whisker = Q1 - 1.5 * (Q3 - Q1)  # 下边缘
                up_whisker = Q3 + 1.5 * (Q3 - Q1)   # 上边缘
                # 寻找异常点,获得异常点索引值,删除索引值所在行数据
                rule = (df[col] > up_whisker) | (df[col] < low_whisker)  
                out = df[col].index[rule]
                out_index += out.tolist()  
            df.drop(out_index, inplace=True)
            return df

        使用前文创建的数据

        box_outlier(d)

        python使用箱型图剔除异常值的实现方法

        参考

        pandas.DataFrame.quantile

        【python 机器学习】正态分布检验以及异常值处理3Σ原则

        总结

        到此这篇关于python使用箱型图剔除异常值的文章就介绍到这了,更多相关python箱型图剔除异常值内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

        0

        上一篇:

        下一篇:

        精彩评论

        暂无评论...
        验证码 换一张
        取 消

        最新开发

        开发排行榜