Manajemen Data dengan Tidyverse
Cara Praktik
Silakan siapkan aplikasi RStudio di perangkat masing-masing, lalu buatlah file RMarkdown baru dan salin bagian kodenya saja untuk ditempelkan ke dalam setiap chunk RMarkdown; selanjutnya, jalankan kode secara bertahap baris demi baris menggunakan shortcut Ctrl + Enter atau tombol run current chunk agar alur kerjanya lebih mudah dipahami dan outputnya sesuai.
Tidyverse
Tidyverse adalah kumpulan package R yang berfungsi untuk melakukan pengolahan data seperti import, subset, visualisasi, transformasi, dan lain sebagainya. Tidyverse diciptakan oleh Hadley Wickham dan timnya dengan tujuan menyediakan semua tools untuk membersihkan, merapikan dan bekerja dengan data.
Terdapat ggplot2 untuk visualisasi data, yang
memungkinkan pengguna membuat grafik yang kompleks dengan sintaks yang
elegan. dplyr digunakan untuk data wrangling,
yaitu manipulasi data seperti filter, sort, dan
agregasi. read membantu dalam reading data
dari berbagai format seperti CSV dengan cara yang cepat dan efisien.
tibble menawarkan modern data frames, struktur
data yang lebih baik dari data.frame tradisional di R.
Di bagian bawah, lubridate mempermudah pengguna dalam working with dates, seperti parsing dan manipulasi tanggal/waktu. forcats mendukung dealing with factors, yaitu pengelolaan data kategorik di R. tidyr berperan penting dalam data tidying, membantu merapikan data agar sesuai dengan prinsip tidy data. purrr mempermudah iterasi dan manipulasi list atau vektor secara rapi dan konsisten, menggantikan kebutuhan looping (perulangan) tradisional.
Install Tidyverse
Silakan perhatikan blok kode di bawah; baris
#install.packages(“tidyverse”) diawali dengan tanda pagar (#) yang
berarti baris tersebut saat ini berstatus sebagai komentar dan tidak
akan dijalankan oleh R. Jika ini adalah pertama kali kalian menggunakan
Tidyverse ini untuk praktikum, silakan hapus tanda pagar
tersebut terlebih dahulu untuk menginstal package, namun jika sudah
pernah terinstal, biarkan tanda pagar tersebut tetap ada agar R langsung
menjalankan perintah library(tidyverse) untuk mengaktifkan fungsinya
tanpa melakukan proses instalasi ulang yang memakan waktu.
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.2.1 ✔ readr 2.2.0
## ✔ forcats 1.0.1 ✔ stringr 1.6.0
## ✔ ggplot2 4.0.3 ✔ tibble 3.3.1
## ✔ lubridate 1.9.5 ✔ tidyr 1.3.2
## ✔ purrr 1.2.2
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
Package dalam tidyverse
## [1] "broom" "conflicted" "cli" "dbplyr"
## [5] "dplyr" "dtplyr" "forcats" "ggplot2"
## [9] "googledrive" "googlesheets4" "haven" "hms"
## [13] "httr" "jsonlite" "lubridate" "magrittr"
## [17] "modelr" "pillar" "purrr" "ragg"
## [21] "readr" "readxl" "reprex" "rlang"
## [25] "rstudioapi" "rvest" "stringr" "tibble"
## [29] "tidyr" "xml2" "tidyverse"
Tibble
Tibble adalah format tabel data modern di R yang merupakan bagian dari ekosistem tidyverse. Tibble dirancang untuk memperbaiki kekurangan data.frame (format tabel bawaan R) agar proses analisis data menjadi lebih stabil dan minim kesalahan. Pada dasarnya Tibble masih merupakan dataframe, hanya saja tampilan print/outputnya lebih baik dibandingkan dataframe biasa.
Membuat tibble
Nama kolom tibble bisa memuat spasi
tibble_karyawan <- tibble(
`nama karyawan` = c("Andi", "Budi", "Cici"),
gaji = c(5000000, 6000000, 5500000),
tunjangan = list(c(100, 200), 150, c(150, 250, 50))
)
tibble_karyawan## # A tibble: 3 × 3
## `nama karyawan` gaji tunjangan
## <chr> <dbl> <list>
## 1 Andi 5000000 <dbl [2]>
## 2 Budi 6000000 <dbl [1]>
## 3 Cici 5500000 <dbl [3]>
Memanggil isi tibble
Cici memiliki 3 nilai tunjangan
## [1] 150 250 50
Data Flights dengan tibble
Silakan perhatikan blok kode di bawah; baris #install.packages diawali dengan tanda pagar (#) yang berarti baris tersebut saat ini berstatus sebagai komentar dan tidak akan dijalankan oleh R. Jika ini adalah pertama kali kalian menggunakan untuk praktikum, silakan hapus tanda pagar tersebut terlebih dahulu untuk menginstal package, namun jika sudah pernah terinstal, biarkan tanda pagar tersebut tetap ada agar R langsung menjalankan perintah library untuk mengaktifkan fungsinya tanpa melakukan proses instalasi ulang yang memakan waktu.
## # A tibble: 336,776 × 19
## year month day dep_time sched_dep_time dep_delay arr_time sched_arr_time
## <int> <int> <int> <int> <int> <dbl> <int> <int>
## 1 2013 1 1 517 515 2 830 819
## 2 2013 1 1 533 529 4 850 830
## 3 2013 1 1 542 540 2 923 850
## 4 2013 1 1 544 545 -1 1004 1022
## 5 2013 1 1 554 600 -6 812 837
## 6 2013 1 1 554 558 -4 740 728
## 7 2013 1 1 555 600 -5 913 854
## 8 2013 1 1 557 600 -3 709 723
## 9 2013 1 1 557 600 -3 838 846
## 10 2013 1 1 558 600 -2 753 745
## # ℹ 336,766 more rows
## # ℹ 11 more variables: arr_delay <dbl>, carrier <chr>, flight <int>,
## # tailnum <chr>, origin <chr>, dest <chr>, air_time <dbl>, distance <dbl>,
## # hour <dbl>, minute <dbl>, time_hour <dttm>
Merubah tibble menjadi dataframe
## year month day dep_time sched_dep_time dep_delay arr_time sched_arr_time
## 1 2013 1 1 517 515 2 830 819
## 2 2013 1 1 533 529 4 850 830
## 3 2013 1 1 542 540 2 923 850
## 4 2013 1 1 544 545 -1 1004 1022
## 5 2013 1 1 554 600 -6 812 837
## 6 2013 1 1 554 558 -4 740 728
## arr_delay carrier flight tailnum origin dest air_time distance hour minute
## 1 11 UA 1545 N14228 EWR IAH 227 1400 5 15
## 2 20 UA 1714 N24211 LGA IAH 227 1416 5 29
## 3 33 AA 1141 N619AA JFK MIA 160 1089 5 40
## 4 -18 B6 725 N804JB JFK BQN 183 1576 5 45
## 5 -25 DL 461 N668DN LGA ATL 116 762 6 0
## 6 12 UA 1696 N39463 EWR ORD 150 719 5 58
## time_hour
## 1 2013-01-01 05:00:00
## 2 2013-01-01 05:00:00
## 3 2013-01-01 05:00:00
## 4 2013-01-01 05:00:00
## 5 2013-01-01 06:00:00
## 6 2013-01-01 05:00:00
Memanggil nama kolom data frame bisa parsial
Ini tidak berlaku untuk tibble, nama kolom harus dipanggil lengkap.
## [1] 2013 2013 2013 2013 2013 2013
Merubah dataframe menjadi tibble
df_people <- data.frame(
id = c(1, 2, 3, 4, 5),
name = c("Adam", "Eva", "Miki", "Yola", "Jack"),
age = c(46, 48, 21, 19, 17),
gender = c("male", rep("female", 3), "male"),
drives = c(TRUE, TRUE, FALSE, TRUE, FALSE)
)
tibble_people <- as_tibble(df_people)
tibble_people## # A tibble: 5 × 5
## id name age gender drives
## <dbl> <chr> <dbl> <chr> <lgl>
## 1 1 Adam 46 male TRUE
## 2 2 Eva 48 female TRUE
## 3 3 Miki 21 female FALSE
## 4 4 Yola 19 female TRUE
## 5 5 Jack 17 male FALSE
Melihat summary
## id name age gender
## Min. :1 Length:5 Min. :17.0 Length:5
## 1st Qu.:2 Class :character 1st Qu.:19.0 Class :character
## Median :3 Mode :character Median :21.0 Mode :character
## Mean :3 Mean :30.2
## 3rd Qu.:4 3rd Qu.:46.0
## Max. :5 Max. :48.0
## drives
## Mode :logical
## FALSE:2
## TRUE :3
##
##
##
Melihat tipe variabel untuk tibble
## Rows: 5
## Columns: 5
## $ id <dbl> 1, 2, 3, 4, 5
## $ name <chr> "Adam", "Eva", "Miki", "Yola", "Jack"
## $ age <dbl> 46, 48, 21, 19, 17
## $ gender <chr> "male", "female", "female", "female", "male"
## $ drives <lgl> TRUE, TRUE, FALSE, TRUE, FALSE
Merubah tipe variabel gender menjadi factor
## id name age gender drives
## Min. :1 Length:5 Min. :17.0 female:3 Mode :logical
## 1st Qu.:2 Class :character 1st Qu.:19.0 male :2 FALSE:2
## Median :3 Mode :character Median :21.0 TRUE :3
## Mean :3 Mean :30.2
## 3rd Qu.:4 3rd Qu.:46.0
## Max. :5 Max. :48.0
Memanggil kolom pada tibble
Jika memanggil kolom menggunakan urutan, hasilnya berupa tibble
## # A tibble: 5 × 1
## name
## <chr>
## 1 Adam
## 2 Eva
## 3 Miki
## 4 Yola
## 5 Jack
Readr
readr adalah suatu package yang digunakan untuk import data seperti csv, txt, dan lain sebagainya. Package ini dinilai mampu membaca data lebih cepat dibandingkan read.csv, read.table dan sejenisnya. Data hasil import dari readr berbentuk tibble.
Persiapkan File Data
Sebelum memulai readr, silahkan mengunduh data sesuai folder melalui tautan berikut klik disini. Setelah berhasil diunduh, simpan file tersebut ke dalam direktori penyimpanan lokal Anda (contoh didalam folder dengan alamat: D:/Download D/Data) agar mudah diakses saat praktikum.
Memanggil Data
# memanggil data csv dengan separator koma (,)
penjualankoma<-read_csv("D:/Download D/Data/penjualan.csv")
penjualankoma## # A tibble: 5 × 5
## ID Nama Usia Gender Penjualan
## <chr> <chr> <dbl> <chr> <dbl>
## 1 321A Eiden 35 Laki-laki 1125600
## 2 44B Olivia 28 Perempuan 987000
## 3 984C Brandon 25 Laki-laki 2134000
## 4 653D Wendy 30 Perempuan 756000
## 5 178E Loki 26 Laki-laki 1698000
# memanggil data csv dengan separator titik koma (;)
penjualantitikoma <- read_csv2("D:/Download D/Data/penjualan2.csv")## ℹ Using "','" as decimal and "'.'" as grouping mark. Use `read_delim()` for more control.
## Rows: 5 Columns: 5
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ";"
## chr (3): ID, Nama, Gender
## dbl (2): Usia, Penjualan
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
## # A tibble: 5 × 5
## ID Nama Usia Gender Penjualan
## <chr> <chr> <dbl> <chr> <dbl>
## 1 321A Eiden 35 Laki-laki 1125600
## 2 44B Olivia 28 Perempuan 987000
## 3 984C Brandon 25 Laki-laki 2134000
## 4 653D Wendy 30 Perempuan 756000
## 5 178E Loki 26 Laki-laki 1698000
# memanggil data txt dengan separator tab
penjualantxtab <- read_tsv("D:/Download D/Data/penjualan.txt")## Rows: 5 Columns: 5
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: "\t"
## chr (3): ID, Nama, Gender
## dbl (1): Usia
## num (1): Penjualan
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
## # A tibble: 5 × 5
## ID Nama Usia Gender Penjualan
## <chr> <chr> <dbl> <chr> <dbl>
## 1 321A Eiden 35 Laki-laki 1125600
## 2 44B Olivia 28 Perempuan 987000
## 3 984C Brandon 25 Laki-laki 2134000
## 4 653D Wendy 30 Perempuan 756000
## 5 178E Loki 26 Laki-laki 1698000
# memanggil data txt dengan separator (|)
penjualantxtsep <- read_delim("D:/Download D/Data/penjualan2.txt", delim='|')## Rows: 5 Columns: 5
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: "|"
## chr (3): ID, Nama, Gender
## dbl (2): Usia, Penjualan
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
## # A tibble: 5 × 5
## ID Nama Usia Gender Penjualan
## <chr> <chr> <dbl> <chr> <dbl>
## 1 321A Eiden 35 Laki-laki 1125600
## 2 44B Olivia 28 Perempuan 987000
## 3 984C Brandon 25 Laki-laki 2134000
## 4 653D Wendy 30 Perempuan 756000
## 5 178E Loki 26 Laki-laki 1698000
# read_delim secara umum dapat memanggil file dengan berbagai macam separator
# memanggil data csv dengan separator (,)
penjualanreadelimkoma <- read_delim("D:/Download D/Data/penjualan.csv", delim=',')## Rows: 5 Columns: 5
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (3): ID, Nama, Gender
## dbl (1): Usia
## num (1): Penjualan
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
## # A tibble: 5 × 5
## ID Nama Usia Gender Penjualan
## <chr> <chr> <dbl> <chr> <dbl>
## 1 321A Eiden 35 Laki-laki 1125600
## 2 44B Olivia 28 Perempuan 987000
## 3 984C Brandon 25 Laki-laki 2134000
## 4 653D Wendy 30 Perempuan 756000
## 5 178E Loki 26 Laki-laki 1698000
# memanggil data txt dengan separator tab (\t)
penjualanreadelimtab <- read_delim("D:/Download D/Data/penjualan.txt", delim='\t')## Rows: 5 Columns: 5
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: "\t"
## chr (3): ID, Nama, Gender
## dbl (1): Usia
## num (1): Penjualan
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
## # A tibble: 5 × 5
## ID Nama Usia Gender Penjualan
## <chr> <chr> <dbl> <chr> <dbl>
## 1 321A Eiden 35 Laki-laki 1125600
## 2 44B Olivia 28 Perempuan 987000
## 3 984C Brandon 25 Laki-laki 2134000
## 4 653D Wendy 30 Perempuan 756000
## 5 178E Loki 26 Laki-laki 1698000
Menyimpan data
Fungsi-fungsi (write_csv, write_csv2, write_delim, dan write_tsv) berasal dari package readr. Setelah run kode ini maka file akan tersimpan di folder D:/Download D/Data/
# Definisikan alamat folder tujuan menyimpan agar tidak mengetik ulang, misalkan saya ada folder
path_tujuan <- "D:/Download D/Data/"
# mengeksport tibble ke csv dengan separator koma
write_csv(tibble_karyawan, paste0(path_tujuan, 'tibble_karyawancobakoma.csv'))
# mengeksport tibble ke csv dengan separator titik koma
write_csv2(tibble_karyawan, paste0(path_tujuan, 'tibble_karyawancobatitikkoma.csv'))
# mengeksport tibble ke txt dengan separator spasi
write_delim(tibble_karyawan, paste0(path_tujuan, 'tibble_karyawancobaspasi.txt'), delim=' ')
# mengeksport tibble ke txt dengan separator tab
write_tsv(tibble_karyawan, paste0(path_tujuan, 'tibble_karyawancobatab.txt'))