Tugas Pemrograman Statistika Pararel 2

Author

Rosita Ria Rusesta, S.Stat (M0501251016)

1. Analisis Skor Ujian

nilai <- c(80, 55, 45, 90, 70, 60, 85, 72, 50, 95, 40, 77)

a. Menambahkan nama mahasiswa pada elemen vektor nilai agar setiap nilai memiliki nama masing-masing

#Membuat vektor Nama yang jumlahnya sama dengan panjang vektor nilai 
#Kemudian menjalankan fungsi names(nilai) 
Nama <- c("Andi", "Budi", "Citra", "Dinda", "Eka", "Farah", "Gilang", "Hani", "Indra", "Joko", "Kiki", "Lina")
names(nilai) <- Nama
nilai
  Andi   Budi  Citra  Dinda    Eka  Farah Gilang   Hani  Indra   Joko   Kiki 
    80     55     45     90     70     60     85     72     50     95     40 
  Lina 
    77 

b. Membuat vektor baru kelulusan dengan kriteria:

  • “Lulus” jika nilai ≥ 60

  • “Perbaikan” jika 45 ≤ nilai < 60

  • “Tidak Lulus” jika nilai < 45

Untuk mendapatkan vektor kelulusan dengan 3 kriteria di atas, maka digunakan fungsi ifelse()sebagai berikut:

kelulusan <- ifelse(nilai >= 60, "Lulus",
                    ifelse(nilai >= 45, "Perbaikan", "Tidak Lulus"))
kelulusan
         Andi          Budi         Citra         Dinda           Eka 
      "Lulus"   "Perbaikan"   "Perbaikan"       "Lulus"       "Lulus" 
        Farah        Gilang          Hani         Indra          Joko 
      "Lulus"       "Lulus"       "Lulus"   "Perbaikan"       "Lulus" 
         Kiki          Lina 
"Tidak Lulus"       "Lulus" 

c. Mencetak pesan personal untuk tiap mahasiswa

Untuk mencetak pesan digunakan Fungsi paste0 yang digunakan untuk menggabungkan (concatenate) tanpa spasi beberapa teks menjadi satu dalam hal ini memuat juga “nilai” dan “Status”

PesanPersonal <- paste0(Nama,": Nilai = ", nilai, ", Status= ", kelulusan)
print(PesanPersonal)
 [1] "Andi: Nilai = 80, Status= Lulus"      
 [2] "Budi: Nilai = 55, Status= Perbaikan"  
 [3] "Citra: Nilai = 45, Status= Perbaikan" 
 [4] "Dinda: Nilai = 90, Status= Lulus"     
 [5] "Eka: Nilai = 70, Status= Lulus"       
 [6] "Farah: Nilai = 60, Status= Lulus"     
 [7] "Gilang: Nilai = 85, Status= Lulus"    
 [8] "Hani: Nilai = 72, Status= Lulus"      
 [9] "Indra: Nilai = 50, Status= Perbaikan" 
[10] "Joko: Nilai = 95, Status= Lulus"      
[11] "Kiki: Nilai = 40, Status= Tidak Lulus"
[12] "Lina: Nilai = 77, Status= Lulus"      

d. Menghitung proporsi mahasiswa yang lulus, perbaikan, dan tidak lulus

Nilai proporsi diperoleh dengan menggunakan fungsi table() untuk menghitung jumlah mahasiswa per status yang kemudian dibagi jumlah elemen Nama dan agar lebih rapi dibulatkan dengan 2 angka dibelakang koma menggunakan round( ,2)

proporsi <- print(round(table(kelulusan)/length(Nama),2))
kelulusan
      Lulus   Perbaikan Tidak Lulus 
       0.67        0.25        0.08 

e. Menampilkan mahasiswa dengan nilai tertinggi

Mencari nilai tertinggi dari mahasiswa menggunakan fungsi max() dan which() untuk menemukan mahasiswa yang mempunyai nilai tertinggi, serta mencetaknya dengan rapi menggunakan fungsi paste()

paste("Mahasiswa dengan nilai tertinggi yaitu", Nama[which.max(nilai)], "dengan nilai", max(nilai))
[1] "Mahasiswa dengan nilai tertinggi yaitu Joko dengan nilai 95"

2. Evaluasi Penjualan Produk

Sebuah toko memiliki data penjualan 3 produk (A, B, C) selama 5 hari:

Produk H1 H2 H3 H4 H5
A 12 15 18 10 20
B 8 12 10 9 14
C 20 18 22 25 24

a. Menyimpan data penjualan ke dalam matriks penjualan.

