Sebagai data analyst di perusahaan penyedia layanan bike sharing, saya ditugaskan untuk memahami pola penggunaan sepeda dari waktu ke waktu. Dataset yang digunakan mencatat penyewaan harian di Washington D.C. selama dua tahun (2011–2012). Analisis ini bertujuan menjawab pertanyaan-pertanyaan berikut:
Bagaimana tren penyewaan sepeda secara keseluruhan? Apakah ada peningkatan dari tahun ke tahun?
Bagaimana pola musiman dalam penyewaan? Kapan puncak dan lembah terjadi?
Apakah ada perbedaan perilaku antara pengguna kasual dan terdaftar? Bagaimana kontribusi masing-masing terhadap total penyewaan?
Bagaimana perbedaan pola penyewaan antara hari kerja dan akhir pekan?
Dengan memahami pola-pola ini, perusahaan dapat mengoptimalkan penempatan armada, penjadwalan petugas, dan strategi promosi.
Data harian mencakup informasi tanggal, jumlah penyewaan oleh pengguna kasual (casual), terdaftar (registered), dan total (cnt). Selain itu terdapat variabel cuaca dan musim. Untuk keperluan time series, kita fokus pada kolom tanggal dan jumlah penyewaan. Berikut adalah cuplikan data setelah dilakukan recode pada variabel kategorik (musim, cuaca, hari libur, dll.) agar lebih mudah diinterpretasi.
# Baca data (sesuaikan path dengan lokasi file Anda)
databi <- read_xlsx("D:/PERKULIAHAN/SEMESTER 4/Visualisasi Data sem 4/data day.xlsx")
# 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"))
)
# Konversi kolom dteday ke format Date
databimut <- databimut %>%
mutate(dteday = as.Date(dteday))
Berikut adalah 6 baris pertama data yang akan digunakan:
databimut %>%
select(dteday, season, yr, casual, registered, cnt) %>%
head(6) %>%
knitr::kable(
format = "html",
col.names = c("Tanggal", "Musim", "Tahun", "Kasual", "Terdaftar", "Total"),
caption = "Cuplikan data bike sharing harian",
align = "c"
)
| Tanggal | Musim | Tahun | Kasual | Terdaftar | Total |
|---|---|---|---|---|---|
| 2011-01-01 | Spring | 2011 | 331 | 654 | 985 |
| 2011-01-02 | Spring | 2011 | 131 | 670 | 801 |
| 2011-01-03 | Spring | 2011 | 120 | 1229 | 1349 |
| 2011-01-04 | Spring | 2011 | 108 | 1454 | 1562 |
| 2011-01-05 | Spring | 2011 | 82 | 1518 | 1600 |
| 2011-01-06 | Spring | 2011 | 88 | 1518 | 1606 |
Visualisasi pertama menampilkan seluruh data harian (garis abu-abu tipis) dilapisi dengan garis smoothing LOESS (hijau) yang memperlihatkan tren jangka panjang dan pola musiman.##
# 1. Time series total penyewaan (cnt) dengan smoothing LOESS
ggplot(databimut, aes(x = dteday, y = cnt)) +
geom_line(alpha = 0.3, color = "gray50") +
geom_smooth(method = "loess", se = TRUE, color = "darkgreen") +
labs(title = "Tren Harian Penyewaan Sepeda",
subtitle = "Garis halus (LOESS) menunjukkan pola musiman dan tren jangka panjang",
x = "Tanggal", y = "Total Penyewaan (cnt)") +
theme_minimal()
Dari grafik ini, kita dapat melihat bahwa penyewaan sepeda berfluktuasi
setiap hari, namun secara umum terdapat pola musiman di mana penyewaan
meningkat drastis pada pertengahan tahun (musim panas) dan menurun pada
awal serta akhir tahun (musim dingin). Selain itu, terlihat tren
peningkatan dari tahun 2011 ke 2012, ditandai dengan garis smoothing
yang lebih tinggi di tahun kedua. Hal ini mengindikasikan bahwa layanan
bike sharing semakin populer dan banyak digunakan masyarakat.
Untuk memahami kontribusi masing-masing segmen pengguna, kita bandingkan garis smoothing dari jumlah penyewaan kasual dan terdaftar.
# 2. Perbandingan tren pengguna kasual vs terdaftar
ggplot(databimut, aes(x = dteday)) +
geom_smooth(aes(y = casual, color = "Kasual"), method = "loess", se = FALSE) +
geom_smooth(aes(y = registered, color = "Terdaftar"), method = "loess", se = FALSE) +
scale_color_manual(values = c("Kasual" = "orange", "Terdaftar" = "steelblue")) +
labs(title = "Tren Pengguna Kasual dan Terdaftar",
subtitle = "Perbandingan pola penggunaan jangka panjang",
x = "Tanggal", y = "Jumlah Penyewaan", color = "Tipe Pengguna") +
theme_minimal()
Grafik menunjukkan bahwa segmen pengguna terdaftar mempertahankan level
yang lebih tinggi dibandingkan segmen kasual sepanjang periode
pengamatan dengan fluktuasi musiman yang berulang sedangkan segmen
kasual bergerak pada level yang lebih rendah dengan puncak musiman yang
relatif lebih terfokus; pada periode awal kedua kelompok mengalami
kenaikan tetapi laju kenaikan pengguna terdaftar tampak lebih cepat
sehingga jarak antar kelompok meluas. Secara visual perbedaan level dan
pola musiman tampak nyata namun klaim tentang signifikansi memerlukan
pengujian statistik terpisah misalnya perbandingan rata rata berkala
atau pemodelan deret waktu untuk mengendalikan tren dan autokorelasi.
Implikasi untuk kebijakan harus mempertimbangkan perbedaan karakter
penggunaan ini namun keputusan operasional hendaknya didasarkan pada
hasil analisis kuantitatif lanjutan.
Untuk melihat perbedaan pola antar tahun secara lebih detail, kita pisahkan berdasarkan tahun.
# 3. Perbandingan tren antara hari kerja dan akhir pekan
# Hitung rata-rata bergulir 7 hari untuk memperhalus fluktuasi harian
databimut <- databimut %>%
arrange(dteday) %>%
group_by(workingday) %>%
mutate(rolling_avg = rollmean(cnt, k = 7, fill = NA, align = "right")) %>% #menghitung rata-rata dari 7 hari terakhir untuk setiap titik data, sehingga fluktuasi harian yang tajam menjadi lebih halus dan pola tren jangka panjang lebih mudah diamati
ungroup()
ggplot(databimut, aes(x = dteday, y = rolling_avg, color = workingday)) +
geom_line(size = 1) +
scale_color_manual(values = c("No" = "orange", "Yes" = "steelblue"),
labels = c("Akhir Pekan/Libur", "Hari Kerja")) +
labs(title = "Tren Penyewaan: Hari Kerja vs Akhir Pekan",
subtitle = "Rata-rata bergulir 7 hari untuk memperlihatkan pola yang lebih halus",
x = "Tanggal", y = "Rata-rata Penyewaan (7-hari)", color = "Tipe Hari") +
theme_minimal()
Grafik menunjukkan bahwa kedua seri mengikuti pola musiman yang serupa
sepanjang periode pengamatan, di mana kenaikan dan penurunan terjadi
pada waktu yang relatif sama. Garis hari kerja cenderung berada pada
level yang lebih tinggi dan bergerak lebih stabil dari waktu ke waktu,
sedangkan garis akhir pekan menunjukkan fluktuasi yang lebih besar
dengan beberapa lonjakan yang pada periode tertentu mendekati atau
bahkan melampaui level hari kerja. Pada awal periode pengamatan kedua
seri berada pada level yang relatif rendah, kemudian meningkat secara
bertahap hingga mencapai puncak pada pertengahan periode sebelum kembali
menurun menuju akhir waktu pengamatan. Penggunaan rata rata bergulir
membuat pola umum terlihat lebih halus sehingga pergerakan tren jangka
pendek dapat diamati dengan lebih jelas. Secara visual terlihat adanya
perbedaan pola antara kedua tipe hari, namun penilaian mengenai apakah
perbedaan tersebut benar benar signifikan memerlukan analisis
kuantitatif lanjutan yang mempertimbangkan tren dasar dan keterkaitan
waktu dalam data.
Berdasarkan analisis time series yang telah dilakukan, terlihat bahwa terjadi peningkatan jumlah penyewaan sepeda dari tahun 2011 ke 2012 yang mengindikasikan pertumbuhan popularitas layanan bike sharing di Washington D.C. Peningkatan ini perlu diantisipasi dengan persiapan ekspansi armada dan infrastruktur untuk mendukung pertumbuhan berkelanjutan.
Pola musiman juga sangat kuat, di mana penyewaan mencapai puncaknya pada musim panas dan menurun drastis pada musim dingin. Pola ini konsisten di kedua tahun dan menjadi dasar penting untuk merencanakan ketersediaan sepeda serta petugas, khususnya pada bulan Mei hingga September. Sebaliknya, pada musim dingin perusahaan dapat memfokuskan kegiatan pada perawatan armada.
Dilihat dari tipe pengguna, pengguna terdaftar mendominasi sepanjang tahun dengan pola yang relatif stabil, mencerminkan karakteristik sebagai pengguna rutin atau komuter. Sementara itu, pengguna kasual menunjukkan lonjakan yang sangat tinggi di musim panas namun hampir tidak ada di musim dingin, mengindikasikan penggunaan rekreasi. Perbedaan ini membuka peluang untuk strategi yang berbeda, seperti program loyalitas bagi pengguna terdaftar dan promosi musiman untuk menarik pengguna kasual.
Selain itu, pola penyewaan antara hari kerja dan akhir pekan juga berbeda. Hari kerja memiliki permintaan yang lebih tinggi dan stabil, sedangkan akhir pekan menunjukkan fluktuasi besar dengan lonjakan di musim panas. Oleh karena itu, alokasi sumber daya sebaiknya disesuaikan, dengan fokus pada titik-titik komuter di hari kerja dan area wisata di akhir pekan.
Secara keseluruhan, pemahaman terhadap pola-pola ini memungkinkan perusahaan untuk mengoptimalkan layanan, meningkatkan efisiensi operasional, dan pada akhirnya memberikan kepuasan yang lebih baik kepada pengguna.