Pendahuluan

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

Hubungan Suhu dengan Total Penyewaan

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.

Distribusi Penyewaan Berdasarkan Musim

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.

Distribusi Penyewaan Berdasarkan Kondisi Cuaca

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.

Pengaruh Hari Libur terhadap Pengguna Terdaftar

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.

Hubungan Kecepatan Angin dengan Total Penyewaan

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.

Tren Tahunan Penyewaan per Bulan

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.

Kesimpulan

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.