Функция выбросов в Python - PullRequest
1 голос
/ 09 апреля 2020

Я сделал функцию, чтобы посмотреть на выбросы с помощью коробочного графика, но я не могу удалить их из набора данных. Кто-нибудь знает, как изменить функцию, чтобы я получил весь кадр данных без выбросов? Теперь я просто получил один столбец. Я надеюсь, вы меня понимаете.

def outliers(variable):
    '''Funktion um die Zahl der mathematisch definierten Ausreißer zu analysieren. Es werden die Features mit und ohne Ausreißer angezeigt'''
    # Calculate 1st, 3rd quartiles and iqr.
    global filtered
    q1, q3 = variable.quantile(0.25), variable.quantile(0.75)
    iqr = q3 - q1

    # Berechne den unteren Zaun und den oberen Zaun der Ausreißer
    # Jeder Wert unter l_fence und größer u_fence werden als Ausreißer analysiert.
    l_fence, u_fence = q1 - 1.5*iqr , q3 + 1.5*iqr   

    # Beobachtungen der Ausreißer
    outliers = variable[(variable<l_fence) | (variable>u_fence)]
    print('Total Outliers of', variable.name,':', outliers.count())

    # Hier werden die beobachteten Ausreißer gelöscht
    filtered = variable.drop(outliers.index, axis = 0)

    # Subplot erstellen
    out_variables = [variable, filtered]
    out_titles = [' Verteilung mit Ausreißer', ' Verteilung ohne Ausreißer']
    title_size = 10
    font_size = 8
    plt.figure(figsize = (20, 5))
    for ax, outlier, title in zip(range(1,3), out_variables, out_titles):
        plt.subplot(2, 1, ax)
        plt.subplots_adjust(bottom=0.2, right=0.8, top=0.9, hspace=.5)
        sns.boxplot(outlier).set_title('%s' %outlier.name + title, fontsize = title_size)
        plt.xticks(fontsize = font_size)
        plt.xlabel('%s' %outlier.name, fontsize = font_size)

´´´
´´´´
outliers(variable=daten["Alter"])
´´´´

1 Ответ

1 голос
/ 09 апреля 2020

Если вы хотите удалить элементы из вектора (то есть столбца вашего набора данных) или из набора данных, лучший способ - использовать маску.

import numpy as np
...
outliers_idx = np.where((variable<l_fence) | (variable>u_fence))[0]
outliers = variable[outliers_idx]
mask = np.ones(variable.shape[0], dtpye=bool)
mask[outliers_idx]=False
data = variable[mask]

Таким образом outliers содержит значения, которые соответствуют вашему состоянию, data - оставшаяся часть.

Надеюсь, это поможет вам.

...