Visualisasi Data Bivariat (Kontinu dengan Kategorik dan Numerik) Analisis pada web ini menggunakan visualisasi bivariat. Visualisasi bivariat adalah teknik untuk menggambarkan hubungan antara dua variabel, yang dapat membantu mengidentifikasi pola korelasi, pengaruh, dan asosiasi antar variabel. Visualisasi ini memungkinkan kita memahami bagaimana satu variabel memengaruhi yang lain, mendeteksi tren, dan mengungkap wawasan yang lebih mendalam. Sebagai contoh, kita akan menggunakan dataset Bike Sharing yang sama untuk mengeksplorasi faktor-faktor seperti hari libur, kecepatan angin, hari dalam seminggu, dan tren bulanan. Studi Kasus Dataset ini berasal dari sistem bike sharing di Washington, D.C., yang diperoleh dari UCI Machine Learning Repository yang dapat di akses melalui link ini. Dataset ini mencatat aktivitas penyewaan sepeda setiap hari selama dua tahun. Setelah memahami distribusi dasar, kita sekarang fokus pada hubungan bivariat untuk mengungkap pengaruh faktor eksternal terhadap penyewaan. Pada tahap ini analis mulai bertanya: Bagaimana faktor seperti hari libur, kecepatan angin, hari dalam seminggu, dan tren bulanan memengaruhi jumlah penyewaan sepeda? Apakah terdapat pola korelasi positif atau negatif, atau perbedaan signifikan antar kategori? Untuk menjawab pertanyaan tersebut digunakan visualisasi bivariat lanjutan, yaitu visualisasi yang berfokus pada hubungan antara dua variabel, baik kontinu-kontinu atau kontinu-kategorik. Visualisasi ini membantu kita memahami asosiasi antar variabel, mengidentifikasi pola, dan mendeteksi faktor pengaruh. Dengan menggunakan visualisasi bivariat lanjutan, kita dapat melihat bagaimana variabel eksternal memengaruhi penyewaan sepeda, apakah stabil, bervariasi, atau memiliki tren tertentu. Informasi ini dapat memberikan wawasan yang lebih dalam tentang pola penggunaan sepeda dalam dataset dan membantu dalam perencanaan layanan sepeda yang lebih efektif. Memuat Data dan Menjelajahi Struktur Data Pertama, kita import data terlebih dahulu
databi <- read_xlsx("D:/PERKULIAHAN/SEMESTER 4/Visualisasi Data sem 4/data day.xlsx")
colnames(databi)
## [1] "instant" "dteday" "season" "yr" "mnth"
## [6] "holiday" "weekday" "workingday" "weathersit" "temp"
## [11] "atemp" "hum" "windspeed" "casual" "registered"
## [16] "cnt"
Berdasarkan output di atas, dataset ini memiliki 16 variabel, termasuk variabel numerik dan kategorik. Variabel numerik dalam dataset ini termasuk temp, atemp, hum, windspeed, casual, registered, dan cnt. Variabel-variabel ini memberikan informasi tentang suhu, kelembapan, kecepatan angin, jumlah penyewaan sepeda oleh pengguna kasual, jumlah penyewaan sepeda oleh pengguna terdaftar, dan total jumlah penyewaan sepeda. Berikut adalah deskripsi dari variabel-variabel numerik dalam dataset:
| No. | Variabel Numerik | Keterangan |
|---|---|---|
| 1. | temp | suhu dalam skala Celsius |
| 2. | atemp | suhu yang dirasakan |
| 3. | hum | kelembapan |
| 4. | windspeed | kecepatan angin |
| 5. | casual | jumlah penyewaan sepeda oleh pengguna kasual |
| 6. | registered | jumlah penyewaan sepeda oleh pengguna terdaftar |
| 7. | cnt | total jumlah penyewaan sepeda (casual + registered) |
variabel-variabel kategorik seperti season, weathersit, workingday, holiday, yr, mnth, dan weekday di-recode untuk memudahkan dalam interpretasi visualisasi dan analisis selanjutnya. Dengan melakukan recode pada variabel-variabel kategorik, kita dapat lebih mudah memahami dan menginterpretasikan visualisasi yang akan dibuat selanjutnya. Misalnya, ketika kita membuat grafik yang menunjukkan jumlah penyewaan sepeda berdasarkan musim, kita dapat langsung melihat label “Spring”, “Summer”, “Fall”, dan “Winter” daripada harus mengingat bahwa 1 = Spring, 2 = Summer, dan seterusnya. Hal ini membuat visualisasi lebih intuitif dan mudah dipahami oleh audiens. Struktur data setelah recode akan tetap sama, tetapi nilai-nilai dalam variabel season, weathersit, workingday, holiday, yr, mnth, dan weekday sekarang memiliki label yang lebih deskriptif. Ini akan memudahkan kita dalam membuat visualisasi yang lebih informatif dan mudah dipahami.
# Perbaiki data: ubah koma menjadi titik pada kolom numerik
databi <- databi %>%
mutate(across(c(temp, atemp, hum, windspeed, casual, registered, cnt),
~ as.numeric(gsub(",", ".", .))))
# Recode variabel kategorik
databimut <- databi %>%
mutate(
season = factor(season, levels = 1:4,
labels = c("Spring", "Summer", "Fall", "Winter")),
weathersit = factor(weathersit, levels = 1:4,
labels = c("Clear", "Cloudy", "Light Rain", "Snow")),
workingday = factor(workingday, levels = c(0, 1),
labels = c("No", "Yes")),
holiday = factor(holiday, levels = c(0, 1),
labels = c("No", "Yes")),
yr = factor(yr, levels = c(0, 1),
labels = c("2011", "2012")),
mnth = factor(mnth, levels = 1:12,
labels = c("Jan", "Feb", "Mar", "Apr", "May", "Jun",
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec")),
weekday = factor(weekday, levels = 0:6,
labels = c("Minggu", "Senin", "Selasa", "Rabu",
"Kamis", "Jumat", "Sabtu"))
)
datatable(databimut, options = list(pageLength = 5, autoWidth = TRUE))
Visualisasi ini menggunakan scatter plot untuk menunjukkan hubungan antara dua variabel numerik, yaitu suhu dan total penyewaan sepeda, membantu mengidentifikasi pola korelasi positif antara keduanya. 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 adalah contoh kode untuk membuat scatter plot antara cnt dan temp:
ggplot(databimut, 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.
Visualisasi ini memanfaatkan boxplot bivariate untuk membandingkan distribusi variabel numerik (cnt) berdasarkan kategori dari variabel lain, seperti musim (season). Berikut adalah contoh kode untuk membuat boxplot bivariate antara cnt dan season:
ggplot(databimut, 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
menggunakan sepeda.
Visualisasi ini menggunakan violin plot bivariate digunakan untuk membandingkan distribusi variabel numerik (cnt) berdasarkan kategori dari variabel lain, seperti kondisi cuaca (weathersit). Berikut adalah contoh kode untuk membuat violin plot bivariate antara cnt dan weathersit:
ggplot(databimut, 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.
Visualisasi ini menggunakan boxplot untuk membandingkan distribusi penyewaan sepeda oleh pengguna terdaftar berdasarkan apakah hari tersebut libur nasional atau tidak, membantu mengidentifikasi pengaruh hari libur terhadap perilaku pengguna tetap.
ggplot(databimut, aes(x = holiday, y = registered, fill = holiday)) +
geom_boxplot(alpha = 0.6) +
scale_fill_manual(values = c("No" = "purple", "Yes" = "orange")) +
labs(title = "Distribusi Penyewaan oleh Pengguna Terdaftar Berdasarkan Hari Libur",,
x = "Hari Libur", y = "Jumlah Pengguna Terdaftar") +
theme_minimal() +
theme(legend.position = "none")
Boxplot di atas membandingkan distribusi penyewaan sepeda oleh pengguna
terdaftar (registered) berdasarkan status hari libur (holiday). Setiap
kotak mewakili distribusi untuk hari biasa (“No”) dan hari libur
nasional (“Yes”), dengan median, kuartil, dan rentang data yang
ditampilkan. Dari visualisasi ini terlihat bahwa pada hari biasa, jumlah
penyewaan oleh pengguna terdaftar cenderung lebih tinggi, dengan median
sekitar 4.500 dan rentang yang lebih luas mencapai di atas 6.000,
dibandingkan hari libur yang memiliki median lebih rendah sekitar 3.500
dengan variasi yang lebih sempit. Pada hari libur, distribusi secara
keseluruhan lebih rendah, mengindikasikan penurunan penggunaan oleh
pelanggan tetap, mungkin karena rutinitas harian yang terganggu atau
preferensi aktivitas lain. Hal ini menunjukkan bahwa hari libur nasional
berdampak negatif terhadap penyewaan oleh pengguna terdaftar, yang dapat
menjadi pertimbangan untuk strategi promosi khusus pada hari-hari
tersebut.
Visualisasi ini memanfaatkan hexbin plot untuk menggambarkan kepadatan hubungan antara kecepatan angin dan total penyewaan sepeda, memungkinkan identifikasi pola konsentrasi data dan hubungan negatif potensial antara kedua variabel.
ggplot(databimut, aes(x = windspeed, y = cnt)) +
geom_hex(bins = 30) +
scale_fill_viridis_c(option = "plasma", direction = -1,
trans = "log", name = "Jumlah\nHari (log)") +
labs(title = "Kepadatan Hubungan Kecepatan Angin dan Total Penyewaan",
x = "Kecepatan Angin (ternormalisasi)", y = "Total Penyewaan (cnt)") +
theme_minimal(base_size = 12)
Hexbin ini menggambarkan kepadatan hubungan antara kecepatan angin dan
total penyewaan sepeda. Warna gelap menandakan area dengan banyak hari
sedangkan warna terang menandakan area dengan sedikit hari. Terlihat
konsentrasi terbesar pada kecepatan angin sekitar 0.1 sampai 0.2 dan
jumlah penyewaan sekitar 4000 sampai 6000 yang berarti pada banyak hari
dengan angin tenang sampai moderat permintaan cukup tinggi. Saat
kecepatan angin melebihi 0.3 kepadatan titik berkurang dan jumlah
penyewaan cenderung lebih rendah sehingga terlihat kecenderungan
penurunan permintaan pada kondisi berangin kencang. Perlu diingat bahwa
plot ini hanya menunjukkan pola kepadatan bukan hubungan sebab akibat
dan faktor lain seperti hujan atau musim mungkin turut mempengaruhi.
Hasil ini memberikan insight bahwa operator mempertimbangkan penyesuaian
penempatan armada atau promosi saat prakiraan angin diperkirakan tinggi
Maksud dari penyesuaian penempatan armada atau promosi saat prakiraan
angin diperkirakan tinggi adalah upaya untuk menjaga layanan tetap
efektif ketika kondisi cuaca kurang mendukung dengan cara menata ulang
distribusi sepeda dan mengelola permintaan pengguna. Penyesuaian armada
dilakukan dengan memindahkan atau menambah sepeda di lokasi yang lebih
aman atau masih berpotensi ramai serta mengurangi penempatan di area
yang berisiko atau cenderung sepi, sehingga ketersediaan tetap optimal.
Sementara itu promosi dilakukan dengan memberikan insentif seperti
diskon atau voucher agar pengguna menunda perjalanan ke waktu yang lebih
aman, atau mengarahkan mereka ke lokasi alternatif yang lebih nyaman,
sekaligus menyampaikan informasi keselamatan. Dengan demikian langkah
ini membantu menjaga keseimbangan antara ketersediaan layanan,
permintaan pengguna, dan aspek keselamatan.
Visualisasi ini menggunakan line plot untuk membandingkan tren rata-rata penyewaan sepeda per bulan antara dua tahun, memungkinkan pengamatan pola musiman dan pertumbuhan antar tahun dalam penggunaan layanan bike sharing.
monthly_avg <- databimut %>%
group_by(yr, mnth) %>%
summarise(avg_cnt = mean(cnt), .groups = "drop")
ggplot(monthly_avg, aes(x = mnth, y = avg_cnt, color = yr, group = yr)) +
geom_line(size = 1) +
geom_point(size = 2) +
scale_color_manual(values = c("2011" = "orange", "2012" = "purple")) +
labs(title = "Tren Rata-rata Total Penyewaan per Bulan",
subtitle = "Perbandingan tahun 2011 dan 2012",
x = "Bulan", y = "Rata-rata Total Penyewaan", color = "Tahun") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once per session.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
Line plot di atas menunjukkan tren rata-rata penyewaan sepeda (cnt) per
bulan, dibandingkan antara tahun 2011 (orange) dan 2012 (purple). Garis
mewakili perkembangan bulanan, dengan titik untuk nilai rata-rata. Dari
visualisasi ini terlihat bahwa tahun 2012 secara konsisten memiliki
rata-rata penyewaan lebih tinggi daripada 2011 di hampir semua bulan,
dengan puncak di bulan Agustus mencapai lebih dari 7.000 unit untuk
2012. Sedangkan pada tahun 2011 puncaknya berada pada bulan Juni sekitar
4.900 unit. Tren pada 2012 naik dari Januari hingga september, diikuti
penurunan secara berkala hingga bulan desember. Peningkatan jumlah
penyewaan sepeda dari tahun 2011 ke 2012 menunjukkan bahwa layanan bike
sharing semakin banyak dipakai orang. Ini mungkin karena layanan
diperbesar (misalnya, tambah sepeda atau stasiun baru) atau karena lebih
banyak orang tahu dan tertarik menggunakannya. Data seperti ini bisa
dipakai untuk merencanakan iklan atau promosi setiap tahun agar lebih
efektif.
Berdasarkan rangkaian visualisasi bivariat yang telah dilakukan, dapat disimpulkan bahwa faktor-faktor lingkungan dan temporal memiliki pengaruh yang signifikan terhadap pola penyewaan sepeda di Washington D.C. selama periode 2011–2012. Pertama, suhu (temp) dan suhu yang dirasakan (atemp) menunjukkan hubungan positif dengan jumlah penyewaan, di mana semakin hangat suhu, semakin tinggi permintaan sepeda. Pola ini diperkuat oleh analisis berbasis musim yang memperlihatkan bahwa musim panas (Summer) menjadi periode dengan penyewaan tertinggi, sementara musim dingin (Winter) mencatatkan angka terendah. Kedua, kondisi cuaca juga berperan penting, dengan cuaca cerah (Clear) mendorong penyewaan tinggi, sedangkan hujan dan salju menekan minat bersepeda. Ketiga, kecepatan angin berkorelasi negatif dengan total penyewaan; angin kencang cenderung mengurangi jumlah pengguna, terutama pengguna kasual. Keempat, hari libur nasional terbukti menurunkan penyewaan oleh pengguna terdaftar, mengindikasikan bahwa kelompok ini mayoritas adalah komuter yang tidak bersepeda saat libur. Kelima, pola harian menunjukkan bahwa akhir pekan (Sabtu dan Minggu) menjadi waktu dengan permintaan tertinggi, kemungkinan besar karena aktivitas rekreasi. Terakhir, analisis tren tahunan mengungkapkan pertumbuhan positif dari tahun 2011 ke 2012 di semua bulan, menandakan peningkatan popularitas layanan bike sharing. Secara keseluruhan, hasil eksplorasi ini menegaskan bahwa keputusan operasional seperti penempatan armada, penjadwalan petugas, dan strategi promosi perlu mempertimbangkan faktor cuaca, musim, hari libur, serta tren pertumbuhan tahunan agar layanan dapat berjalan optimal dan responsif terhadap kebutuhan pengguna.