Analisis Pola Peminjaman Sepeda

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 dalam kondisi apa data dikumpulkan (musim, cuaca, dan jenis hari), langkah berikutnya adalah melihat bagaimana perilaku nilai numerik dalam dataset.

Pada tahap ini analis mulai bertanya:

Seberapa besar variasi jumlah penyewaan sepeda dari hari ke hari? Apakah nilainya stabil, menyebar, atau memiliki lonjakan tertentu?

Untuk menjawab pertanyaan tersebut digunakan visualisasi univariate kontinu, yaitu visualisasi yang berfokus pada satu variabel numerik dalam satu waktu. Visualisasi ini membantu kita memahami distribusi data, mengidentifikasi pola, dan mendeteksi outlier. Dengan menggunakan visualisasi univariate kontinu, kita dapat melihat bagaimana nilai numerik dalam dataset bervariasi dari hari ke hari, apakah nilainya stabil, menyebar, atau memiliki lonjakan 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

library(DT)
library(ggplot2)
library(dplyr)
bike_data <- read.csv("D:/ham/bike_sharing_dataset_by-day.csv")
colnames(bike_data)
##  [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:

Deskripsi data numerik:

temp -> suhu dalam skala Celsius

atemp -> suhu yang dirasakan

hum -> kelembapan

windspeed -> kecepatan angin

casual -> jumlah penyewaan sepeda oleh pengguna kasual

registered -> jumlah penyewaan sepeda oleh pengguna terdaftar

cnt -> total jumlah penyewaan sepeda (casual+ registered)

sedangkan variabel-variabel kategorik sudah dijelaskan pembelajaran sebelumnya, variabel-variabel kategorik seperti season, weathersit, dan workingday 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, dan workingday sekarang memiliki label yang lebih deskriptif. Ini akan memudahkan kita dalam membuat visualisasi yang lebih informatif dan mudah dipahami.

datatable(bike_data, options = list(pageLength = 5, autoWidth = TRUE))

Visualisasi Data Kontinu (Univariate)

Hitogram

ggplot(bike_data, aes(x = cnt)) +
  geom_histogram(binwidth = 100, fill = "steelblue", color = "white") +
  labs(title = "Histogram of Total Bike Rentals", x = "Total Rentals (cnt)",
       y = "Frequency") +
  theme_minimal()

Visualisasi data di atas menunjukkan distribusi jumlah penyewaan sepeda harian (variabel cnt). Pada grafik tersebut, sumbu x menunjukkan jumlah penyewaan sepeda, sedangkan sumbu y merepresentasikan frekuensi atau banyaknya hari yang memiliki jumlah penyewaan pada kisaran tertentu. Melalui visualisasi ini, terlihat bahwa sebagian besar data terkonsentrasi pada nilai menengah, yaitu sekitar 4.000 hingga 5.500 penyewaan per hari, yang menunjukkan bahwa pada mayoritas hari tingkat penggunaan sepeda berada pada level yang relatif stabil.

Namun demikian, terdapat beberapa hari dengan jumlah penyewaan yang sangat tinggi, mencapai sekitar 8.000 penyewaan per hari, serta beberapa hari dengan jumlah penyewaan yang jauh lebih rendah, yaitu di bawah 1.000 penyewaan. Hal ini menunjukkan adanya variasi penggunaan sepeda dari hari ke hari. Secara visual, distribusi data tampak tidak sepenuhnya simetris dan sedikit memanjang ke sisi kanan, yang mengindikasikan adanya lonjakan penggunaan pada kondisi tertentu.

Dengan demikian, histogram ini memberikan gambaran umum mengenai sebaran dan pola penggunaan sepeda harian dalam dataset, serta membantu memahami karakteristik data secara intuitif sebelum dilakukan analisis lebih lanjut.

Density Plot

ggplot(bike_data, aes(x = cnt)) +
  geom_density(fill = "lightblue", alpha = 0.5) +
  labs(title = "Density Plot of Total Bike Rentals", x = "Total Rentals (cnt)", y = "Density") +
  theme_minimal()

