knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>"
)

Dalam modul ini Anda akan diajak untuk memahami konsep tidy data dan melakukan proses transformasi data.

Tidy data

"Tidy data" adalah konsep representasi data agar dapat lebih mudah dipahami dan diolah. Selain itu, tidy data adalah format umum yang digunakan oleh paket-paket tidyverse, sehingga antar paket dapat terintegasi dengan baik dalam mengolah suatu data.

Dalam modul ini kita akan menggunakan dataset yang tersedia dari paket tidyr untuk memahami konsep tidy data. Silakan aktifkan paket tersebut terlebih dahulu!

library(tidyr)

Anda diminta untuk melakukan identifikasi karakteristik dari dataset-dataset yang tersedia, yaitu table1, table2, table3, table4a, table4b, dan table5. Cetaklah dataset tersebut pada layar dan berikan komentar Anda serta diagnosa Anda! Manakah yang termasuk tidy data dan manakah yang tidak termasuk tidy data?

table1

table1 termasuk "Tidy data" karena antar kolom dapat terintegrasi dengan baik sehingga mudah dipahami

table2

table2 tidak termasuk "Tidy data" karena nilai type seharusnya dijadikan kolom variabel baru, dengan value = count

table3

table3 tidak termasuk "Tidy data" karena bentuk rate char, seharusnya int. rate dari nilai data case dan population

table4a

table4a tidak termasuk "Tidy data" karena 1999, 2000 menjelaskan apa?

table4b

table4b tidak termasuk "Tidy data" karena 1999, 2000 menjelaskan apa?

table5

table5 tidak termasuk "Tidy data" karena beda century dan year? dan tipenya char harusnya int. rate bentuk char, seharusnya int. rate dari nilai data case dan population

Mempersiapkan tidy data

Setelah berhasil melakukan identifikasi mana tidy data dan mana yang bukan merupakan tidy data, sekarang Anda akan melakukan perbaikan pada dataset sehingga menjadi tidy data. Kita akan banyak menggunakan fungsi spread() dan gather() yang berasal dari paket tidyr. Pelajarilah kedua paket tersebut dengan membuka dokumentasi! (Petunjuk: ?nama_fungsi)

?spread
?gather

Sebagai contoh pertama, kita akan memperbaiki table2 sehingga menjadi tidy data. Cetaklah data tersebut pada layar untuk kembali mengingat alasan mengapa data tersebut tidak termasuk tidy data!

table2

Kasus seperti pada table2 tersebut dapat ditangani dengan cara memanfaatkan fungsi spread() seperti contoh yang akan diberikan pada chunk berikut. Dapatkah Anda menjelaskan mengapa fungsi spread() bermanfaat untuk kasus tersebut?

table2_tidy <- spread(table2, key = "type", value = "count")
table2_tidy

LANGKAH2:

pivot_wider(table2, names_from = "type", values_from = "count")

Selanjutnya kita akan menangani table4a. Masih ingatkah Anda mengapa table4a tidak termasuk dalam kategori tidak tidy data? Cetaklah data tersebut pada layar!

table4a

Kasus seperti pada table4a tersebut dapat diselesaikan dengan menggunakan fungsi gather(). Dapatkah Anda menyebutkan alasannya? Perhatikan contoh berikut:

table4a_tidy <- gather(table4a, key = "year", value = "cases", `1999`:`2000`)
table4a_tidy

LANGKAH2 :

table4a_tidy <- gather(table4a, key = "year", value = "cases", 2:3, convert = TRUE)#FALSE year jadi char
table4a_tidy

LANGKAH3:

pivot_longer(table4a, cols = `1999`:`2000`, names_to = "year", values_to = "cases")

Sekarang Anda dipersilakan untuk melakukan perbaikan serupa pada table4b namun gunakanlah "population" untuk argumen value. Cetaklah table4b terlebih dahulu dan kemudian simpan hasil perbaikan Anda dalam obyek R bernama table4b_tidy. Jangan lupa untuk mencetak table4b_tidy pada layar!

table4b
table4b_tidy <- gather(table4b, key = "year", value = "population", -country)
table4b_tidy

Perhatikan kode perbaikan untuk table4a dan table4b. Apakah ada perbedaaan yang Anda amati? Jika iya, mengapa pada keduanya perbaikan tetap dapat berhasil dilakukan?

Sekarang cobalah Anda cetak kembali table1 pada layar serta buatlah perbandingan dengan table4a_tidy dan table4b_tidy. Apa yang dapat Anda amati?

table1
table4a_tidy
table4b_tidy

Ya! Apabila table4a_tidy dan table4b_tidy digabungkan maka hasilnya akan menjadi table1. Dapatkah Anda menggabungkan table4a_tidy dan table4b_tidy tersebut menjadi satu? Simpanlah hasil penggabungan tersebut dalam obyek R bernama tb_small dan cetak hasilnya pada layar! (Petunjuk: fungsi merge())

