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