A — Data Cuaca

A.a Menghitung rata-rata, median, dan standar deviasi

# Data suhu
suhu <- c(32, 33, 31, 34, 35, 30, 29, 33, 32, 34)

# Rata-rata
rata_rata <- mean(suhu)

# Median
median_suhu <- median(suhu)

# Standar deviasi
sd_suhu <- sd(suhu)

# Menampilkan hasil
rata_rata
## [1] 32.3
median_suhu
## [1] 32.5
sd_suhu
## [1] 1.888562

Penjelasan mean(suhu) menghitung rata-rata seluruh suhu. median(suhu) mencari nilai tengah dari data suhu. sd(suhu) menghitung standar deviasi, yaitu ukuran seberapa menyebar data suhu dari rata-ratanya.

Hasilnya:

Rata-rata = 32.3 °C Median = 32.5 °C Standar deviasi = 1.889 °C Kesimpulan

Rata-rata suhu selama 10 hari adalah 32,3°C, median 32,5°C, dan standar deviasi sekitar 1,89°C. Artinya suhu harian relatif tidak terlalu jauh dari rata-ratanya.

A.b Mencari hari dengan suhu tertinggi

# Suhu tertinggi
suhu_tertinggi <- max(suhu)

# Posisi hari dengan suhu tertinggi
hari_tertinggi <- which.max(suhu)

suhu_tertinggi
## [1] 35
hari_tertinggi
## [1] 5

Artinya:

Suhu tertinggi = 35°C Terjadi pada = hari ke-5 Penjelasan

Fungsi:

max(suhu) mencari nilai terbesar dalam vector suhu.

Sedangkan:

which.max(suhu) mencari posisi atau indeks tempat nilai terbesar tersebut berada.

Kesimpulan

Suhu tertinggi adalah 35°C dan terjadi pada hari ke-5.

A.c Menghitung jumlah hari dengan suhu di atas rata-rata

# Melihat suhu yang berada di atas rata-rata
suhu > rata_rata
##  [1] FALSE  TRUE FALSE  TRUE  TRUE FALSE FALSE  TRUE FALSE  TRUE
# Mengambil suhu yang di atas rata-rata
suhu_diatas_rata <- suhu[suhu > rata_rata]

# Menghitung jumlah harinya
jumlah_hari <- sum(suhu > rata_rata)

suhu_diatas_rata
## [1] 33 34 35 33 34
jumlah_hari
## [1] 5

Kenapa sum() bisa digunakan?

Dalam R:

TRUE = 1 FALSE = 0

Sehingga:

sum(suhu > rata_rata) menghitung jumlah TRUE.

Dalam data ini ada:

5 TRUE

maka hasilnya:

5 hari Kesimpulan

Terdapat 5 hari dengan suhu di atas rata-rata 32,3°C.

# FINAL A - DATA CUACA

suhu <- c(32, 33, 31, 34, 35, 30, 29, 33, 32, 34)

# A.a Rata-rata, median, dan standar deviasi
rata_rata <- mean(suhu)
median_suhu <- median(suhu)
sd_suhu <- sd(suhu)

rata_rata
## [1] 32.3
median_suhu
## [1] 32.5
sd_suhu
## [1] 1.888562
# A.b Hari dengan suhu tertinggi
suhu_tertinggi <- max(suhu)
hari_tertinggi <- which.max(suhu)

suhu_tertinggi
## [1] 35
hari_tertinggi
## [1] 5
# A.c Jumlah hari dengan suhu di atas rata-rata
suhu_diatas_rata <- suhu[suhu > rata_rata]
jumlah_hari <- sum(suhu > rata_rata)

suhu_diatas_rata
## [1] 33 34 35 33 34
jumlah_hari
## [1] 5

B — Data Transportasi

B.a Membuat Data Frame df_transport

# Data jumlah penumpang dan hari
penumpang <- c(45, 52, 49, 60, 55, 70, 65)

hari <- c(
  "Senin", "Selasa", "Rabu", "Kamis",
  "Jumat", "Sabtu", "Minggu"
)

# Membuat data frame
df_transport <- data.frame(
  Hari = hari,
  Penumpang = penumpang
)

# Menampilkan data frame
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

Fungsi:

data.frame() digunakan untuk menggabungkan vector hari dan penumpang menjadi sebuah tabel. Setiap baris menunjukkan satu hari beserta jumlah penumpangnya.

Kesimpulan

Data transportasi selama 7 hari berhasil disusun dalam df_transport yang terdiri dari variabel Hari dan Penumpang.

B.b Menghitung rata-rata jumlah penumpang pada hari kerja

# Menghitung rata-rata penumpang Senin-Jumat
rata_kerja <- mean(penumpang[1:5])

rata_kerja
## [1] 52.2

Kesimpulan

Rata-rata jumlah penumpang pada hari kerja Senin–Jumat adalah 52,2 ribu orang per hari.

B.c Mencari hari dengan jumlah penumpang terbanyak

# Jumlah penumpang terbanyak
penumpang_terbanyak <- max(penumpang)

# Posisi hari dengan penumpang terbanyak
posisi_terbanyak <- which.max(penumpang)

