箱线图:提取异常值并将其标记为“ 0”或“ 1”

时间:2019-01-28 06:48:16

标签: python loops boxplot

我正在尝试从数据集中提取离群值并相应地对其进行标记。

样本数据

     Doctor Name    Hospital Assigned         Region    Claims   Illness Claimed
1    Albert      Some hospital Center      R-1       20       Sepsis
2    Simon       Another hospital Center   R-2       21       Pneumonia
3    Alvin       ...                       ...       ...       ...
4    Robert
5    Benedict
6    Cruz

因此,我试图将Doctor中的每个Claimed中的某个Illness分组到某个Region中,并尝试在其中找到异常值。

Doctor Name    Hospital Assigned         Region    Claims   Illness Claimed is_outlier
1    Albert      Some hospital Center      R-1       20       Sepsis       1
2    Simon       Another hospital Center   R-2       21       Pneumonia    0
3    Alvin       ...                       ...       ...       ...
4    Robert
5    Benedict
6    Cruz

我可以在Power BI中执行此操作。但是,对于Python来说,它还很陌生,我似乎无法弄清楚。

这是我要实现的目标:

sample

算法如下:

Read data
Group data by Illness
    Group by Region
    get IQR based on Claims Count
    if claims count > than (Q3 + 1.5) * IQR
        then tag it as outlier = 1
    else
        not an outlier = 0
Export data

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

假设您使用pandas进行数据分析(应该这样做!),您可以使用pandas dataframe boxplot生成类似于您的图:

import pandas as pd
import numpy as np
df.boxplot(column=['b'], whis=[10, 90], vert=False, 
           flierprops=dict(markerfacecolor='g', marker='D'))

或者,如果您想按要求将它们标记为0,1,请使用数据框分位数()方法https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.quantile.html

df.assign(outlier=df[df>=df.quantile(.9)].any(axis=1)).astype(np.int8)
    a   b   outlier
0   1   1   0
1   2   10  0
2   3   100     1
3   4   100     1