Bekerja Dengan Packages "dplyr" di R



Packages “dplyr” adalah salah satu packages dalam R yang sangat memiliki banyak manfaat dalam membantu proses analisis data, diantaranya berguna untuk membersihkan data, memanipulasi data, visualisasi data dan berbagai macam analisis lainnya. Ada banyak function dalam packages “dplyr” dengan berbagai macam kegunaan, diantaranya:


select()
filter()
mutate()
group_by()
summarise()
arange()
join()

Untuk masing-masing kegunaan dan fungsi dari perintah di atas dapat dilihat melalui program R secara langsung dengan menuliskan perintah ? diikuti dengan perintah yang akan di cari informasinya, seperti contoh: ?select

Mengacu pada postingan milik Richter-Walsh pada situs r-bloggers.com, pada postingan ini akan digunakan Data yang diambil dari UCI Machine Learning Repository dan berisi informasi sensus dari tahun 1994 di Amerika Serikat. Adapun sumber dataset yang digunakan dapat di download pada situs berikut:

https://archive.ics.uci.edu/ml/machine-learning-databases/adult/adult.data

#Beberapa nama variabel yang sesuai
df_names <- c("age", "wrkclass", "fnlweight", "education_lvl", "edu_score","marital_status", "occupation", "relationship", "ethnic", "gender","cap_gain", "cap_loss", "hrs_wk", "nationality", "income"))

#Import Data
df <- read.csv(file, header = F,
 sep = ",",
 na.strings = c(" ?", " ", ""),
 row.names = NULL,
 col.names = df_names)

Untuk mengaktifkan packages "dplyr" dapat dijalankan perintah library(dplyr) atau require(dplyr)

Ada banyak hal manipulasi data pada packages dplyr yang dapat dilakukan dengan menggunakan bantuan operator forward-pipe (%>%). Operator pipa tersebut pertama kali diperkenalkan pada packages “magrittr” yang kemudian juga di sertakan pada packages “dplyr”. Operator tersebut sangat berguna untuk melakukan manipulasi data pada data yang bersifat dinamis dan mampu menghasilkan kode yang mudah di baca.

Sebelum melakukan analisis, Data sensus yang digunakan pada postingan ini terlebih dahulu perlu sedikit dilakukan preprocessing sehingga siap untuk dilakukan klasifikasi. Namun pada postingan ini tidak akan dibahas proses preprocessing dan hasil prediksi.

Beberapa fungsi yang sangat bermanfaat pada packages “dplyr” diringkas sebagai berikut:

1. Menghapus Duplikasi
#Menghapus duplikasi pada baris dan memeriksa jumlah baris
df %>% distinct() %>% nrow()

#Menghapus duplikasi baris dan menetapkan objek dataframe baru
df_clean <- df %>% distinct()

#Menghapus duplikasi berdasarkan satu atau lebih variabel
df %>% distinct(gender, .keep_all = T)
df %>% distinct(gender, education_lvl, .keep_all =  T)

2. Membangkitkan Sampel Acak
#Sampel acak pada baris dengan atau tanpa pengembalian
sample_n(df, size=nrow(df)*0.7, replace = F)
sample_n(df, size=20, replace= T)

#Sampel proporsi baris dengan atau tanpa pengembalian
sample_frac(df, size=0.7, replace = F)
sample_frac(df, size=0.8, replace= T)

3. Mengubah Nama Variabel
#Merubah nama pada satu atau lebih variabel pada dataframe
df <- df %>%
rename("INCOME" = "income")

df <- df %>%
rename("INCOME" = "income", "AGE" = "age")

4. Filterisasi
Perintah select() dalam dplyr digunakan untuk memfilter dataframe berdasarkan kolom:


#Menyeleksi kolom secara spesifik (perhatikan bahwa INCOME adalah nama baru dari yang sebelumnya) 
df %>%
 select(education_lvl, INCOME)