# Nama hari
hari_terbanyak <- hari[posisi_terbanyak]

penumpang_terbanyak
## [1] 70
hari_terbanyak
## [1] "Sabtu"

Fungsi:

max(penumpang) mencari jumlah penumpang terbesar.

Sedangkan:

which.max(penumpang) mencari posisi nilai terbesar tersebut.

Kemudian:

hari[posisi_terbanyak] mengambil nama hari berdasarkan posisi tersebut.

Kesimpulan

Jumlah penumpang terbanyak terjadi pada Sabtu, yaitu sebanyak 70 ribu orang.

B.d Menghitung persentase peningkatan dari Senin ke Sabtu

# Jumlah penumpang Senin
penumpang_senin <- penumpang[1]

# Jumlah penumpang Sabtu
penumpang_sabtu <- penumpang[6]

# Persentase peningkatan
persen_naik <- (
  (penumpang_sabtu - penumpang_senin) /
    penumpang_senin
) * 100

persen_naik
## [1] 55.55556
round(persen_naik, 2)
## [1] 55.56

Kesimpulan

Jumlah penumpang meningkat sebesar 55,56% dari Senin ke Sabtu.

# FINAL B - DATA TRANSPORTASI

# Data
penumpang <- c(45, 52, 49, 60, 55, 70, 65)

hari <- c(
  "Senin", "Selasa", "Rabu", "Kamis",
  "Jumat", "Sabtu", "Minggu"
)