Data penjualan toko disimpan sebagai vector p, kemudian dijadikan matriks yang mempunyai dimensi 3 baris dan 5 kolom. Data akan diisi baris per baris dan baris dinamai A, B, C serta Kolom dinamai dengan H1, H2, H3, H4, H5

p <- c(12,15,18,10,20,8,12,10,9,14,20,18,22,25,24)
penjualan <- matrix(p,3,5,byrow=TRUE,dimnames = list(c("A","B","C"), paste0("H",1:5)))
penjualan
  H1 H2 H3 H4 H5
A 12 15 18 10 20
B  8 12 10  9 14
C 20 18 22 25 24

b. Menghitung total penjualan tiap produk dan tiap hari

Total penjualan per produk dihitung dengan fungsi rowSums() dari matriks penjualan, sementara total penjualan per hari dihitung menggunakan colSums()

total.produk<-rowSums(penjualan)
total.hari <- colSums(penjualan)
total.produk
  A   B   C 
 75  53 109 
total.hari
H1 H2 H3 H4 H5 
40 45 50 44 58 

c. Mencari hari dengan penjualan tertinggi untuk produk C

Membuat vektor baru hari.tertinggi.C untuk menyimpan data penjualan tertinggi produk C, dan which.max() untuk menemukan posisi tertinggi. Dicetak dengan paste()

hari.tertinggi.C <- colnames(penjualan)[which.max(penjualan["C", ])]
paste("Penjualan tertinggi untuk produk C yaitu di", hari.tertinggi.C)
[1] "Penjualan tertinggi untuk produk C yaitu di H4"

d. Menampilkan pesan total penjualan untuk setiap produk

Fungsi for digunakan untuk perulangan dimana untuk setiap produk yang sesuai nama baris pada matriks penjualan. Kemudian menggunakan paste(0) untuk mencetak masing-masing nama produk dengan total penjualan selama 5 hari.

for (produk in rownames(penjualan)) {
  print(paste("Total penjualan produk", produk, "selama 5 hari:", total.produk[produk], "unit"))
}
[1] "Total penjualan produk A selama 5 hari: 75 unit"
[1] "Total penjualan produk B selama 5 hari: 53 unit"
[1] "Total penjualan produk C selama 5 hari: 109 unit"

e. Membuat matriks baru penjualan_bonus yang menambahkan 10% unit penjualan pada setiap produk

penjualan_bonus<- round(penjualan * 1.1)
penjualan_bonus
  H1 H2 H3 H4 H5
A 13 16 20 11 22
B  9 13 11 10 15
C 22 20 24 28 26

3. Sistem Klasifikasi Barang

kategori <- c("B", "A", "C", "B", "A", "C", "B", "B", "A", "C")

a. Mengubah vektor kategori menjadi faktor berurutan. Kualitas terbaik secara berurutan adalah A, B dan C (A > B > C)

#Output akan menambilkan faktor dengan level C<B<A yang sama artinya bahwa A > B > C 
#sehingga penulisan faktor level dimulai dari level terendah yaitu C

kategori.faktor <- factor(kategori, levels = c("C", "B", "A"), ordered = TRUE)
kategori.faktor
 [1] B A C B A C B B A C
Levels: C < B < A

b. Menghitung jumlah produk untuk tiap kategori kualitas

#Menghitung jumlah produk untuk tiap kategori kualitas dengan table( )
JumlahProduk <- table(kategori)
JumlahProduk
kategori
A B C 
3 4 3 

c. Membuat vektor keterangan dengan aturan:

  • A → “Sangat Bagus”

  • B → “Bagus”

  • C → “Perlu Perbaikan”

keterangan <- c("A"="Sangat Bagus", "B"="Bagus", "C"="Perlu Perbaikan")[kategori]
keterangan
                B                 A                 C                 B 
          "Bagus"    "Sangat Bagus" "Perlu Perbaikan"           "Bagus" 
                A                 C                 B                 B 
   "Sangat Bagus" "Perlu Perbaikan"           "Bagus"           "Bagus" 
                A                 C 
   "Sangat Bagus" "Perlu Perbaikan" 

d. Buat vektor baru kode_barang dengan format: “BRG-01”, “BRG-02”, dst

Mencetak kode barang dengan fungsi sprintf() dengan %02d adalah format angka dengan 2 digit, isi dengan angka nol di depan jika angka kurang dari 2 digit, dan panjangnya adalah 1 sampai dengan panjang vektor kategori

kode_barang <- sprintf("BRG-%02d", 1:length(kategori))
kode_barang
 [1] "BRG-01" "BRG-02" "BRG-03" "BRG-04" "BRG-05" "BRG-06" "BRG-07" "BRG-08"
 [9] "BRG-09" "BRG-10"

