Vrijednosti koje nedostaju u znanosti o podacima nastaju kada promatranje nedostaje u stupcu okvira podataka ili ako umjesto numeričke vrijednosti sadrži vrijednost znaka. Vrijednosti koje nedostaju moraju se ispustiti ili zamijeniti kako bi se iz podataka izvukao točan zaključak.
U ovom uputstvu naučit ćemo kako se nositi s nedostajućim vrijednostima pomoću biblioteke dplyr. dplyr knjižnica dio je ekosustava za realizaciju analize podataka.
U ovom ćete tutorijalu naučiti
- mutirati()
- Izuzmi vrijednosti koje nedostaju (NA)
- Umetnite vrijednosti koje nedostaju (NA) s prosjekom i medijanom
mutirati()
Četvrti glagol u knjižnici dplyr koristan je za stvaranje nove varijable ili promjenu vrijednosti postojeće varijable.
Nastavit ćemo u dva dijela. Naučit ćemo kako:
- izuzeti vrijednosti koje nedostaju iz okvira podataka
- vrijednosti koje nedostaju pripisuju srednjoj i srednjoj vrijednosti
Glagol mutate () vrlo je jednostavan za upotrebu. Možemo stvoriti novu varijablu slijedeći ovu sintaksu:
mutate(df, name_variable_1 = condition,… )arguments:-df: Data frame used to create a new variable-name_variable_1: Name and the formula to create the new variable-… : No limit constraint. Possibility to create more than one variable inside mutate()
Izuzmi vrijednosti koje nedostaju (NA)
Na.omit () metoda iz biblioteke dplyr jednostavan je način za isključivanje opažanja koje nedostaje. Ispuštanje svih NA iz podataka jednostavno je, ali ne znači da je to najelegantnije rješenje. Tijekom analize pametno je koristiti razne metode za rješavanje nedostajućih vrijednosti
Za rješavanje problema nedostajućih opažanja poslužit ćemo se titanskim skupom podataka. U ovom skupu podataka imamo pristup informacijama o putnicima na brodu tijekom tragedije. Ovaj skup podataka sadrži mnogo NA o kojima treba voditi računa.
Prenijet ćemo csv datoteku s interneta, a zatim provjeriti koji stupci imaju NA. Da bismo vratili stupce s podacima koji nedostaju, možemo se poslužiti sljedećim kodom:
Učitajmo podatke i provjerimo podatke koji nedostaju.
PATH <- "https://raw.githubusercontent.com/guru99-edu/R-Programming/master/test.csv"df_titanic <- read.csv(PATH, sep = ",")# Return the column names containing missing observationslist_na <- colnames(df_titanic)[ apply(df_titanic, 2, anyNA) ]list_na
Izlaz:
## [1] "age" "fare"
Ovdje,
colnames(df_titanic)[apply(df_titanic, 2, anyNA)]
Daje ime stupaca koji nemaju podatke.
Vrijednosti stupaca i cijena nemaju vrijednosti.
Možemo ih ispustiti pomoću na.omit ().
library(dplyr)# Exclude the missing observationsdf_titanic_drop <-df_titanic %>%na.omit()dim(df_titanic_drop)
Izlaz:
## [1] 1045 13
Novi skup podataka sadrži 1045 redaka u usporedbi s 1309 s izvornim skupom podataka.
Imputiraj nedostajuće podatke s prosjekom i medijanom
Vrijednosti koje nedostaju mogli bismo imputirati (popuniti) medijanom ili srednjom vrijednosti. Dobra je praksa stvoriti dvije odvojene varijable za srednju vrijednost i medijan. Jednom stvorene vrijednosti možemo zamijeniti novoformiranim varijablama.
Upotrijebit ćemo metodu apply za izračunavanje srednje vrijednosti stupca s NA. Pogledajmo primjer
Korak 1) Ranije u vodiču spremili smo ime stupaca s vrijednostima koje nedostaju na popis nazvan list_na. Koristit ćemo ovaj popis
Korak 2) Sada moramo izračunati srednju vrijednost s argumentom na.rm = TRUE. Ovaj je argument obvezan jer u stupcima nedostaju podaci, a to govori R-u da ih ignorira.
# Create meanaverage_missing <- apply(df_titanic[,colnames(df_titanic) %in% list_na],2,mean,na.rm = TRUE)average_missing
Objašnjenje koda:
Prosljeđujemo 4 argumenta u metodi apply.
- df: df_titanic [, colnames (df_titanic)% u% list_na]. Ovaj će kôd vratiti ime stupaca iz objekta list_na (tj. "Dob" i "cijena")
- 2: Izračunajte funkciju na stupcima
- mean: Izračunati srednju vrijednost
- na.rm = TRUE: Zanemarite vrijednosti koje nedostaju
Izlaz:
## age fare## 29.88113 33.29548
Uspješno smo stvorili srednju vrijednost stupaca koji sadrže promatranja koja nedostaju. Te će se dvije vrijednosti koristiti za zamjenu opažanja koja nedostaju.
Korak 3) Zamijenite NA vrijednosti
Mutacija glagola iz biblioteke dplyr korisna je u stvaranju nove varijable. Ne želimo nužno mijenjati izvorni stupac kako bismo mogli stvoriti novu varijablu bez NA. mutate je jednostavan za upotrebu, mi samo odabiremo ime varijable i definiramo kako stvoriti ovu varijablu. Evo kompletnog koda
# Create a new variable with the mean and mediandf_titanic_replace <- df_titanic %>%mutate(replace_mean_age = ifelse(is.na(age), average_missing[1], age),replace_mean_fare = ifelse(is.na(fare), average_missing[2], fare))
Objašnjenje koda:
Izrađujemo dvije varijable, replace_mean_age i replace_mean_fare kako slijedi:
- replace_mean_age = ifelse (is.na (dob), prosječno_ nedostaje [1], dob)
- replace_mean_fare = ifelse (is.na (cijena prijevoza), prosječno_ne nedostaje [2], cijena prijevoza)
Ako starosti stupca nedostaju vrijednosti, zamijenite prvim elementom prosječne_minisanja (srednja dob), inače zadržite izvorne vrijednosti. Ista logika za kartu
sum(is.na(df_titanic_replace$age))
Izlaz:
## [1] 263
Izvršite zamjenu
sum(is.na(df_titanic_replace$replace_mean_age))
Izlaz:
## [1] 0
Izvornoj dobi stupca nedostaju 263 vrijednosti, dok ih je novostvorena varijabla zamijenila sredinom varijable dob.
Korak 4) Opažanja koja nedostaju možemo zamijeniti i medijanom.
median_missing <- apply(df_titanic[,colnames(df_titanic) %in% list_na],2,median,na.rm = TRUE)df_titanic_replace <- df_titanic %>%mutate(replace_median_age = ifelse(is.na(age), median_missing[1], age),replace_median_fare = ifelse(is.na(fare), median_missing[2], fare))head(df_titanic_replace)
Izlaz:
Korak 5) Veliki skup podataka može sadržavati puno vrijednosti koje nedostaju, a gornja metoda može biti glomazna. Sve gore navedene korake možemo izvršiti u jednom retku koda metodom sapply (). Iako ne bismo znali doline srednje i srednje vrijednosti.
sapply ne stvara podatkovni okvir, tako da funkciju sapply () možemo omotati unutar data.frame () kako bismo stvorili objekt okvira podataka.
# Quick code to replace missing values with the meandf_titanic_impute_mean < -data.frame(sapply(df_titanic,function(x) ifelse(is.na(x),mean(x, na.rm = TRUE),x)))
Sažetak
Imamo tri metode za rješavanje nedostajućih vrijednosti:
- Izuzmite sva opažanja koja nedostaju
- Pripisujte srednju vrijednost
- Pripisujte medijan
Sljedeća tablica sažima kako ukloniti sva opažanja koja nedostaju
Knjižnica | Cilj | Kodirati |
---|---|---|
baza | Navedi opažanja koja nedostaju |
colnames(df)[apply(df, 2, anyNA)] |
dplyr | Uklonite sve vrijednosti koje nedostaju |
na.omit(df) |
Pripisivanje srednje ili srednje vrijednosti može se izvršiti na dva načina
- Koristeći apply
- Koristeći sapply
Metoda | Pojedinosti | Prednosti | Mane |
---|---|---|---|
Korak po korak s prijavom | Provjerite stupce koji nedostaju, izračunajte srednju / medijanu, pohranite vrijednost, zamijenite mutate () | Znate vrijednost sredstva / medijana | Više vremena za izvršenje. Može biti sporo s velikim skupom podataka |
Brzi način sa saply | Upotrijebite sapply () i data.frame () za automatsko pretraživanje i zamjenu nedostajućih vrijednosti srednjom / medijanom | Kratki kod i brzo | Ne znam vrijednosti imputacije |