Analisis ini menggunakan set data berjudul Commodity Prices and Weather Data in Kota Singkawang. Data ini berisi catatan bulanan harga komoditas pangan utama dan kondisi cuaca di Kota Singkawang, Kalimantan Barat, dari Januari 2016 sampai Desember 2023 (96 bulan).
Data memiliki 8 kolom:
Month: tanggal awal tiap bulan (penanda waktu, tidak dihitung statistiknya).
Cayenne Price (Rp): harga cabai rawit per bulan.
Red Chili Price (Rp): harga cabai merah per bulan.
Shallot Price (Rp): harga bawang merah per bulan.
Garlic Price (Rp): harga bawang putih per bulan.
Rainfall (mm): curah hujan per bulan dalam milimeter.
Number of Rainy Days: jumlah hari hujan dalam satu bulan.
Inflation(%): tingkat inflasi bulanan dalam persen. Nilai negatif berarti deflasi.
Data bersumber dari BPS, lalu dibersihkan, digabungkan, dan dipublikasikan melalui Mendeley Data.
Sumber data: https://data.mendeley.com/datasets/79bmb9vkwk/3
Analisis dilakukan dengan bahasa pemrograman R di
RStudio. Paket yang dipakai adalah readxl
untuk membaca file Excel, dan tidyverse untuk melihat
struktur data, serta ggplot2 untuk visualisasi plot line.
Laporan disusun dengan R Markdown dan dipublikasikan melalui RPubs.
Berikut adalah pembacaan data, pengecekan ukuran serta nilai kosong, dan ringkasan awal.
library(readxl)
library(tidyverse)
Dataset_Cabe <- read_excel("Dataset Cabe.xlsx")
glimpse(Dataset_Cabe)
## Rows: 96
## Columns: 8
## $ Month <dttm> 2016-01-01, 2016-02-01, 2016-03-01, 2016-04-01…
## $ `Rainfall (mm)` <dbl> 313, 170, 391, 35, 385, 219, 143, 23, 138, 207,…
## $ `Cayenne Price (Rp)` <dbl> 36458, 41042, 54700, 55125, 49167, 50667, 51542…
## $ `Red Chili Price (Rp)` <dbl> 27500, 32083, 37500, 38333, 39333, 41208, 40750…
## $ `Shallot Price (Rp)` <dbl> 36958, 31083, 40367, 48375, 49333, 39208, 39708…
## $ `Garlic Price (Rp)` <dbl> 29917, 31167, 33300, 36083, 35767, 35458, 34542…
## $ `Number of Rainy Days` <dbl> 22, 18, 13, 12, 22, 17, 10, 4, 15, 19, 26, 20, …
## $ Inflation <dbl> 0.13, 0.39, 0.42, 0.23, 0.64, 1.28, 2.07, 2.87,…
dim(Dataset_Cabe) # jumlah baris dan kolom
## [1] 96 8
colSums(is.na(Dataset_Cabe)) # jumlah data kosong tiap kolom
## Month Rainfall (mm) Cayenne Price (Rp)
## 0 0 0
## Red Chili Price (Rp) Shallot Price (Rp) Garlic Price (Rp)
## 0 0 0
## Number of Rainy Days Inflation
## 0 0
summary(Dataset_Cabe) # ringkasan cepat semua kolom
## Month Rainfall (mm) Cayenne Price (Rp)
## Min. :2016-01-01 00:00:00 Min. : 23.0 Min. : 35125
## 1st Qu.:2017-12-24 06:00:00 1st Qu.:137.1 1st Qu.: 52327
## Median :2019-12-16 12:00:00 Median :210.5 Median : 59482
## Mean :2019-12-16 11:00:00 Mean :233.8 Mean : 60705
## 3rd Qu.:2021-12-08 18:00:00 3rd Qu.:315.0 3rd Qu.: 64374
## Max. :2023-12-01 00:00:00 Max. :722.0 Max. :127917
## Red Chili Price (Rp) Shallot Price (Rp) Garlic Price (Rp)
## Min. :25933 Min. :19458 Min. :14200
## 1st Qu.:41240 1st Qu.:27708 1st Qu.:22998
## Median :47222 Median :30620 Median :26438
## Mean :49738 Mean :31994 Mean :27823
## 3rd Qu.:55612 3rd Qu.:36896 3rd Qu.:33483
## Max. :86667 Max. :50286 Max. :62400
## Number of Rainy Days Inflation
## Min. : 2.00 Min. :-0.290
## 1st Qu.:10.00 1st Qu.: 1.127
## Median :13.00 Median : 1.745
## Mean :14.42 Mean : 2.000
## 3rd Qu.:19.00 3rd Qu.: 2.615
## Max. :30.00 Max. : 5.960
Data terdiri dari 96 baris dan 8 kolom, dan tidak ada nilai kosong dalam data.
Dan berikut adalah tampilan dataset yang digunakan
library(DT)
datatable(Dataset_Cabe)
Untuk tiap variabel dihitung mean, median, modus, simpangan baku (SD), serta bulan tertinggi dan terendah. Hasil tiap baris kode muncul secara berurutan: mean, median, modus, SD, SD/Mean (%), bulan tertinggi, bulan terendah. Modus dihitung dengan membagi data menjadi 5 kelas berlebar sama, lalu mengambil kelas yang paling sering muncul. Kolom SD/Mean menunjukkan seberapa besar variasi data dibandingkan rata-ratanya.
rawit <- Dataset_Cabe$`Cayenne Price (Rp)`
mean(rawit)
## [1] 60704.79
median(rawit)
## [1] 59482
names(which.max(table(cut(rawit, breaks = 5)))) # modus (kelas)
## [1] "(5.37e+04,7.22e+04]"
sd(rawit)
## [1] 14300.57
sd(rawit) / mean(rawit) * 100 # SD/Mean (%)
## [1] 23.55757
Dataset_Cabe$Month[which.max(rawit)] # bulan tertinggi
## [1] "2017-02-01 UTC"
Dataset_Cabe$Month[which.min(rawit)] # bulan terendah
## [1] "2019-12-01 UTC"
merah <- Dataset_Cabe$`Red Chili Price (Rp)`
mean(merah)
## [1] 49738.45
median(merah)
## [1] 47222
names(which.max(table(cut(merah, breaks = 5)))) # modus (kelas)
## [1] "(3.81e+04,5.02e+04]"
sd(merah)
## [1] 12821.29
sd(merah) / mean(merah) * 100 # SD/Mean (%)
## [1] 25.77743
Dataset_Cabe$Month[which.max(merah)] # bulan tertinggi
## [1] "2019-10-01 UTC"
Dataset_Cabe$Month[which.min(merah)] # bulan terendah
## [1] "2017-06-01 UTC"
bawang_merah <- Dataset_Cabe$`Shallot Price (Rp)`
mean(bawang_merah)
## [1] 31993.73
median(bawang_merah)
## [1] 30620
names(which.max(table(cut(bawang_merah, breaks = 5)))) # modus (kelas)
## [1] "(2.56e+04,3.18e+04]"
sd(bawang_merah)
## [1] 6922.853
sd(bawang_merah) / mean(bawang_merah) * 100 # SD/Mean (%)
## [1] 21.63816
Dataset_Cabe$Month[which.max(bawang_merah)] # bulan tertinggi
## [1] "2022-07-01 UTC"
Dataset_Cabe$Month[which.min(bawang_merah)] # bulan terendah
## [1] "2018-10-01 UTC"
bawang_putih <- Dataset_Cabe$`Garlic Price (Rp)`
mean(bawang_putih)
## [1] 27822.91
median(bawang_putih)
## [1] 26437.5
names(which.max(table(cut(bawang_putih, breaks = 5)))) # modus (kelas)
## [1] "(2.38e+04,3.35e+04]"
sd(bawang_putih)
## [1] 7271.638
sd(bawang_putih) / mean(bawang_putih) * 100 # SD/Mean (%)
## [1] 26.13544
Dataset_Cabe$Month[which.max(bawang_putih)] # bulan tertinggi
## [1] "2017-05-01 UTC"
Dataset_Cabe$Month[which.min(bawang_putih)] # bulan terendah
## [1] "2020-07-01 UTC"
hujan <- Dataset_Cabe$`Rainfall (mm)`
mean(hujan)
## [1] 233.776
median(hujan)
## [1] 210.5
names(which.max(table(cut(hujan, breaks = 5)))) # modus (kelas)
## [1] "(163,303]"
sd(hujan)
## [1] 136.3022
sd(hujan) / mean(hujan) * 100 # SD/Mean (%)
## [1] 58.3046
Dataset_Cabe$Month[which.max(hujan)] # bulan tertinggi
## [1] "2020-07-01 UTC"
Dataset_Cabe$Month[which.min(hujan)] # bulan terendah
## [1] "2016-08-01 UTC"
hari_hujan <- Dataset_Cabe$`Number of Rainy Days`
mean(hari_hujan)
## [1] 14.41667
median(hari_hujan)
## [1] 13
names(which.max(table(cut(hari_hujan, breaks = 5)))) # modus (kelas)
## [1] "(7.6,13.2]"
sd(hari_hujan)
## [1] 6.543243
sd(hari_hujan) / mean(hari_hujan) * 100 # SD/Mean (%)
## [1] 45.38666
Dataset_Cabe$Month[which.max(hari_hujan)] # bulan tertinggi
## [1] "2022-06-01 UTC"
Dataset_Cabe$Month[which.min(hari_hujan)] # bulan terendah
## [1] "2019-08-01 UTC"
inflasi <- Dataset_Cabe$Inflation
mean(inflasi)
## [1] 2.000417
median(inflasi)
## [1] 1.745
names(which.max(table(cut(inflasi, breaks = 5)))) # modus (kelas)
## [1] "(0.96,2.21]"
sd(inflasi)
## [1] 1.33084
sd(inflasi) / mean(inflasi) * 100 # SD/Mean (%)
## [1] 66.52813
Dataset_Cabe$Month[which.max(inflasi)] # bulan tertinggi
## [1] "2022-12-01 UTC"
Dataset_Cabe$Month[which.min(inflasi)] # bulan terendah
## [1] "2021-03-01 UTC"
Visualisasi grafik dari setiap variabel menggunakan plot line. Alasan plot line dipilih adalah untuk melihat perbedaan setiap variabel dari waktu ke waktu. Dari hasil grafik dapat terlihat tren data setiap variabel tersebar.
library(ggplot2)
ggplot(Dataset_Cabe, aes(x = Month, y = `Rainfall (mm)`)) +
geom_line(color = "blue", linewidth = 1) +
labs(
x = "Tahun",
y = "Curah Hujan (mm)"
)
library(ggplot2)
ggplot(Dataset_Cabe, aes(x = Month, y = `Cayenne Price (Rp)`)) +
geom_line(color = "red", linewidth = 1) +
labs(
x = "Tahun",
y = "Harga (Rp)"
)
library(ggplot2)
ggplot(Dataset_Cabe, aes(x = Month, y = `Red Chili Price (Rp)`)) +
geom_line(color = "darkred", linewidth = 1) +
labs(
x = "Tahun",
y = "Harga (Rp)"
)
library(ggplot2)
ggplot(Dataset_Cabe, aes(x = Month, y = `Shallot Price (Rp)`)) +
geom_line(color = "purple", linewidth = 1) +
labs(
x = "Tahun",
y = "Harga (Rp)"
)
library(ggplot2)
ggplot(Dataset_Cabe, aes(x = Month, y = `Garlic Price (Rp)`)) +
geom_line(color = "black", linewidth = 1) +
labs(
x = "Tahun",
y = "Harga (Rp)"
)
library(ggplot2)
ggplot(Dataset_Cabe, aes(x = Month, y = `Number of Rainy Days`)) +
geom_line(color = "cyan", linewidth = 1) +
labs(
x = "Tahun",
y = "Hari Hujan dalam 1 Bulan"
)
library(ggplot2)
ggplot(Dataset_Cabe, aes(x = Month, y = `Inflation`)) +
geom_line(color = "green", linewidth = 1) +
labs(
x = "Tahun",
y = "Inflasi (%)"
)
Cabai rawit dan cabai merah berada pada tingkat harga yang jauh lebih tinggi daripada bawang merah dan bawang putih. Cabai rawit menjadi komoditas termahal dengan rata-rata Rp60.705, sedangkan bawang putih paling murah dengan rata-rata Rp27.823.
Pada ketujuh variabel, rata-rata sedikit lebih besar daripada median. Artinya ada beberapa bulan ketika nilainya melonjak tinggi dan menarik rata-rata ke atas. Kelas modus pada semua variabel juga memuat nilai mediannya, jadi titik pusat data cukup konsisten. Pada hari hujan, kelas modusnya 7,6 sampai 13,2 hari, sementara rata-ratanya 14,4 hari, yang menunjukkan adanya bulan-bulan dengan hari hujan sangat banyak.
Dalam rupiah, simpangan baku cabai (Rp12.821 sampai Rp14.301) sekitar dua kali lipat simpangan baku bawang (Rp6.923 sampai Rp7.272). Namun jika dibandingkan dengan harga rata-ratanya, variasi keempat komoditas berdekatan, yaitu 21,6% sampai 26,1%. Jadi harga cabai bergerak lebih lebar dalam rupiah karena tingkat harganya memang lebih tinggi, bukan karena naik turunnya jauh lebih tajam secara relatif. Bawang putih bahkan memiliki variasi relatif tertinggi (26,1%) di antara keempat komoditas.
Lonjakan harga tertinggi tiap komoditas tidak terjadi bersamaan. Cabai rawit memuncak pada Februari 2017, bawang putih pada Mei 2017, cabai merah pada Oktober 2019, dan bawang merah pada Juli 2022.
Curah hujan bervariasi sangat besar antar bulan. Rata-ratanya 233,8 mm per bulan, tetapi simpangan baku 136,3 mm (sekitar 58% dari rata-rata) menunjukkan perbedaan tajam antara bulan kering dan bulan basah. Curah hujan tertinggi terjadi pada Juli 2020 dan terendah pada Agustus 2016.
Singkawang rata-rata mengalami 14,4 hari hujan per bulan, atau sekitar separuh bulan. Hari hujan terbanyak tercatat pada Juni 2022 dan tersedikit pada Agustus 2019.
Inflasi rata-rata 2,00% dengan kelas modus 0,96% sampai 2,21%, sehingga tergolong rendah. Simpangan baku 1,33 poin persen (sekitar 66% dari rata-rata) menunjukkan laju inflasi bulanan cukup berubah-ubah. Inflasi tertinggi tercatat pada Desember 2022. Pada Maret 2021 inflasi turun ke nilai terendah, yaitu negatif (deflasi).
Berdasarkan data Kota Singkawang periode 2016 sampai 2023, harga cabai lebih tinggi daripada harga bawang, dan secara nominal bergerak lebih lebar. Jika dibandingkan dengan harga rata-ratanya, tingkat fluktuasi cabai dan bawang tidak jauh berbeda. Curah hujan, hari hujan, dan inflasi juga menunjukkan variasi bulanan yang besar.
Rata-rata yang sedikit di atas median pada semua variabel menunjukkan adanya bulan-bulan dengan lonjakan nilai. Karena itu, rata-rata saja tidak cukup untuk menggambarkan kondisi data. Median, modus, dan ukuran sebaran perlu dibaca bersama.