Eksplorasi deskriptif untuk data suhu harian di Kota Semarang selama 10 hari terakhir.
# Menginput data deret suhu harian
suhu <- c(32, 33, 31, 34, 35, 30, 29, 33, 32, 34)
# a. Perhitungan statistik deskriptif dasar
rata_suhu <- mean(suhu)
median_suhu <- median(suhu)
sd_suhu <- sd(suhu)
cat("Rata-rata suhu :", round(rata_suhu, 2), "°C\n")
#> Rata-rata suhu : 32.3 °C
cat("Median suhu :", median_suhu, "°C\n")
#> Median suhu : 32.5 °C
cat("Standar deviasi suhu :", round(sd_suhu, 2), "°C\n")
#> Standar deviasi suhu : 1.89 °C
# b. Menentukan hari dengan temperatur tertinggi
idx_panas <- which.max(suhu)
cat("Suhu puncak tercatat pada hari ke-", idx_panas, "sebesar", suhu[idx_panas], "°C\n")
#> Suhu puncak tercatat pada hari ke- 5 sebesar 35 °C
# c. Menghitung frekuensi hari di atas rata-rata
hari_panas <- sum(suhu > rata_suhu)
cat("Banyaknya hari dengan suhu di atas rata-rata:", hari_panas, "hari\n")
#> Banyaknya hari dengan suhu di atas rata-rata: 5 hari
Analisis data operasional harian armada Trans Semarang (dalam satuan ribuan penumpang).
penumpang <- c(45, 52, 49, 60, 55, 70, 65)
hari <- c("Senin", "Selasa", "Rabu", "Kamis", "Jumat", "Sabtu", "Minggu")
# a. Pembuatan data frame transportasi
df_transport <- data.frame(
hari = factor(hari, levels = hari),
penumpang = penumpang
)
df_transport
#> hari penumpang
#> 1 Senin 45
#> 2 Selasa 52
#> 3 Rabu 49
#> 4 Kamis 60
#> 5 Jumat 55
#> 6 Sabtu 70
#> 7 Minggu 65
# b. Rata-rata penumpang khusus hari kerja (Senin - Jumat)
hari_kerja <- c("Senin", "Selasa", "Rabu", "Kamis", "Jumat")
rata_weekdays <- mean(df_transport$penumpang[df_transport$hari %in% hari_kerja])
cat("Rata-rata volume penumpang hari kerja (Senin-Jumat):", round(rata_weekdays, 2), "ribu orang\n")
#> Rata-rata volume penumpang hari kerja (Senin-Jumat): 52.2 ribu orang
# c. Hari operasional dengan penumpang tertinggi
hari_puncak <- df_transport$hari[which.max(df_transport$penumpang)]
cat("Puncak kepadatan penumpang terjadi pada hari:", as.character(hari_puncak), "\n")
#> Puncak kepadatan penumpang terjadi pada hari: Sabtu
# d. Evaluasi persentase lonjakan penumpang dari Senin ke Sabtu
penumpang_senin <- df_transport$penumpang[df_transport$hari == "Senin"]
penumpang_sabtu <- df_transport$penumpang[df_transport$hari == "Sabtu"]
lonjakan_persen <- ((penumpang_sabtu - penumpang_senin) / penumpang_senin) * 100
cat("Kenaikan penumpang Senin ke Sabtu:", round(lonjakan_persen, 2), "%\n")
#> Kenaikan penumpang Senin ke Sabtu: 55.56 %
Pemeriksaan volatilitas dan perubahan tren harga komoditas beras mingguan.
harga_beras <- c(12000, 12200, 12150, 12300, 12400, 12500, 12600, 12750)
minggu <- 1:8
# a. Penyusunan data frame pergerakan harga
df_beras <- data.frame(minggu = minggu, harga = harga_beras)
df_beras
#> minggu harga
#> 1 1 12000
#> 2 2 12200
#> 3 3 12150
#> 4 4 12300
#> 5 5 12400
#> 6 6 12500
#> 7 7 12600
#> 8 8 12750
# c. Menghitung fluktuasi/selisih antar minggu berurutan
selisih_harga <- diff(df_beras$harga)
cat("Perubahan harga antar minggu (diff):\n")
#> Perubahan harga antar minggu (diff):
selisih_harga
#> [1] 200 -50 150 100 100 100 150
# b. Rata-rata kenaikan harga per minggu
rata_naik <- mean(selisih_harga)
cat("Rata-rata pertumbuhan harga per minggu: Rp", round(rata_naik, 2), "\n")
#> Rata-rata pertumbuhan harga per minggu: Rp 107.14
# d. Periode dengan lompatan kenaikan tertinggi
# diff() bergeser 1 periode ke depan, sehingga minggu tujuan = index + 1
idx_lonjakan <- which.max(selisih_harga)
minggu_puncak <- df_beras$minggu[idx_lonjakan + 1]
cat("Lonjakan harga tertinggi terjadi pada minggu ke-", minggu_puncak,
"sebesar Rp", max(selisih_harga), "\n")
#> Lonjakan harga tertinggi terjadi pada minggu ke- 2 sebesar Rp 200
Manipulasi data kependudukan tabular menggunakan operasi matriks dan
fungsi agregasi apply().
# Inisialisasi matriks kependudukan (ribuan jiwa)
populasi <- matrix(
c(
50, 55, 60, 65, # Kec_A
40, 42, 45, 47, # Kec_B
70, 72, 74, 76 # Kec_C
),
nrow = 3,
byrow = TRUE
)
rownames(populasi) <- c("Kec_A", "Kec_B", "Kec_C")
colnames(populasi) <- c("2019", "2020", "2021", "2022")
populasi
#> 2019 2020 2021 2022
#> Kec_A 50 55 60 65
#> Kec_B 40 42 45 47
#> Kec_C 70 72 74 76
# a. Rata-rata laju pertumbuhan penduduk per tahun tiap kecamatan
# MARGIN = 1 mengeksekusi fungsi per baris
laju_tumbuh <- apply(populasi, 1, function(baris) mean(diff(baris)))
cat("Pertumbuhan penduduk rata-rata tahunan tiap kecamatan:\n")
#> Pertumbuhan penduduk rata-rata tahunan tiap kecamatan:
round(laju_tumbuh, 2)
#> Kec_A Kec_B Kec_C
#> 5.00 2.33 2.00
# b. Kecamatan dengan jumlah penduduk terbesar pada tahun 2022
pop_2022 <- populasi[, "2022"]
kec_terpadat <- names(which.max(pop_2022))
cat("Kecamatan dengan populasi terbesar pada tahun 2022:", kec_terpadat,
"(", max(pop_2022), "ribu jiwa)\n")
#> Kecamatan dengan populasi terbesar pada tahun 2022: Kec_C ( 76 ribu jiwa)
# c. Akumulasi total penduduk per tahun
# MARGIN = 2 mengeksekusi agregasi per kolom
total_tahunan <- apply(populasi, 2, sum)
cat("Total populasi keseluruhan per tahun:\n")
#> Total populasi keseluruhan per tahun:
total_tahunan
#> 2019 2020 2021 2022
#> 160 169 179 188
Pembuatan fungsi deteksi anomali/lonjakan harga berbasis ambang batas (threshold).
# Definisi fungsi deteksi lonjakan kenaikan harga
deteksi_kenaikan <- function(vektor_harga, ambang_batas = 200) {
# Evaluasi diferensiasi harga mingguan
delta <- diff(vektor_harga)
# Cari indeks periode yang melebihi batas kenaikan
minggu_terdeteksi <- which(delta > ambang_batas) + 1
return(minggu_terdeteksi)
}
# Pengujian fungsi custom terhadap data harga beras
lonjakan_beras <- deteksi_kenaikan(df_beras$harga)
cat("Kenaikan harga di atas Rp 200 terjadi pada minggu ke-:", lonjakan_beras, "\n")
#> Kenaikan harga di atas Rp 200 terjadi pada minggu ke-: