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.
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.
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.
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 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 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.
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).
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.
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).
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.