Studi Kasus

Dataset yang dianalisis berasal dari sistem bike sharing di Washington, D.C., yang mencatat aktivitas penyewaan sepeda setiap hari selama dua tahun. Data ini mencakup berbagai informasi seperti jumlah penyewa (casual, registered, dan cnt), kondisi cuaca (suhu aktual dan suhu terasa), serta tipe hari (hari libur nasional, hari kerja, dan hari dalam seminggu).Pada tahap ini analis mulai bertanya:

  1. Apakah terdapat perbedaan signifikan antara jumlah penyewaan sepeda di hari libur dibandingkan dengan hari biasa?
  2. Bagaimana hubungan antara suhu aktual dan suhu terasa dalam dataset penyewaan sepeda, dan di rentang suhu manakah data paling banyak penyewaan sepeda terjadi?
  3. Bagaimana pola distribusi penyewaan di hari Jumat dan hari Minggu?
  4. Bagaimana distribusi pengguna terdaftar antara hari kerja dan hari libur kerja

Untuk menjawab keempat pertanyaan analisis tersebut, digunakan beberapa visualisasi bivariate yang mengeksplorasi hubungan antar variabel dalam dataset penyewaan sepeda. Boxplot holiday vs cnt digunakan untuk melihat perbedaan jumlah penyewaan antara hari libur dan hari biasa. Hexbin plot temp vs atemp membantu memahami korelasi antara suhu aktual dan suhu terasa serta rentang suhu dominan. Violin plot Friday vs Sunday membandingkan pola penyewaan di hari Jumat (akhir pekan kerja) dan Minggu (hari libur). Jitter plot registered vs working day mengamati perilaku pengguna terdaftar berdasarkan jenis hari kerja. Keempat visualisasi ini secara bersama memberikan pemahaman komprehensif tentang bagaimana tipe hari dan kondisi suhu memengaruhi pola penyewaan sepeda.

Memuat Data dan Menjelajahi Struktur Data

Import data dari file CSV ke dalam R menggunakan fungsi read.csv(). Pastikan untuk menyesuaikan path file dengan lokasi di mana dataset disimpan di komputer Anda. Berikut adalah kode untuk memuat data:

Load Data

suppressPackageStartupMessages({
  suppressWarnings({
    library(ggplot2)
    library(tidyr)
    library(DT)
    library(hexbin)
    library(viridis)
    library(dplyr)
    library(knitr)})
})
bike_day <- read.csv("C:/Users/ASUS/Downloads/bike_day.csv", sep=";")
bike_day
colnames(bike_day)
##  [1] "instant"    "dteday"     "season"     "yr"         "mnth"      
##  [6] "holiday"    "weekday"    "workingday" "weathersit" "temp"      
## [11] "atemp"      "hum"        "windspeed"  "casual"     "registered"
## [16] "cnt"
datatable(bike_day, options = list(pageLength = 5, autoWidth = TRUE))

Deskripsi Data Numerik

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)

Visualisasi Data Kontinu (Bivariat)

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 adalah contoh kode untuk membuat scatter plot antara cnt dan temp:

ggplot(bike_day, 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 Bivariat

Boxplot bivariate digunakan 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(bike_day, 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.

Violyn Plot Bivariat

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(bike_day, 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.

Boxplot (cnt vs holiday)

Boxplot bivariate digunakan untuk membandingkan distribusi variabel numerik (cnt) berdasarkan kategori dari variabel lain, seperti liburan (holiday). Berikut adalah kode untuk membuat boxplot bivariate antara cnt dan holiday:

ggplot(bike_day, aes(x = holiday, y = cnt, fill = holiday)) +
  geom_boxplot(alpha = 0.7, outlier.size = 1) +
  coord_cartesian(ylim = quantile(bike_day$cnt, c(0.05, 0.95))) +
  labs(title = "Boxplot: Total Penyewa Sepeda (cnt) berdasarkan Holiday",
       x = "Holiday",
       y = "Total Penyewa (cnt)") +
  theme_minimal()

Boxplot digunakan untuk membandingkan distribusi jumlah penyewaan sepeda berdasarkan hari libur. Pada hari biasa median penyewa berada di sekitar angka 4.800, sementara pada hari libur mediannya lebih rendah yaitu sekitar 3.800. Hal ini menunjukkan bahwa secara rata-rata, jumlah penyewa sepeda justru lebih tinggi pada hari biasa dibandingkan hari libur.Namun, berdasarkan nilai tertinggi penyewa sepeda di hari biasa mencapai sekitar 5.900, sedangkan di hari libur mencapai sekitar 6.000. Artinya, meskipun rata-rata hari biasa lebih ramai, lonjakan pengguna tertinggi justru terjadi di hari libur.Dengan demikian, dapat disimpulkan bahwa hari biasa cenderung lebih konsisten ramai dengan penyewa yang stabil, sementara hari libur memiliki variasi lebih besar dengan potensi lonjakan tinggi namun juga berpotensi lebih sepi.

Hexbin Plot (tempt vs atemp)

Hexbin plot bivariate digunakan untuk memvisualisasikan hubungan antara dua variabel numerik dengan jumlah data yang sangat besar, di mana titik-titik data dikelompokkan ke dalam bentuk segi enam (hexagon). Warna pada setiap hexagon menunjukkan kepadatan atau frekuensi data di area tersebut, sehingga memudahkan kita melihat konsentrasi data tanpa tumpang tindih titik yang berlebihan. Berikut adalah kode untuk membuat hexbin plot antara temp dan atemp :

ggplot(bike_day, aes(x = temp, y = atemp)) +
  geom_hex(bins = 20) +
  scale_fill_gradient(low = "orange", high = "black") + 
  labs(title = "Hexbin Plot: temp vs atemp",
       x = "Suhu Aktual (temp)",
       y = "Suhu Terasa (atemp)",
       fill = "Jumlah Data") +
  theme_minimal()

Berdasarkan hexbin plot yang memperlihatkan hubungan antara suhu aktual (temp) dan suhu terasa (atemp), dapat dilihat bahwa kedua variabel ini memiliki korelasi positif yang kuat, ditandai dengan pola data yang membentuk garis diagonal dari kiri bawah ke kanan atas. Artinya, ketika suhu aktual naik, suhu terasa juga ikut naik, dan sebaliknya.Area dengan frekuensi tertinggi (warna hitam) terkonsentrasi di sekitar suhu aktual 0,4 hingga 0,6 dan suhu terasa 0,4 hingga 0,6. Ini menunjukkan bahwa sebagian besar hari berada pada kondisi suhu menengah yang nyaman untuk bersepeda. Sementara itu, area dengan warna orange di bagian tepi plot (suhu di bawah 0,2 atau di atas 0,7) lebih jarang terjadi yang mengindikasikan kondisi suhu ekstrem (terlalu dingin atau terlalu panas).Dengan demikian, bahwa penyewaan sepeda paling banyak terjadi pada rentang suhu menengah yang nyaman, sementara suhu ekstrem cenderung jarang terjadi.

Violyn Plot (weekday vs cnt)

Violin plot bivariate digunakan untuk membandingkan distribusi variabel numerik (cnt) berdasarkan kategori dari variabel lain yaitu hari (weekday). Berikut adalah kode untuk membuat violyn plot bivariate antara weekday dan cnt:

# Hitung rata-rata cnt per hari
weekday_mean <- bike_day %>%
  group_by(weekday) %>%
  summarise(mean_cnt = mean(cnt))

# Ambil hari tertinggi dan terendah
top_bottom <- weekday_mean %>%
  arrange(mean_cnt) %>%
  slice(c(1, n()))

# Filter data hanya untuk 2 hari itu
bike_2days <- bike_day %>%
  filter(weekday %in% top_bottom$weekday)

# Violin plot untuk 2 hari saja
ggplot(bike_2days, aes(x = weekday, y = cnt, fill = weekday)) +
  geom_violin(alpha = 0.6, trim = FALSE) +
  geom_boxplot(width = 0.15, fill = "white", outlier.size = 1) +
  labs(title = "Violyn Plot: Perbandingan Hari Paling Ramai vs Paling Sepi",
       x = "Hari",
       y = "Total Penyewa (cnt)") +
  theme_minimal()

Berdasarkan violyn plot yang membandingkan total penyewa sepeda paling ramai dan paling sepi dengan mengambil dua hari yaitu hari Jumat dan hari Minggu terlihat bahwa hari Jumat termasuk yang paling ramai dan hari Minggu yang paling sepi. Bentuk violin menunjukkan sebaran data, di mana bagian yang lebih lebar berarti nilai tersebut lebih sering terjadi. Pada hari Jumat, bagian violin terlihat cukup lebar pada kisaran 3.500 hingga 6.000, artinya jumlah penyewa paling sering berada di rentang tersebut. Sementara pada hari Minggu, data lebih banyak terkumpul di kisaran 3.000 hingga 5.000, dengan bentuk violyn yang lebih melebar ke bawah menunjukkan bahwa hari Minggu lebih sering memiliki jumlah penyewa yang rendah. Boxplot kecil di tengah violin memperkuat temuan ini dengan menunjukkan bahwa median penyewa di hari Jumat lebih tinggi dibanding hari Minggu. Dengan demikian, dapat disimpulkan bahwa hari Jumat secara konsisten lebih ramai dibanding hari Minggu, dan hari Minggu cenderung lebih sering mengalami sepinya penyewa.

Jitter Plot (working day vs registered)

Jitter plot digunakan untuk menampilkan sebaran titik data dari variabel numerik berdasarkan kategori dari variabel lain, sekaligus menghindari tumpang tindih antar titik sehingga pola sebaran data lebih terlihat jelas. Berikut adalah kode untuk membuat jitter plot bivariate antara registered dan working day:

ggplot(bike_day, aes(x = factor(workingday), y = registered)) +
  geom_jitter(width = 0.2, alpha = 0.5, color = "dodgerblue") +
  labs(title = "Jitter Plot: Registered berdasarkan Working Day",
       x = "Working Day (0 = Libur, 1 = Hari Kerja)",
       y = "Jumlah Penyewa Registered") +
  theme_minimal()

Jitter plot ini memperlihatkan perbandingan jumlah pendaftar penyewaan sepeda antara hari libur dan hari kerja. Setiap titik biru mewakili satu hari dan jumlah pendaftar penyewaan sepeda pada hari itu. Secara umum, penyebaran titik-titik biru di sisi Hari Kerja (angka 1) cenderung lebih tinggi di sumbu Y dibandingkan dengan di sisi Hari Libur (angka 0). Ini artinya, pada hari-hari kerja jumlah pendaftar penyewaan sepeda cenderung lebih banyak dan lebih bervariasi, dengan beberapa hari mencapai angka pendaftar yang sangat tinggi.Sebaliknya, di sisi Hari Libur titik-titik biru lebih banyak mengelompok di bagian bawah sumbu Y. Ini menunjukkan bahwa pada hari libur, jumlah pendaftar penyewaan sepeda cenderung lebih sedikit dan konsisten rendah. Meskipun mungkin ada beberapa hari libur dengan jumlah pendaftar yang lumayan, namun secara umum, puncak-puncak pendaftaran tertinggi hanya terjadi di hari kerja.Kesimpulannya lebih banyak orang yang mendaftar pada hari-hari kerja dengan kemungkinan kebutuhan yang lebih dominan dibandingkan dengan hari libur.

Kesimpulan

Visualisasi bivariate antara jumlah penyewaan sepeda (cnt) dengan variabel lain seperti suhu (temp), musim (season), kondisi cuaca (weathersit), holiday, weekday, atemp, working day, dan registered menunjukkan bahwa:

  1. Suhu memiliki hubungan positif dengan jumlah penyewaan sepeda, di mana suhu yang lebih tinggi cenderung meningkatkan jumlah penyewaan sepeda, sementara suhu yang lebih rendah dapat menurunkan minat untuk menyewa sepeda.
  2. Musim juga mempengaruhi penggunaan sepeda, dengan musim panas menunjukkan tingkat penyewaan yang lebih tinggi dibandingkan dengan musim dingin, kemungkinan karena faktor cuaca yang mempengaruhi kenyamanan dalam menggunakan sepeda.
  3. Kondisi cuaca yang cerah meningkatkan penggunaan sepeda, sementara kondisi cuaca yang buruk seperti hujan dapat mengurangi minat untuk menyewa sepeda, menunjukkan bahwa faktor cuaca memiliki pengaruh signifikan terhadap pola penggunaan sepeda.
  4. Hari biasa memiliki jumlah penyewaan yang lebih stabil dibanding hari libur, meskipun lonjakan tertinggi justru terjadi di hari libur. Hal ini menandakan bahwa hari libur berpotensi mendatangkan keramaian luar biasa meskipun risikonya lebih sepi.
  5. Suhu menengah merupakan rentang paling dominan dan nyaman untuk bersepeda, sementara suhu ekstrem seperti terlalu panas atau terlalu dingin jarang membuat penyewaan sepeda menjadi jarang.Hal ini menunjukkan bahwa kenyamanan termal menjadi faktor penting dalam keputusan penyewaan.
  6. Hari Jumat secara konsisten lebih ramai dibanding hari Minggu yang berarti mengindikasikan adanya pola akhir pekan di mana Jumat masih dipengaruhi aktivitas orang bekerja, sementara Minggu lebih didominasi pengguna rekreasi dengan jumlah lebih rendah.
  7. Pengguna terdaftar jauh lebih aktif di hari kerja dibanding hari libur, menegaskan bahwa mereka mayoritas adalah pengguna komuter yang mengandalkan sepeda untuk aktivitas rutin harian.

Dengan demikian, faktor-faktor tersebut memiliki pengaruh yang signifikan terhadap pola penggunaan sepeda dalam dataset ini. Informasi ini dapat digunakan untuk perencanaan layanan sepeda yang lebih efektif dan responsif terhadap kondisi lingkungan.