e. Mencetak pesan untuk produk dengan keterangan “Perlu Perbaikan”

Mencari indeks yg memenuhi kondisi “Perlu Perbaikan” menggunakan fungsi which() yang disimpan dalam vektor indeks , kemudian pesan yang berisi produk dengan kode barangnya adalah produk yang perlu perbaikan dicetak dengan fungsi paste0

indeks <- which(keterangan == "Perlu Perbaikan")
pesan <- paste0("Produk ", kode_barang[indeks], 
              " adalah produk yang perlu perbaikan")

pesan
[1] "Produk BRG-03 adalah produk yang perlu perbaikan"
[2] "Produk BRG-06 adalah produk yang perlu perbaikan"
[3] "Produk BRG-10 adalah produk yang perlu perbaikan"

4. Monitoring Suhu Harian

Data suhu udara selama 7 hari terakhir (dalam °C) dicatat sebagai berikut:

a. Menghitung suhu rata-rata, maksimum, dan minimum

Menghitung suhu rata-rata menggunakan fungsi mean() , nilai maksimum dengan fungsi max(), dan nilai minimum dengan fungsi min(), kemudian menggabungkannya dalam vektor rataan.maks.min

suhu <- c(28.5,30.2,29.8,31.0,33.5,27.5,26.8)
rataan.maks.min <- round(c(Rataan=mean(suhu),Maksimum=max(suhu),Minimum=min(suhu)),1)
rataan.maks.min
  Rataan Maksimum  Minimum 
    29.6     33.5     26.8 

b. Menambahkan nama hari pada vector suhu. Hari terakhir adalah hari tugas ini diberikan.

#Membuat vektor hari yang jumlahnya elemennya sama dengan panjang vektor suhu 
#Kemudian menjalankan fungsi names(suhu) 
hari <- c("Rabu","Kamis","Jumat","Sabtu","Minggu","Senin","Selasa")
names(suhu) <- hari
suhu
  Rabu  Kamis  Jumat  Sabtu Minggu  Senin Selasa 
  28.5   30.2   29.8   31.0   33.5   27.5   26.8 

c. Buat vektor status dengan ketentuan:

  • “Normal” jika suhu ≤ 30

  • “Panas” jika suhu > 30

Untuk mendapatkan vektor status dengan ketentuan di atas, maka digunakan fungsi ifelse() sebagai berikut:

status <- ifelse(suhu <= 30, "Normal", "Panas")
names(status) <- hari
status
    Rabu    Kamis    Jumat    Sabtu   Minggu    Senin   Selasa 
"Normal"  "Panas" "Normal"  "Panas"  "Panas" "Normal" "Normal" 

d. Menampilkan daftar hari dengan suhu di atas rata-rata.

Mencetak hasil dengan menggunakan perintah print() yaitu mengambil names(suhu) atau hari dimana suhu diatas rata-rata

print(paste("Hari di atas rata-rata:", paste(names(suhu)[suhu > mean(suhu)], collapse=", ")))
[1] "Hari di atas rata-rata: Kamis, Jumat, Sabtu, Minggu"

e. Menggunakan looping untuk meminta pengguna memasukkan nama hari dalam format UpperCamelCase

Fungsi repeat { … } digunakan untuk membuat loop tak terbatas, akan terus berjalan sampai ada break yang menghentikan. Pengguna diminta memasukkan nama hari melalui fungsi readline(), dan hasil input disimpan pada variabel input_hari . Fungsi if akan memeriksa jika nama hari yang dimasukkan pengguna tidak ada dalam daftar hari maka proses akan berhenti, namun jika ada dalam daftar maka akan mencetak Suhu di hari dan status sesuai hasil input pengguna.

# Loop untuk meminta input nama hari dalam format UpperCamelCase dan tampilkan suhu serta status
repeat {
  input_hari <- readline(prompt = "Masukkan nama hari dengan huruf awal kapital: ")
  if (!(input_hari %in% hari)) break
  print(paste("Suhu di", input_hari, ":", suhu[input_hari], "°C, Status:", status[input_hari]))
}
Masukkan nama hari dengan huruf awal kapital: 

f. Menghitung persentase hari yang dikategorikan Panas

Membuat vektor presentase.panas yang menyimpan hasil perhitungan rata-rata dimana yang dirata-ratakan yang berstatus “Panas” dan dikali 100 dengan jumlah angka dibelakang koma 2 digit. Hasilnya dalam bentuk presentase yang ditampilkan dengan fungsi paste() .

persentase.panas <- round(mean(status == "Panas") * 100,2)
paste("Persentase hari panas yaitu: ", persentase.panas,"%")
[1] "Persentase hari panas yaitu:  42.86 %"