Nilai yang hilang dalam ilmu data muncul saat observasi hilang dalam kolom bingkai data atau berisi nilai karakter, bukan nilai numerik. Nilai yang hilang harus dihilangkan atau diganti untuk menarik kesimpulan yang benar dari data.
Dalam tutorial ini, kita akan belajar bagaimana menangani nilai yang hilang dengan pustaka dplyr. Perpustakaan dplyr merupakan bagian dari ekosistem untuk mewujudkan analisis data.
Dalam tutorial ini, Anda akan belajar
- mengubah()
- Kecualikan Missing Values (NA)
- Hitung Nilai Hilang (NA) dengan Mean dan Median
mengubah()
Kata kerja keempat di pustaka dplyr berguna untuk membuat variabel baru atau mengubah nilai variabel yang sudah ada.
Kami akan melanjutkan dalam dua bagian. Kami akan belajar cara:
- mengecualikan nilai yang hilang dari bingkai data
- menghubungkan nilai-nilai yang hilang dengan mean dan median
Kata kerja mutate () sangat mudah digunakan. Kita dapat membuat variabel baru mengikuti sintaks ini:
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()
Kecualikan Missing Values (NA)
Metode na.omit () dari pustaka dplyr adalah cara sederhana untuk mengecualikan observasi yang hilang. Menghapus semua NA dari data itu mudah, tetapi itu tidak berarti itu adalah solusi yang paling elegan. Selama analisis, sebaiknya gunakan berbagai metode untuk menangani nilai yang hilang
Untuk mengatasi masalah observasi yang hilang, kami akan menggunakan dataset titanic. Dalam kumpulan data ini, kami memiliki akses ke informasi penumpang di pesawat selama tragedi tersebut. Dataset ini memiliki banyak NA yang perlu dijaga.
Kami akan mengunggah file csv dari internet dan kemudian memeriksa kolom mana yang memiliki NA. Untuk mengembalikan kolom dengan data yang hilang, kita dapat menggunakan kode berikut:
Mari unggah data dan verifikasi data yang hilang.
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
Keluaran:
## [1] "age" "fare"
Sini,
colnames(df_titanic)[apply(df_titanic, 2, anyNA)]
Memberikan nama kolom yang tidak memiliki data.
Kolom usia dan tarif memiliki nilai yang hilang.
Kita bisa menjatuhkannya dengan na.omit ().
library(dplyr)# Exclude the missing observationsdf_titanic_drop <-df_titanic %>%na.omit()dim(df_titanic_drop)
Keluaran:
## [1] 1045 13
Dataset baru berisi 1.045 baris dibandingkan dengan 1309 dengan set data asli.
Hubungkan data yang Hilang dengan Mean dan Median
Kita juga bisa menghubungkan (mengisi) nilai yang hilang dengan median atau mean. Praktik yang baik adalah membuat dua variabel terpisah untuk mean dan median. Setelah dibuat, kita dapat mengganti nilai yang hilang dengan variabel yang baru dibentuk.
Kami akan menggunakan metode terapan untuk menghitung rata-rata kolom dengan NA. Mari kita lihat contohnya
Langkah 1) Sebelumnya di tutorial, kami menyimpan nama kolom dengan nilai yang hilang dalam daftar yang disebut list_na. Kami akan menggunakan daftar ini
Langkah 2) Sekarang kita perlu menghitung mean dengan argumen na.rm = TRUE. Argumen ini wajib karena kolom memiliki data yang hilang, dan ini memberitahu R untuk mengabaikannya.
# Create meanaverage_missing <- apply(df_titanic[,colnames(df_titanic) %in% list_na],2,mean,na.rm = TRUE)average_missing
Penjelasan Kode:
Kami memberikan 4 argumen dalam metode terapkan.
- df: df_titanic [, nama kolom (df_titanic)% dalam% list_na]. Kode ini akan mengembalikan nama kolom dari objek list_na (yaitu "usia" dan "tarif")
- 2: Hitung fungsi pada kolom
- mean: Hitung mean
- na.rm = TRUE: Abaikan nilai yang hilang
Keluaran:
## age fare## 29.88113 33.29548
Kami berhasil membuat rata-rata kolom yang berisi observasi yang hilang. Kedua nilai ini akan digunakan untuk menggantikan observasi yang hilang.
Langkah 3) Ganti Nilai NA
Kata kerja bermutasi dari pustaka dplyr berguna dalam membuat variabel baru. Kami tidak perlu mengubah kolom asli sehingga kami dapat membuat variabel baru tanpa NA. mutate mudah digunakan, kita tinggal memilih nama variabel dan menentukan cara membuat variabel ini. Ini kode lengkapnya
# 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))
Penjelasan Kode:
Kami membuat dua variabel, replace_mean_age dan replace_mean_fare sebagai berikut:
- replace_mean_age = ifelse (is.na (usia), average_missing [1], usia)
- replace_mean_fare = ifelse (is.na (tarif), average_missing [2], tarif)
Jika usia kolom memiliki nilai yang hilang, ganti dengan elemen pertama average_missing (mean of age), jika tidak, pertahankan nilai aslinya. Logika yang sama untuk ongkos
sum(is.na(df_titanic_replace$age))
Keluaran:
## [1] 263
Lakukan penggantian
sum(is.na(df_titanic_replace$replace_mean_age))
Keluaran:
## [1] 0
Usia kolom asli memiliki 263 nilai yang hilang sementara variabel yang baru dibuat menggantikannya dengan mean dari variabel usia.
Langkah 4) Kita juga bisa mengganti observasi yang hilang dengan median.
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)
Keluaran:
Langkah 5) Kumpulan data yang besar dapat memiliki banyak nilai yang hilang dan metode di atas bisa merepotkan. Kita dapat menjalankan semua langkah di atas dalam satu baris kode menggunakan metode sapply (). Meskipun kita tidak akan mengetahui nilai mean dan median.
sapply tidak membuat bingkai data, jadi kita bisa membungkus fungsi sapply () di dalam data.frame () untuk membuat objek bingkai data.
# 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)))
Ringkasan
Kami memiliki tiga metode untuk menangani nilai yang hilang:
- Kecualikan semua pengamatan yang hilang
- Hitung dengan maksud
- Hubungkan dengan median
Tabel berikut ini merangkum cara menghapus semua observasi yang hilang
Perpustakaan | Objektif | Kode |
---|---|---|
mendasarkan | Buat daftar observasi yang hilang |
colnames(df)[apply(df, 2, anyNA)] |
dplyr | Hapus semua nilai yang hilang |
na.omit(df) |
Imputasi dengan mean atau median dapat dilakukan dengan dua cara
- Menggunakan terapkan
- Menggunakan sapply
metode | Detail | Keuntungan | Kekurangan |
---|---|---|---|
Langkah demi langkah dengan menerapkan | Periksa kolom yang tidak ada, hitung mean / median, simpan nilainya, ganti dengan mutate () | Anda tahu nilai mean / median | Lebih banyak waktu eksekusi. Bisa lambat dengan dataset besar |
Cara cepat dengan sapply | Gunakan sapply () dan data.frame () untuk secara otomatis mencari dan mengganti nilai yang hilang dengan mean / median | Kode pendek dan cepat | Tidak tahu nilai imputasi |