【问题标题】:Why my lower outliers are not showing in Box plot为什么我的较低异常值未显示在箱线图中
【发布时间】:2020-06-09 04:34:22
【问题描述】:

数据集

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)

un_outliers_data 输出的异常值越来越高,但在图中只显示较高

我的图表只显示较高的异常值

【问题讨论】:

  • 数据不足,无法重现您的结果。

标签: pandas matplotlib seaborn


【解决方案1】:

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 的数据,它们并不是异常值。

【讨论】:

    猜你喜欢
    • 2020-05-04
    • 2014-08-23
    • 1970-01-01
    • 2020-12-30
    • 2021-11-06
    • 2020-08-27
    • 2021-01-14
    • 1970-01-01
    • 2023-04-10
    相关资源
    最近更新 更多