Оскільки я не бачив відповіді, яка стосується числових та нечислових атрибутів, ось відповідь на доповнення.
Можливо, ви захочете скинути залишків лише на числові атрибути (категоричні змінні навряд чи можуть бути переставниками).
Визначення функції
Я поширив пропозицію @ tanemaki для обробки даних, коли також є нечислові атрибути:
from scipy import stats
def drop_numerical_outliers(df, z_thresh=3):
# Constrains will contain `True` or `False` depending on if it is a value below the threshold.
constrains = df.select_dtypes(include=[np.number]) \
.apply(lambda x: np.abs(stats.zscore(x)) < z_thresh, reduce=False) \
.all(axis=1)
# Drop (inplace) values set to be rejected
df.drop(df.index[~constrains], inplace=True)
Використання
drop_numerical_outliers(df)
Приклад
Уявіть набір даних df
із деякими значеннями щодо будинків: алея, контур землі, ціна продажу, ... Наприклад: Документація даних
По-перше, ви хочете візуалізувати дані на графіку розкидання (з z-оцінка Thresh = 3):
# Plot data before dropping those greater than z-score 3.
# The scatterAreaVsPrice function's definition has been removed for readability's sake.
scatterAreaVsPrice(df)
# Drop the outliers on every attributes
drop_numerical_outliers(train_df)
# Plot the result. All outliers were dropped. Note that the red points are not
# the same outliers from the first plot, but the new computed outliers based on the new data-frame.
scatterAreaVsPrice(train_df)