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

Aktivitas analisis data seringkali dilakukan dengan menggunakan data yang dihasilkan oleh program lain. Dalam modul ini Anda akan belajar bagaimana cara melakukan impor data kedalam R untuk selanjutnya melakukan manipulasi, visualisasi, atau pemodelan.

Alamat berkas

Tahap terpenting sebelum Anda melakukan impor data adalah menentukan alamat dimana berkas atau dokumen yang akan diimpor disimpan. Praktek terbaik pertama adalah menyimpan berkas data, skrip analisis, dan keluaran analisis di dalam satu direktori utama serta membaginya ke dalam beberapa subdirektori. Sebagai contoh, dalam pelatihan ini semua material disimpan dalam satu direktori "tidyds". Praktek terbaik kedua adalah menuliskan alamat berkas atau dokumen relatif terhadap direktori utama. Hindari menulis alamat berkas relatif terhadap alamat hardisk, contohnya "C:/Documents/.." atau "/home/aswansyahputra/Documents".

Dalam pelatihan ini Anda akan menggunakan paket here untuk menentukan dan menuliskan alamat berkas atau dokumen. Aktifkanlah paket here terlebih dahulu dengan menjalankan library(nama_paket)!

library('here')

Kemudian periksalah alamat direktori utama berada dengan cara menjalankan fungsi dr_here(). Mengapa direktori utama terdeteksi dan berada pada alamat tersebut?

dr_here()

Anda juga dapat menggunakan fungsi here() untuk mendapatkan alamat direktori utama, cobalah! Selanjutnya bagaimana cara untuk menuliskan alamat suatu berkas atau dokumen dengan cara menggunakan fungsi here()? Dalam contoh berikut Anda dapat menentukan alamat dari berkas 'udara_bandung.xlsx' yang tersimpan dalam subdirektori "data-raw".

library('here') # dimanakah alamat direktori utama/Project berada?
here("data-raw", "udara_bandung.xlsx")

Keuntungan menggunakan fungsi here() adalah Anda tidak perlu menuliskan alamat berkas atau dokumen secara manual. Selain itu fungsi here() juga akan menangani masalah perbedaan cara penulisan alamat yang umumnya berbeda antar sistem operasi komputer.

Impor berkas Microsoft Excel

Spreadsheet merupakan format dokumen yang sangat umum kita temukan dan pergunakan. Oleh karena itu, dalam modul ini pertama kita akan belajar bagaimana cara mengimpor berkas spreadsheet dari perkakas perkantoran Microsoft Excel yang notabene sering kita pergunakan.

Secara baku, R tidak dapat mengenali dan mengimpor berkas Excel (xls/xlsx). Namun kita dapat menggunakan paket readxl untuk melakukan hal tersebut. Adapun fungsi yang dapat dipergunakan adalah read_xls() atau read_xlsx() tergantung ekstensi berkas Excel tersebut. Namun, Anda cukup menggunakan satu fungsi read_excel() yang secara cerdas dapat menebak ekstensi berkas Excel yang Anda miliki.

Sekarang aktifkanlah paket readxl dan imporlah berkas "udara_bandung.xlsx" sebagai obyek R bernama udara_bandung. Berkas tersebut berisi informasi mengenai kualitas udara di kota Bandung pada periode tertentu. Jangan lupa untuk menuliskan alamat berkas dengan menggunakan fungsi here() seperti contoh di atas.

library(readxl)
udara_bandung <- read_excel(path = here("data-raw", "udara_bandung.xlsx"))

Jika tidak ada pesan galat, maka berarti Anda telah berhasil mengimpor berkas tersebut. Selamat! Sekarang Anda dapat melakukan inspeksi terhadap obyek udara_bandung tersebut. Ada berapa baris dan kolom yang ada pada obyek tersebut? (Petunjuk: fungsi nrow() dan ncol())

udara_bandung
nrow(udara_bandung)
ncol(udara_bandung)

Sekarang cobalah Anda buka berkas "udara_bandung.xlsx" menggunakan perkakas Microsoft Excel atau sejenisnya. Ada berapa lembar kerja (sheet) yang terdapat dalam berkas tersebut? Bagaimana cara Anda mengimpor lembar kerja ke-2 dari berkas Excel tersebut dan menyimpannya sebagai obyek R bernama udara_badung_gedebage? (Petunjuk: help(read_excel))

#excel_sheets(here("data-raw", "udara_bandung.xlsx")
udara_bandung_gedebage <- read_excel(here("data-raw", "udara_bandung.xlsx"), sheet = 2)
udara_bandung_gedebage

Anda mungkin ingin mengetahui bagaimana cara mengimpor semua lembar kerja dari berkas Excel secara sekaligus. Anda dapat menyimak video tutorial untuk melakukan hal tersebut melalui tautan ini.

Impor berkas delimited

