Soal pengenalan pengolahan data dengan R.
Soal pengenalan pengolahan data dengan R.
Meskipun dalam banyak kasus dapat berfungsi sama, praktik terbaik di R adalah menggunakan $<-$ untuk assignment variabel global/lokal. Operator $=$ sebaiknya digunakan untuk menamai argumen di dalam pemanggilan fungsi.
Fungsi filter()
digunakan untuk menyaring baris berdasarkan kondisi tertentu. Untuk memilih kolom, fungsi yang digunakan adalah select()
.
Perintah library()
berfungsi untuk memuat paket yang sudah terpasang ke dalam sesi R agar fungsinya bisa digunakan. Untuk memasang paket, perintah yang digunakan adalah install.packages('tidyverse')
.
Fungsi group_by()
tidak mengubah tampilan data secara visual. Ia menambahkan metadata pengelompokan 'tak terlihat' yang akan memengaruhi cara kerja fungsi selanjutnya seperti summarise()
.
Fungsi dplyr
tidak pernah memodifikasi data frame asli. Mereka mengembalikan salinan data frame yang baru dan sudah dimodifikasi. Jika Anda ingin menyimpan perubahannya, Anda harus menyimpannya ke dalam variabel baru atau menimpa variabel lama.
Operator $<-$ adalah standar konvensional untuk assignment di R, membuatnya lebih mudah dibaca dan dibedakan dari assignment argumen fungsi yang menggunakan $=$.
Fungsi c()
yang merupakan singkatan dari 'combine' atau 'concatenate' adalah fungsi standar untuk membuat vector di R.
str()
adalah fungsi diagnostik yang sangat berguna untuk 'mengintip' struktur internal sebuah objek data, yang krusial sebelum melakukan analisis.
RStudio menyediakan antarmuka dengan banyak fitur (editor kode, console, panel plot, dll.) yang berjalan di atas R (mesinnya) untuk mempermudah alur kerja analisis data.
R menggunakan simbol # untuk menandai komentar. Teks apa pun setelah # di baris yang sama akan diabaikan oleh R, yang berguna untuk memberi penjelasan pada kode.
kategori
dan A
.kategori
adalah string 'A'.filter()
berfungsi untuk menyaring baris. Operator perbandingan $==$ digunakan untuk mengecek kesamaan, dan nilai character/string harus diapit tanda kutip.
Operator logis untuk 'DAN' di R adalah &
. Operator |
digunakan untuk 'ATAU'. Kondisi-kondisi ini ditempatkan di dalam fungsi filter()
.
tahun
.tahun
.tahun
bernilai negatif.Menggunakan tanda minus (-) di depan nama kolom di dalam select()
adalah cara singkat untuk mengecualikan atau menghapus kolom tersebut dari hasil.
Fungsi pembantu seperti starts_with()
, ends_with()
, dan contains()
dirancang untuk digunakan di dalam select()
untuk memilih sekelompok kolom berdasarkan pola namanya.
arrange()
adalah fungsi untuk mengurutkan. Secara default ia mengurutkan secara menaik (ascending). Untuk membaliknya (descending), kita perlu membungkus nama kolom dengan fungsi desc()
.
harga_diskon
yang nilainya adalah 80% dari kolom harga
.harga
menjadi 80% dari nilai aslinya.mutate()
adalah fungsi yang digunakan untuk membuat kolom baru atau memodifikasi kolom yang sudah ada berdasarkan operasi pada kolom lain.
group_by()
sendiri tidak mengubah data secara visual, tetapi mempersiapkannya untuk analisis per grup oleh fungsi lain seperti summarise()
atau mutate()
.
n()
adalah fungsi khusus dplyr
yang sangat berguna di dalam summarise()
untuk menghitung frekuensi atau jumlah data pada setiap grup yang telah dibuat oleh group_by()
.
penjualan_total
.produk
unik, beserta total unit terjualnya.penjualan_total
.Alur kerja group_by()
diikuti summarise()
menghasilkan sebuah data frame ringkasan baru, di mana setiap baris merepresentasikan satu grup.
head(n = 5)
adalah cara yang paling umum dan mudah dibaca untuk mengambil sejumlah baris pertama dari sebuah data frame. slice(1:5)
juga bisa digunakan.
data.frame
adalah struktur data sentral untuk analisis data di R, dirancang untuk menampung data tabular seperti spreadsheet.
Tipe data character
digunakan untuk data teks, yang selalu diapit oleh tanda kutip tunggal ('') atau ganda ("").
Vector di R harus berisi elemen dengan tipe data yang sama. Jika tipe data dicampur, R akan melakukan 'koersi' (pemaksaan tipe) ke tipe yang paling fleksibel, dalam hal ini adalah character
.
Operator %in%
sangat berguna untuk menyaring baris di mana nilai sebuah kolom cocok dengan salah satu nilai di dalam sebuah vector.
arrange()
dapat menerima beberapa nama kolom. Ia akan mengurutkan berdasarkan kolom pertama, lalu menggunakan kolom kedua untuk 'memecah seri' (tie-breaking) dari urutan pertama, dan seterusnya.
negara
yang berisi daftar nilai negara unik (tidak ada duplikat).negara
.distinct()
adalah fungsi dplyr
yang digunakan untuk menemukan dan menyimpan baris unik berdasarkan satu atau beberapa kolom.
NA
.NA
.NA
akan dianggap sebagai nol.Secara default, fungsi agregasi seperti mean()
, sum()
, dll. di R akan menghasilkan NA
jika ada satu saja nilai NA
di dalam data inputnya. Untuk mengatasinya, gunakan argumen na.rm = TRUE
, contoh: mean(nilai, na.rm = TRUE)
.
nama_lama
dengan nama baru.nama_lama
menjadi nama_baru
.nama_lama
.df
sebagai nama_baru
.rename()
adalah fungsi dplyr
yang didedikasikan untuk mengubah nama kolom. Sintaksnya adalah nama_baru = nama_lama
.
Menggunakan Projects adalah praktik terbaik untuk menjaga keteraturan. Ini mengikat direktori kerja ke proyek tersebut, sehingga path file menjadi lebih mudah dikelola dan proyek lebih portabel.
ifelse()
sangat berguna di dalam mutate()
untuk membuat kolom baru yang nilainya bergantung pada suatu kondisi logis. Misalnya, membuat kolom kategori 'Laris'/'Tidak Laris' berdasarkan jumlah penjualan.
summarise()
harus digunakan dengan fungsi agregasi (seperti mean
, sum
, n
, dll.). Menuliskan nama kolom saja di dalamnya tidak valid karena summarise
tidak tahu bagaimana cara meringkas kolom tersebut.
Fungsi slice()
secara spesifik digunakan untuk memilih baris berdasarkan posisi integer-nya. filter()
digunakan untuk memilih baris berdasarkan nilai/kondisinya.
Pipa membuat kode lebih mudah dibaca dengan mengubah fungsi bersarang (nested) menjadi rangkaian langkah linear yang logis.
Perintah library(nama_paket)
digunakan untuk memuat paket yang sudah terpasang ke dalam sesi R agar dapat digunakan.
Operator pipa (pipe), %>%
, mengambil output dari sisi kiri dan 'memasukkannya' sebagai input pertama ke fungsi di sisi kanan.
desc()
adalah fungsi pembantu yang digunakan di dalam arrange()
untuk membalik urutan pengurutan dari menaik menjadi menurun.
n()
adalah fungsi dplyr
yang tidak mengambil argumen dan secara otomatis menghitung jumlah baris pada grup saat ini.
Di R, $==$ digunakan untuk tes perbandingan kesamaan, sedangkan $=$ digunakan untuk assignment argumen fungsi.
Fungsi rename()
digunakan untuk mengubah nama kolom dengan sintaks nama_baru = nama_lama
.
filter()
mempertahankan baris yang memenuhi kondisi yang diberikan dan membuang sisanya.
select()
digunakan untuk memilih atau mengecualikan kolom dari sebuah data frame.
head()
adalah fungsi cepat untuk memeriksa beberapa baris pertama dari sebuah objek data untuk memastikan data dimuat dengan benar.
Tipe data logical
adalah fundamental untuk operasi kondisional seperti filter()
dan ifelse()
.
Perbedaan fundamentalnya terletak pada dimensi data yang mereka operasikan: 1. filter()
bekerja pada BARIS. Fungsi ini digunakan untuk menyaring atau memilih baris mana yang akan dipertahankan berdasarkan kondisi logis tertentu. Hasilnya adalah subset dari baris data asli, tetapi jumlah kolomnya tetap sama. Contoh: filter(mtcars, cyl > 6)
akan mengambil semua baris mobil yang memiliki lebih dari 6 silinder. 2. select()
bekerja pada KOLOM. Fungsi ini digunakan untuk memilih kolom mana yang ingin Anda lihat atau gunakan dalam analisis selanjutnya. Hasilnya adalah subset dari kolom data asli, tetapi jumlah barisnya tetap sama. Contoh: select(mtcars, mpg, hp)
akan mengambil hanya kolom mpg
dan hp
dari semua mobil.
Alur kerja group_by()
dan summarise()
adalah 'split-apply-combine' untuk analisis data agregat. 1. Split (group_by()
): Langkah pertama adalah memecah dataset besar menjadi sub-grup yang lebih kecil berdasarkan satu atau beberapa variabel kategori. group_by()
tidak mengubah data secara fisik, tetapi menambahkan 'label' grup. 2. Apply (summarise()
): Setelah data dikelompokkan, kita menerapkan fungsi agregasi (seperti mean()
, sum()
, n()
) pada setiap sub-grup secara terpisah. 3. Combine (summarise()
): Hasil dari setiap sub-grup kemudian digabungkan menjadi sebuah data frame ringkasan yang baru dan rapi. Kombinasi ini sangat kuat karena memungkinkan kita untuk beralih dari melihat data individual menjadi melihat tren dan pola pada tingkat kelompok dengan sangat efisien. Contoh Skenario: Seorang peneliti medis ingin mengetahui efektivitas rata-rata dari tiga jenis obat (Obat A, B, C) dalam menurunkan tekanan darah. Data berisi ID pasien, jenis obat yang diterima, dan penurunan tekanan darah. Peneliti akan menggunakan data %>% group_by(jenis_obat) %>% summarise(penurunan_rata2 = mean(penurunan_tekanan_darah))
untuk mendapatkan satu tabel ringkas yang menunjukkan efektivitas rata-rata per obat, yang memudahkannya untuk membandingkan.
Perilaku ini adalah salah satu konsep inti dan fitur keamanan di R dan dplyr
, yang disebut immutability (kekekalan). Penjelasan: Fungsi-fungsi dplyr
(dan sebagian besar fungsi di R) tidak pernah memodifikasi objek data asli. Sebaliknya, mereka bekerja pada salinan data. Saat Anda menjalankan df %>% filter(...)
, R akan: 1. Mengambil data frame df
. 2. Membuat salinan sementara di memori. 3. Melakukan operasi filter
pada salinan tersebut. 4. Mengembalikan salinan yang sudah dimodifikasi sebagai hasilnya. Hasil ini ditampilkan di console, tetapi karena tidak disimpan di mana pun, ia akan hilang. Data frame df
yang asli tidak pernah tersentuh, sehingga mencegah perubahan yang tidak disengaja. Solusi: Jika rekan kerja Anda ingin menyimpan hasilnya, dia harus secara eksplisit menugaskannya (assign) ke sebuah variabel menggunakan operator $<-$. Dia bisa menyimpannya ke variabel baru atau menimpa variabel lama. Menyimpan ke variabel baru (disarankan): df_kategori_x % filter(kategori == 'X')
Menimpa variabel lama: df % filter(kategori == 'X')
r # Pastikan dplyr sudah dimuat library(dplyr) # Asumsikan data_penjualan sudah ada hasil % # 1. Saring data hanya untuk kategori 'Elektronik' dan tahun 2023 filter(kategori_produk == 'Elektronik' & tahun == 2023) %>% # 2. Kelompokkan berdasarkan nama produk untuk menjumlahkan unit group_by(nama_produk) %>% # 3. Hitung total unit terjual untuk setiap produk summarise(total_unit = sum(unit_terjual)) %>% # 4. Urutkan dari total unit tertinggi ke terendah arrange(desc(total_unit)) %>% # 5. Ambil 3 baris teratas slice(1:3) # atau head(n=3) # Tampilkan hasilnya print(hasil)
Tidy Data adalah sebuah filosofi atau standar untuk menata data tabular agar konsisten dan mudah diproses oleh mesin. Aturannya sederhana:
Setiap variabel harus memiliki kolomnya sendiri.
Setiap observasi harus memiliki barisnya sendiri.
Setiap nilai harus memiliki selnya sendiri. Pentingnya untuk tidyverse
: Format Tidy Data sangat krusial karena seluruh ekosistem tidyverse
dirancang untuk bekerja dengan format ini. Untuk dplyr
: Fungsi-fungsi seperti group_by()
, summarise()
, dan mutate()
mengasumsikan bahwa Anda dapat merujuk pada variabel secara langsung sebagai nama kolom. Jika data tidak 'tidy' (misalnya, nama tahun menjadi header kolom, bukan nilai dalam satu kolom 'tahun'), operasi menjadi sangat rumit. Untuk ggplot2
(visualisasi): ggplot2
bergantung pada pemetaan (mapping) variabel (kolom) ke estetika visual (seperti sumbu x, y, warna, ukuran). Jika data Anda 'tidy', Anda bisa dengan mudah mengatakan aes(x = tahun, y = penjualan, color = negara)
. Jika data tidak 'tidy', pemetaan ini menjadi tidak mungkin dilakukan secara langsung, dan data harus dirapikan terlebih dahulu (misalnya menggunakan pivot_longer()
). Singkatnya, Tidy Data membuat data menjadi 'gramatikal', memungkinkan fungsi tidyverse
untuk bekerja secara efisien dan intuitif.