VISUALISASI DATASET BIKE SHARING
Melanjutkan pembahasan sebelumnya mengenai visualisasi data kategorik dan diskrit, pada bagian ini kita akan berfokus pada visualisasi data kontinu, baik secara univariate maupun bivariate. Data kontinu merupakan data numerik yang dapat mengambil nilai dalam rentang tertentu, seperti tinggi badan, berat badan, suhu, atau jumlah transaksi. Melalui visualisasi data kontinu, kita dapat memahami bagaimana suatu nilai tersebar, melihat pola yang muncul, serta mengidentifikasi kemungkinan adanya outlier.
Sebagai studi kasus, analisis ini menggunakan dataset
Bike Sharing yang berisi informasi penggunaan sepeda di
sebuah kota. Dataset ini berasal dari sistem bike sharing di Washington,
D.C., dan diperoleh dari UCI Machine Learning Repository.
Data tersebut mencatat aktivitas penyewaan sepeda harian selama dua
tahun, sehingga sangat relevan untuk mengeksplorasi bagaimana
nilai-nilai numerik seperti jumlah penyewaan dapat bervariasi dari waktu
ke waktu.
Selain itu, dataset ini juga memungkinkan dilakukan analisis visualisasi time series, yaitu visualisasi yang menampilkan perubahan suatu variabel berdasarkan urutan waktu. Melalui pendekatan ini, analis dapat mengamati bagaimana jumlah penyewaan sepeda berubah dari hari ke hari, mengidentifikasi tren yang terjadi selama periode pengamatan, serta melihat kemungkinan adanya pola musiman yang muncul pada waktu-waktu tertentu.
Memuat Data dan Menjelajahi Struktur Data
Berikut adalah kode untuk memuat data:
## [1] "instant" "dteday" "season" "yr" "mnth"
## [6] "holiday" "weekday" "workingday" "weathersit" "temp"
## [11] "atemp" "hum" "windspeed" "casual" "registered"
## [16] "cnt"
Berdasarkan hasil output sebelumnya, dataset ini terdiri dari 16 variabel yang mencakup tipe numerik dan kategorik. Variabel numerik meliputi temp, atemp, hum, windspeed, casual, registered, dan cnt. Variabel-variabel tersebut memberikan informasi kuantitatif seperti suhu aktual, suhu yang dirasakan, tingkat kelembapan udara, kecepatan angin, jumlah penyewaan oleh pengguna kasual, jumlah penyewaan oleh pengguna terdaftar, serta total keseluruhan penyewaan sepeda.
Berikut adalah deskripsi dari variabel-variabel numerik dalam dataset:
deskripsi_data <- data.frame(
No = 1:7,
Variabel_Numerik = c("temp", "atemp", "hum", "windspeed",
"casual", "registered", "cnt"),
Keterangan = c(
"Suhu dalam skala Celsius",
"Suhu yang dirasakan",
"Kelembapan",
"Kecepatan angin",
"Jumlah penyewaan sepeda oleh pengguna kasual",
"Jumlah penyewaan sepeda oleh pengguna terdaftar",
"Total jumlah penyewaan sepeda (casual + registered)"
)
)
deskripsi_data## No Variabel_Numerik Keterangan
## 1 1 temp Suhu dalam skala Celsius
## 2 2 atemp Suhu yang dirasakan
## 3 3 hum Kelembapan
## 4 4 windspeed Kecepatan angin
## 5 5 casual Jumlah penyewaan sepeda oleh pengguna kasual
## 6 6 registered Jumlah penyewaan sepeda oleh pengguna terdaftar
## 7 7 cnt Total jumlah penyewaan sepeda (casual + registered)
Sementara itu, variabel kategorik seperti season, weathersit, dan workingday telah dilakukan proses recode agar lebih mudah dipahami dalam proses analisis dan visualisasi. Proses ini mengubah kode numerik menjadi label yang lebih deskriptif. Sebagai contoh, daripada menggunakan kode angka seperti 1, 2, 3, dan 4 untuk musim, data ditampilkan dalam bentuk label seperti “Spring”, “Summer”, “Fall”, dan “Winter”.
Perubahan ini tidak mengubah struktur atau jumlah variabel dalam dataset, melainkan hanya memperjelas isi kategorinya. Dengan demikian, saat membuat grafik atau tabel, informasi yang ditampilkan menjadi lebih jelas, komunikatif, dan mudah dipahami oleh pembaca tanpa perlu mengingat arti dari setiap kode angka. Hal ini membantu penyajian hasil analisis menjadi lebih informatif dan intuitif.
Visualisasi Data Kontinu (Univariate)
Visualisasi data kontinu (univariate) adalah teknik untuk menggambarkan distribusi dan karakteristik dari satu variabel numerik. Beberapa jenis visualisasi yang umum digunakan untuk data kontinu meliputi histogram, density plot, boxplot, violin plot, dan scatter plot. Setiap jenis visualisasi memiliki kelebihan dan kegunaan tertentu dalam membantu kita memahami data. Berikut adalah penjelasan singkat tentang beberapa jenis visualisasi data kontinu (univariate):
Histogram
Histogram adalah grafik yang menunjukkan distribusi frekuensi dari data kontinu. Histogram membagi data menjadi interval (bin) dan menghitung jumlah pengamatan yang jatuh ke dalam setiap interval tersebut. Berikut adalah contoh kode untuk membuat histogram dari variabel cnt yang menunjukkan total jumlah penyewaan sepeda:
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
Density plot adalah grafik yang menunjukkan estimasi kepadatan probabilitas dari data kontinu. Density plot menggunakan kurva untuk menggambarkan distribusi data, dan dapat memberikan gambaran yang lebih halus dibandingkan histogram. Berikut adalah contoh kode untuk membuat density plot dari variabel cnt:
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
Boxplot adalah grafik yang menunjukkan distribusi data berdasarkan lima angka ringkasan: minimum, kuartil pertama (Q1), median, kuartil ketiga (Q3), dan maksimum. Boxplot juga dapat membantu mengidentifikasi outlier dalam data. Berikut adalah contoh kode untuk membuat boxplot dari variabel cnt:
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
Violin plot adalah grafik yang menggabungkan boxplot dengan density plot. Violin plot menunjukkan distribusi data serta memberikan informasi tentang kepadatan data pada setiap nilai. Berikut adalah contoh kode untuk membuat violin plot dari variabel cnt:
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 (cnt) dapat dilihat dari histogram, density plot, dan boxplot, yang menunjukkan sebaran data harian. Sebagian besar hari memiliki jumlah penyewaan di kisaran 4.000–5.500, menandakan tingkat penggunaan yang relatif stabil. Namun, terdapat beberapa hari dengan penyewaan sangat tinggi, mencapai sekitar 8.000, serta beberapa hari dengan jumlah penyewaan rendah di bawah 1.000, menunjukkan adanya fluktuasi penggunaan dari hari ke hari. Secara keseluruhan, jumlah penyewaan harian bervariasi, dengan sebagian besar berada di kisaran menengah, tetapi juga muncul lonjakan atau penurunan pada kondisi tertentu. 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), kecepatan angin (windspeed) 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. Berikut adalah beberapa jenis visualisasi bivariate yang dapat digunakan untuk menganalisis hubungan antara jumlah penyewaan sepeda (cnt) dengan variabel lain dalam dataset:
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_data, 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()Grafik scatter plot tersebut memperlihatkan hubungan antara suhu (temp) dan total penyewaan sepeda (cnt). Setiap titik mewakili data dari satu hari, dengan posisi horizontal menunjukkan suhu dan posisi vertikal menunjukkan jumlah penyewaan sepeda pada hari itu.
Dari grafik terlihat adanya pola positif, yaitu semakin tinggi suhu maka semakin banyak pula sepeda yang disewa. Hal ini mengindikasikan bahwa cuaca yang lebih hangat cenderung mendorong peningkatan aktivitas penyewaan sepeda, sementara suhu yang lebih rendah mungkin membuat orang kurang tertarik untuk menyewa. Meskipun terdapat beberapa titik yang menyebar, tren keseluruhan menunjukkan bahwa suhu berpengaruh positif terhadap jumlah penyewaan sepeda.
Boxplot Bivariate
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_data, 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 di atas menampilkan perbandingan distribusi jumlah penyewaan sepeda (cnt) berdasarkan kategori musim (season). Setiap kotak menggambarkan 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 memperlihatkan rentang nilai data.
Dari visualisasi ini terlihat bahwa musim Summer memiliki jumlah penyewaan sepeda yang lebih tinggi dibandingkan musim lainnya, dengan median sekitar 5.000 penyewaan per hari. Sebaliknya, musim Winter memiliki jumlah penyewaan yang lebih rendah, dengan median di bawah 3.000 penyewaan per hari. Hal ini mengindikasikan bahwa penggunaan sepeda cenderung meningkat pada musim panas dan menurun pada musim dingin, kemungkinan dipengaruhi oleh faktor cuaca yang memengaruhi kenyamanan dalam bersepeda.
Violin Plot Bivariate
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:
bike_data$weathersit <- as.factor(bike_data$weathersit)
ggplot(bike_data, 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() +
theme(plot.title = element_text(hjust = 0.5))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.
Hexbin Plot
Hexbin plot bivariate digunakan untuk melihat pola hubungan antara dua variabel numerik sekaligus, terutama ketika jumlah data cukup besar dan titik-titik pada scatter plot berpotensi saling menumpuk. Dalam konteks ini, hexbin plot membantu memvisualisasikan kepadatan data melalui bentuk heksagon, sehingga area dengan konsentrasi pengamatan yang tinggi dapat terlihat lebih jelas. Berikut adalah contoh kode untuk membuat hexbin plot antara kecepatan angin (windspeed) dan jumlah penyewaan sepeda (cnt):
ggplot(bike_data, aes(x = windspeed, y = cnt)) +
geom_hex() +
scale_fill_gradient(low = "#E0F3F8", high = "#D7301F") +
labs(title = "Hexbin Plot: Kecepatan Angin vs Total Penyewaan",
x = "Kecepatan Angin",
y = "Total Rentals (cnt)",
fill = "Jumlah Observasi") +
theme_minimal() +
theme(
plot.title = element_text(hjust = 0.5, margin = margin(b = 15)),
axis.title.x = element_text(margin = margin(t = 12)),
axis.title.y = element_text(margin = margin(r = 12))
)Berdasarkan hexbin plot antara kecepatan angin (windspeed) dan total penyewaan sepeda (cnt), terlihat bahwa sebagian besar observasi berkumpul pada kecepatan angin sekitar 0.1 hingga 0.2 dengan jumlah penyewaan berkisar antara 4.000 hingga 6.000 unit. Warna yang lebih gelap pada plot menunjukkan kepadatan data yang lebih tinggi, sehingga dapat disimpulkan bahwa kondisi angin rendah hingga sedang merupakan kondisi yang paling sering terjadi dan pada saat itu jumlah penyewaan relatif tinggi.
Secara umum, terdapat indikasi korelasi negatif lemah antara kecepatan angin dan total penyewaan sepeda, saat kecepatan angin meningkat di atas 0.3, jumlah penyewaan cenderung menurun dan penyebaran datanya menjadi lebih jarang. Hubungan ini tidak terlalu kuat karena variasi jumlah penyewaan masih cukup besar pada berbagai tingkat kecepatan angin, menunjukkan adanya faktor lain seperti suhu, musim, kelembapan, atau hari kerja/libur yang turut memengaruhi perilaku penyewaan.
Variabilitas data juga menunjukkan bahwa pada kecepatan angin rendah, jumlah penyewaan sangat bervariasi, mulai dari 1.000 hingga 8.000 unit per hari, sedangkan pada kecepatan angin tinggi, jumlah penyewaan jarang mencapai angka tinggi, menandakan bahwa angin kencang cenderung membatasi jumlah penyewaan maksimum. Dengan demikian, kondisi optimal untuk penyewaan sepeda terjadi saat angin rendah hingga sedang, sementara angin kencang dapat membuat minat bersepeda menurun.
Barplot
Bar plot bivariate digunakan untuk membandingkan nilai ringkasan statistik dari suatu variabel numerik berdasarkan kategori tertentu. Dalam konteks ini, bar plot membantu menampilkan rata-rata (mean) dari variabel numerik sehingga perbandingan antar kelompok menjadi lebih jelas dan mudah dipahami. Berikut adalah contoh kode untuk membuat barplot antara rata-rata jumlah penyewaan sepeda (mean cnt) berdasarkan hari dalam seminggu (weekday):
bike_data %>%
mutate(weekday = factor(weekday,
levels = 0:6,
labels = c("Minggu", "Senin", "Selasa",
"Rabu", "Kamis", "Jumat", "Sabtu"))) %>%
group_by(weekday) %>%
summarise(mean_cnt = mean(cnt)) %>%
mutate(max_value = mean_cnt == max(mean_cnt)) %>%
ggplot(aes(x = weekday, y = mean_cnt, fill = max_value)) +
geom_bar(stat = "identity") +
scale_y_continuous(limits = c(0, 5000),
breaks = seq(500, 5000, by = 500)) +
scale_fill_manual(values = c("TRUE" = "#FFD700",
"FALSE" = "#FFF176"),
guide = "none") +
labs(title = "Rata-rata Penyewaan Sepeda Berdasarkan Hari",
x = "Hari",
y = "Rata-rata Total Penyewaan") +
theme_minimal() +
theme(
plot.title = element_text(hjust = 0.5, margin = margin(b = 15)),
axis.title.x = element_text(margin = margin(t = 15)),
axis.title.y = element_text(margin = margin(r = 15))
)Visualisasi ini menunjukkan rata-rata total penyewaan sepeda berdasarkan hari dalam satu minggu. Rata-rata penyewaan terendah terjadi pada hari Minggu, kemudian meningkat secara bertahap pada hari Senin hingga Kamis, dan mencapai puncaknya pada hari Jumat. Setelah itu, terjadi sedikit penurunan pada hari Sabtu.
Perbedaan antarhari tidak terlalu ekstrem, namun tren kenaikan menuju akhir minggu kerja cukup konsisten. Hal ini mengindikasikan bahwa aktivitas penyewaan sepeda cenderung lebih tinggi menjelang akhir minggu kerja, kemungkinan karena meningkatnya mobilitas masyarakat atau aktivitas luar ruangan sebelum akhir pekan. Pola ini juga dapat menunjukkan bahwa sepeda digunakan tidak hanya untuk rekreasi, tetapi juga sebagai sarana transportasi rutin selama hari kerja.
Stacked Bar
Stacked bar chart bivariate digunakan untuk melihat komposisi dua variabel kategorik dalam satu tampilan yang sama. Visualisasi ini membantu kita memahami bagaimana distribusi suatu kategori terbagi ke dalam kategori lainnya, sekaligus tetap mempertahankan informasi jumlah totalnya. Berikut adalah contoh kode untuk membuat stacked bar antara weekday (hari dalam seminggu) dan weathersit (kondisi cuaca):
bike_data %>%
mutate(
weekday = factor(weekday,
levels = 0:6,
labels = c("Minggu", "Senin", "Selasa",
"Rabu", "Kamis", "Jumat", "Sabtu")),
weathersit = factor(weathersit,
levels = c(1,2,3),
labels = c("Cerah / Sedikit Berawan",
"Berawan / Kabut Ringan",
"Hujan Ringan"))
) %>%
ggplot(aes(x = weekday, fill = weathersit)) +
geom_bar(position = "stack") +
scale_y_continuous(breaks = seq(0, 800, by = 10)) +
scale_fill_manual(values = c("#BBDEFB",
"#64B5F6",
"#1565C0")) +
labs(title = "Distribusi Kondisi Cuaca Berdasarkan Hari",
x = "Hari",
y = "Jumlah Observasi",
fill = "Kondisi Cuaca") +
theme_minimal() +
theme(plot.title = element_text(hjust = 0.5))Visualisasi stacked bar chart menunjukkan distribusi kondisi cuaca (cerah, berawan/kabut ringan, dan hujan ringan) berdasarkan hari dalam satu minggu. Secara umum, kondisi cerah atau sedikit berawan mendominasi pada semua hari, dengan jumlah observasi yang relatif stabil dan konsisten dari Minggu hingga Sabtu.
Kondisi berawan/kabut ringan menempati posisi kedua dan juga menunjukkan distribusi yang cukup merata di setiap hari. Sementara itu, kondisi hujan ringan memiliki jumlah observasi paling sedikit dan hanya muncul dalam proporsi kecil di seluruh hari.
Tidak terlihat perbedaan distribusi cuaca yang signifikan antara hari kerja dan akhir pekan. Proporsi masing-masing kondisi cuaca relatif serupa di setiap hari, hal ini menunjukkan bahwa dalam dataset ini, variasi cuaca tidak dipengaruhi secara signifikan oleh perbedaan hari.
Kesimpulan
Berdasarkan berbagai visualisasi yang telah dibuat, dapat disimpulkan bahwa penggunaan sepeda dalam dataset ini dipengaruhi oleh beberapa faktor cuaca dan waktu. Hubungan antara suhu (temp) dan total penyewaan sepeda (cnt) menunjukkan pola positif, di mana semakin tinggi suhu, semakin banyak sepeda yang disewa. Hal ini mengindikasikan bahwa cuaca yang lebih hangat mendorong peningkatan aktivitas penyewaan, sedangkan suhu rendah cenderung membuat minat bersepeda menurun. Selain itu, distribusi jumlah penyewaan berdasarkan musim (season) menunjukkan bahwa musim panas (Summer) memiliki jumlah penyewaan tertinggi, sedangkan musim dingin (Winter) cenderung lebih rendah, menegaskan bahwa kenyamanan cuaca berperan penting dalam penggunaan sepeda.
Kondisi cuaca harian (weathersit) juga memiliki pengaruh yang signifikan. Visualisasi violin plot menunjukkan bahwa hari-hari dengan cuaca cerah (Clear) memiliki distribusi penyewaan yang lebih tinggi dan padat dibandingkan hari dengan hujan ringan (Light Rain) atau hujan deras (Heavy Rain). Hal ini menegaskan bahwa kondisi cuaca yang baik mendorong penggunaan sepeda, sementara cuaca buruk dapat menurunkan minat masyarakat untuk menyewa. Selain itu, hexbin plot antara kecepatan angin (windspeed) dan total penyewaan memperlihatkan bahwa sebagian besar penyewaan terjadi pada kondisi angin rendah hingga sedang (0.1–0.2), dengan jumlah penyewaan berkisar 4.000–6.000. Peningkatan kecepatan angin di atas 0.3 cenderung menurunkan jumlah penyewaan, meskipun variasi data yang besar menunjukkan adanya pengaruh faktor lain seperti suhu, musim, atau hari kerja.
Selain faktor cuaca, waktu dalam minggu juga memengaruhi pola penyewaan sepeda. Rata-rata penyewaan per hari menunjukkan tren peningkatan menuju akhir minggu kerja, dengan puncak pada hari Jumat dan penurunan ringan pada hari Sabtu. Hal ini menunjukkan bahwa sepeda digunakan tidak hanya untuk rekreasi, tetapi juga sebagai sarana transportasi rutin selama hari kerja. Distribusi kondisi cuaca sepanjang minggu relatif stabil, dengan cuaca cerah atau sedikit berawan mendominasi dan hujan ringan hanya muncul dalam proporsi kecil. Kesimpulannya, pola penggunaan sepeda dipengaruhi oleh kombinasi cuaca, musim, kecepatan angin, serta hari dalam minggu, dengan kondisi optimal terjadi saat cuaca cerah, suhu hangat, dan angin rendah hingga sedang.
Visualisasi Data Time Series
Setelah memahami karakteristik data melalui visualisasi univariate dan hubungan antarvariabel melalui visualisasi bivariate, analisis selanjutnya dapat dilanjutkan dengan visualisasi time series. Visualisasi time series digunakan untuk mengamati bagaimana suatu variabel berubah dari waktu ke waktu sehingga pola dinamika data dapat terlihat secara lebih jelas.
Dalam konteks dataset penyewaan sepeda, pendekatan ini digunakan untuk melihat perubahan jumlah penyewaan sepeda (cnt) berdasarkan dimensi waktu, seperti tanggal maupun bulan selama periode pengamatan dari tahun 2011 hingga 2012. Melalui pendekatan ini, analis dapat memahami bagaimana aktivitas penyewaan sepeda berkembang dari waktu ke waktu serta mengidentifikasi pola tertentu yang muncul dalam data.
Visualisasi time series memungkinkan analis untuk mengidentifikasi beberapa karakteristik penting dalam data, seperti fluktuasi harian, tren perubahan jangka panjang, serta pola musiman yang terjadi pada periode tertentu. Misalnya, analis dapat melihat apakah jumlah penyewaan sepeda mengalami peningkatan dari tahun ke tahun, bagaimana pola penyewaan berubah sepanjang bulan dalam satu tahun, serta bagaimana variabel lain seperti kondisi cuaca dapat memengaruhi perubahan tersebut.
Dengan demikian, visualisasi time series tidak hanya membantu menggambarkan perubahan nilai suatu variabel secara berurutan dalam waktu, tetapi juga memberikan pemahaman yang lebih mendalam mengenai dinamika penggunaan sepeda serta faktor-faktor yang berkaitan dengan perubahan tersebut. Dalam analisis ini, visualisasi time series ditampilkan melalui beberapa bentuk grafik, yaitu time series line plot untuk melihat fluktuasi harian jumlah penyewaan sepeda, seasonal line plot untuk mengidentifikasi pola musiman berdasarkan bulan pada dua tahun pengamatan, serta smoothed line plot untuk memperlihatkan tren perubahan variabel cuaca yang telah dihaluskan melalui teknik smoothing.
Time Series Line Plot
Time series line plot adalah grafik garis yang digunakan untuk menggambarkan perubahan nilai suatu variabel secara berurutan berdasarkan waktu. Visualisasi ini biasanya digunakan untuk melihat tren data, mengidentifikasi fluktuasi, serta memahami dinamika perubahan variabel dalam periode pengamatan tertentu. Pada grafik ini ditampilkan jumlah total penyewaan sepeda (cnt) berdasarkan tanggal (dteday), sehingga grafik menunjukkan bagaimana aktivitas penyewaan sepeda berubah dari hari ke hari selama periode pengamatan dari tahun 2011 hingga tahun 2012.
ggplot(bike_data, aes(x = dteday, y = cnt)) +
geom_line(color = "#E63946", linewidth = 0.6) +
scale_x_date(
date_labels = "%b %Y",
date_breaks = "3 months"
) +
scale_y_continuous(
breaks = seq(0, max(bike_data$cnt, na.rm = TRUE), by = 2000)
) +
labs(
title = "Daily Bike Rental Trend",
x = "Date",
y = "Total Rentals"
) +
theme_minimal() +
theme(
plot.title = element_text(hjust = 0.5, size = 16, face = "bold"),
axis.title.x = element_text(margin = margin(t = 15)),
axis.title.y = element_text(margin = margin(r = 15))
)Visualisasi ini menunjukkan adanya pola fluktuasi harian dalam jumlah penyewaan sepeda. Data menunjukkan bahwa jumlah penyewaan sepeda dapat berubah secara signifikan dari satu hari ke hari berikutnya. Meskipun terdapat variasi harian yang cukup besar, secara umum terlihat adanya kecenderungan peningkatan jumlah penyewaan sepeda dari tahun 2011 ke tahun 2012. Selain itu, terlihat bahwa nilai penyewaan sepeda cenderung lebih tinggi pada periode pertengahan tahun dibandingkan awal atau akhir tahun. Grafik ini memberikan gambaran yang lebih rinci mengenai dinamika penggunaan sepeda dalam skala harian.
Seasonal Line Plot
Seasonal line plot adalah grafik garis yang menampilkan lebih dari satu garis dalam satu grafik untuk membandingkan beberapa kelompok data secara bersamaan. Dalam konteks analisis time series, grafik ini sering digunakan untuk mengidentifikasi pola musiman dalam data. Pada grafik ini ditampilkan rata-rata jumlah penyewaan sepeda berdasarkan bulan untuk dua tahun yang berbeda, yaitu tahun 2011 dan 2012. Dengan menampilkan dua garis yang mewakili dua tahun yang berbeda, visualisasi ini memungkinkan analis untuk melihat bagaimana pola penyewaan sepeda berubah setiap bulan serta membandingkan kecenderungan penggunaan sepeda antar tahun.
bike_data$yr <- factor(
bike_data$yr,
levels = c(0,1),
labels = c("2011","2012")
)
ggplot(bike_data, aes(x=mnth, y=cnt, color=yr, group=yr)) +
stat_summary(fun=mean, geom="line", linewidth=1) +
stat_summary(fun=mean, geom="point", size=2) +
scale_x_continuous(breaks=1:12) +
scale_y_continuous(
breaks = seq(0, max(bike_data$cnt, na.rm=TRUE), by = 1000)
) +
scale_color_manual(
values=c("#5A189A","#C77DFF"),
labels=c("2011","2012")
) +
labs(
title="Seasonal Pattern of Bike Rentals",
x="Month",
y="Average Rentals",
color="Year"
) +
theme_minimal() +
theme(
plot.title = element_text(hjust=0.5, face="bold", margin = margin(b=20)),
axis.title.x = element_text(margin = margin(t=20)),
axis.title.y = element_text(margin = margin(r=20))
)Visualisasi ini menunjukkan adanya pola musiman dalam jumlah penyewaan sepeda. Jumlah penyewaan sepeda cenderung meningkat dari awal tahun hingga pertengahan tahun, kemudian menurun kembali menjelang akhir tahun. Puncak penyewaan sepeda terlihat terjadi pada pertengahan tahun, khususnya pada bulan Juni hingga September. Pola ini menunjukkan bahwa aktivitas penyewaan sepeda cenderung lebih tinggi pada periode tertentu dalam setahun. Selain itu, terlihat bahwa jumlah penyewaan sepeda pada tahun 2012 secara konsisten lebih tinggi dibandingkan tahun 2011 pada hampir seluruh bulan, yang menunjukkan adanya peningkatan penggunaan layanan penyewaan sepeda dari tahun ke tahun.
Smoothed Line Plot
Smoothed line plot adalah bentuk visualisasi deret waktu yang menampilkan hubungan antara suatu variabel dengan waktu menggunakan garis tren yang telah dihaluskan melalui teknik smoothing. Teknik ini digunakan untuk mengurangi fluktuasi acak atau noise yang sering muncul pada data harian sehingga pola umum dalam data dapat terlihat lebih jelas. Dengan menggunakan pendekatan smoothing, analis dapat mengamati kecenderungan perubahan variabel dalam jangka waktu tertentu tanpa terlalu dipengaruhi oleh variasi harian yang bersifat acak. Pada visualisasi ini ditampilkan dua variabel cuaca, yaitu temperature (temp) dan windspeed, yang diamati sepanjang waktu pada tahun 2011 dan 2012 untuk melihat pola perubahan kedua variabel tersebut.
bike_2011 <- bike_data %>%
filter(yr == "2011") %>%
select(dteday, windspeed, temp) %>%
pivot_longer(
cols = c(windspeed, temp),
names_to = "variable",
values_to = "value"
)
ggplot(bike_2011, aes(x = dteday, y = value, color = variable)) +
geom_line(alpha = 0.4) +
geom_smooth(method = "loess", linewidth = 1.2, se = FALSE) +
scale_x_date(
date_labels = "%b",
date_breaks = "2 months"
) +
scale_y_continuous(
breaks = seq(0, 1, by = 0.1)
) +
labs(
title = "Smoothed Trend of Windspeed and Temperature in 2011",
x = "Date",
y = "Normalized Value",
color = "Variable"
) +
theme_minimal() +
theme(
plot.title = element_text(hjust = 0.5, face = "bold")
)bike_2012 <- bike_data %>%
filter(yr == "2012") %>%
select(dteday, windspeed, temp) %>%
pivot_longer(
cols = c(windspeed, temp),
names_to = "variable",
values_to = "value"
)
ggplot(bike_2012, aes(x = dteday, y = value, color = variable)) +
geom_line(alpha = 0.4) +
geom_smooth(method = "loess", linewidth = 1.2, se = FALSE) +
scale_x_date(
date_labels = "%b",
date_breaks = "2 months"
) +
scale_y_continuous(
limits = c(0, 1),
breaks = seq(0, 1, by = 0.1)
) +
labs(
title = "Smoothed Trend of Windspeed and Temperature in 2012",
x = "Date",
y = "Normalized Value",
color = "Variable"
) +
theme_minimal() +
theme(
plot.title = element_text(hjust = 0.5, face = "bold")
)Visualisasi ini menampilkan pola perubahan suhu (temperature) dan kecepatan angin (windspeed) sepanjang waktu pada tahun 2011 dan 2012 dengan menggunakan metode smoothing dalam analisis time series. Berdasarkan kedua grafik tersebut, terlihat bahwa suhu (temperature) menunjukkan pola musiman yang cukup jelas pada kedua tahun pengamatan. Suhu cenderung meningkat secara bertahap dari awal tahun hingga mencapai nilai tertinggi pada pertengahan tahun, kemudian menurun kembali menuju akhir tahun. Pola ini menunjukkan adanya perubahan kondisi lingkungan yang dipengaruhi oleh siklus musim sepanjang tahun. Sementara itu, kecepatan angin (windspeed) pada kedua tahun terlihat relatif lebih stabil dibandingkan suhu. Nilai windspeed mengalami fluktuasi yang tidak terlalu besar dan tidak menunjukkan pola musiman yang sekuat suhu. Dengan demikian, dari kedua visualisasi tersebut dapat disimpulkan bahwa variasi suhu sepanjang tahun lebih dominan dibandingkan variasi kecepatan angin, serta menunjukkan pola perubahan yang relatif konsisten antara tahun 2011 dan 2012.
Kesimpulan
Secara keseluruhan, hasil dari seluruh visualisasi menunjukkan adanya keterkaitan antara kondisi cuaca dan pola penggunaan sepeda. Visualisasi smoothed line plot menunjukkan bahwa suhu memiliki pola musiman yang jelas sepanjang tahun, dengan nilai yang meningkat pada pertengahan tahun dan menurun pada awal serta akhir tahun. Pola tersebut sejalan dengan hasil pada visualisasi line plot dan seasonal line plot yang menunjukkan bahwa jumlah penyewaan sepeda juga cenderung meningkat pada pertengahan tahun dan menurun pada periode lainnya. Hal ini menunjukkan bahwa kondisi cuaca, khususnya suhu, dapat memengaruhi tingkat penggunaan sepeda. Ketika suhu lebih hangat dan kondisi lingkungan lebih nyaman untuk beraktivitas di luar ruangan, jumlah penyewaan sepeda cenderung meningkat, sedangkan ketika suhu menurun aktivitas penyewaan sepeda juga cenderung berkurang. Dengan demikian, visualisasi variabel cuaca dapat membantu menjelaskan pola perubahan jumlah penyewaan sepeda yang terlihat dalam analisis data time series.