Density plot di atas merupakan bentuk pemulusan (smoothed version) dari histogram yang digunakan untuk melihat pola distribusi jumlah penyewaan sepeda harian (cnt) secara lebih halus. Berbeda dengan histogram yang menampilkan batang frekuensi, density plot menunjukkan kurva kepadatan sehingga pola distribusi lebih mudah diamati.

Dari grafik terlihat bahwa kurva memiliki satu puncak utama pada kisaran sekitar 4.500–5.000 penyewaan per hari, yang menunjukkan bahwa nilai tersebut merupakan tingkat penggunaan yang paling sering terjadi. Hal ini menegaskan bahwa mayoritas hari memiliki jumlah penyewaan pada level menengah, sehingga dapat dikatakan penggunaan sepeda cenderung stabil di sekitar nilai tersebut.

Selain puncak utama, terlihat adanya bagian kurva yang melebar ke sisi kanan hingga mendekati 8.000 penyewaan, yang menunjukkan adanya hari-hari dengan jumlah penyewaan yang lebih tinggi. Sementara itu, sisi kiri kurva yang memanjang ke nilai rendah menunjukkan bahwa terdapat juga hari dengan penggunaan yang relatif sedikit, meskipun jumlahnya tidak dominan. Bentuk kurva yang tidak sepenuhnya simetris mengindikasikan bahwa distribusi data sedikit condong ke kanan.

Melalui density plot ini, kita dapat memahami pola sebaran data secara lebih halus dibandingkan histogram, terutama dalam melihat kecenderungan pusat data, variasi nilai, dan bentuk distribusi secara keseluruhan. Visualisasi ini membantu memberikan gambaran umum mengenai bagaimana intensitas penggunaan sepeda tersebar dalam dataset tanpa terpengaruh oleh pembagian kelas seperti pada histogram.

Boxplot

ggplot(bike_data, aes(y = cnt)) +
  geom_boxplot(fill = "lightgreen", color = "darkgreen") +
  labs(title = "Boxplot of Total Bike Rentals", y = "Total Rentals (cnt)") +
  coord_flip() +
  theme_minimal()

Boxplot di atas digunakan untuk merangkum distribusi jumlah penyewaan sepeda harian (cnt) melalui ukuran statistik utama, yaitu median, kuartil, serta rentang data. Berbeda dengan histogram dan density plot yang menampilkan bentuk distribusi, boxplot membantu melihat pusat data, penyebaran, dan kemungkinan nilai ekstrem secara ringkas.

Garis di dalam kotak menunjukkan median (nilai tengah) yang berada di sekitar ±4.500–5.000 penyewaan per hari. Hal ini menandakan bahwa setengah dari jumlah hari memiliki penyewaan di bawah nilai tersebut dan setengah lainnya di atasnya, sehingga median dapat dianggap sebagai tingkat penggunaan tipikal harian.

Batas bawah dan atas kotak merepresentasikan Kuartil 1 (Q1) dan Kuartil 3 (Q3), yang kira-kira berada pada kisaran ±3.000 hingga 6.000 penyewaan. Rentang ini disebut interquartile range (IQR) dan menunjukkan bahwa 50% data berada pada interval tersebut. Artinya, sebagian besar hari memiliki jumlah penyewaan dalam kisaran menengah, sehingga variasi penggunaan masih tergolong wajar.

Garis “whisker” yang memanjang ke kiri dan kanan menunjukkan rentang data minimum dan maksimum yang masih berada dalam batas wajar. Dari boxplot ini tidak terlihat titik pencilan yang menonjol, sehingga dapat dikatakan tidak ada nilai yang sangat ekstrem secara visual.

Secara keseluruhan, boxplot ini menegaskan bahwa penggunaan bike sharing memiliki pusat data yang cukup stabil di kisaran menengah dengan variasi yang moderat, serta membantu memahami sebaran data secara ringkas tanpa melihat detail frekuensi seperti pada histogram.

