Visualisasi data ialah proses penyajian data dalam bentuk grafik atau tampilan visual agar informasi yang terkandung di dalamnya lebih mudah dipahami. Melalui visualisasi, pola, tren, serta hubungan antarvariabel dalam data dapat terlihat dengan lebih jelas dibandingkan hanya melihat angka dalam tabel. Dalam analisis statistik, visualisasi berperan penting sebagai langkah eksplorasi awal (exploratory data analysis). Dengan memvisualisasikan data, kita dapat memahami bagaimana data tersebar, apakah terdapat kecenderungan tertentu, serta faktor-faktor apa saja yang kemungkinan memengaruhi suatu variabel. Saat ini, yang menjadi fokus utama adalah visualisasi data kontinu secara bivariat. Data kontinu adalah data yang dapat mengambil nilai apa pun dalam rentang tertentu, seperti tinggi badan, berat badan, atau suhu. Kita ambil sebagai contoh dataset yang digunakan ialah dataset Bike Sharing yang berisi informasi tentang penggunaan sepeda di sebuah kota.

Studi Kasus

Dataset yang digunakan dalam studi kasus ini berasal dari sistem bike sharing di Washington, D.C., yang tersedia melalui UCI Machine Learning Repository. Dataset ini mencatat aktivitas penyewaan sepeda tiap harinya selama dua tahun. Data ini tidak hanya memuat jumlah total penyewaan sepeda, tetapi juga informasi terkait faktor-faktor yang diduga memengaruhi jumlah penyewaan, seperti: Musim (season), Kondisi cuaca (weathersit), Hari kerja atau bukan (workingday), Suhu (temp dan atemp), Kelembapan (hum), Kecepatan angin (windspeed) dan lainnya. Dengan adanya variabel-variabel tersebut, dataset ini sangat cocok digunakan untuk mempelajari apa saja faktor yang mempengaruhi jumlah penyewaan sepeda dan bagaimana faktor-faktor tersebut dapat memengaruhi penyewaan sepeda. Oleh karena itu, visualisasi ini memungkinkan dapat menganalisis pola penggunaan sepeda dalam dataset di berbagai kondisi dan membantu perencanaan layanan sepeda yang lebih efektif.

Data

Import data dari file CSV ke dalam R menggunakan fungsi read.csv() atau jika dari file Excel maka gunakan fungsi read_excel. Berikut kode untuk memuat data:

library(readxl)
bike_data <- read_excel("~/DataBikeSharing.xlsx")
colnames(bike_data)
##  [1] "instant"    "dteday"     "season"     "yr"         "mnth"      
##  [6] "holiday"    "weekday"    "workingday" "weathersit" "temp"      
## [11] "atemp"      "hum"        "windspeed"  "casual"     "registered"
## [16] "cnt"

Dari hasil di atas, terlihat bahwa dataset ini terdiri dari 16 variabel. Secara keseluruhan, struktur dataset ini memadukan variabel numerik kontinu dan variabel kategorik dalam satu kerangka data harian. Variabel numerik dalam dataset meliputi: 1. temp (suhu aktual) 2. atemp (suhu yang dirasakan) 3. hum (kelembapan) 4. windspeed (kecepatan angin) 5. casual (jumlah pengguna kasual) 6. registered (jumlah pengguna terdaftar) 7. cnt (total penyewaan sepeda).

Kemudian, untuk variabel kategorik meliputi antara lain season, weathersit, workingday, holiday, dan weekday. Untuk memudahkan interpretasi, beberapa variabel kategorik seperti season, weathersit, dan workingday telah dilakukan proses recode sehingga memiliki label yang lebih deskriptif (misalnya “Spring”, “Summer”, “Fall”, “Winter”). Proses recode ini tidak mengubah struktur data, justru memudahkan kita membuat visualisasi menjadi lebih informatif dan mudah dipahami oleh pembaca.

Visualisasi

Scatter Plot

Scatter plot adalah grafik yang menunjukkan hubungan antara dua variabel numerik. Setiap titik pada scatter plot mewakili satu pengamatan, dengan posisi titik ditentukan oleh nilai kedua variabel. Berikut contoh untuk scatter plot untuk cnt dan temp:

ggplot(bike_data, aes(x = temp, y = cnt)) +
  geom_point(color = "steelblue", alpha = 0.5) +
  labs(title = "Scatter Plot of Total Bike Rentals vs Temperature",
       x = "Temperature (temp)",
       y = "Total Rentals (cnt)") +
  theme_minimal()

