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:
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. Laporan disusun dengan R Markdown dan dipublikasikan
melalui RPubs.
Langkah pertama: membaca data, lalu mengecek ukuran, nilai kosong, dan ringkasan awal.
library(readxl)
library(tidyverse)
dataset <- read_excel("dataset.xlsx")
glimpse(dataset)
## 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,…
dataset
## # A tibble: 96 × 8
## Month `Rainfall (mm)` `Cayenne Price (Rp)`
## <dttm> <dbl> <dbl>
## 1 2016-01-01 00:00:00 313 36458
## 2 2016-02-01 00:00:00 170 41042
## 3 2016-03-01 00:00:00 391 54700
## 4 2016-04-01 00:00:00 35 55125
## 5 2016-05-01 00:00:00 385 49167
## 6 2016-06-01 00:00:00 219 50667
## 7 2016-07-01 00:00:00 143 51542
## 8 2016-08-01 00:00:00 23 76167
## 9 2016-09-01 00:00:00 138 60458
## 10 2016-10-01 00:00:00 207 55500
## # ℹ 86 more rows
## # ℹ 5 more variables: `Red Chili Price (Rp)` <dbl>, `Shallot Price (Rp)` <dbl>,
## # `Garlic Price (Rp)` <dbl>, `Number of Rainy Days` <dbl>, Inflation <dbl>
dim(dataset) # jumlah baris dan kolom
## [1] 96 8
colSums(is.na(dataset)) # 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) # 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.frame(dataset) # melihat data dalam bentuk bingkai
## Month Rainfall..mm. Cayenne.Price..Rp. Red.Chili.Price..Rp.
## 1 2016-01-01 313.0 36458 27500
## 2 2016-02-01 170.0 41042 32083
## 3 2016-03-01 391.0 54700 37500
## 4 2016-04-01 35.0 55125 38333
## 5 2016-05-01 385.0 49167 39333
## 6 2016-06-01 219.0 50667 41208
## 7 2016-07-01 143.0 51542 40750
## 8 2016-08-01 23.0 76167 46867
## 9 2016-09-01 138.0 60458 45792
## 10 2016-10-01 207.0 55500 46542
## 11 2016-11-01 323.0 62267 36233
## 12 2016-12-01 252.0 68542 28292
## 13 2017-01-01 146.0 103600 30733
## 14 2017-02-01 99.0 127917 39334
## 15 2017-03-01 104.0 92833 32000
## 16 2017-04-01 175.0 53833 29875
## 17 2017-05-01 106.0 49733 30500
## 18 2017-06-01 59.0 37300 25933
## 19 2017-07-01 124.0 37458 29375
## 20 2017-08-01 162.0 47133 39367
## 21 2017-09-01 138.0 45000 49458
## 22 2017-10-01 180.0 41100 46333
## 23 2017-11-01 235.0 46542 56250
## 24 2017-12-01 169.0 53667 63542
## 25 2018-01-01 154.0 66933 73667
## 26 2018-02-01 138.0 66042 71750
## 27 2018-03-01 211.0 70417 72708
## 28 2018-04-01 118.0 68750 77375
## 29 2018-05-01 442.0 54530 63600
## 30 2018-06-01 264.0 52834 63500
## 31 2018-07-01 89.0 54417 58125
## 32 2018-08-01 62.0 57933 61167
## 33 2018-09-01 174.0 52458 61458
## 34 2018-10-01 375.0 45208 57292
## 35 2018-11-01 366.0 45033 49167
## 36 2018-12-01 396.0 44625 46250
## 37 2019-01-01 250.0 65458 58750
## 38 2019-02-01 412.0 61792 69917
## 39 2019-03-01 112.0 56600 62533
## 40 2019-04-01 165.0 51042 58125
## 41 2019-05-01 62.0 55867 65500
## 42 2019-06-01 177.0 59500 67708
## 43 2019-07-01 78.0 65375 76875
## 44 2019-08-01 25.0 77367 79000
## 45 2019-09-01 99.0 84583 85417
## 46 2019-10-01 455.0 82625 86667
## 47 2019-11-01 260.0 67267 75100
## 48 2019-12-01 437.0 35125 38959
## 49 2020-01-01 379.0 51742 37097
## 50 2020-02-01 188.0 64040 40222
## 51 2020-03-01 224.0 60750 47694
## 52 2020-04-01 171.0 56857 46444
## 53 2020-05-01 377.0 51934 46897
## 54 2020-06-01 466.0 48283 44220
## 55 2020-07-01 722.0 49771 38951
## 56 2020-08-01 362.0 68929 40441
## 57 2020-09-01 655.0 64000 40997
## 58 2020-10-01 210.0 67143 55333
## 59 2020-11-01 464.0 64036 55556
## 60 2020-12-01 218.0 77857 55222
## 61 2021-01-01 256.6 83988 54667
## 62 2021-02-01 49.6 92738 55778
## 63 2021-03-01 146.7 91071 54111
## 64 2021-04-01 116.5 86048 52333
## 65 2021-05-01 309.7 64012 48000
## 66 2021-06-01 272.7 49798 41111
## 67 2021-07-01 251.0 51857 41956
## 68 2021-08-01 518.0 59464 44028
## 69 2021-09-01 274.8 59038 48333
## 70 2021-10-01 230.0 52762 50222
## 71 2021-11-01 252.3 50774 51278
## 72 2021-12-01 240.3 69743 51333
## 73 2022-01-01 102.4 68619 46806
## 74 2022-02-01 134.5 63321 44861
## 75 2022-03-01 72.7 62000 48222
## 76 2022-04-01 328.4 60583 51222
## 77 2022-05-01 206.8 62607 48889
## 78 2022-06-01 351.9 60495 42556
## 79 2022-07-01 159.9 63060 44583
## 80 2022-08-01 446.6 61774 45139
## 81 2022-09-01 294.8 61524 45889
## 82 2022-10-01 411.2 60464 46389
## 83 2022-11-01 244.4 57429 46806
## 84 2022-12-01 287.0 57238 47778
## 85 2023-01-01 299.4 61476 48611
## 86 2023-02-01 107.4 60940 46667
## 87 2023-03-01 300.6 61571 47111
## 88 2023-04-01 65.4 61179 47778
## 89 2023-05-01 104.0 59750 49028
## 90 2023-06-01 159.9 59619 47733
## 91 2023-07-01 320.9 59214 48056
## 92 2023-08-01 110.6 56238 47333
## 93 2023-09-01 169.9 56119 46528
## 94 2023-10-01 173.7 59333 46667
## 95 2023-11-01 296.9 59095 43022
## 96 2023-12-01 322.0 57845 41250
## Shallot.Price..Rp. Garlic.Price...Rp. Number.of.Rainy.Days Inflation
## 1 36958 29917 22 0.13
## 2 31083 31167 18 0.39
## 3 40367 33300 13 0.42
## 4 48375 36083 12 0.23
## 5 49333 35767 22 0.64
## 6 39208 35458 17 1.28
## 7 39708 34542 10 2.07
## 8 42067 34267 4 2.87
## 9 39250 34833 15 2.10
## 10 34750 35375 19 1.69
## 11 39500 35700 26 1.74
## 12 36875 37813 20 2.58
## 13 32817 38000 13 1.76
## 14 31771 38958 13 1.95
## 15 32229 37083 12 1.82
## 16 30583 40708 7 2.06
## 17 29433 62400 8 2.41
## 18 29967 30867 4 3.47
## 19 32771 25417 5 3.61
## 20 30400 24967 9 3.80
## 21 25604 23167 8 4.54
## 22 20367 20600 14 4.72
## 23 22750 19917 18 4.34
## 24 23729 19667 14 5.23
## 25 24566 19300 12 1.31
## 26 24625 25125 8 1.39
## 27 28083 26292 11 1.59
## 28 28875 26583 8 1.67
## 29 29733 24000 17 1.92
## 30 28833 21375 10 2.91
## 31 27917 20250 4 3.78
## 32 25067 19933 3 3.82
## 33 21083 19250 9 3.80
## 34 19458 19542 18 3.10
## 35 20867 19067 13 2.74
## 36 27583 18417 14 3.18
## 37 24566 18959 13 1.19
## 38 24625 18833 11 1.68
## 39 28083 23267 5 1.07
## 40 28875 27625 5 1.30
## 41 29733 29400 9 2.22
## 42 28833 30458 10 2.29
## 43 27917 30667 6 2.42
## 44 25067 28034 2 2.15
## 45 21083 27583 4 2.02
## 46 19458 27042 18 1.53
## 47 20867 27200 10 1.09
## 48 27583 27250 12 1.08
## 49 37133 29367 18 0.68
## 50 32625 44625 10 1.28
## 51 30279 39592 8 1.11
## 52 39014 37217 7 0.96
## 53 44345 33558 11 1.32
## 54 49124 19588 20 1.87
## 55 39067 14200 19 1.42
## 56 32333 17417 9 1.13
## 57 29083 21583 22 1.12
## 58 32200 21400 12 1.48
## 59 39833 22583 26 2.08
## 60 39867 22867 13 2.72
## 61 34607 22792 15 -0.04
## 62 32321 23875 7 0.21
## 63 33250 24167 14 -0.29
## 64 30171 24433 7 -0.12
## 65 30071 25000 16 -0.02
## 66 29857 25250 17 1.34
## 67 31486 25267 13 1.58
## 68 35000 26292 18 1.76
## 69 26914 25533 19 2.19
## 70 27750 25542 11 1.91
## 71 27286 25333 15 1.99
## 72 25886 25300 15 2.55
## 73 28393 26792 18 0.66
## 74 33107 27000 22 0.81
## 75 35400 27533 20 1.01
## 76 29714 28000 24 2.32
## 77 29643 27242 25 3.39
## 78 38943 24300 30 3.30
## 79 50286 22625 21 3.69
## 80 45750 23292 25 3.12
## 81 33971 23233 24 4.83
## 82 31964 23125 29 4.97
## 83 38179 22250 25 5.43
## 84 37771 22133 26 5.96
## 85 41036 23042 19 0.45
## 86 40893 23500 12 0.26
## 87 34171 26767 23 0.49
## 88 33571 27417 12 1.03
## 89 32964 32625 16 1.33
## 90 35829 35467 11 1.75
## 91 40536 35542 15 1.68
## 92 30657 37033 10 1.77
## 93 24964 33458 13 1.59
## 94 24750 35375 18 1.57
## 95 26343 34667 25 1.56
## 96 29786 34375 24 1.74
Data terdiri dari 96 baris dan 8 kolom, dan tidak ada nilai kosong di kolom mana pun.
Untuk tiap variabel kami hitung mean, median, modus, simpangan baku
(SD), serta bulan tertinggi dan terendah. Hasil tiap baris kode muncul
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$`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$Month[which.max(rawit)] # bulan tertinggi
## [1] "2017-02-01 UTC"
dataset$Month[which.min(rawit)] # bulan terendah
## [1] "2019-12-01 UTC"
merah <- dataset$`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$Month[which.max(merah)] # bulan tertinggi
## [1] "2019-10-01 UTC"
dataset$Month[which.min(merah)] # bulan terendah
## [1] "2017-06-01 UTC"
bawang_merah <- dataset$`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$Month[which.max(bawang_merah)] # bulan tertinggi
## [1] "2022-07-01 UTC"
dataset$Month[which.min(bawang_merah)] # bulan terendah
## [1] "2018-10-01 UTC"
bawang_putih <- dataset$`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$Month[which.max(bawang_putih)] # bulan tertinggi
## [1] "2017-05-01 UTC"
dataset$Month[which.min(bawang_putih)] # bulan terendah
## [1] "2020-07-01 UTC"
hujan <- dataset$`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$Month[which.max(hujan)] # bulan tertinggi
## [1] "2020-07-01 UTC"
dataset$Month[which.min(hujan)] # bulan terendah
## [1] "2016-08-01 UTC"
hari_hujan <- dataset$`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$Month[which.max(hari_hujan)] # bulan tertinggi
## [1] "2022-06-01 UTC"
dataset$Month[which.min(hari_hujan)] # bulan terendah
## [1] "2019-08-01 UTC"
inflasi <- dataset$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$Month[which.max(inflasi)] # bulan tertinggi
## [1] "2022-12-01 UTC"
dataset$Month[which.min(inflasi)] # bulan terendah
## [1] "2021-03-01 UTC"
library(ggplot2)
ggplot(dataset, aes(x = Month, y = `Rainfall (mm)`)) +
geom_line(color = "blue", linewidth = 1) +
labs(
x = "Tahun",
y = "Curah Hujan (mm)"
)
library(ggplot2)
ggplot(dataset, aes(x = Month, y = `Cayenne Price (Rp)`)) +
geom_line(color = "red", linewidth = 1) +
labs(
x = "Tahun",
y = "Harga (Rp)"
)
library(ggplot2)
ggplot(dataset, aes(x = Month, y = `Red Chili Price (Rp)`)) +
geom_line(color = "darkred", linewidth = 1) +
labs(
x = "Tahun",
y = "Harga (Rp)"
)
library(ggplot2)
ggplot(dataset, aes(x = Month, y = `Shallot Price (Rp)`)) +
geom_line(color = "purple", linewidth = 1) +
labs(
x = "Tahun",
y = "Harga (Rp)"
)
library(ggplot2)
ggplot(dataset, aes(x = Month, y = `Garlic Price (Rp)`)) +
geom_line(color = "black", linewidth = 1) +
labs(
x = "Tahun",
y = "Harga (Rp)"
)
library(ggplot2)
ggplot(dataset, 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, 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.