Dataset Bike Sharing merupakan data penyewaan sepeda harian selama tahun 2011–2012.Dataset ini berisi 731 observasi (hari) dan 16 variabel, yang mencakup:

  • Informasi waktu (tanggal, bulan, musim, tahun)

  • Informasi cuaca (suhu, kelembapan, kecepatan angin)

  • Informasi hari (hari kerja, hari libur)

  • Jumlah penyewa (kasual, terdaftar, total)

Dari penelitian ini, digunakanlah syntax-syntax sebagai berikut.

1. Import Data

  1. Import data yang dilakukan dapat dilakukan dengan syntax berikut.
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.4.3
data <- read.csv("C:/Users/LENOVO/Downloads/bike_day.csv", header = TRUE, sep = ",")
head(data)
##   instant     dteday season yr mnth holiday weekday workingday weathersit
## 1       1 2011-01-01      1  0    1       0       6          0          2
## 2       2 2011-01-02      1  0    1       0       0          0          2
## 3       3 2011-01-03      1  0    1       0       1          1          1
## 4       4 2011-01-04      1  0    1       0       2          1          1
## 5       5 2011-01-05      1  0    1       0       3          1          1
## 6       6 2011-01-06      1  0    1       0       4          1          1
##       temp    atemp      hum windspeed casual registered  cnt
## 1 0.344167 0.363625 0.805833 0.1604460    331        654  985
## 2 0.363478 0.353739 0.696087 0.2485390    131        670  801
## 3 0.196364 0.189405 0.437273 0.2483090    120       1229 1349
## 4 0.200000 0.212122 0.590435 0.1602960    108       1454 1562
## 5 0.226957 0.229270 0.436957 0.1869000     82       1518 1600
## 6 0.204348 0.233209 0.518261 0.0895652     88       1518 1606

2. Melihat Struktur Data

Struktur data ini adalah sebagai berikut.

str(data)
## 'data.frame':    731 obs. of  16 variables:
##  $ instant   : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ dteday    : chr  "2011-01-01" "2011-01-02" "2011-01-03" "2011-01-04" ...
##  $ season    : int  1 1 1 1 1 1 1 1 1 1 ...
##  $ yr        : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ mnth      : int  1 1 1 1 1 1 1 1 1 1 ...
##  $ holiday   : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ weekday   : int  6 0 1 2 3 4 5 6 0 1 ...
##  $ workingday: int  0 0 1 1 1 1 1 0 0 1 ...
##  $ weathersit: int  2 2 1 1 1 1 2 2 1 1 ...
##  $ temp      : num  0.344 0.363 0.196 0.2 0.227 ...
##  $ atemp     : num  0.364 0.354 0.189 0.212 0.229 ...
##  $ hum       : num  0.806 0.696 0.437 0.59 0.437 ...
##  $ windspeed : num  0.16 0.249 0.248 0.16 0.187 ...
##  $ casual    : int  331 131 120 108 82 88 148 68 54 41 ...
##  $ registered: int  654 670 1229 1454 1518 1518 1362 891 768 1280 ...
##  $ cnt       : int  985 801 1349 1562 1600 1606 1510 959 822 1321 ...

Diketahui bahwa ada variabel kategorik dan numerik pada data tersebut yaitu sebagai tabel berikut.

Variabel Keterangan Jenis
season Musim (Spring, Summer, Fall, Winter) Kategorik Nominal
yr Tahun (0 = 2011, 1 = 2012) Kategorik Nominal
mnth Bulan (1–12) Kategorik Ordinal
holiday Hari libur (0/1) Kategorik Nominal
weekday Hari dalam minggu (0–6) Kategorik Nominal
workingday Hari kerja (0/1) Kategorik Nominal
weathersit Kondisi cuaca (Cerah, Mendung, Hujan, dll) Kategorik Ordinal
dteday Tanggal Kategorik Waktu (Time-based)
Instant ID penyewa Numerik Dikrit
Casual Jumlah penyewa sepeda kasual Numerik Dikrit
Registered Jumlah penyewa sepeda terdaftar Numerik Dikrit
Cnt Jumlah penyewa sepeda Numerik Dikrit
Temp Suhu aktual Numerik Kontinu
Atemp Suhu yang dirasakan Numerik Kontinu
Hum Kelembapan Numerik Kontinu
Windspeed Kecepatan angin Numerik Kontinu

Sebelum membuat visualisasi, maka data kategorik bisa difaktorkan sebagai berikut agar mempermudah pengelompokkan.

data$mnth <- factor(data$mnth, levels = 1:12,
                    labels = c("Jan", "Feb", "Mar", "Apr", "Mei", "Jun", "Jul", "Agu", "Sep", "Okt", "Nov", "Des"))

