Οι τιμές που λείπουν στην επιστήμη δεδομένων προκύπτουν όταν λείπει μια παρατήρηση σε μια στήλη ενός πλαισίου δεδομένων ή περιέχει μια τιμή χαρακτήρα αντί για αριθμητική τιμή. Οι τιμές που λείπουν πρέπει να πέσουν ή να αντικατασταθούν για να εξαχθεί το σωστό συμπέρασμα από τα δεδομένα.
Σε αυτό το σεμινάριο, θα μάθουμε πώς να αντιμετωπίζουμε τις τιμές που λείπουν με τη βιβλιοθήκη dplyr. Η βιβλιοθήκη dplyr είναι μέρος ενός οικοσυστήματος για την πραγματοποίηση μιας ανάλυσης δεδομένων.
Σε αυτό το σεμινάριο, θα μάθετε
- αλλάσσω()
- Εξαίρεση λείπουν τιμών (NA)
- Υπολογίστε τις τιμές που λείπουν (NA) με το μέσο και το μέσο όρο
αλλάσσω()
Το τέταρτο ρήμα στη βιβλιοθήκη dplyr είναι χρήσιμο για τη δημιουργία νέας μεταβλητής ή την αλλαγή των τιμών μιας υπάρχουσας μεταβλητής.
Θα προχωρήσουμε σε δύο μέρη. Θα μάθουμε πώς να:
- εξαιρέστε τις τιμές που λείπουν από ένα πλαίσιο δεδομένων
- υπολογίστε τις τιμές που λείπουν με το μέσο και το μέσο όρο
Το ρήμα mutate () είναι πολύ εύκολο στη χρήση. Μπορούμε να δημιουργήσουμε μια νέα μεταβλητή ακολουθώντας αυτήν τη σύνταξη:
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()
Εξαίρεση λείπουν τιμών (NA)
Η μέθοδος na.omit () από τη βιβλιοθήκη dplyr είναι ένας απλός τρόπος για να αποκλείσετε την παρατήρηση που λείπει. Η απόρριψη όλων των NA από τα δεδομένα είναι εύκολη, αλλά δεν σημαίνει ότι είναι η πιο κομψή λύση. Κατά τη διάρκεια της ανάλυσης, είναι συνετό να χρησιμοποιείτε ποικιλία μεθόδων για την αντιμετώπιση των τιμών που λείπουν
Για την αντιμετώπιση του προβλήματος των παρατηρήσεων που λείπουν, θα χρησιμοποιήσουμε το σύνολο δεδομένων τιτανικού. Σε αυτό το σύνολο δεδομένων, έχουμε πρόσβαση στις πληροφορίες των επιβατών κατά τη διάρκεια της τραγωδίας. Αυτό το σύνολο δεδομένων έχει πολλά NA που πρέπει να ληφθούν υπόψη.
Θα ανεβάσουμε το αρχείο csv από το Διαδίκτυο και μετά θα ελέγξουμε ποιες στήλες έχουν NA. Για να επιστρέψουμε τις στήλες με δεδομένα που λείπουν, μπορούμε να χρησιμοποιήσουμε τον ακόλουθο κώδικα:
Ας ανεβάσουμε τα δεδομένα και επαληθεύσουμε τα δεδομένα που λείπουν.
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
Παραγωγή:
## [1] "age" "fare"
Εδώ,
colnames(df_titanic)[apply(df_titanic, 2, anyNA)]
Δίνει το όνομα των στηλών που δεν έχουν δεδομένα.
Η ηλικία και ο ναύλος στηλών έχουν τιμές που λείπουν.
Μπορούμε να τα αφήσουμε με το na.omit ().
library(dplyr)# Exclude the missing observationsdf_titanic_drop <-df_titanic %>%na.omit()dim(df_titanic_drop)
Παραγωγή:
## [1] 1045 13
Το νέο σύνολο δεδομένων περιέχει 1045 σειρές σε σύγκριση με 1309 με το αρχικό σύνολο δεδομένων.
Παρουσιάστε δεδομένα που λείπουν με το μέσο και το μέσο όρο
Θα μπορούσαμε επίσης να υπολογίσουμε (να συμπληρώσουμε) τιμές που λείπουν με τη διάμεση ή τη μέση τιμή. Μια καλή πρακτική είναι να δημιουργήσετε δύο ξεχωριστές μεταβλητές για το μέσο και το μέσο όρο. Μόλις δημιουργηθεί, μπορούμε να αντικαταστήσουμε τις τιμές που λείπουν με τις πρόσφατα σχηματισμένες μεταβλητές.
Θα χρησιμοποιήσουμε τη μέθοδο εφαρμογής για τον υπολογισμό του μέσου όρου της στήλης με NA. Ας δούμε ένα παράδειγμα
Βήμα 1) Νωρίτερα στο σεμινάριο, αποθηκεύσαμε το όνομα των στηλών με τις τιμές που λείπουν στη λίστα που ονομάζεται list_na. Θα χρησιμοποιήσουμε αυτήν τη λίστα
Βήμα 2) Τώρα πρέπει να υπολογίσουμε το μέσο όρο με το όρισμα na.rm = TRUE. Αυτό το επιχείρημα είναι υποχρεωτικό επειδή οι στήλες έχουν δεδομένα που λείπουν και αυτό λέει στο R να τις αγνοήσει.
# Create meanaverage_missing <- apply(df_titanic[,colnames(df_titanic) %in% list_na],2,mean,na.rm = TRUE)average_missing
Επεξήγηση κώδικα:
Περνάμε 4 ορίσματα στη μέθοδο εφαρμογής.
- df: df_titanic [, colnames (df_titanic)% στο% list_na]. Αυτός ο κωδικός θα επιστρέψει το όνομα των στηλών από το αντικείμενο list_na (δηλαδή "ηλικία" και "ναύλος")
- 2: Υπολογίστε τη συνάρτηση στις στήλες
- mean: Υπολογίστε το μέσο όρο
- na.rm = TRUE: Αγνοήστε τις τιμές που λείπουν
Παραγωγή:
## age fare## 29.88113 33.29548
Δημιουργήσαμε με επιτυχία τον μέσο όρο των στηλών που περιέχουν παρατηρήσεις που λείπουν. Αυτές οι δύο τιμές θα χρησιμοποιηθούν για να αντικαταστήσουν τις παρατηρήσεις που λείπουν.
Βήμα 3) Αντικαταστήστε τις τιμές NA
Το ρήμα μετάλλαξης από τη βιβλιοθήκη dplyr είναι χρήσιμο στη δημιουργία μιας νέας μεταβλητής. Δεν θέλουμε απαραίτητα να αλλάξουμε την αρχική στήλη, ώστε να μπορούμε να δημιουργήσουμε μια νέα μεταβλητή χωρίς το NA. το mutate είναι εύκολο στη χρήση, απλώς επιλέγουμε ένα όνομα μεταβλητής και καθορίζουμε τον τρόπο δημιουργίας αυτής της μεταβλητής. Εδώ είναι ο πλήρης κωδικός
# 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))
Επεξήγηση κώδικα:
Δημιουργούμε δύο μεταβλητές, Repl_mean_age και Repl_mean_fare ως εξής:
- substit_mean_age = ifelse (is.na (ηλικία), μέσος όρος_εκείμενος [1], ηλικία)
- Αντικαταστήστε_mean_fare = ifelse (is.na (ναύλος), μέσος όρος [2], ναύλος)
Εάν η ηλικία της στήλης έχει τιμές που λείπουν, τότε αντικαταστήστε με το πρώτο στοιχείο του μέσου όρου που λείπει (μέσος όρος ηλικίας), διαφορετικά διατηρήστε τις αρχικές τιμές. Ίδια λογική για ναύλο
sum(is.na(df_titanic_replace$age))
Παραγωγή:
## [1] 263
Εκτελέστε την αντικατάσταση
sum(is.na(df_titanic_replace$replace_mean_age))
Παραγωγή:
## [1] 0
Η αρχική ηλικία στήλης έχει 263 τιμές που λείπουν, ενώ η μεταβλητή που δημιουργήθηκε πρόσφατα τις αντικατέστησε με τη μέση τιμή της μεταβλητής ηλικίας.
Βήμα 4) Μπορούμε επίσης να αντικαταστήσουμε τις παρατηρήσεις που λείπουν με τη διάμεση.
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)
Παραγωγή:
Βήμα 5) Ένα μεγάλο σύνολο δεδομένων θα μπορούσε να έχει πολλές τιμές που λείπουν και η παραπάνω μέθοδος θα μπορούσε να είναι δυσκίνητη. Μπορούμε να εκτελέσουμε όλα τα παραπάνω βήματα παραπάνω σε μια γραμμή κώδικα χρησιμοποιώντας τη μέθοδο sapply (). Αν και δεν θα γνωρίζαμε τις κοιλότητες της μέσης και της μέσης.
Το sapply δεν δημιουργεί ένα πλαίσιο δεδομένων, έτσι μπορούμε να τυλίξουμε τη συνάρτηση sapply () μέσα στο data.frame () για να δημιουργήσουμε ένα αντικείμενο πλαισίου δεδομένων.
# 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)))
Περίληψη
Έχουμε τρεις μεθόδους για την αντιμετώπιση των τιμών που λείπουν:
- Εξαιρέστε όλες τις παρατηρήσεις που λείπουν
- Υπολογίστε με το μέσο όρο
- Υπολογίστε με τη διάμεση τιμή
Ο παρακάτω πίνακας συνοψίζει πώς να αφαιρέσετε όλες τις παρατηρήσεις που λείπουν
Βιβλιοθήκη | Σκοπός | Κώδικας |
---|---|---|
βάση | Λίστα παρατηρήσεων που λείπουν |
colnames(df)[apply(df, 2, anyNA)] |
dplyr | Καταργήστε όλες τις τιμές που λείπουν |
na.omit(df) |
Ο υπολογισμός με μέση ή μέση τιμή μπορεί να γίνει με δύο τρόπους
- Χρήση ισχύει
- Χρησιμοποιώντας sapply
Μέθοδος | Λεπτομέριες | Πλεονεκτήματα | Μειονεκτήματα |
---|---|---|---|
Βήμα προς βήμα με εφαρμογή | Ελέγξτε τις στήλες που λείπουν, υπολογίστε το μέσο / διάμεσο, αποθηκεύστε την τιμή, αντικαταστήστε με το μεταλλάκτη () | Γνωρίζετε την αξία των μέσων / διάμεσος | Περισσότερος χρόνος εκτέλεσης. Μπορεί να είναι αργή με μεγάλο σύνολο δεδομένων |
Γρήγορος τρόπος με σαφώς | Χρησιμοποιήστε το sapply () και το data.frame () για αυτόματη αναζήτηση και αντικατάσταση των τιμών που λείπουν με το μέσο / μέσο όρο | Σύντομος κωδικός και γρήγορος | Δεν ξέρω τις τιμές καταλογισμού |