Selain berkas spreadsheet dari Microsoft Excel atau perkakas perkantoran lain, salahsatu format berkas yang sering digunakan adalah delimited files. Berkas delimited merupakan format "universal" dalam artian dapat dapat dikenali, dibaca, dan dipergunakan oleh banyak program tanpa harus menggunakan fitur tambahan. Ekstensi berkas delimited yang sering kita jumpai umumnya adalah txt dan csv.

Di R terdapat berbagai fungsi dan paket yang dapat digunakan untuk membaca dan menulis)berkas delimited. Contohnya dari paket utils (paket bawaan dari R) terdapat fungsi read.table(), read.csv(), read.csv2(), read.delim(), dan read.delim2(). Selain itu ada fungsi read_table(), read_table2(), read_csv(), read_csv2(), read_delim(), dan read_delim2() dari paket readr. Terdapat juga fungsi dari paket lainnya dengan tujuan serupa misalnya fread() dari data.table dan vroom() dari vroom().

Mengapa ada banyak fungsi dan paket berbeda untuk tujuan yang sama? Hal utama yang menjadi dasar perbedaan adalah konsistensi, kemudahan penggunaan fungsi bagi pengguna, dan kecepatan dalam membaca berkas (Anda dapat membaca perbandingan kecepatan antar paket pada tautan ini). Berdasarkan pertimbangan dari aspek-aspek tersebut, dalam pelatihan ini kita akan fokus menggunakan paket vroom untuk mengimpor berkas delimited.

Aktifkanlah paket vroom dan bacalah dokumentasi fungsi vroom()!

library(vroom)
help(vroom)

Sekarang cobalah impor berkas "anggaran-dinkes-2013.csv" yang berada dalam subdirektori "data-raw" dengan menggunakan fungsi vroom() dan simpanlah sebagai obyek R dengan nama dinkes_2013_vroom! Kemudian lakukanlah inspeksi terhadap dinkes_2013_vroom tersebut. Ada berapa observasi dan variabel? Apa saja nama dan tipe dari setiap variabel data tersebut? (Petunjuk: fungsi str() serta summary())

dinkes_2013_vroom <- vroom(here("data-raw", "anggaran-dinkes-2013.csv"))
dinkes_2013_vroom
str(dinkes_2013_vroom)
summary(dinkes_2013_vroom)

Sebagai perbandingan, sekarang imporlah berkas yang sama namun menggunakan fungsi read.csv() dari paket utils dan simpanlah hasilnya sebagai obyek R bernama dinkes_2013_utils! Lakukanlah inspeksi serupa dengan dinkes_2013_vroom. Apakah ada perbedaan yang Anda temukan? (Catatan: Anda tidak perlu menjalankan library(utils) karena paket utils secara otomatis diaktifkan saat sesi R dimulai)

dinkes_2013_utils <- read.csv(here("data-raw", "anggaran-dinkes-2013.csv"))
dinkes_2013_utils
str(dinkes_2013_utils)
summary(dinkes_2013_utils)

Anda dapat menggunakan fungsi class() untuk mengetahui jenis dari suatu obyek R. Apa hasil yang muncul saat Anda menjalankan fungsi tersebut pada dinkes_2013_vroom dan dinkes_2013_utils? Jika terdapat perbedaan, dapatkah Anda menjelaskannya? (Petunjuk: ?nama_fungsi)

class(dinkes_2013_vroom)
class(dinkes_2013_utils)

Terakhir lakukanlah perbandingan antara jenis data pada kolom "program" dari masing-masing dataset tersebut! Anda dapat mengekstrak kolom dari suatu dataframe menggunakan operator $ dengan format nama_tabel$nama_kolom. Gunakanlah fungsi class() seperti di atas! (Petunjuk: stringsAsFactors = TRUE)

class(dinkes_2013_vroom$program)
class(dinkes_2013_utils$program)

Impor banyak berkas delimited

Bukalah subdirektori "data-raw" baik melalui Files pane (Ctrl + 5) atau melalui Files explorer komputer Anda. Di dalam subdirektori tersebut terdapat beberapa berkas yang berisi informasi mengenai anggaran Dinas Kesehatan Kota Bandung pada tahun 2013 hingga 2018. Bagaimana cara untuk mengimpor semua berkas tersebut secara sekaligus?

Anda akan diperkenalkan dengan tiga cara untuk mencapai hal tersebut. Cara pertama adalah dengan menggunakan sistem perulangan for loop, cara kedua adalah dengan menggunakan functional iteration bawaan R, dan cara ketiga adalah dengan menggunakan fungsi vroom().

Ketiga cara yang akan dilakukan memiliki satu tahap pertama yang sama, yaitu membuat daftar alamat berkas-berkas yang akan diimpor. Anda dapat membuat daftar alamat tersebut dengan cara menggunakan fungsi list.files(). Sesuaikanlah pattern agar alamat yang terseleksi hanyalah alamat berkas yang relevan! Simpan daftar alamat tersebut dalam obyek R bernama berkas_anggaran_dinkes.

