Praktikum Visualisasi Data Interaktif

Dokumen ini memperkenalkan visualisasi data interaktif menggunakan Shiny — framework R untuk membangun aplikasi web yang bisa dioperasikan oleh pengguna tanpa menulis kode.

Catatan Penting: Kode Shiny di halaman ini tidak dapat dijalankan langsung di browser. Salin setiap blok kode ke RStudio, simpan sebagai app.R, lalu klik Run App.

Yang akan dipelajari:


1. Apa Itu Visualisasi Interaktif?

Visualisasi statis (seperti plot() atau ggplot2) menghasilkan gambar tetap yang tidak bisa diubah oleh pengguna. Visualisasi interaktif memungkinkan pengguna untuk:

  • Memilih variabel yang ingin ditampilkan
  • Mengatur parameter (jumlah bin, rentang data)
  • Menjelajahi data secara mandiri tanpa menulis kode

Perbandingan Cepat

Statis Interaktif (Shiny)
Output Gambar PNG/PDF Aplikasi web
Pengguna Hanya melihat Bisa berinteraksi
Kebutuhan plot() / ggplot2 library(shiny)
Cocok untuk Laporan, paper Dashboard, eksplorasi

Pilih visualisasi interaktif ketika:
(1) Pengguna perlu menjelajahi berbagai subset data
(2) Ada banyak variabel yang bisa dipilih
(3) Audiens adalah pengambil keputusan non-teknis yang ingin eksplorasi mandiri

Tetap gunakan visualisasi statis untuk laporan akademis, jurnal, atau ketika hanya ada satu tampilan yang perlu dikomunikasikan.

Pertanyaan: Untuk presentasi hasil skripsi, mana yang lebih tepat — statis atau interaktif?


2. Struktur Dasar Aplikasi Shiny

Setiap aplikasi Shiny tersusun dari dua bagian:

app.R
├── ui     → Tampilan: apa yang dilihat pengguna
└── server → Logika: bagaimana data diproses

2.1 Template Paling Minimal

Pemisahan UI dan Server mengikuti prinsip separation of concerns:
- UI mendeskripsikan apa yang ditampilkan
- Server mendeskripsikan bagaimana data diproses

Ini membuat kode lebih mudah dibaca, diuji, dan dimodifikasi. Perubahan tampilan tidak perlu menyentuh logika, dan sebaliknya.

Pertanyaan: Jika Anda ingin mengubah warna latar belakang aplikasi, di bagian mana (UI atau Server) perubahan itu dilakukan?


3. Histogram Interaktif dengan Input Dropdown dan Slider

Aplikasi ini memungkinkan pengguna memilih variabel dari mtcars dan mengatur jumlah bin histogram.

Yang Terjadi Saat Anda Mengubah Input

  1. Pengguna geser slider → nilai input$bins berubah
  2. Shiny mendeteksi perubahan pada data_dipilih (reactive)
  3. output$histogram otomatis di-render ulang dengan data baru

reactive() membuat “blok kode yang otomatis dijalankan ulang” saat input yang digunakannya berubah. Tanpa reactive(), Anda harus menduplikasi kode pemrosesan di setiap renderXxx(). Dengan reactive(), perhitungan cukup dilakukan sekali dan hasilnya bisa dipakai di banyak output.

Pertanyaan: Mengapa data_dipilih didefinisikan sebagai reactive() dan bukan langsung mtcars[[input$variabel]] di dalam renderPlot()?


4. Menambahkan Tabel Interaktif

Paket DT menampilkan data frame sebagai tabel yang bisa dicari, diurutkan, dan difilter.

tabsetPanel() memisahkan beberapa output ke dalam tab berbeda, sehingga halaman tidak terlalu penuh. Pengguna bisa fokus pada satu tampilan sekaligus tanpa scrolling berlebihan. Ini praktik UI yang baik ketika ada beberapa jenis output (plot, tabel, ringkasan).

Pertanyaan: Apa perbedaan antara renderPlot() dan renderDT()? Mengapa tidak bisa ditukar?


5. Scatter Plot Interaktif

Pengguna bisa memilih variabel untuk sumbu X dan Y, serta mengaktifkan garis regresi.

checkboxInput() mengembalikan nilai TRUE (dicentang) atau FALSE (tidak dicentang). Di server, nilai ini diakses via input$garis. Pernyataan if (input$garis) { ... } berarti “jalankan kode di dalam kurung kurawal hanya jika kotak dicentang”.

Pertanyaan: Jika korelasi antara dua variabel mendekati 0, apakah masuk akal menampilkan garis regresi? Mengapa?


6. Referensi Elemen Input Shiny

Fungsi Jenis Kontrol Nilai yang Dikembalikan
selectInput() Dropdown String (nama pilihan)
sliderInput() Slider Angka
checkboxInput() Kotak centang TRUE / FALSE
radioButtons() Tombol pilihan String
textInput() Kotak teks String
numericInput() Kotak angka Angka

7. Latihan

Latihan 1 — Mudah: Tambahkan Input Warna

Modifikasi aplikasi Bagian 3 (Histogram) dengan menambahkan dropdown untuk memilih warna histogram.

# Bagian UI — tambahkan di sidebarPanel:
selectInput(
  inputId  = "warna",
  label    = "Warna:",
  choices  = c("steelblue", "tomato", "forestgreen"),
  selected = "steelblue"
)

# Bagian Server — ubah col di hist():
col = input$warna,

Latihan 2 — Mudah: Tambahkan Output Teks Mean dan Median

Lanjutkan dari Latihan 1. Tambahkan textOutput("statistik") di UI dan renderText() di server yang menampilkan nilai mean dan median variabel yang dipilih.

# UI — di dalam mainPanel():
plotOutput("histogram"),
textOutput("statistik")

# Server:
output$statistik <- renderText({
  x <- mtcars[[input$variabel]]
  paste0(
    "Mean: ",    round(mean(x), 2),
    " | Median: ", round(median(x), 2)
  )
})

Latihan 3 — Sedang: Scatter Plot dengan Pilihan Kelompok Warna

Modifikasi aplikasi Scatter Plot (Bagian 5) agar titik-titik diwarnai berdasarkan variabel kategori yang dipilih pengguna (misalnya cyl atau gear).

# Di selectInput untuk grup:
choices = var_kategori

# Di renderPlot, untuk mengakses variabel grup:
grp <- as.factor(mtcars[[input$grp]])

as.factor() mengubah kolom numerik seperti cyl menjadi kategori, sehingga setiap nilai unik mendapat warna berbeda. as.integer(grp) mengubah faktor menjadi angka untuk digunakan sebagai indeks warna.


Ringkasan

Fungsi Shiny Tipe Keterangan
selectInput() Input Dropdown pilihan
sliderInput() Input Slider angka
checkboxInput() Input Kotak centang TRUE/FALSE
reactive() Reaktif Kalkulasi yang diperbarui otomatis
renderPlot() Output Menghasilkan grafik
renderPrint() Output Menghasilkan teks/ringkasan
renderText() Output Menghasilkan teks sederhana
renderDT() Output Menghasilkan tabel interaktif