data$weathersit <- factor(data$weathersit, levels = 1:4,
                    labels = c("Cerah", "Mendung", "Hujan Ringan", "Hujan Deras"))

data$season <- factor(data$season, levels = 1:4,
                    labels = c("Spring", "Summer", "Fall", "Winter"))

data$weekday <- factor(data$weekday, levels = 0:6,
                    labels = c("Minggu", "Senin", "Selasa", "Rabu", "Kamis", "Jum'at", "Sabtu"))

data$workingday <- factor(data$workingday, levels = c(0, 1),
                          labels = c("Bukan Hari Kerja", "Hari Kerja"))

data$holiday <- factor(data$holiday, levels = c(0, 1),
                          labels = c("Bukan Hari Libur", "Hari Libur"))

data$dteday <- as.Date(data$dteday, format = "%Y-%m-%d")

head(data)
##   instant     dteday season yr mnth          holiday weekday       workingday
## 1       1 2011-01-01 Spring  0  Jan Bukan Hari Libur   Sabtu Bukan Hari Kerja
## 2       2 2011-01-02 Spring  0  Jan Bukan Hari Libur  Minggu Bukan Hari Kerja
## 3       3 2011-01-03 Spring  0  Jan Bukan Hari Libur   Senin       Hari Kerja
## 4       4 2011-01-04 Spring  0  Jan Bukan Hari Libur  Selasa       Hari Kerja
## 5       5 2011-01-05 Spring  0  Jan Bukan Hari Libur    Rabu       Hari Kerja
## 6       6 2011-01-06 Spring  0  Jan Bukan Hari Libur   Kamis       Hari Kerja
##   weathersit     temp    atemp      hum windspeed casual registered  cnt
## 1    Mendung 0.344167 0.363625 0.805833 0.1604460    331        654  985
## 2    Mendung 0.363478 0.353739 0.696087 0.2485390    131        670  801
## 3      Cerah 0.196364 0.189405 0.437273 0.2483090    120       1229 1349
## 4      Cerah 0.200000 0.212122 0.590435 0.1602960    108       1454 1562
## 5      Cerah 0.226957 0.229270 0.436957 0.1869000     82       1518 1600
## 6      Cerah 0.204348 0.233209 0.518261 0.0895652     88       1518 1606

3. Visualisasi Data

Setelah mengenali variabel data, kemudian digunakanlah variabel-variabel tersebut dalam visualisasi kontinu bivariate sebagai berikut.

a. Scatter Plot

Scatter plot dapat menggunakan syntax sebagai berikut.

ggplot(data, aes(x = windspeed, y = casual)) +
  geom_point(color = "darkred", alpha = 0.5) +
  labs(title = "Scatter Plot : Kecepatan Angin terhadap Penyewa Sepeda Kasual",
       x = "Kecepatan Angin", y = "Penyewa Sepeda Kasual")+
  theme_minimal()

Dari output tersebut,terlihat kecenderungan hubungan negatif lemah. Ketika kecepatan angin rendah (sekitar 0.05–0.2), jumlah penyewa kasual cenderung lebih tinggi dan tersebar luas hingga di atas 3000 penyewa. Namun, ketika kecepatan angin meningkat (di atas 0.30), jumlah penyewa kasual cenderung lebih rendah dan jarang mencapai nilai tinggi.

Sebaran titik cukup menyebar, sehingga hubungan ini tidak kuat, tetapi pola umumnya menunjukkan bahwa angin kencang menurunkan minat penyewa kasual. Hal ini logis karena pengguna kasual biasanya lebih sensitif terhadap kondisi cuaca dibandingkan pengguna terdaftar.

b. Boxplot

Boxplot dapat menggunakan syntax sebagai berikut.

ggplot(data, aes(x = mnth, y = casual)) +
  geom_boxplot(fill = "darkred", color = "darkgray") + labs(title = "Boxplot : Penyewa Sepeda Kasual berdasarkan Bulan",
       x = "Bulan", y = "Penyewa Sepeda Kasual") +
  theme_minimal()

Dari output tersebut, terlihat pola musiman yang jelas yaitu pada bulan Januari hingga Februari dan Desember, median terlihat rendah dan penyebarannya kecil. Kemudian, pada Mei hingga September, median terlihat tinggi dan variasi besar.Dan pada bulan Juni dan Juli, menjadi bulan dengan puncak tertinggi. Artinya, penyewa kasual meningkat signifikan pada pertengahan tahun (musim hangat), sedangkan awal dan akhir tahun menunjukkan jumlah lebih rendah.

