Як видалити викиди в python
Викид — це спостереження, яке аномально віддалено від інших значень у наборі даних. Викиди можуть бути проблематичними, оскільки вони можуть вплинути на результати аналізу.
Цей підручник пояснює, як визначити та видалити викиди в Python.
Як визначити викиди в Python
Перш ніж ви зможете видалити викиди, ви повинні вирішити, що ви вважаєте викидом. Є два поширені способи зробити це:
1. Використовуйте інтерквартильний діапазон.
Інтерквартильний діапазон (IQR) — це різниця між 75-м процентилем (Q3) і 25-м процентилем (Q1) у наборі даних. Він вимірює розподіл середніх 50% значень.
Ви можете визначити спостереження як викид, якщо воно в 1,5 рази перевищує інтерквартильний діапазон вище третього квартиля (Q3) або в 1,5 рази перевищує інтерквартильний діапазон нижче першого квартиля (Q1).
Викиди = Спостереження > Q3 + 1,5*IQR або Q1 – 1,5*IQR
2. Використовуйте z-оцінки.
Z-показник показує, скільки стандартних відхилень дане значення має від середнього. Ми використовуємо наступну формулу для розрахунку z-показника:
z = (X – μ) / σ
золото:
- X – це одне значення необроблених даних
- μ – середнє значення сукупності
- σ — стандартне відхилення сукупності
Ви можете визначити спостереження як викид, якщо його z-показник менший за -3 або більший за 3.
Викиди = спостереження з z-показниками > 3 або < -3
Як видалити викиди в Python
Після того, як ви визначитеся, що ви вважаєте викидом, ви зможете визначити та видалити їх із набору даних. Щоб проілюструвати, як це зробити, ми використаємо наступні pandas DataFrame:
import numpy as np import pandas as pd import scipy.stats as stats #create dataframe with three columns 'A', 'B', 'C' np.random.seed(10) data = pd.DataFrame(np.random.randint(0, 10, size=(100, 3)), columns=['A', 'B', 'C']) #view first 10 rows data[:10] ABC 0 13.315865 7.152790 -15.454003 1 -0.083838 6.213360 -7.200856 2 2.655116 1.085485 0.042914 3 -1.746002 4.330262 12.030374 4 -9.650657 10.282741 2.286301 5 4.451376 -11.366022 1.351369 6 14.845370 -10.798049 -19.777283 7 -17.433723 2.660702 23.849673 8 11.236913 16.726222 0.991492 9 13.979964 -2.712480 6.132042
Потім ми можемо визначити та видалити викиди за допомогою методу z-показника або методу інтерквартильного діапазону:
Метод Z-оцінки:
#find absolute value of z-score for each observation z = np.abs(stats.zscore(data)) #only keep rows in dataframe with all z-scores less than absolute value of 3 data_clean = data[(z<3).all(axis=1)] #find how many rows are left in the dataframe data_clean.shape (99.3)
Метод інтерквартильного діапазону:
#find Q1, Q3, and interquartile range for each column Q1 = data.quantile(q=.25) Q3 = data.quantile(q=.75) IQR = data.apply(stats.iqr) #only keep rows in dataframe that have values within 1.5*IQR of Q1 and Q3 data_clean = data[~((data < (Q1-1.5*IQR)) | (data > (Q3+1.5*IQR))).any(axis=1)] #find how many rows are left in the dataframe data_clean.shape (89.3)
Ми бачимо, що метод оцінки za виявив і вилучив одне спостереження як викид, тоді як метод інтерквартильного діапазону виявив і вилучив загалом 11 спостережень як викиди.
Коли видаляти викиди
Якщо у ваших даних присутні один або кілька викидів, ви повинні спочатку переконатися, що вони не є результатом помилки введення даних. Іноді особа просто вводить неправильне значення даних під час збереження даних.
Якщо викид виявляється результатом помилки введення даних, ви можете вирішити призначити йому нове значення, наприклад середнє або медіана набору даних.
Якщо значення дійсно викидається, ви можете видалити його, якщо воно матиме значний вплив на загальний аналіз. Просто не забудьте зазначити у своєму остаточному звіті чи аналізі, що ви усунули викид.
Додаткові ресурси
Якщо ви працюєте з кількома змінними одночасно, ви можете використовувати відстань Махаланобіса для виявлення викидів.