library(tidyverse)
library(readxl)
library(kableExtra)
# 1. Baca data Excel
data_raw <- read_excel("kendaraan_5_provinsi_2025.xlsx", skip = 2)
# 2. Atur ulang nama kolom
colnames(data_raw) <- c("Provinsi", "Mobil Penumpang", "Bus", "Truk", "Sepeda Motor", "Jumlah")
# 3. Bersihkan angka dari titik/simbol
data_clean <- data_raw %>%
filter(!grepl("INDONESIA|Indonesia|TOTAL|Total", Provinsi) & !is.na(Provinsi)) %>%
mutate(across(-Provinsi, ~ as.numeric(gsub("[^0-9]", "", as.character(.)))))
# 4. Reshape data ke format tabel BPS
df_tabel_base <- data_clean %>%
select(-Jumlah) %>%
pivot_longer(
cols = -Provinsi,
names_to = "Jenis_Kendaraan",
values_to = "Nilai"
) %>%
pivot_wider(
names_from = Provinsi,
values_from = Nilai
)
# 5. Hitung total per provinsi dan gabungkan ke tabel
df_total <- df_tabel_base %>%
summarise(across(-Jenis_Kendaraan, ~ sum(., na.rm = TRUE))) %>%
mutate(Jenis_Kendaraan = "Jumlah / Total")
df_tabel_final <- bind_rows(df_tabel_base, df_total)
# 6. Tampilkan tabel dengan styling kableExtra
df_tabel_final %>%
kbl(
format = "html",
caption = "<b>Tabel Jumlah Kendaraan Bermotor Menurut Jenis dan Provinsi</b>",
col.names = c("Jenis Kendaraan", colnames(df_tabel_final)[-1]),
format.args = list(big.mark = ".", decimal.mark = ",")
) %>%
kable_styling(
bootstrap_options = c("striped", "hover", "condensed"),
full_width = TRUE,
position = "center"
) %>%
pack_rows("Kendaraan Roda 4 atau Lebih", 1, 3) %>%
pack_rows("Kendaraan Roda 2", 4, 4) %>%
row_spec(5, bold = TRUE, background = "#f2f2f2")
| Jenis Kendaraan | JAWA TIMUR | JAWA TENGAH | DKI JAKARTA |
|---|---|---|---|
| Kendaraan Roda 4 atau Lebih | |||
| Mobil Penumpang | 5.588.804 | 1.741.611 | 2.336.960 |
| Bus | 48.012 | 39.734 | 37.981 |
| Truk | 816.582 | 700.639 | 527.841 |
| Kendaraan Roda 2 | |||
| Sepeda Motor | 20.246.077 | 19.838.639 | 9.376.276 |
| Jumlah / Total | 26.699.475 | 22.320.623 | 12.279.058 |
# 3. Data untuk Bar Chart
df_bar <- data_clean
# 4. Gambar Bar Chart
ggplot(df_bar, aes(x = Provinsi, y = Jumlah)) +
geom_bar(stat = "identity", fill = "steelblue", color = "black") +
scale_y_continuous(labels = scales::comma) +
theme_minimal() +
labs(
title = "Jumlah Kendaraan Bermotor per Provinsi",
x = "Provinsi",
y = "Jumlah (Unit)"
) +
theme(axis.text.x = element_text(angle = 90, hjust = 1, vjust = 0.5, size = 8))
Interpretasi: Diagram batang di atas menampilkan perbandingan total jumlah kendaraan bermotor antar provinsi di Indonesia. Dari visualisasi ini, terlihat jelas adanya ketimpangan distribusi kendaraan yang sangat signifikan antar wilayah:
Konsentrasi di Pulau Jawa: Provinsi-provinsi di Pulau Jawa (seperti Jawa Barat, Jawa Timur, Jawa Tengah, dan DKI Jakarta) mendominasi puncak grafik dengan jumlah kendaraan tertinggi nasional. Hal ini sejalan dengan tingginya jumlah penduduk, pusat kegiatan ekonomi, serta padatnya mobilitas di wilayah tersebut.
Wilayah Luar Jawa & Indonesia Timur: Sebaliknya, provinsi di luar Pulau Jawa—khususnya di wilayah Indonesia Timur seperti Papua Pegunungan, Papua Selatan, dan Papua Barat—menunjukkan batang grafik yang jauh lebih rendah. Hal ini dipengaruhi oleh jumlah populasi yang lebih sedikit serta keterbatasan akses sarana transportasi darat.
# 1. Ambil data jumlah yang sudah bersih dari chunk 1
df_hist <- data_clean %>%
select(Jumlah) %>%
filter(!is.na(Jumlah))
# 2. Buat Histogram
ggplot(df_hist, aes(x = Jumlah)) +
geom_histogram(bins = 15, fill = "darkorange", color = "black") +
scale_x_continuous(labels = scales::comma) +
theme_minimal() +
labs(
title = "Distribusi Frekuensi Jumlah Kendaraan",
x = "Jumlah Kendaraan (Unit)",
y = "Frekuensi"
)
Interpretasi: Histogram di atas menggambarkan bentuk distribusi frekuensi dari total jumlah kendaraan bermotor di tingkat provinsi:
Bentuk Distribusi Mencong ke Kanan (Right-Skewed): Sebagian besar provinsi terkumpul di sisi kiri grafik (rentang jumlah kendaraan rendah hingga menengah).
Keberadaan Pencilan (Outliers): Hanya ada sedikit provinsi yang berada di sisi kanan grafik dengan angka kendaraan yang sangat ekstrem. Hal ini membuktikan bahwa populasi kendaraan bermotor di Indonesia tidak tersebar secara merata, melainkan didominasi oleh sebagian kecil provinsi berkembang dan berpopulasi tinggi.
# 1. Ambil data Mobil Penumpang dan Sepeda Motor dari data_clean
df_scatter <- data_clean %>%
select(
Mobil = `Mobil Penumpang`,
Sepeda_Motor = `Sepeda Motor`
)
# 2. Buat Scatter Plot dari tabel baru
ggplot(df_scatter, aes(x = Mobil, y = Sepeda_Motor)) +
geom_point(color = "purple", size = 3, alpha = 0.7) +
geom_smooth(method = "lm", color = "black", se = FALSE) +
scale_x_continuous(labels = scales::comma) +
scale_y_continuous(labels = scales::comma) +
theme_minimal() +
labs(
title = "Hubungan Jumlah Mobil dan Sepeda Motor",
x = "Jumlah Mobil",
y = "Jumlah Sepeda Motor"
)
Interpretasi: Scatter plot di atas memperlihatkan hubungan antara dua variabel numerik, yaitu jumlah Mobil Penumpang (sumbu X) dan jumlah Sepeda Motor (sumbu Y) per provinsi:
Korelasi Positif yang Sangat Kuat: Pola sebaran titik-titik data membentuk tren yang naik dari kiri bawah ke kanan atas, diiringi garis regresi linier yang miring ke atas.
Kesimpulan Hubungan: Semakin tinggi jumlah mobil penumpang di suatu provinsi, semakin tinggi pula jumlah sepeda motor di wilayah tersebut. Pola ini menunjukkan bahwa pertumbuhan kedua jenis kendaraan ini dipengaruhi oleh faktor utama yang sama, yaitu jumlah penduduk dan tingkat kemampuan ekonomi daerah.