tb_small<- merge(table4a_tidy, table4b_tidy)
tb_small

Selamat Anda telah berhasil memperbaiki data sehingga menjadi tidy data!

Transformasi data

Anda telah sukses membuat tb_small dengan menggunakan beberapa kombinasi fungsi (spread(), gather(), dan merge()). Perlu Anda ketahui tb_small atau table1 tersebut merupakan sebagian kecil dari data who dan population. Kedua data tersebut berasal dari paket tidyr. Anda dapat membaca dokumentasi kedua data tersebut dengan cara menjalankan ?who dan ?population. Apakah informasi yang terkandung dalam dua data tersebut?

Sekarang cetaklah data who dan population pada layar!

Datawho

?who

Data population

?population

Daripada mencetak keseluruhan data pada layar, Anda dapat menggunakan alternatif mencetak ringkasan atau struktur data saja. Lakukanlah hal tersebut pada who dan population! (Petunjuk: modul 2)

Struktur data who

str(who)

Struktur data population

str(population)

Sekarang kita akan membuat versi utuh dan lengkap dari tb_small. Data yang akan kita buat akan mencakup lebih banyak negara dan rentang waktu pengamatan yang lebih panjang. Paket dplyr merupakan "perkakas" yang sangat handal digunakan untuk mencapai tujuan tersebut. Aktifkanlah paket tersebut terlebih dahulu!

library(dplyr)

Sangat banyak fungsi yang terdapat pada paket dplyr, namun ada enam fungsi utama yang wajib Anda kuasai yaitu: select(), filter(), arrange(), mutate(), group_by(), dan summarise(). Silakan pelajari fungsi-fungsi tersebut dengan membaca dokumentasinya.

Dalam mempersiapkan versi utuh dari tb_small kita akan menggunakan beberapa kombinasi fungsi yang akan dijalankan secara berurutan. Pada contoh di modul ini Anda akan menggunakan dua jenis pendekatan untuk menuliskan fungsi berantai serta kemudian menyimpan hasilnya pada obyek masing-masing bernama tb_full_a dan tb_full_b.

Cara pertama:

tb1 <- gather(who, key = "key", value = "case", new_sp_m014:newrel_f65)
tb2 <- select(tb1, country, year, case)
tb3 <- group_by(tb2, country, year)
tb4 <- summarise(tb3, cases = sum(case, na.rm = TRUE))
tb5 <- ungroup(tb4)#setelah group_by lebih baik di ungroup lagi, karena setelah summarise biasanya akan dihilangkan satu layer group
tb6 <- left_join(tb5, population)
tb7 <- dplyr::filter(tb6, !is.na(population))
tb_full_a <- mutate(tb7, proportion = 100*cases/population)

tb_full_a

Cara kedua:

tb_full_b <- 
  who %>% 
  gather(key = "key", value = "case", new_sp_m014:newrel_f65) %>% 
  select(country, year, case) %>% 
  group_by(country, year) %>% 
  summarise(cases = sum(case, na.rm = TRUE)) %>% 
  ungroup() %>% 
  left_join(population) %>% #left join dengan data population
  filter(!is.na(population)) %>% 
  mutate(proportion = 100*cases/population)

tb_full_b

Buatlah ringkasan apa saja hal yang dilakukan pada setiap tahap transformasi data diatas! Anda dapat membuat ringkasan baik berdasarkan cara pertama atau cara kedua.

  1. new_sp_m014:newrel_f6 yang merupakan laporan kasus dalam bentuk redundan kolom dibuat kolom baru dengan nama key yang nilainya = case
  2. Menampilkan tb1 hanya pada kolom country, year, case
  3. Urutkan data tb2 berdasarkan country dan year
  4. Menjumlahkan variabel case pada tb3
  5. menghilangkan grouping
  6. Joining by country and year, tambahkan kolom baru population
  7. Tidak menampilkan kolom yang N/A
  8. Tambah kolom baru proportion dg rumus 100*cases/population

Berikan komentar Anda pada dua jenis cara penulisan kode di atas! Menurut Anda cara penulisan manakah yang lebih mudah dilakukan dan dipahami? Penulian kedua

Silakan periksa apakah tb_full_a dan tb_full_b identik satu sama lain dengan menggunkan fungsi identical()!

identical(tb_full_a, tb_full_b)

Selamat Anda telah menyelesaikan modul 3! Silakan jalankan "Ctrl + Shift + K" atau klik tombol "Knit" untuk membuat dokumen final.



vynspermadi/tidyds documentation built on Nov. 5, 2019, 12:06 p.m.