Puuttuvat arvot datatieteessä syntyvät, kun havainto puuttuu datakehyksen sarakkeesta tai sisältää merkin arvon numeerisen arvon sijaan. Puuttuvat arvot on pudotettava tai korvattava, jotta tiedoista voidaan tehdä oikea johtopäätös.
Tässä opetusohjelmassa opitaan, miten puuttuvista arvoista voidaan puuttua dplyr-kirjastolla. dplyrin kirjasto on osa ekosysteemiä data-analyysin toteuttamiseksi.
Tässä opetusohjelmassa opit
- muuttua()
- Sulje pois puuttuvat arvot (NA)
- Vaikuta puuttuvat arvot (NA) keskiarvoon ja mediaaniin
muuttua()
Dplyr-kirjaston neljäs verbi auttaa luomaan uuden muuttujan tai muuttamaan olemassa olevan muuttujan arvoja.
Jatkamme kahdessa osassa. Opimme kuinka:
- poista puuttuvat arvot datakehyksestä
- laskea puuttuvat arvot keskiarvolla ja mediaanilla
Verbi mutate () on erittäin helppo käyttää. Voimme luoda uuden muuttujan tämän syntaksin mukaisesti:
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()
Sulje pois puuttuvat arvot (NA)
Na.omit () -menetelmä dplyrin kirjastosta on yksinkertainen tapa sulkea pois puuttuva havainto. Kaikkien NA-tietojen pudottaminen tiedoista on helppoa, mutta se ei tarkoita, että se on tyylikkäin ratkaisu. Analyysin aikana on viisasta käyttää erilaisia menetelmiä puuttuvien arvojen käsittelemiseksi
Puuttuvien havaintojen ongelman ratkaisemiseksi käytämme titaanista tietoaineistoa. Tässä tietojoukossa meillä on pääsy aluksella olevien matkustajien tietoihin tragedian aikana. Tässä tietojoukossa on monia NA: ta, jotka on hoidettava.
Lähetämme csv-tiedoston Internetistä ja tarkistamme sitten sarakkeet, joissa on NA. Palataksemme sarakkeet puuttuvilla tiedoilla voimme käyttää seuraavaa koodia:
Ladataan tiedot ja tarkistetaan puuttuvat tiedot.
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
Tuotos:
## [1] "age" "fare"
Tässä,
colnames(df_titanic)[apply(df_titanic, 2, anyNA)]
Antaa niiden sarakkeiden nimen, joilla ei ole tietoja.
Ikä- ja hinta-sarakkeista puuttuu arvoja.
Voimme pudottaa ne na.omit ().
library(dplyr)# Exclude the missing observationsdf_titanic_drop <-df_titanic %>%na.omit()dim(df_titanic_drop)
Tuotos:
## [1] 1045 13
Uusi tietojoukko sisältää 1045 riviä verrattuna 1309 alkuperäiseen tietojoukkoon.
Määritä puuttuvat tiedot keskiarvolla ja mediaanilla
Voimme myös laskea (täyttää) puuttuvat arvot mediaanilla tai keskiarvolla. Hyvä käytäntö on luoda kaksi erillistä muuttujaa keskiarvolle ja mediaanille. Kun ne on luotu, voimme korvata puuttuvat arvot uusilla muuttujilla.
Laskemme sarakkeen keskiarvon NA: lla sovellusmenetelmällä. Katsotaanpa esimerkki
Vaihe 1) Aikaisemmin opetusohjelmassa tallensimme sarakkeiden nimen puuttuvien arvojen kanssa luetteloon nimeltä list_na. Käytämme tätä luetteloa
Vaihe 2) Nyt meidän on laskettava keskiarvo argumentilla na.rm = TOSI. Tämä argumentti on pakollinen, koska sarakkeista puuttuu tietoja, ja tämä käskee R: n jättämään ne huomiotta.
# Create meanaverage_missing <- apply(df_titanic[,colnames(df_titanic) %in% list_na],2,mean,na.rm = TRUE)average_missing
Koodin selitys:
Annamme 4 argumenttia Apply-menetelmässä.
- df: df_titanic [, colnames (df_titanic)% kohteessa% list_na]. Tämä koodi palauttaa sarakkeiden nimen list_na-objektista (eli "ikä" ja "hinta")
- 2: Laske funktio sarakkeissa
- keskiarvo: Laske keskiarvo
- na.rm = TOSI: Ohita puuttuvat arvot
Tuotos:
## age fare## 29.88113 33.29548
Puuttuvien havaintojen sisältävien sarakkeiden keskiarvo luotiin onnistuneesti. Näitä kahta arvoa käytetään korvaamaan puuttuvat havainnot.
Vaihe 3) Vaihda NA-arvot
Dplyr-kirjastosta tuleva verbimutaatio on hyödyllinen uuden muuttujan luomisessa. Emme välttämättä halua muuttaa alkuperäistä saraketta, jotta voimme luoda uuden muuttujan ilman NA: ta. Mutaatio on helppokäyttöinen, valitsemme vain muuttujan nimen ja määrittelemme, kuinka tämä muuttuja luodaan. Tässä on täydellinen koodi
# 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))
Koodin selitys:
Luomme kaksi muuttujaa, korvaa_mean_age ja korvaa_mean_fare seuraavasti:
- Replace_mean_age = ifelse (is.na (ikä), keskimääräinen puuttuva [1], ikä)
- korvaava_hinta_hinta = ifelse (is.na (hinta), keskimääräinen puuttuva [2], hinta)
Jos sarakkeen iästä puuttuu arvoja, korvaa se keskiarvon (ikän keskiarvo) ensimmäisellä elementillä, muuten säilytä alkuperäiset arvot. Sama logiikka hinnalle
sum(is.na(df_titanic_replace$age))
Tuotos:
## [1] 263
Suorita vaihto
sum(is.na(df_titanic_replace$replace_mean_age))
Tuotos:
## [1] 0
Alkuperäisessä sarakkeen ikässä on 263 puuttuvaa arvoa, kun taas uusi luotu muuttuja on korvannut ne muuttujan ikän keskiarvolla.
Vaihe 4) Voimme korvata puuttuvat havainnot myös mediaanilla.
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)
Tuotos:
Vaihe 5) Suuressa tietojoukossa voi olla paljon puuttuvia arvoja, ja yllä oleva menetelmä voi olla hankala. Voimme suorittaa kaikki yllä olevat vaiheet yhdellä koodirivillä sapply () -menetelmällä. Vaikka emme tietäisikään keskiarvoa ja mediaania.
sapply ei luo datakehystä, joten voimme kääriä sapply () -funktion data.frame () -ohjelmaan luoda datakehysobjekti.
# 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)))
Yhteenveto
Meillä on kolme tapaa puuttuvien arvojen käsittelemiseksi:
- Sulje pois kaikki puuttuvat havainnot
- Vaikuta keskiarvoon
- Vaikuta mediaaniin
Seuraava taulukko esittää yhteenvedon siitä, miten kaikki puuttuvat havainnot voidaan poistaa
Kirjasto | Tavoite | Koodi |
---|---|---|
pohja | Luettele puuttuvat havainnot |
colnames(df)[apply(df, 2, anyNA)] |
dplyr | Poista kaikki puuttuvat arvot |
na.omit(df) |
Imputointi keskiarvolla tai mediaanilla voidaan tehdä kahdella tavalla
- Käyttämällä sovelletaan
- Käyttämällä sapply
Menetelmä | Yksityiskohdat | Edut | Haitat |
---|---|---|---|
Vaiheittainen hakemus | Tarkista puuttuvat sarakkeet, laske keskiarvo / mediaani, tallenna arvo, korvaa mutaatilla () | Tiedät keskiarvon / mediaanin arvon | Lisää toteutusaikaa. Voi olla hidasta suurella tietojoukolla |
Nopea tapa sapplyllä | Käytä sapply () ja data.frame () hakeaksesi ja korvaamaan puuttuvat arvot automaattisesti keskiarvolla / mediaanilla | Lyhyt koodi ja nopea | En tiedä imputointiarvoja |