Eliminacja wartości pustych występujących w danych
Istnieje kilka strategii eliminacji wartości pustych występujących w danych. Popatrzmy na przykład:
Country | Age | Salary |
---|---|---|
France | 44.0 | 72000.0 |
Spain | 27.0 | 48000.0 |
Germany | 30.0 | 54000.0 |
Spain | 38.0 | 61000.0 |
Germany | 40.0 | |
France | 35.0 | 58000.0 |
Spain | 52000.0 |
Jedna ze strategii to usunięcie wierszy w których występują wartości puste. Strategia dosyć słaba, bo może doprowadzić do usunięcia danych, które mogą mieć znaczący wpływ na oczekiwany.
Druga strategia to zastąpienie brakujących wartości wartościami niepustymi. Tylko skąd te niepuste wartości wziąć. Można spróbować wywnioskować je na podstawie wartości danej cechy w pozostałych wierszach naszych danych. Spotykane najczęściej sposoby, to:
- obliczenie średniej artymetycznej niepustych wartości danej cechy, lub:
- wykorzystanie mediany
- wartości minimalnej lub maksymalnej
Przykład w Python
Eliminację wartości pustych można przeprowadzić wykorzystując standardowe funkcje dostępne w bibliotece pandas lub numPy, _ale zdecydowanie lepiej wykorzystać funkcje dostepne w pakiecie _scikit-learn. W pakiecie preprocessing _znajduje się definicja klasy _Inputer, która pozwala na bardzo proste zastosowanie strategii opisanych powyżej:
from sklearn.preprocessing import Imputer
imputer = Imputer(missing_values = 'NaN', strategy = 'mean', axis = 0)
imputer = imputer.fit(X[:, 1:3])
X[:, 1:3] = imputer.transform(X[:, 1:3])
parametr _strategy _przyjmuje wartości:
- mean
- median
- most_frequent
parametr _axis _może być równy:
- 0 - i wówczas wartości puste zamieniane są w kolumnach przekazanego obiektu
- 1 - i wówczas wartości puste zamieniane są w wierszach
Przykład w R
dataset$Age = ifelse(is.na(dataset$Age),
ave(dataset$Age, FUN = function(x) mean(x, na.rm = TRUE)),
dataset$Age)
dataset$Salary = ifelse(is.na(dataset$Salary),
ave(dataset$Salary , FUN = function(x) mean(x, na.rm = TRUE)),
dataset$Salary )