проблема Замена выбросов медианой в python

avatar
Emmy_A
8 августа 2021 в 17:41
128
1
1
for col in ('DiabetesPedigreeFunction','Insulin'):
    Q1=df[col].quantile(0.25)
    Q3=df[col].quantile(0.75)

    IQR=Q3-Q1

    upper_limit= Q3+1.5*IQR
    lower_limit= Q1-1.5*IQR

    db_median= float(df[col].median())
    In_median= float(df[col].median())

    df[col]=np.where(df[col]>upper_limit,db_median,df[col])
    df[col]=np.where(df[col]>upper_limit,In_median,df[col])                                     

Однако код работает хорошо, используя boxplot для проверки... выбросы все еще присутствуют, а также используя .describe()... выбросы все еще отмечаются.

Любая помощь, пожалуйста

Источник

Ответы (1)

avatar
Emmy_A
8 августа 2021 в 19:54
0

введите описание изображения здесь После использования кода, опубликованного

>>> list_cols = ['DiabetesPedigreeFunction','Insulin']
>>> df[list_cols] = np.where(((df[list_cols] - df[list_cols].mean()) /     df[list_cols].std()).abs() >= 3, df[list_cols].median(), df[list_cols])

Результаты аналогичны моему предыдущему коду... просмотреть изображение

>>> df["DiabetesPedigreeFunction"].describe()
count    768.000000
mean       0.449800
std        0.279715
min        0.078000
25%        0.243750
50%        0.371750
75%        0.602000
max        1.461000
Name: DiabetesPedigreeFunction, dtype: float64
Emmy_A
9 августа 2021 в 17:46
0

ок... вот ссылка kaggle.com/uciml/pima-indians-diabetes-database

Emmy_A
9 августа 2021 в 17:48
0

Данные нуждались в очистке из-за того, что некоторые переменные были пронизаны нулями (0-ми). например, инсулин, ИМТ пациента не может быть нулевым, поэтому его пришлось заменить на Nan, а затем на среднее/медиану с помощью функции «.replace». пронизан выбросами.