Datu zinātnē trūkstošās vērtības rodas, ja datu rāmja kolonnā trūkst novērojuma vai ciparu vērtības vietā ir rakstzīmes vērtība. Trūkstošās vērtības ir jānomet vai jānomaina, lai no datiem izdarītu pareizu secinājumu.
Šajā apmācībā mēs uzzināsim, kā rīkoties ar trūkstošajām vērtībām ar dplyr bibliotēku. dplyr bibliotēka ir daļa no ekosistēmas, lai realizētu datu analīzi.
Šajā apmācībā jūs uzzināsiet
- mutēt ()
- Izslēgt trūkstošās vērtības (NA)
- Piešķirt trūkstošās vērtības (NA) ar vidējo un vidējo
mutēt ()
Ceturtais darbības vārds dplyr bibliotēkā ir noderīgs, lai izveidotu jaunu mainīgo vai mainītu esošā mainīgā vērtību.
Mēs turpināsim divās daļās. Mēs uzzināsim, kā:
- izslēgt trūkstošās vērtības no datu rāmja
- aprēķināt trūkstošās vērtības ar vidējo un vidējo
Darbības vārdu mutate () ir ļoti viegli izmantot. Pēc šīs sintakses mēs varam izveidot jaunu mainīgo:
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()
Izslēgt trūkstošās vērtības (NA)
Na.omit () metode no dplyr bibliotēkas ir vienkāršs veids, kā izslēgt trūkstošo novērojumu. Izņemt visus NA no datiem ir viegli, taču tas nenozīmē, ka tas ir pats elegantākais risinājums. Analīzes laikā ir prātīgi izmantot dažādas metodes, lai risinātu trūkstošās vērtības
Lai risinātu trūkstošo novērojumu problēmu, mēs izmantosim titānisko datu kopu. Šajā datu kopā mums ir pieejama informācija par pasažieriem, kas atrodas uz kuģa traģēdijas laikā. Šajā datu kopā ir daudz NA, par kuriem jārūpējas.
Mēs augšupielādēsim csv failu no interneta un pēc tam pārbaudīsim, kurās kolonnās ir NA. Lai atgrieztu kolonnas ar trūkstošiem datiem, mēs varam izmantot šādu kodu:
Augšupielādēsim datus un pārbaudīsim trūkstošos datus.
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
Izeja:
## [1] "age" "fare"
Šeit,
colnames(df_titanic)[apply(df_titanic, 2, anyNA)]
Piešķir to kolonnu nosaukumu, kurām nav datu.
Kolonnām vecuma un cenas trūkst vērtību.
Mēs tos varam nomest ar na.omit ().
library(dplyr)# Exclude the missing observationsdf_titanic_drop <-df_titanic %>%na.omit()dim(df_titanic_drop)
Izeja:
## [1] 1045 13
Jaunajā datu kopā ir 1045 rindas salīdzinājumā ar 1309 ar sākotnējo datu kopu.
Piešķirt trūkstošos datus ar vidējo un vidējo
Mēs varētu arī uzskaitīt (aizpildīt) trūkstošās vērtības ar mediānu vai vidējo. Laba prakse ir izveidot divus atsevišķus mainīgos vidējam un vidējam. Pēc izveides trūkstošās vērtības mēs varam aizstāt ar jaunizveidotajiem mainīgajiem.
Mēs izmantosim piemērošanas metodi, lai aprēķinātu kolonnas vidējo vērtību ar NA. Apskatīsim piemēru
1. solis. Iepriekš apmācībā mēs saglabājām kolonnu nosaukumu un trūkstošās vērtības sarakstā, ko sauc par list_na. Mēs izmantosim šo sarakstu
2. solis. Tagad mums jāaprēķina vidējā vērtība ar argumentu na.rm = TRUE. Šis arguments ir obligāts, jo kolonnās trūkst datu, un tas liek R tos ignorēt.
# Create meanaverage_missing <- apply(df_titanic[,colnames(df_titanic) %in% list_na],2,mean,na.rm = TRUE)average_missing
Koda skaidrojums:
Lietošanas metodē mēs nododam 4 argumentus.
- df: df_titanic [, colnames (df_titanic)%% list_na]. Šis kods atgriezīs kolonnu nosaukumu no objekta list_na (ti, "vecums" un "cena")
- 2: Aprēķiniet kolonnu funkciju
- vidējais: Aprēķiniet vidējo
- na.rm = TRUE: ignorējiet trūkstošās vērtības
Izeja:
## age fare## 29.88113 33.29548
Mēs veiksmīgi izveidojām to kolonnu vidējo līmeni, kurās ir trūkstošie novērojumi. Šīs divas vērtības tiks izmantotas, lai aizstātu trūkstošos novērojumus.
3. solis. Nomainiet NA vērtības
Darbības vārds mutate no dplyr bibliotēkas ir noderīgs, lai izveidotu jaunu mainīgo. Mums nav obligāti jāmaina sākotnējā kolonna, lai mēs varētu izveidot jaunu mainīgo bez NA. mutate ir viegli lietojams, mēs vienkārši izvēlamies mainīgā nosaukumu un definējam, kā izveidot šo mainīgo. Šeit ir pilns kods
# 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))
Koda skaidrojums:
Mēs izveidojam divus mainīgos: aizstāt_nozīmē_gadu un aizstāt_nozīmē_cenu šādi:
- aizstāt_nozīmē_gads = ifelse (is.na (vecums), vidējais_trūkstošs [1], vecums)
- aizstāt_mean_fare = ifelse (is.na (cena), vidējā_izlaidīga [2], cena)
Ja kolonnas vecumam nav vērtību, aizstājiet to ar pirmo elementu average_missing (vidējais vecums), citādi saglabājiet sākotnējās vērtības. Tāda pati loģika par maksu
sum(is.na(df_titanic_replace$age))
Izeja:
## [1] 263
Veiciet nomaiņu
sum(is.na(df_titanic_replace$replace_mean_age))
Izeja:
## [1] 0
Sākotnējā kolonnas vecumā ir 263 trūkstošas vērtības, savukārt jaunizveidotais mainīgais ir aizstājis tās ar mainīgā vecuma vidējo vērtību.
4. solis. Trūkstošos novērojumus varam aizstāt arī ar mediānu.
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)
Izeja:
5. solis . Lielai datu kopai varētu būt daudz trūkstošo vērtību, un iepriekš minētā metode varētu būt apgrūtinoša. Visas iepriekš minētās darbības mēs varam izpildīt vienā koda rindā, izmantojot metodi sapply (). Lai gan mēs nezinātu vidējās un vidējās vērtības.
sapply neveido datu rāmi, tāpēc mēs varam ietīt sapply () funkciju data.frame (), lai izveidotu datu rāmja objektu.
# 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)))
Kopsavilkums
Mums ir trīs metodes, kā tikt galā ar trūkstošajām vērtībām:
- Izslēdziet visus trūkstošos novērojumus
- Piešķirt ar vidējo
- Ieskaite ar mediānu
Šajā tabulā ir apkopots, kā noņemt visus trūkstošos novērojumus
Bibliotēka | Mērķis | Kods |
---|---|---|
bāze | Uzskaitiet trūkstošos novērojumus |
colnames(df)[apply(df, 2, anyNA)] |
dplyr | Noņemiet visas trūkstošās vērtības |
na.omit(df) |
Imputāciju ar vidējo vai vidējo var veikt divos veidos
- Izmantojot pieteikties
- Izmantojot sapply
Metode | Sīkāka informācija | Priekšrocības | Trūkumi |
---|---|---|---|
Soli pa solim ar pieteikumu | Pārbaudiet kolonnas ar trūkstošo, aprēķiniet vidējo / vidējo, saglabājiet vērtību, aizstājiet ar mutate () | Jūs zināt vidējā / vidējā vērtību | Vairāk izpildes laika. Var būt lēns ar lielu datu kopu |
Ātri ar sapply | Izmantojiet sapply () un data.frame (), lai automātiski meklētu un aizstātu trūkstošās vērtības ar vidējo / vidējo | Īss kods un ātri | Nezinu imputācijas vērtības |