Violin Plot

ggplot(bike_data, aes(x = "", 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 with Boxplot of Total Bike Rentals",
       x = NULL,
       y = "Total Rentals (cnt)") +
  coord_flip() +
  theme_minimal()

Visualisasi di atas merupakan kombinasi antara violin plot dan boxplot untuk menggambarkan distribusi jumlah penyewaan sepeda harian (cnt). Violin plot menunjukkan bentuk kepadatan data, di mana bagian yang lebih lebar menandakan bahwa lebih banyak hari memiliki jumlah penyewaan pada kisaran tersebut. Terlihat bahwa distribusi data paling padat berada pada kisaran sekitar 4.000 hingga 5.500 penyewaan per hari, yang menunjukkan bahwa nilai tersebut merupakan tingkat penggunaan yang paling sering terjadi.

Sementara itu, boxplot di dalam violin memberikan informasi statistik ringkas. Garis di tengah kotak menunjukkan median jumlah penyewaan, sedangkan batas kotak menunjukkan kuartil pertama (Q1) dan kuartil ketiga (Q3), yang menggambarkan rentang di mana 50% data berada. Whisker yang memanjang ke kedua sisi menunjukkan bahwa terdapat variasi penggunaan dari nilai yang relatif rendah hingga mendekati 8.000 penyewaan per hari.

Bentuk violin yang melebar di bagian tengah dan meruncing di bagian atas serta bawah menunjukkan bahwa sebagian besar data terkonsentrasi pada nilai menengah, dengan lebih sedikit hari yang memiliki jumlah penyewaan sangat rendah atau sangat tinggi. Kombinasi visual ini membantu memahami pola distribusi, tingkat pemusatan data, serta variasi penggunaan sepeda secara lebih komprehensif dibandingkan menggunakan satu jenis plot saja.

Kesimpulan

Variasi jumlah penyewaan sepeda dapat dilihat melalui histogram, density plot, serta boxplot yang menampilkan sebaran data cnt. Dari visualisasi tersebut terlihat bahwa

  1. Sebagian besar hari memiliki jumlah penyewaan yang berada pada kisaran menengah, yaitu sekitar 4.000 hingga 5.500 penyewaan per hari, yang menunjukkan bahwa tingkat penggunaan sepeda cenderung stabil di sekitar nilai tersebut.

  2. Terdapat beberapa hari dengan jumlah penyewaan yang sangat tinggi, mencapai sekitar 8.000 penyewaan per hari, serta beberapa hari dengan jumlah penyewaan yang jauh lebih rendah, yaitu di bawah 1.000 penyewaan. Hal ini menunjukkan adanya variasi penggunaan sepeda dari hari ke hari, dengan pola distribusi yang sedikit memanjang ke sisi kanan, mengindikasikan adanya lonjakan penggunaan pada kondisi tertentu.

Dengan demikian, dapat disimpulkan bahwa jumlah penyewaan sepeda harian memiliki variasi yang cukup signifikan, dengan sebagian besar hari memiliki tingkat penggunaan yang relatif stabil di kisaran menengah, namun juga terdapat hari-hari dengan jumlah penyewaan yang jauh lebih tinggi atau lebih rendah. Informasi ini penting untuk memahami pola penggunaan sepeda dan dapat digunakan untuk perencanaan layanan yang lebih efektif di masa depan.

Visualisasi Data Kontinu (Bivariate)

Setelah memahami pola distribusi satu variabel, analisis dapat dilanjutkan ke tahap berikutnya, yaitu visualisasi bivariate. Visualisasi bivariate digunakan untuk melihat hubungan antara dua variabel, misalnya bagaimana jumlah penyewaan sepeda (cnt) dipengaruhi oleh faktor lain seperti musim (season), kondisi cuaca (weathersit), suhu (temp), atau jenis hari (workingday). Pendekatan ini memungkinkan analis tidak hanya memahami bagaimana data tersebar, tetapi juga mulai mengeksplorasi faktor-faktor yang berasosiasi dengan perubahan jumlah penyewaan sepeda.

Dengan demikian, visualisasi univariate memberikan pemahaman awal mengenai karakteristik dan variasi data, sedangkan visualisasi bivariate membantu menggali hubungan antarvariabel yang dapat menjelaskan pola penggunaan sepeda secara lebih mendalam.

Scatter Plot

Salah satu faktor yang diduga memengaruhi jumlah pengguna kasual dalam layanan bike sharing adalah tingkat kenyamanan suhu yang dirasakan. Berbeda dengan pengguna terdaftar (registered), pengguna kasual cenderung lebih spontan dan sensitif terhadap kondisi cuaca. Oleh karena itu, muncul pertanyaan penting: apakah pengguna kasual lebih aktif saat suhu terasa meningkat?

Untuk menjawab pertanyaan tersebut, dilakukan visualisasi hubungan antara variabel suhu terasa (atemp) dan jumlah pengguna kasual (casual) menggunakan scatter plot guna melihat pola dan kecenderungan hubungan di antara keduanya.

ggplot(bike_data, aes(x = atemp, y = casual)) +
  geom_point(alpha = 0.5, color = "purple") +
  geom_smooth(method = "lm", se = FALSE, color = "black") +
  labs(
    title = "Hubungan Suhu Terasa dengan Jumlah Pengguna Kasual",
    x = "Suhu Terasa (atemp)",
    y = "Pengguna Kasual (casual)"
  ) +
  theme_minimal()

Berdasarkan scatter plot yang ditampilkan, terlihat adanya hubungan positif antara suhu terasa (atemp) dan jumlah pengguna kasual (casual). Hal ini ditunjukkan oleh garis regresi yang memiliki kemiringan (slope) meningkat dari kiri ke kanan.

Artinya, semakin tinggi suhu yang dirasakan, semakin banyak pengguna kasual yang menyewa sepeda.

2D Density Plot

Selain suhu, tingkat kelembaban udara juga diduga memengaruhi kenyamanan bersepeda dan pada akhirnya berdampak pada jumlah penyewaan sepeda harian. Kelembaban yang terlalu tinggi dapat menimbulkan rasa gerah dan tidak nyaman, sehingga berpotensi menurunkan minat masyarakat untuk menggunakan layanan bike sharing. Oleh karena itu, muncul pertanyaan penting: apakah jumlah penyewaan sepeda yang tinggi lebih sering terjadi pada tingkat kelembaban yang rendah?

Untuk menjawab pertanyaan tersebut, dilakukan visualisasi menggunakan 2D density plot antara variabel kelembaban (hum) dan total penyewaan sepeda (cnt) guna melihat area konsentrasi kepadatan data serta pola hubungan yang terbentuk.

ggplot(bike_data, aes(x = hum, y = cnt)) +
  geom_density_2d_filled(alpha = 0.6) +
  labs(
    title = "2D Density Plot: Kelembaban vs Penyewaan",
    x = "Kelembaban (hum)",
    y = "Total Penyewaan (cnt)"
  ) +
  theme_minimal()

Berdasarkan 2D density plot, area dengan kepadatan tertinggi (ditunjukkan oleh warna paling terang/kuning) terkonsentrasi pada tingkat kelembaban sekitar 0.55–0.75, dengan total penyewaan berkisar antara ±4000 hingga 5000.

Artinya, penyewaan tertinggi justru tidak terjadi pada kelembaban yang sangat rendah, melainkan pada tingkat kelembaban sedang hingga agak tinggi.

Jumlah penyewaan sepeda yang tinggi cenderung terjadi pada tingkat kelembaban sedang, sehingga hipotesis bahwa kelembaban rendah selalu menghasilkan penyewaan tinggi tidak sepenuhnya didukung oleh data.

Boxplot Bivariate

Kondisi cuaca merupakan salah satu faktor lingkungan yang berpotensi memengaruhi aktivitas bersepeda. Salah satu indikator penting dalam kondisi cuaca adalah kecepatan angin, karena angin yang terlalu kencang dapat mengurangi kenyamanan dan keamanan pengguna sepeda. Oleh karena itu, muncul pertanyaan: apakah kondisi cuaca tertentu memiliki kecepatan angin yang lebih tinggi dibandingkan kondisi cuaca lainnya?

Untuk menjawab pertanyaan tersebut, dilakukan visualisasi menggunakan boxplot antara variabel kondisi cuaca (weathersit) dan kecepatan angin (windspeed) guna membandingkan distribusi, median, serta variasi kecepatan angin pada masing-masing kategori cuaca.

ggplot(bike_data, aes(x = factor(weathersit), y = windspeed)) +
  geom_boxplot(fill = "orange", alpha = 0.7) +
  labs(
    title = "Distribusi Kecepatan Angin Berdasarkan Kondisi Cuaca",
    x = "Kondisi Cuaca (weathersit)",
    y = "Kecepatan Angin (windspeed)"
  ) +
  theme_minimal()

Kondisi cuaca berhubungan dengan variasi kecepatan angin. Cuaca yang lebih buruk (kategori lebih tinggi) cenderung memiliki kecepatan angin yang lebih besar. Hal ini berpotensi memengaruhi kenyamanan pengguna sepeda dan secara tidak langsung dapat berdampak pada jumlah penyewaan.

Kesimpulan

Berdasarkan tiga visualisasi bivariat yang telah dilakukan, diperoleh beberapa temuan penting mengenai hubungan antara faktor cuaca dan pola penyewaan sepeda.

Pertama, melalui scatter plot antara suhu terasa (atemp) dan pengguna kasual (casual), terlihat adanya hubungan positif yang cukup jelas. Semakin tinggi suhu yang dirasakan, semakin meningkat jumlah pengguna kasual. Hal ini menunjukkan bahwa pengguna kasual cenderung sensitif terhadap kenyamanan cuaca dan lebih aktif bersepeda saat kondisi terasa hangat dan nyaman.

Kedua, melalui 2D density plot antara kelembaban (hum) dan total penyewaan (cnt), ditemukan bahwa penyewaan tertinggi tidak terjadi pada kelembaban yang sangat rendah, melainkan pada tingkat kelembaban sedang. Ini menunjukkan bahwa hubungan antara kelembaban dan jumlah penyewaan tidak bersifat linear sederhana. Faktor kelembaban tampaknya berpengaruh, tetapi bukan faktor dominan tunggal dalam menentukan tingginya permintaan.

Ketiga, melalui boxplot antara kondisi cuaca (weathersit) dan kecepatan angin (windspeed), terlihat bahwa kategori cuaca yang lebih buruk memiliki median dan distribusi kecepatan angin yang lebih tinggi. Hal ini mengindikasikan bahwa kondisi cuaca memang berkaitan dengan peningkatan kecepatan angin, yang secara logis dapat memengaruhi kenyamanan bersepeda.

Secara keseluruhan, analisis bivariat menunjukkan bahwa:

  • Faktor suhu terasa memiliki hubungan positif yang cukup kuat terhadap pengguna kasual.

  • Kelembaban memiliki pola hubungan yang tidak linear terhadap total penyewaan.

  • Kondisi cuaca berkaitan dengan variasi kecepatan angin, yang berpotensi memengaruhi aktivitas bersepeda.

Dengan demikian, dapat disimpulkan bahwa faktor cuaca berperan dalam dinamika penyewaan sepeda, namun pengaruhnya bervariasi tergantung pada jenis variabel yang diamati. Suhu terasa tampak sebagai faktor yang paling konsisten menunjukkan hubungan langsung terhadap peningkatan jumlah pengguna.