为什么我的下等离群值未显示在箱形图中

时间:2020-06-09 04:34:22

标签: pandas matplotlib seaborn

数据集

UPDATE [dbo].[Test]
SET [Name] = 
REPLACE(
    REPLACE(
        REPLACE(
            REPLACE(
                REPLACE(
                    REPLACE(
                        REPLACE(
                            REPLACE(
                                REPLACE([Name], 'A', '#')
                            , 'B', '$'),                                
                        'C', '^'),
                    'D', 'A'),
                'E', 'B'),
            'F', 'C'),
        '#', 'D'),
    '$', 'E'),
'^', 'F')

代码

store id,revenue ,profit
101,779183,281257
101,144829,838451
101,766465,757565
101,353297,261071
101,1615461,275760
101,246731,949229
101,951518,301016
101,444669,430583

import pandas as pd import seaborn as sns dummies = pd.read_csv('1.csv') dummies.sort_values(by=['revenue'], inplace=True) fea = dummies[['storeid']] lab = dummies[['revenue']] param = 'revenue' qv1 = lab[param].quantile(0.25) qv2 = lab[param].quantile(0.5) qv3 = lab[param].quantile(0.75) qv_limit = 1.5 * (qv3 - qv1) un_outliers_mask = (lab[param] > qv3 + qv_limit) | (lab[param] < qv1 - qv_limit) un_outliers_data = lab[param][un_outliers_mask] un_outliers_name = fea[un_outliers_mask] un_outliers_data #41 54437 # 44 89269 # 40 1942989 # 6 1951518 dummies.boxplot(by='storeid', column=['revenue'], grid=False) 输出的异常值越来越高,但是在图中仅显示更高的值

我的图只显示较高的离群值

enter image description here

1 个答案:

答案 0 :(得分:0)

un_outliers_data具有全局离群值,即您正在考虑来自dummies数据帧的完整数据的均值。但是您的箱形图通过storeid过滤数据,然后计算该数据子集的中位数,百分位数等。

如果您只是执行dummies['revenue'].plot(kind='box')

,您将看到所需的异常值(un_outliers_data)。

示例: 考虑下面的小型数据集:

store id,revenue 101, 10 102, 190 103, 200 104, 210 105, 300 应该清楚的是,收入= 10和300是离群值,但是如果分别查看商店ID 101和105的数据,则它们不是离群值。