Scatter plot di atas menunjukkan hubungan antara suhu (temp) dan jumlah penyewaan sepeda (cnt). Setiap titik pada grafik mewakili satu hari, dengan posisi horizontal menunjukkan suhu dan posisi vertikal menunjukkan jumlah penyewaan sepeda pada hari tersebut. Dari visualisasi ini terlihat bahwa terdapat pola positif antara suhu dan jumlah penyewaan sepeda, di mana semakin tinggi suhu, semakin banyak penyewaan sepeda yang terjadi. Hal ini menunjukkan bahwa cuaca yang lebih hangat cenderung meningkatkan penggunaan sepeda, sementara suhu yang lebih rendah mungkin membuat orang enggan untuk menyewa sepeda. Meskipun terdapat beberapa titik yang menyebar, pola umum menunjukkan bahwa suhu memiliki pengaruh positif terhadap jumlah penyewaan sepeda.

Boxplot Bivariate

Boxplot bivariate digunakan untuk membandingkan distribusi variabel numerik (cnt) berdasarkan kategori dari variabel lain, seperti musim (season). Berikut contoh boxplot bivariate untuk cnt dan season:

ggplot(bike_data, aes(x = season, y = cnt)) +
  geom_boxplot(fill = "lightblue", color = "darkblue") +
  labs(title = "Boxplot of Total Bike Rentals by Musim",
       x = "Musim",
       y = "Total Rentals (cnt)") +
  theme_minimal()

Boxplot bivariate di atas digunakan untuk membandingkan distribusi jumlah penyewaan sepeda (cnt) berdasarkan kategori musim (season). Setiap kotak pada grafik mewakili distribusi penyewaan sepeda untuk masing-masing musim, dengan garis di dalam kotak menunjukkan median, batas kotak menunjukkan kuartil pertama (Q1) dan kuartil ketiga (Q3), serta whisker yang memanjang menunjukkan rentang data. Dari visualisasi ini terlihat bahwa musim Summer memiliki jumlah penyewaan sepeda yang lebih tinggi dibandingkan dengan musim lainnya, dengan median yang berada di kisaran 5.000 penyewaan per hari. Sementara itu, musim Winter memiliki jumlah penyewaan yang lebih rendah, dengan median di bawah 3.000 penyewaan per hari. Hal ini menunjukkan bahwa penggunaan sepeda cenderung meningkat selama musim panas dan menurun selama musim dingin, kemungkinan karena faktor cuaca yang mempengaruhi kenyamanan dalam

Violin Plot Bivariate

Violin plot bivariate digunakan untuk membandingkan distribusi variabel numerik (cnt) berdasarkan kategori dari variabel lain, seperti kondisi cuaca (weathersit). Berikut contoh untuk violin plot untuk cnt dan weathersit:

ggplot(bike_data, aes(x = weathersit, y = cnt)) +
  geom_violin(fill = "lightcoral", color = "darkred", alpha = 0.6) +
  geom_boxplot(width = 0.1, fill = "white", color = "black", outlier.shape = NA) +
  labs(title = "Violin Plot of Total Bike Rentals by Kondisi Cuaca",
       x = "Kondisi Cuaca",
       y = "Total Rentals (cnt)") +
  theme_minimal()

Violin plot bivariate di atas digunakan untuk membandingkan distribusi jumlah penyewaan sepeda (cnt) berdasarkan kondisi cuaca (weathersit). Setiap bentuk violin mewakili distribusi penyewaan sepeda untuk masing-masing kondisi cuaca, dengan bagian yang lebih lebar menunjukkan bahwa lebih banyak hari memiliki jumlah penyewaan pada kisaran tersebut. Boxplot di dalam violin memberikan informasi statistik ringkas, seperti median dan kuartil. Dari visualisasi ini terlihat bahwa kondisi cuaca yang cerah (Clear) memiliki distribusi penyewaan sepeda yang lebih tinggi dan lebih padat dibandingkan dengan kondisi cuaca lainnya, seperti hujan ringan (Light Rain) atau hujan deras (Heavy Rain), yang memiliki distribusi penyewaan yang lebih rendah. Hal ini menunjukkan bahwa kondisi cuaca yang baik cenderung meningkatkan penggunaan sepeda, sementara kondisi cuaca yang buruk dapat mengurangi minat orang untuk menyewa sepeda.

Scatter Plot

ggplot(bike_data, aes(x = windspeed, y = cnt)) +
  geom_point(color = "darkred", alpha = 0.5) +
  labs(title = "Scatter Plot  Total Penyewaan Sepeda vs Kecepatan Angin",
       x = "Kecepatan Angin (windspeed)",
       y = "Total Rentals (cnt)") +
  theme_minimal()

Pada visualisasi sebelumnya, suhu (temp) memiliki pola yang terbentuk cukup jelas dan menunjukkan hubungan positif—semakin hangat cuaca, semakin tinggi jumlah penyewaan sepeda. Artinya, suhu merupakan faktor yang relatif kuat dalam memengaruhi keputusan orang untuk bersepeda. Pada scatter plot di atas, hubungan penyewaan sepeda dengan kecepatan angin terlihat cukup lemah dan tidak membentuk pola yang jelas. Ketika angin semakin kencang, jumlah penyewaan memang tampak sedikit menurun, tetapi polanya tidak sejelas hubungan dengan suhu. Maka dapat disimpulkan bahwa suhu memiliki pengaruh yang lebih dominan dibandingkan kecepatan angin. Selain itu juga, kemungkinan ada beberapa faktor cuaca atau lingkungan lain yang memang memengaruhi penyewaan sepeda, seperti musim (season) dan kondisi cuaca (weathersit).

