Jak usunąć wartości odstające w pythonie
Wartość odstająca to obserwacja, która jest nienormalnie odległa od innych wartości w zbiorze danych. Wartości odstające mogą być problematyczne, ponieważ mogą wpływać na wyniki analizy.
W tym samouczku wyjaśniono, jak identyfikować i usuwać wartości odstające w Pythonie.
Jak zidentyfikować wartości odstające w Pythonie
Zanim będziesz mógł usunąć wartości odstające, musisz najpierw zdecydować, co uważasz za wartość odstającą. Można to zrobić na dwa typowe sposoby:
1. Skorzystaj z rozstępu międzykwartylowego.
Rozstęp międzykwartylowy (IQR) to różnica między 75. percentylem (Q3) a 25. percentylem (Q1) w zbiorze danych. Mierzy rozkład średnich 50% wartości.
Można zdefiniować obserwację jako wartość odstającą, jeśli jest 1,5-krotnością rozstępu międzykwartylowego powyżej trzeciego kwartyla (Q3) lub 1,5-krotności rozstępu międzykwartylowego poniżej pierwszego kwartyla (Q1).
Wartości odstające = obserwacje > Q3 + 1,5*IQR lub Q1 – 1,5*IQR
2. Użyj wyników Z.
Wynik z informuje, o ile odchyleń standardowych dana wartość znajduje się od średniej. Do obliczenia wskaźnika Z używamy następującego wzoru:
z = (X – μ) / σ
Złoto:
- X to pojedyncza surowa wartość danych
- μ to średnia populacji
- σ jest odchyleniem standardowym populacji
Można zdefiniować obserwację jako wartość odstającą, jeśli jej wynik z jest mniejszy niż -3 lub większy niż 3.
Wartości odstające = obserwacje z wynikami Z > 3 lub < -3
Jak usunąć wartości odstające w Pythonie
Kiedy już zdecydujesz, co uważasz za wartość odstającą, możesz zidentyfikować i usunąć je ze zbioru danych. Aby zilustrować, jak to zrobić, użyjemy następującej ramki danych pand:
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
Następnie możemy zdefiniować i usunąć wartości odstające, korzystając z metody z-score lub metody rozstępów międzykwartylowych:
Metoda Z-score:
#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)
Metoda rozstępów międzykwartylowych:
#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)
Widzimy, że metoda za score zidentyfikowała i usunęła jedną obserwację jako wartość odstającą, podczas gdy metoda rozstępów międzykwartylowych zidentyfikowała i usunęła łącznie 11 obserwacji jako wartości odstające.
Kiedy usunąć wartości odstające
Jeśli w Twoich danych występuje co najmniej jedna wartość odstająca, musisz najpierw upewnić się, że nie jest ona wynikiem błędu we wprowadzaniu danych. Czasami osoba po prostu wprowadza niewłaściwą wartość danych podczas zapisywania danych.
Jeśli okaże się, że wartość odstająca wynika z błędu we wprowadzaniu danych, możesz zdecydować się na przypisanie jej nowej wartości, takiej jak średnia lub mediana zbioru danych.
Jeśli wartość rzeczywiście odbiega od normy, możesz ją usunąć, jeśli będzie miała znaczący wpływ na ogólną analizę. Pamiętaj tylko, aby wspomnieć w raporcie końcowym lub analizie, że usunąłeś wartość odstającą.
Dodatkowe zasoby
Jeśli pracujesz z wieloma zmiennymi jednocześnie, możesz użyć odległości Mahalanobisa do wykrycia wartości odstających.