Lalu, terdapat banyaknya outlier pada bulan-bulan pertengahan tahun yang menunjukkan bahwa pada hari-hari tertentu jumlah penyewa kasual bisa melonjak sangat tinggi.

c. Violin Plot

Violin plot dapat menggunakan synta berikut.

ggplot(data, aes(x = weekday, y = registered)) +
  geom_violin(fill = "darkred", color = "black", alpha = 0.6) +
  geom_boxplot(width = 0.1, fill = "pink", color = "salmon", outlier.shape = NA) +
  labs(title = "Violin Plot : Penyewa Sepeda Terdaftar  berdasarkan Hari",
       x = "Hari",
       y = "Penyewa Sepeda Terdaftar") +
  theme_minimal()

Dari output terlihat beberapa pola penting seperti pada hari Senin hingga Jumat, terdapat median yang lebih tinggi dibanding Minggu dan Sabtu.Kemudian, distribusi hari kerja terlihat lebih padat di sekitar nilai tinggi. Pada hari Rabu dan Kamis menunjukkan konsistensi jumlah penyewa tinggi.

Hal ini juga menunjukkan bahwa penyewa terdaftar kemungkinan besar adalah pekerja atau komuter, hari kerja memiliki permintaan lebih stabil dan tinggi, dan akhir pekan lebih rendah karena aktivitas kerja berkurang. Distribusi yang relatif simetris menandakan penggunaan yang cukup konsisten pada hari kerja.

d. Jitter Plot

Jitter plot dapat menggunakan syntax berikut.

ggplot(data, aes(x = season, y = cnt)) +
  geom_jitter(alpha = 0.4, width = 0.2, color="darkred") + 
  labs(title = "Jitter Plot : Jumlah Penyewa Sepeda berdasarkan Musim",
       x = "Musim",
       y = "Jumlah Penyewa Sepeda") +
  theme_minimal()

Dari output tersebut, ditunjukkan bahwa pada musim gugur (Fall) dan panas (Summer) memiliki sebaran tertinggi, sementara pada musim Semi (Spring) lebih rendah dan musim dingin (Winter) menunjukkan variasi, namun tidak setinggi musim gugur

Jumlah penyewa meningkat drastis pada musim yang cenderung hangat dengan Variabilitas terbesar tampak pada musim gugur, menandakan fluktuasi tinggi antar hari.

e. Hexbin Plot

Hexbin plot dapat menggunakan syntax berikut.

library(hexbin)
## Warning: package 'hexbin' was built under R version 4.4.3
ggplot(data, aes(x = hum, y = cnt)) + geom_hex() +
  labs(title = "Hexbin Plot : Jumlah Penyewa Sepeda dengan Kelembapan",
       x = "Kelembapan", y = "Jumlah Penyewa Sepeda") +
  theme_minimal()

Dari output, terlihat bahwa kepadatan tertinggi berada pada kelembapan sedang (sekitar 0.4–0.7).Pada kelembapan sangat tinggi (>0.8), jumlah penyewa cenderung lebih rendah.Hubungan tidak linear kuat, tetapi terdapat indikasi penurunan penyewa saat kelembapan terlalu tinggi. Artinya, kelembapan ekstrem dapat menurunkan kenyamanan bersepeda.

f. 2D Density Plot

2D Density Plot dapat menggunakan syntax berikut.

ggplot(data, aes(x = atemp, y = cnt)) +
  geom_density_2d() + labs(title = "2D Density Plot : Suhu yang Dirasakan terhadap Jumlah Penyewa Sepeda",
       x = "Suhu yang Dirasakan", y = "Jumlah Penyewa Sepeda") +
  theme_minimal()

Atau sebagai berikut.

ggplot(data, aes(x = atemp, y = cnt)) +
  geom_density_2d_filled() + labs(title = "2D Density Plot : Suhu yang Dirasakan terhadap Jumlah Penyewa Sepeda ",
       x = "Suhu yang Dirasakan", y = "Jumlah Penyewa Sepeda") +
  theme_minimal()

Dar output, terlihat adanya pola yang jelas seperti Ketika suhu yang dirasakan meningkat dari rendah ke sedang, jumlah penyewa meningkat signifikan.Kepadatan tertinggi berada pada suhu sedang–tinggi dengan jumlah penyewa tinggi.Pada suhu yang terlalu rendah, jumlah penyewa sangat sedikit. Ini menunjukkan hubungan positif kuat antara suhu yang dirasakan dan jumlah penyewa.

h. Line Plot

Line plot dapat mengguanakan syntax berikut.

ggplot(data, aes(x = dteday, y = cnt)) + geom_line(color = "darkred") +
  labs(title = "Line Plot : Tanggal terhadap Jumlah Penyewa Sepeda",
       x = "Tanggal", y = "Jumlah Penyewa Sepeda") +
  theme_minimal()

