Boxplot: извлеките выбросы и пометьте их как «0» или «1» - PullRequest
0 голосов
/ 28 января 2019

Я пытаюсь извлечь выбросы из моего набора данных и соответствующим образом пометить их.

Образцы данных

     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 голосов
/ 28 января 2019

Предполагая, что вы используете 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как вы и просили, используйте метод dataframe quantile () 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
...