#Dengan dplyr 0.7.0 fungsi pull() mengekstrak variabel sebagai vektor
df %>%
 pull(age)

#Drop kolom menggunakan operator - (variabel dapat direferensikan berdasarkan nama atau posisi kolom)
df %>%
 select(-edu_score)

df %>%
 select(-1, -4)

df %>%
 select(-c(2:6))

Beberapa fungsi lain yang berguna tersedia di dplyr dan dapat digunakan bersamaan dengan kata kerja select(). Berikut adalah beberapa contohnya:


#Memilih kolom dengan nama yang dimulai dari huruf "e" 
df %>%
 select(starts_with("e"))

#Memilih kolom dengan nama yang dimulai selain dari huruf "e"
df %>%
 select(-starts_with("e"))

#Menyeleksi kolom dengan beberapa pola di kolom nama
df %>%
 select(contains("edu"))

#Meletakkan kolom tertentu di awal
df %>%
 select(income, everything())

#Menyeleksi kolom terakhir dengan sebuah pola
df %>%
 select(ends_with("e"))

df %>%
 select(ends_with("_loss"))

Hal yang paling utama dalam proses filterisasi adalah dengan menggunakan perintah filter(), dimana perintah ini mempunyai fungsi yang sangat bermanfaat bagi para data analis yang berguna untuk menyaring sebuah dataframe, fungsi ini dapat digunakan untuk menyaring data dengan berbagai kondisi. Secara lebih detail dapat dilihat pada beberapa contoh berikut:

#Memfilter baris dengan kondisi dimana usia > 30
df %>%
 filter(age > 30)

#Memfilter dengan beberapa kondisi menggunakan operator %in% (pastikan string yang di filter cocok)
df %>%
 filter(relationship %in% c(" Unmarried", " Wife"))

#Filter di atas juga dapat dilakukan dengan menggunakan operator OR (|)
df %>%
 filter(relationship == " Husband" | relationship == " Wife")

#Filter menggunakan operator AND
df %>%
 filter(age > 30 & INCOME == " >50K")

#Kombinasi filter
df %>%
 filter(education_lvl %in% c(" Doctorate", " Masters") & age > 30)

#Memfilter tanpa level pendidikan Doktor
df %>%
 filter(education_lvl != " Doctorate")

# Fungsi grepl juga mempunyai fungsi yang sama seperti filter
df %>%
 filter(grepl(" Wi", relationship))

5. Membuat Ringkasan Data

Data yang berjumlah sangat besar akan sangat sulit di baca dan di pahami terlebih bagi orang yang tidak terbiasa melihat data, karena harus membaca secara manual satu persatu data yang ada. Untuk menemukan sebuah informasi penting, dan memudahkan dalam memahami isi dari data yang jumlahnya cukup besar, kita perlu merangkum atau meringkas data menjadi bagian-bagian
yang  menggambarkan keseluruhan data tersebut. Untuk meringkas data tersebut, terdapat fungsi yang dapat memudahkan kita di dalam packages dplyr, yaitu fungsi summarise(), berikut beberapa contoh fungsi summarise() yang dapat digunakan untuk membuat ringkasan data :

#Meringkas kelompok data 
df %>%
 filter(INCOME == " >50K") %>%
 summarise(mean_age = mean(age),
           median_age = median(age),
           sd_age = sd(age))

#Meringkas beberapa variabel mengunakan  summarise_at()
df %>%
 filter(INCOME == " >50K") %>%
 summarise_at(vars(age, hrs_wk),
 funs(n(), 
      mean, 
      median))

#Meringkas data dengan fungsi kustom
#Yang di dalam tanda kurung mencakup semua variabel yang disebut
df %>%
 summarise_at(vars(age, hrs_wk),
 funs(n(),
      missing = sum(is.na(.)),
      mean = mean(., na.rm = T)))