Dari output, ada pola yang terlihat yang menunjuukan adanya pola musiman tahunan (naik di pertengahan tahun, turun di awal/akhir tahun). Pada tahun 2012 menunjukkan jumlah penyewa lebih tinggi dibanding 2011.Kemudian, terdapat fluktuasi harian yang tajam (kemungkinan dipengaruhi cuaca atau hari libur).Ini menunjukkan ada pertumbuhan penggunaan dari tahun ke tahun dan ada pola musiman yang konsisten.

i. Bubble Plot

Bubble plot dapat menggunakan syntax sebagai berikut.

ggplot(data, aes(x = windspeed, y = registered, size = temp)) +
  geom_point(alpha = 0.5,color="darkred") +
  labs(title = "Bubble Plot : Kecepatan Angin terhadap Jumlah Penyewa Sepeda Terdaftar",
       x = "Kecepatan Angin",
       y = "Jumlah Penyewa Sepeda Terdaftar",
       size = "Temp") +
  theme_minimal()

Pada output, dapat dilihat bahwa pada suhu tinggi (bubble besar), jumlah penyewa terdaftar cenderung tinggi.dan pada kecepatan angin tinggi, jumlah penyewa tetap cenderung menurun. Kombinasi suhu tinggi dan angin rendah menghasilkan jumlah penyewa terbesar.Artinya, suhu memiliki pengaruh lebih kuat dibanding angin, serta angin berperan sebagai faktor pengurang, tetapi bukan faktor dominan.

Jadi, berdasarkan hasil visualisasi data kontinu bivariat pada Dataset Bike Sharing tahun 2011–2012, dapat disimpulkan bahwa faktor cuaca, musim, serta pola waktu memiliki pengaruh yang signifikan terhadap jumlah penyewaan sepeda. Dan dapat diuraikan pula bahwa :

  1. variabel suhu (temp dan atemp) menunjukkan hubungan positif yang kuat terhadap jumlah penyewa sepeda. Semakin tinggi suhu yang dirasakan, semakin meningkat jumlah penyewa, baik kasual maupun terdaftar. Kepadatan tertinggi terjadi pada suhu sedang hingga hangat, sedangkan pada suhu rendah jumlah penyewa menurun drastis. Hal ini menunjukkan bahwa suhu merupakan faktor paling dominan dalam menentukan tingkat permintaan sepeda.

  2. kecepatan angin (windspeed) memiliki hubungan negatif lemah dengan jumlah penyewa. Ketika angin semakin kencang, jumlah penyewa cenderung menurun. Namun pengaruhnya tidak sekuat suhu. Pada visualisasi bubble plot terlihat bahwa kombinasi suhu tinggi dan angin rendah menghasilkan jumlah penyewa terbesar, sehingga angin lebih berperan sebagai faktor pengurang dibanding faktor utama.

  3. kelembapan (hum) menunjukkan bahwa jumlah penyewa paling banyak terjadi pada tingkat kelembapan sedang. Pada kelembapan yang terlalu tinggi, jumlah penyewa cenderung menurun. Ini mengindikasikan bahwa kondisi udara yang terlalu lembap mengurangi kenyamanan bersepeda.

  4. terdapat pola musiman yang konsisten. Pada musim hangat seperti Summer dan Fall, jumlah penyewa meningkat signifikan dibanding Spring dan Winter. Boxplot bulanan juga menunjukkan bahwa pertengahan tahun (Mei–September) memiliki median penyewa kasual yang lebih tinggi dibanding awal dan akhir tahun. Ini menegaskan bahwa faktor musim sangat memengaruhi permintaan.

  5. berdasarkan hari dalam seminggu, penyewa terdaftar lebih dominan pada hari kerja (Senin–Jumat) dibanding akhir pekan. Hal ini mengindikasikan bahwa pengguna terdaftar kemungkinan besar adalah pekerja atau komuter yang menggunakan sepeda sebagai sarana transportasi rutin.

  6. berdasarkan analisis deret waktu (line plot), terlihat adanya tren peningkatan jumlah penyewa dari tahun 2011 ke 2012, serta pola musiman tahunan yang berulang. Hal ini menunjukkan adanya pertumbuhan penggunaan layanan sepeda dari waktu ke waktu.

Dengan demikian, dalam konteks analisis bivariat kontinu, variabel cuaca terutama suhu, memiliki hubungan paling kuat terhadap jumlah penyewaan sepeda, sementara faktor waktu memperkuat pola musiman dan tren pertumbuhan yang terjadi dalam periode pengamatan.