# B.a Membuat data frame
df_transport <- data.frame(
  Hari = 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.b Rata-rata penumpang hari kerja Senin-Jumat
rata_kerja <- mean(penumpang[1:5])

rata_kerja
## [1] 52.2
# B.c Hari dengan jumlah penumpang terbanyak
penumpang_terbanyak <- max(penumpang)
posisi_terbanyak <- which.max(penumpang)
hari_terbanyak <- hari[posisi_terbanyak]

penumpang_terbanyak
## [1] 70
hari_terbanyak
## [1] "Sabtu"
# B.d Persentase peningkatan Senin ke Sabtu
penumpang_senin <- penumpang[1]
penumpang_sabtu <- penumpang[6]

persen_naik <- (
  (penumpang_sabtu - penumpang_senin) /
    penumpang_senin
) * 100

round(persen_naik, 2)
## [1] 55.56

C — Data Ekonomi

C.a Membuat data frame df_beras

# Data harga beras
harga_beras <- c(
  12000, 12200, 12150, 12300,
  12400, 12500, 12600, 12750
)

minggu <- 1:8

# Membuat data frame
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

Fungsi:

data.frame() digunakan untuk menggabungkan data minggu dan harga_beras menjadi sebuah tabel. Setiap baris menunjukkan harga beras pada minggu tertentu.

Kesimpulan

Data harga beras selama 8 minggu berhasil disusun dalam data frame df_beras dengan variabel Minggu dan Harga.

C.b Menghitung rata-rata kenaikan harga per minggu

# Menghitung perubahan harga setiap minggu
kenaikan <- diff(harga_beras)

# Menghitung rata-rata perubahan harga
rata_kenaikan <- mean(kenaikan)

rata_kenaikan
## [1] 107.1429

Kesimpulan

Rata-rata perubahan harga beras setiap minggu adalah sekitar Rp107,14. Secara keseluruhan, harga beras cenderung mengalami kenaikan.

C.c Menggunakan fungsi diff()

# Selisih harga antar minggu
selisih_harga <- diff(harga_beras)

selisih_harga
## [1] 200 -50 150 100 100 100 150

Kesimpulan

Harga beras sebagian besar mengalami kenaikan. Penurunan hanya terjadi dari minggu ke-2 ke minggu ke-3, yaitu sebesar Rp50.

C.d Menentukan minggu dengan kenaikan harga tertinggi

# Kenaikan harga terbesar
kenaikan_tertinggi <- max(selisih_harga)

# Menentukan minggu terjadinya kenaikan tertinggi
minggu_kenaikan_tertinggi <- which.max(selisih_harga) + 1

kenaikan_tertinggi
## [1] 200
minggu_kenaikan_tertinggi
## [1] 2

Ditambahkan +1 karena nilai pertama dari diff() merupakan perubahan dari minggu pertama menuju minggu kedua.

Kesimpulan

Kenaikan harga beras tertinggi adalah sebesar Rp200, yaitu terjadi dari minggu ke-1 ke minggu ke-2. Jadi minggu dengan kenaikan tertinggi adalah minggu ke-2.

# FINAL C - DATA EKONOMI

# Data
harga_beras <- c(
  12000, 12200, 12150, 12300,
  12400, 12500, 12600, 12750
)

minggu <- 1:8


# C.a Membuat data frame
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.b Rata-rata kenaikan harga per minggu
kenaikan <- diff(harga_beras)

rata_kenaikan <- mean(kenaikan)

round(rata_kenaikan, 2)
## [1] 107.14
# C.c Selisih harga antar minggu
selisih_harga <- diff(harga_beras)

selisih_harga
## [1] 200 -50 150 100 100 100 150
# C.d Minggu dengan kenaikan harga tertinggi
kenaikan_tertinggi <- max(selisih_harga)

minggu_kenaikan_tertinggi <- which.max(selisih_harga) + 1

kenaikan_tertinggi
## [1] 200
minggu_kenaikan_tertinggi
## [1] 2

D — Matriks Populasi

populasi <- matrix(
  c(
    50, 55, 60, 65,  # Kecamatan A
    40, 42, 45, 47,  # Kecamatan B
    70, 72, 74, 76   # Kecamatan 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

D.a Menghitung pertumbuhan penduduk rata-rata tiap kecamatan dengan apply()

pertumbuhan_rata <- apply(
  populasi,
  1,
  function(x) mean(diff(x))
)

pertumbuhan_rata
##    Kec_A    Kec_B    Kec_C 
## 5.000000 2.333333 2.000000
round(pertumbuhan_rata, 2)
## Kec_A Kec_B Kec_C 
##  5.00  2.33  2.00

Kesimpulan

Pertumbuhan penduduk rata-rata terbesar terjadi di Kecamatan A, yaitu 5 ribu orang per tahun. Kecamatan B sekitar 2,33 ribu, dan Kecamatan C 2 ribu orang per tahun.

D.b Menentukan kecamatan dengan populasi tertinggi pada tahun 2022

populasi_2022 <- populasi[, "2022"]

populasi_2022
## Kec_A Kec_B Kec_C 
##    65    47    76
populasi_tertinggi <- max(populasi_2022)

kecamatan_tertinggi <- names(
  which.max(populasi_2022)
)

populasi_tertinggi
## [1] 76
kecamatan_tertinggi
## [1] "Kec_C"

Kesimpulan

Pada tahun 2022, populasi tertinggi terdapat di Kecamatan C, yaitu sebanyak 76 ribu orang.

D.c Menghitung total penduduk tiap tahun

total_tiap_tahun <- colSums(populasi)

total_tiap_tahun
## 2019 2020 2021 2022 
##  160  169  179  188

Kesimpulan

Total penduduk ketiga kecamatan terus meningkat, dari 160 ribu orang pada 2019 menjadi 188 ribu orang pada 2022.

# BAGIAN D - MATRIKS POPULASI

# Membuat matriks populasi
populasi <- matrix(
  c(
    50, 55, 60, 65,
    40, 42, 45, 47,
    70, 72, 74, 76
  ),
  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
# D.a Pertumbuhan penduduk rata-rata tiap kecamatan
pertumbuhan_rata <- apply(
  populasi,
  1,
  function(x) mean(diff(x))
)

round(pertumbuhan_rata, 2)
## Kec_A Kec_B Kec_C 
##  5.00  2.33  2.00
# D.b Kecamatan dengan populasi tertinggi tahun 2022
populasi_2022 <- populasi[, "2022"]

populasi_tertinggi <- max(populasi_2022)
kecamatan_tertinggi <- names(which.max(populasi_2022))

populasi_tertinggi
## [1] 76
kecamatan_tertinggi
## [1] "Kec_C"
# D.c Total penduduk tiap tahun
total_tiap_tahun <- colSums(populasi)

total_tiap_tahun
## 2019 2020 2021 2022 
##  160  169  179  188

E — Fungsi Custom

harga_beras <- c(
  12000, 12200, 12150, 12300,
  12400, 12500, 12600, 12750
)

E.a Membuat fungsi deteksi_kenaikan()

deteksi_kenaikan <- function(harga) {
  
  # Menghitung selisih harga antar minggu
  kenaikan <- diff(harga)
  
  # Mencari posisi minggu dengan kenaikan > 200
  minggu <- which(kenaikan > 200) + 1
  
  return(minggu)
}

Kesimpulan

Fungsi deteksi_kenaikan() berhasil dibuat untuk mendeteksi minggu yang mengalami kenaikan harga lebih dari Rp200.

E.b Menguji fungsi pada data harga_beras

deteksi_kenaikan(harga_beras)
## numeric(0)
diff(harga_beras)
## [1] 200 -50 150 100 100 100 150
kenaikan > 200
## [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE

Kesimpulan: Tidak terdapat minggu yang mengalami kenaikan harga lebih dari Rp200. Oleh karena itu, fungsi deteksi_kenaikan() menghasilkan integer(0).

# BAGIAN E - FUNGSI CUSTOM

# Data harga beras dari Bagian C
harga_beras <- c(
  12000, 12200, 12150, 12300,
  12400, 12500, 12600, 12750
)

# Membuat fungsi deteksi kenaikan
deteksi_kenaikan <- function(harga) {
  
  # Menghitung perubahan harga
  kenaikan <- diff(harga)
  
  # Mencari minggu dengan kenaikan > 200
  minggu <- which(kenaikan > 200) + 1
  
  return(minggu)
}

# Melihat perubahan harga
diff(harga_beras)
## [1] 200 -50 150 100 100 100 150
# Menguji fungsi
deteksi_kenaikan(harga_beras)
## numeric(0)