#Membuat ringkasan statistik baru dengan fungsi anonim
df %>%
 summarise_at(vars(age),
 function(x) { sum((x - mean(x)) / sd(x)) })

#Ringkasan dengan "kondisi" menggunakan summarise_if()
df %>%
 filter(INCOME == " >50K") %>%
 summarise_if(is.numeric,
              funs(n(),
                   mean,
                   median))

#Subset variabel numerik dan gunakan summarise_all () untuk mendapatkan ringkasan statistik
ints <- df[sapply(df, is.numeric)]
summarise_all(ints,
              funs(mean, 
                   median, 
                   sd, 
                   var))

6. Mengatur/menyusun Data

Selanjutnya adalah fungsi arrange() yang berguna untuk menyortir data dalam urutan naik atau turun (naik adalah default).

#Mengurutkan secara "naik" dan menampilkan 10 data teratas
df %>%
 arrange(age) %>%
 head(10)

#Mengurutkan secara "menurun" dan menampilkan 10 data teratas
df %>%
 arrange(desc(age)) %>%
 head(10)

7. Mengelompokkan Data

Fungsi group_by() berguna untuk mengelompokkan pengamatan bersama yang memiliki karakteristik umum.

#Mengelompokkan data berdasarkan satu atau lebih ringkasan data
df %>%
 group_by(gender) %>%
 summarise(Mean = mean(age))

df %>%
 group_by(relationship) %>%
 summarise(total = n())

df %>%
 group_by(relationship) %>%
 summarise(total = n(),
           mean_age = mean(age))

8. Mutasi Data

Fungsi mutate() digunakan untuk membuat variabel baru dari variabel lokal atau objek global yang ada. Variabel baru, seperti urutan, dapat juga ditentukan dalam mutate().

#Membuat variabel baru dari variabel yang ada atau global
df %>% 
 mutate(norm_age = (age - mean(age)) / sd(age))


#Mengalikan setiap elemen numerik dengan 1000 (nama "baru" ditambahkan ke nama variabel asli)

df %>%
 mutate_if(is.numeric,
           funs(new = (. * 1000))) %>%
           head()

8. Menggabungkan Data

Fungsi join() digunakan untuk menggabungkan baris dari tabel yang dipisahkan yang memiliki ID kunci utama atau beberapa variabel umum lainnya. Ada banyak varian untuk menggabungkan data, tapi dalam hal ini hanya akan digunakan beberapa cara penggabungan yang dapat dilihat pada contoh berikut:

#Membuat ID variabel yang akan di gunakan sebagai Kunci Primer (Primary Key)
df <- df %>%
 mutate(ID = seq(1:nrow(df))) %>%
 select(ID, everything())

#Membuat dua tabel (sengaja tumpah tindih untuk memudahkan penggabungan)

table_1 <- df[1:50 , ] %>%
 select(ID, age, education_lvl)

table_2 <- df[26:75 , ] %>%

 select(ID, gender, INCOME)

#Penggabungan kiri dari tabel 2 ke tabel 1

left_join(table_1, table_2, by = "ID")

#Penggabungan kanan dari tabel 1 ke tabel 2

right_join(table_1, table_2, by = "ID")

#Menggabungkan tabel dengan hanya mempertahankan data yang lengkap

inner_join(table_1, table_2, by = "ID")

#Menggabungkan semua tabel (semua nilai)

full_join(table_1, table_2, by = "ID"

Demikian demonstrasi dari beberapa keunggulan packages 'dplyr', jika masih bingung dengan penjelasan terkait syntax, bisa di coba aja sendiri syntax yang ada. Semoga bermanfaat

Have Fun :)
Previous
Next Post »


:) :( hihi :-) :D =D :-d ;( ;-( @-) :P :o -_- (o) :p :-? (p) :-s (m) 8-) :-t :-b b-( :-# =p~ $-) (y) (f) x-) (k) (h) cheer lol rock angry @@ :ng pin poop :* :v 100

Weekly