Manglende verdier innen datavitenskap oppstår når en observasjon mangler i en kolonne i en dataramme eller inneholder en tegnverdi i stedet for en numerisk verdi. Manglende verdier må slettes eller erstattes for å trekke riktig konklusjon fra dataene.
I denne opplæringen vil vi lære å håndtere manglende verdier med dplyr-biblioteket. dplyr-biblioteket er en del av et økosystem for å realisere en dataanalyse.
I denne veiledningen vil du lære
- mutere ()
- Ekskluder manglende verdier (NA)
- Impute Missing Values (NA) med gjennomsnitt og median
mutere ()
Det fjerde verbet i dplyr-biblioteket er nyttig for å opprette ny variabel eller endre verdiene til en eksisterende variabel.
Vi vil fortsette i to deler. Vi vil lære hvordan vi:
- ekskluder manglende verdier fra en dataramme
- tilskrive manglende verdier med gjennomsnitt og median
Verbet muterer () er veldig enkelt å bruke. Vi kan opprette en ny variabel etter denne syntaksen:
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()
Ekskluder manglende verdier (NA)
Metoden na.omit () fra dplyr-biblioteket er en enkel måte å ekskludere manglende observasjon. Å slippe all NA fra dataene er enkelt, men det betyr ikke at det er den mest elegante løsningen. Under analysen er det lurt å bruke forskjellige metoder for å håndtere manglende verdier
For å takle problemet med manglende observasjoner, vil vi bruke det titaniske datasettet. I dette datasettet har vi tilgang til informasjonen om passasjerene om bord under tragedien. Dette datasettet har mange NA som må tas vare på.
Vi vil laste opp csv-filen fra internett og deretter sjekke hvilke kolonner som har NA. For å returnere kolonnene med manglende data, kan vi bruke følgende kode:
La oss laste opp dataene og verifisere de manglende dataene.
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
Produksjon:
## [1] "age" "fare"
Her,
colnames(df_titanic)[apply(df_titanic, 2, anyNA)]
Gir navnet på kolonnene som ikke har data.
Kolonnene alder og fare har manglende verdier.
Vi kan slippe dem med na.omit ().
library(dplyr)# Exclude the missing observationsdf_titanic_drop <-df_titanic %>%na.omit()dim(df_titanic_drop)
Produksjon:
## [1] 1045 13
Det nye datasettet inneholder 1045 rader sammenlignet med 1309 med det opprinnelige datasettet.
Impute Manglende data med gjennomsnitt og median
Vi kan også tilregne (fylle ut) manglende verdier med medianen eller gjennomsnittet. En god praksis er å lage to separate variabler for gjennomsnittet og medianen. Når de er opprettet, kan vi erstatte de manglende verdiene med de nyopprettede variablene.
Vi vil bruke anvendelsesmetoden for å beregne gjennomsnittet av kolonnen med NA. La oss se et eksempel
Trinn 1) Tidligere i opplæringen lagret vi kolonnenavnet med de manglende verdiene i listen kalt list_na. Vi vil bruke denne listen
Trinn 2) Nå må vi beregne middelverdien med argumentet na.rm = SANT. Dette argumentet er obligatorisk fordi kolonnene mangler data, og dette forteller R å ignorere dem.
# Create meanaverage_missing <- apply(df_titanic[,colnames(df_titanic) %in% list_na],2,mean,na.rm = TRUE)average_missing
Kode Forklaring:
Vi gir 4 argumenter i anvendingsmetoden.
- df: df_titanic [, kolonnenavn (df_titanic)% i% list_na]. Denne koden vil returnere kolonnenavnet fra list_na-objektet (dvs. "alder" og "fare")
- 2: Beregn funksjonen på kolonnene
- mener: Beregn gjennomsnittet
- na.rm = SANT: Ignorer de manglende verdiene
Produksjon:
## age fare## 29.88113 33.29548
Vi har opprettet gjennomsnittet av kolonnene som inneholder manglende observasjoner. Disse to verdiene vil bli brukt til å erstatte de manglende observasjonene.
Trinn 3) Erstatt NA-verdiene
Verbmuteringen fra dplyr-biblioteket er nyttig for å lage en ny variabel. Vi ønsker ikke nødvendigvis å endre den originale kolonnen, slik at vi kan opprette en ny variabel uten NA. mutering er enkel å bruke, vi velger bare et variabelnavn og definerer hvordan vi skal lage denne variabelen. Her er den fullstendige koden
# 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))
Kode Forklaring:
Vi oppretter to variabler, erstatte_mean_age og erstatte_mean_fare som følger:
- erstatt_mean_alder = ifelse (is.na (alder), gjennomsnittlig_gitt [1], alder)
- erstatte_mean_fare = ifelse (is.na (fare), gjennomsnittlig_missing [2], pris)
Hvis kolonnealderen mangler verdier, erstatter du den med det første elementet gjennomsnittlig_gitt (middelalder), ellers beholder du de opprinnelige verdiene. Samme logikk for billettpris
sum(is.na(df_titanic_replace$age))
Produksjon:
## [1] 263
Utfør erstatningen
sum(is.na(df_titanic_replace$replace_mean_age))
Produksjon:
## [1] 0
Den opprinnelige kolonnealderen har 263 manglende verdier, mens den nyopprettede variabelen har erstattet dem med gjennomsnittet av variabelalderen.
Trinn 4) Vi kan også erstatte de manglende observasjonene med medianen.
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)
Produksjon:
Trinn 5) Et stort datasett kan ha mange manglende verdier, og metoden ovenfor kan være tungvint. Vi kan utføre alle trinnene ovenfor i en kodelinje ved hjelp av sapply () -metoden. Selv om vi ikke ville vite verdiene til gjennomsnitt og median.
sapply oppretter ikke en dataramme, så vi kan vikle sapply () -funksjonen i data.frame () for å opprette et datarammeobjekt.
# 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)))
Sammendrag
Vi har tre metoder for å håndtere manglende verdier:
- Ekskluder alle manglende observasjoner
- Beregn med gjennomsnittet
- Beregn medianen
Tabellen nedenfor oppsummerer hvordan du fjerner alle manglende observasjoner
Bibliotek | Objektiv | Kode |
---|---|---|
utgangspunkt | Oppgi manglende observasjoner |
colnames(df)[apply(df, 2, anyNA)] |
dplyr | Fjern alle manglende verdier |
na.omit(df) |
Imputasjon med gjennomsnitt eller median kan gjøres på to måter
- Bruke gjelder
- Bruke sapply
Metode | Detaljer | Fordeler | Ulemper |
---|---|---|---|
Steg for steg med gjelder | Sjekk kolonner med manglende, beregne gjennomsnitt / median, lagre verdien, erstatt med mutere () | Du vet verdien av middel / median | Mer utførelsestid. Kan være tregt med stort datasett |
Rask måte med sapply | Bruk sapply () og data.frame () for automatisk å søke og erstatte manglende verdier med gjennomsnitt / median | Kort kode og rask | Kjenner ikke tilskrivningsverdiene |