berkas_anggaran_dinkes <- list.files(path = here("data-raw"), pattern = "anggaran-dinkes-", full.names = TRUE)
berkas_anggaran_dinkes

Berikut merupakan cara pertama untuk mengimpor berkas-berkas tersebut dengan menggunakan perulangan for loop:

anggaran_dinkes_forloop <- vector("list", length = length(berkas_anggaran_dinkes))
for (i in seq_along(berkas_anggaran_dinkes)) {
  anggaran_dinkes_forloop[[i]] <- read.csv(berkas_anggaran_dinkes[[i]])
}
anggaran_dinkes_forloop <- Reduce(rbind, anggaran_dinkes_forloop)
anggaran_dinkes_forloop

Berikut merupakan cara kedua dengan menggunakan functional iteration:

anggaran_dinkes_lapply <- lapply(berkas_anggaran_dinkes, read.csv)
anggaran_dinkes_lapply <- Reduce(rbind, anggaran_dinkes_lapply)
anggaran_dinkes_lapply

Terakhir adalah cara mengimpor banyak berkas delimited sekaligus menggunakan vroom():

anggaran_dinkes_vroom <- vroom(berkas_anggaran_dinkes)
anggaran_dinkes_vroom

Menurut Anda manakah cara yang paling mudah dan cepat? Pergunakan fungsi identical() untuk menguji apakah obyek anggaran_dinkes_forloop, anggaran_dinkes_lapply, dan anggaran_dinkes_vroom persis sama atau atau tidak! Apa kesimpulan yang dapat Anda tarik? (Petunjuk: jalankan identical() untuk setiap kombinasi obyek)

identical(anggaran_dinkes_forloop, anggaran_dinkes_lapply)
identical(anggaran_dinkes_forloop, anggaran_dinkes_vroom)#readcsv karakter ada yang dibaca sebagai factor
identical(anggaran_dinkes_lapply, anggaran_dinkes_vroom)

Menjinakan data

Bukalah berkas "roster.xlsx" yang berada dalam subdirektori "data-raw" menggunakan Microsoft Excel atau perkakas perkantoran sejenis. Dapatkah Anda memperkirakan masalah apa yang ada dalam berkas tersebut jika nanti diimpor ke R?

Sekarang imporlah data "roster.xlsx" tersebut dan simpanlah ke dalam obyek R bernama roster_raw1. Apakah ada pesan yang muncul? Pelajarilah struktur roster_raw1 dengan menggunakan fungsi inspeksi data yang sebelumnya Anda pergunakan di atas.

roster_raw1 <- read_excel(here("data-raw", "roster.xlsx"))
summary(roster_raw1)

Cobalah Anda ekstrak (subset) kolom "Employee Status" dan kolom "% Allocated" dengan menggunakan operator $! Perhatikan kode yang Anda tulis. (Petunjuk: nama_tabel$nama_kolom)

roster_raw1$`Employee Status`
roster_raw1$`% Allocated`

Jika Anda perhatikan, pada nama kolom yang Anda tulis secara otomatis oleh RStudio akan ditambahkan dua tanda backticks di awal dan akhir. Cobalah Anda hapus tanda tersebut dan jalankan ulang baris kode di atas. Dapatkah Anda menjelaskan apa yang terjadi? (Petunjuk: ?make.names)

Anda dapat menyelesaikan permasalahan di atas dengan menggunakan paket janitor. Sebagai contoh kita akan mengimpor ulang "roster.xlss" menjadi obyek R bernama roster_raw. Ada dua cara yang dapat dilakukan, berikut merupakan cara pertama:

library(janitor)
roster_raw <- read_excel(here("data-raw", "roster.xlsx"), .name_repair = make_clean_names) # make_clean_names() adalah fungsi dari paket janitor
colnames(roster_raw)

Sedangkan cara kedua adalah sebagai berikut:

roster_raw <- read_excel(here("data-raw", "roster.xlsx"))
roster_raw <- clean_names(roster_raw)
colnames(roster_raw)

Hal apakah yang menjadi perbedaan antara dua cara di atas? Apakah cara pertama dapat digunakan untuk fungsi vroom() dan read.csv()? (Petunjuk: dokumentasi masing-masing fungsi)

roster_raw memiliki masalah lain yaitu adanya baris kosong (baris no 8) dan kolom kosong (kolom "do_not_edit"). Selain itu kolom "date_hire" yang seharusnya berjenis tanggal justru menjadi berjenis numerik (konversi tanggal menjadi numerik ini sering terjadi pada berkas Excel). Baris kode berikut merupakan salah satu cara untuk memperbaiki roster_raw agar menjadi "jinak". Bacalah dokumentasi dari setiap fungsi yang digunakan!

roster <- remove_empty(roster_raw, which = c("rows", "cols"))
roster$hire_date <- excel_numeric_to_date(roster$hire_date)
roster

Selamat Anda telah menyelesaikan modul 2! 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.