Jitter Plot

ggplot(bike_data, aes(x = factor(workingday), y = cnt, color = factor(workingday))) +
    geom_jitter(width = 0.2, alpha = 0.5) +
    scale_colour_manual(values = c(
        "No" = "#E41A1C", 
        "Yes" = "#1F3A5F"
    )) +
    labs(
        title = "Jitter Plot: Total Bike Rentals by Workingday",
        x = "Workingday (No, Yes)",
        y = "Total Rentals (cnt)"
    ) +
    theme_minimal() +
    theme(
        plot.title = element_text(hjust = 0.5, face = "bold")
    )

Jitter plot ini bertujuan untuk membandingkan jumlah penyewaan sepeda antara hari libur dan bukan hari libur. Karena variabel “holiday” hanya terdiri dari dua kategori (Ya dan Tidak), titik-titik dibuat sedikit menyebar (jitter) agar tidak saling menumpuk dan pola perbandingannya lebih mudah terlihat. Dari grafik tersebut terlihat bahwa jumlah penyewaan sepeda cenderung lebih tinggi pada hari bukan libur dibandingkan hari libur. Artinya, sepeda lebih banyak digunakan saat hari biasa, kemungkinan untuk aktivitas rutin seperti bekerja atau sekolah. Sementara pada hari libur, jumlah penyewaan relatif lebih rendah dan tidak sebanyak hari non-libur. Jadi, dapat disimpulkan bahwa status hari (libur atau tidak) memiliki hubungan dengan jumlah penyewaan, di mana penyewaan lebih ramai pada hari non-libur.

Boxplot

ggplot(bike_data, aes(x = holiday, y = cnt)) +
    geom_boxplot(fill = "lightgreen", color = "darkblue") +
    labs(title = "Boxplot of Total Bike Rentals by Holiday",
         x = "Holiday",
         y = "Total Rentals (cnt)") +
    theme_minimal()

Boxplot di atas bertujuan untuk membandingkan distribusi jumlah penyewaan sepeda antara hari libur dan bukan hari libur, dengan melihat nilai tengah (median), sebaran data, serta kemungkinan perbedaan pola secara keseluruhan. Dari grafik terlihat bahwa ada garis di dalam kotak yang menunjukkan nilai tengah penyewaan sepeda (median). Pada bukan hari libur, nilai tengah penyewaan sepeda lebih tinggi dibandingkan hari libur. Ini berarti secara umum jumlah penyewaan sepeda cenderung lebih banyak pada hari biasa. Kemudian, kotak pada kategori “Yes” (hari libur) terlihat lebih melebar atau lebih tinggi secara vertikal yang berarti jumlah penyewaan lebih tidak konsisten atau beragam (kadang cukup tinggi, kadang cukup rendah). Sehingga dapat disimpulkan bahwa status hari libur atau tidak berpengaruh terhadap jumlah penyewaan sepeda dan penyewaan sepeda cenderung lebih tinggi pada bukan hari libur (hari biasa).

Kesimpulan

Visualisasi data kontinu bivariat ini menunjukkan bahwa jumlah penyewaan sepeda (cnt) dipengaruhi oleh berbagai faktor lingkungan dan kalender (hari libur dan hari kerja), dengan tingkat pengaruh yang berbeda-beda. Suhu memiliki hubungan positif yang cukup jelas, di mana semakin tinggi suhu, semakin meningkat jumlah penyewaan sepeda. Musim juga berpengaruh, dengan musim yang lebih hangat cenderung menunjukkan tingkat penyewaan yang lebih tinggi dibandingkan musim dingin. Lalu kondisi cuaca juga turut memengaruhi, di mana cuaca cerah mendorong peningkatan penggunaan sepeda, sedangkan cuaca buruk seperti hujan menurunkan jumlah penyewaan. Begitu pula dengan kecepatan angin yang cukup berpengaruh, ketika angin semakin kencang, jumlah penyewaan tampak sedikit menurun, tetapi dampaknya tidak sebesar faktor-faktor sebelumnya.

Selain itu, faktor hari juga menunjukkan hubungan yang cukup kuat. Penyewaan sepeda cenderung lebih tinggi pada hari kerja dibandingkan hari libur, yang mengindikasikan bahwa sepeda banyak digunakan untuk kebutuhan rutin seperti bekerja atau sekolah. Dengan demikian, dapat disimpulkan bahwa pola penyewaan sepeda sangat dipengaruhi oleh kombinasi faktor cuaca dan jenis hari (libur atau hari kerja). Sehingga melalui informasi ini, dapat ditentukan atau dilakukan perencanaan layanan sepeda yang lebih efektif di setiap kondisi lingkungan.