Ontbrekende waarden in datawetenschap ontstaan wanneer een waarneming ontbreekt in een kolom van een dataframe of een tekenwaarde bevat in plaats van een numerieke waarde. Ontbrekende waarden moeten worden verwijderd of vervangen om de juiste conclusie te trekken uit de gegevens.
In deze tutorial leren we hoe we om kunnen gaan met ontbrekende waarden met de dplyr-bibliotheek. dplyr-bibliotheek maakt deel uit van een ecosysteem om een data-analyse te realiseren.
In deze tutorial leer je
- muteren ()
- Ontbrekende waarden uitsluiten (NA)
- Reken ontbrekende waarden (NA) toe met het gemiddelde en de mediaan
muteren ()
Het vierde werkwoord in de dplyr-bibliotheek is handig om een nieuwe variabele te maken of de waarden van een bestaande variabele te wijzigen.
We gaan verder in twee delen. We zullen leren hoe u:
- sluit ontbrekende waarden uit een dataframe uit
- bereken ontbrekende waarden met het gemiddelde en de mediaan
Het werkwoord muteren () is heel gemakkelijk te gebruiken. We kunnen een nieuwe variabele maken volgens deze syntaxis:
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()
Ontbrekende waarden uitsluiten (NA)
De methode na.omit () uit de dplyr-bibliotheek is een eenvoudige manier om ontbrekende observatie uit te sluiten. Het verwijderen van alle NA uit de gegevens is eenvoudig, maar het betekent niet dat het de meest elegante oplossing is. Tijdens de analyse is het verstandig om verschillende methoden te gebruiken om met ontbrekende waarden om te gaan
Om het probleem van ontbrekende waarnemingen aan te pakken, zullen we de titanische dataset gebruiken. In deze dataset hebben we toegang tot de informatie van de passagiers aan boord tijdens de tragedie. Deze dataset heeft veel NA die moeten worden verzorgd.
We zullen het csv-bestand van internet uploaden en vervolgens controleren welke kolommen NA hebben. Om de kolommen met ontbrekende gegevens te retourneren, kunnen we de volgende code gebruiken:
Laten we de gegevens uploaden en de ontbrekende gegevens verifiëren.
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
Uitgang:
## [1] "age" "fare"
Hier,
colnames(df_titanic)[apply(df_titanic, 2, anyNA)]
Geeft de naam van kolommen die geen gegevens bevatten.
De kolommen leeftijd en tarief hebben ontbrekende waarden.
We kunnen ze laten vallen met de na.omit ().
library(dplyr)# Exclude the missing observationsdf_titanic_drop <-df_titanic %>%na.omit()dim(df_titanic_drop)
Uitgang:
## [1] 1045 13
De nieuwe dataset bevat 1045 rijen vergeleken met 1309 met de originele dataset.
Imputeer ontbrekende gegevens met het gemiddelde en de mediaan
We kunnen ontbrekende waarden ook toerekenen (invullen) met de mediaan of het gemiddelde. Een goede gewoonte is om twee afzonderlijke variabelen te maken voor het gemiddelde en de mediaan. Eenmaal gemaakt, kunnen we de ontbrekende waarden vervangen door de nieuw gevormde variabelen.
We zullen de apply-methode gebruiken om het gemiddelde van de kolom met NA te berekenen. Laten we een voorbeeld bekijken
Stap 1) Eerder in de tutorial hebben we de kolomnaam met de ontbrekende waarden opgeslagen in de lijst met de naam list_na. We zullen deze lijst gebruiken
Stap 2) Nu moeten we het gemiddelde berekenen met het argument na.rm = TRUE. Dit argument is verplicht omdat de kolommen gegevens missen, en dit vertelt R om ze te negeren.
# Create meanaverage_missing <- apply(df_titanic[,colnames(df_titanic) %in% list_na],2,mean,na.rm = TRUE)average_missing
Code Verklaring:
We geven 4 argumenten door in de apply-methode.
- df: df_titanic [, colnames (df_titanic)% in% list_na]. Deze code retourneert de kolomnaam van het list_na-object (dwz "leeftijd" en "tarief")
- 2: Bereken de functie op de kolommen
- gemiddelde: Bereken het gemiddelde
- na.rm = TRUE: Negeer de ontbrekende waarden
Uitgang:
## age fare## 29.88113 33.29548
We hebben met succes het gemiddelde gemaakt van de kolommen met ontbrekende waarnemingen. Deze twee waarden worden gebruikt om de ontbrekende waarnemingen te vervangen.
Stap 3) Vervang de NA-waarden
Het werkwoord muteren uit de dplyr-bibliotheek is handig bij het maken van een nieuwe variabele. We willen niet per se de oorspronkelijke kolom wijzigen, zodat we een nieuwe variabele kunnen maken zonder de NA. mutate is gemakkelijk te gebruiken, we kiezen gewoon een variabelenaam en definiëren hoe deze variabele moet worden gemaakt. Hier is de volledige code
# 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))
Code Verklaring:
We maken twee variabelen, replace_mean_age en replace_mean_fare als volgt:
- replace_mean_age = ifelse (is.na (leeftijd), gemiddelde_missing [1], leeftijd)
- replace_mean_fare = ifelse (is.na (tarief), gemiddeld_missend [2], tarief)
Als de kolom leeftijd ontbrekende waarden heeft, vervang deze dan door het eerste element van average_missing (gemiddelde leeftijd), anders behoudt u de originele waarden. Dezelfde logica voor tarief
sum(is.na(df_titanic_replace$age))
Uitgang:
## [1] 263
Voer de vervanging uit
sum(is.na(df_titanic_replace$replace_mean_age))
Uitgang:
## [1] 0
De oorspronkelijke kolom leeftijd heeft 263 ontbrekende waarden, terwijl de nieuw gemaakte variabele deze heeft vervangen door het gemiddelde van de variabele leeftijd.
Stap 4) We kunnen de ontbrekende waarnemingen ook vervangen door de mediaan.
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)
Uitgang:
Stap 5) Een big data-set kan veel ontbrekende waarden bevatten en de bovenstaande methode kan omslachtig zijn. We kunnen alle bovenstaande stappen hierboven uitvoeren in één regel code met behulp van de sapply () - methode. Hoewel we de waarden van gemiddeld en mediaan niet zouden kennen.
sapply maakt geen dataframe, dus we kunnen de sapply () -functie in data.frame () verpakken om een dataframe-object te maken.
# 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)))
Overzicht
We hebben drie methoden om met ontbrekende waarden om te gaan:
- Sluit alle ontbrekende waarnemingen uit
- Schrijf het gemiddelde toe
- Reken toe met de mediaan
De volgende tabel geeft een overzicht van hoe u alle ontbrekende waarnemingen kunt verwijderen
Bibliotheek | Objectief | Code |
---|---|---|
baseren | Maak een lijst van ontbrekende waarnemingen |
colnames(df)[apply(df, 2, anyNA)] |
dplyr | Verwijder alle ontbrekende waarden |
na.omit(df) |
Imputatie met gemiddelde of mediaan kan op twee manieren worden gedaan
- Met toepassen
- Sapply gebruiken
Methode | Details | Voordelen | Nadelen |
---|---|---|---|
Stap voor stap met toepassen | Controleer kolommen met ontbrekende, bereken gemiddelde / mediaan, sla de waarde op, vervang door mutate () | U kent de waarde van middelen / mediaan | Meer uitvoeringstijd. Kan traag zijn met grote datasets |
Snelle manier met sapply | Gebruik sapply () en data.frame () om automatisch ontbrekende waarden te zoeken en te vervangen door gemiddelde / mediaan | Korte code en snel | Ik ken de toerekeningswaarden niet |