Studi Kasus 1

Seorang dosen memiliki data nilai ujian dari 12 mahasiswa.
Analisis berikut dilakukan untuk menentukan status kelulusan, membuat pesan personal, serta menghitung proporsi kelulusan.

# Data nilai mahasiswa
nilai <- c(80, 55, 45, 90, 70, 60, 85, 72, 50, 95, 40, 77)
# Nama mahasiswa
nama <- c("Andi", "Budi", "Citra", "Dinda", "Eka", "Farah", 
          "Gilang", "Hani", "Indra", "Joko", "Kiki", "Lina")
# Beri nama pada vektor nilai
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
# Buat vektor status kelulusan
status <- ifelse(nilai >= 60, "Lulus",
                 ifelse(nilai >= 45, "Perbaikan", "Tidak Lulus"))

status
##          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"
# Cetak pesan personal tiap mahasiswa
pesan <- paste(names(nilai), ": Nilai =", nilai, ", Status =", status)
pesan
##  [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"
# Hitung proporsi masing-masing kategori
proporsi <- prop.table(table(status))
proporsi
## status
##       Lulus   Perbaikan Tidak Lulus 
##  0.66666667  0.25000000  0.08333333
# Cari mahasiswa dengan nilai tertinggi
maks_nilai <- max(nilai)
mahasiswa_tertinggi <- names(nilai)[which.max(nilai)]

cat("Mahasiswa dengan nilai tertinggi adalah", mahasiswa_tertinggi, 
    "dengan nilai", maks_nilai)
## Mahasiswa dengan nilai tertinggi adalah Joko dengan nilai 95
# Membuat diagram batang status kelulusan
barplot(table(status),
        col = c("skyblue", "orange", "red"),
        main = "Distribusi Status Kelulusan Mahasiswa",
        ylab = "Jumlah Mahasiswa",
        xlab = "Status Kelulusan")

Studi kasus nomor 2 evaluasi penjualan produk

Data penjualan produk disimpan dalam bentuk matriks.

# Membuat matriks penjualan
penjualan <- matrix(c(12,15,18,10,20,   # Produk A
                      8,12,10,9,14,     # Produk B
                      20,18,22,25,24),  # Produk C
                    nrow = 3, byrow = TRUE)

# Menambahkan nama baris dan kolom
rownames(penjualan) <- c("Produk A", "Produk B", "Produk C")
colnames(penjualan) <- c("H1","H2","H3","H4","H5")

# Tampilkan matriks penjualan
penjualan
##          H1 H2 H3 H4 H5
## Produk A 12 15 18 10 20
## Produk B  8 12 10  9 14
## Produk C 20 18 22 25 24
# Total per produk (baris)
total_produk <- rowSums(penjualan)

# Total per hari (kolom)
total_hari <- colSums(penjualan)

total_produk
## Produk A Produk B Produk C 
##       75       53      109
total_hari
## H1 H2 H3 H4 H5 
## 40 45 50 44 58
# Ambil data produk C
produkC <- penjualan["Produk C", ]

# Cari hari dengan penjualan tertinggi
hari_max_C <- names(produkC)[which.max(produkC)]
nilai_max_C <- max(produkC)

cat("Produk C memiliki penjualan tertinggi pada", hari_max_C, 
    "dengan jumlah", nilai_max_C, "unit")
## Produk C memiliki penjualan tertinggi pada H4 dengan jumlah 25 unit
# Buat pesan untuk setiap produk
pesan <- paste(names(total_produk),
               "total penjualan selama 5 hari:",
               total_produk, "unit")

pesan
## [1] "Produk A total penjualan selama 5 hari: 75 unit" 
## [2] "Produk B total penjualan selama 5 hari: 53 unit" 
## [3] "Produk C total penjualan selama 5 hari: 109 unit"
# Tambahkan 10% ke setiap elemen matriks
penjualan_bonus <- penjualan * 1.1
penjualan_bonus
##            H1   H2   H3   H4   H5
## Produk A 13.2 16.5 19.8 11.0 22.0
## Produk B  8.8 13.2 11.0  9.9 15.4
## Produk C 22.0 19.8 24.2 27.5 26.4

#Studi kasus nomor 3 sistem klasifikasi barang

# --- Load library untuk tampilan tabel cantik ---
library(knitr)
library(kableExtra)

# --- Data kategori kualitas produk ---
kategori <- c("B", "A", "C", "B", "A", "C", "B", "B", "A", "C")

# --- Ubah ke faktor dengan urutan kualitas terbaik A, B, C ---
kategori <- factor(kategori, levels = c("A", "B", "C"), ordered = TRUE)

# --- Hitung jumlah produk tiap kategori ---
jumlah_kategori <- table(kategori)

# --- Buat vektor keterangan ---
keterangan <- ifelse(kategori == "A", "Sangat Bagus",
              ifelse(kategori == "B", "Bagus", "Perlu Perbaikan"))

# --- Buat kode barang: BRG-01, BRG-02, dst. ---
kode_barang <- sprintf("BRG-%02d", 1:length(kategori))

# --- Gabungkan ke dalam tabel data frame ---
data_produk <- data.frame(
  Kode = kode_barang,
  Kategori = kategori,
  Keterangan = keterangan
)

# --- Tampilkan tabel data produk dengan format cantik ---
kable(data_produk, caption = "Tabel Kualitas Produk") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"),
                full_width = FALSE, position = "center")
Tabel Kualitas Produk
Kode Kategori Keterangan
BRG-01 B Bagus
BRG-02 A Sangat Bagus
BRG-03 C Perlu Perbaikan
BRG-04 B Bagus
BRG-05 A Sangat Bagus
BRG-06 C Perlu Perbaikan
BRG-07 B Bagus
BRG-08 B Bagus
BRG-09 A Sangat Bagus
BRG-10 C Perlu Perbaikan
# --- Tampilkan ringkasan jumlah produk per kategori ---
kable(as.data.frame(jumlah_kategori), caption = "Jumlah Produk per Kategori") %>%
  kable_styling(bootstrap_options = c("striped", "hover"), position = "center")
Jumlah Produk per Kategori
kategori Freq
A 3
B 4
C 3
# --- Buat pesan khusus untuk produk perlu perbaikan ---
kode_perlu <- kode_barang[keterangan == "Perlu Perbaikan"]
pesan <- paste("Produk", kode_perlu, "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"

#Studi kasus nomo 4 memonitoring suhu harian

# --- Load library untuk tampilan tabel cantik ---
library(knitr)
library(kableExtra)

# --- Data suhu udara selama 7 hari ---
suhu <- c(28.5, 30.2, 29.8, 31.0, 33.5, 27.5, 26.8)

# --- Nama hari (asumsikan Senin sampai Minggu, hari terakhir = hari tugas diberikan) ---
hari <- c("Senin", "Selasa", "Rabu", "Kamis", "Jumat", "Sabtu", "Minggu")
names(suhu) <- hari

# --- Hitung statistik dasar ---
rata2 <- mean(suhu)
maks  <- max(suhu)
minim <- min(suhu)

cat("Rata-rata suhu:", rata2, "°C\n")
## Rata-rata suhu: 29.61429 °C
cat("Suhu maksimum:", maks, "°C\n")
## Suhu maksimum: 33.5 °C
cat("Suhu minimum :", minim, "°C\n\n")
## Suhu minimum : 26.8 °C
# --- Buat vektor status ---
status <- ifelse(suhu > 30, "Panas", "Normal")

# --- Tabel data suhu ---
data_suhu <- data.frame(
  Hari = hari,
  Suhu = suhu,
  Status = status
)

# --- Tampilkan tabel cantik ---
kable(data_suhu, caption = "Data Suhu Harian") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"),
                full_width = FALSE, position = "center")
Data Suhu Harian
Hari Suhu Status
Senin Senin 28.5 Normal
Selasa Selasa 30.2 Panas
Rabu Rabu 29.8 Normal
Kamis Kamis 31.0 Panas
Jumat Jumat 33.5 Panas
Sabtu Sabtu 27.5 Normal
Minggu Minggu 26.8 Normal
# --- Daftar hari dengan suhu di atas rata-rata ---
cat("Hari dengan suhu di atas rata-rata (", round(rata2,1), "°C ):\n", sep = "")
## Hari dengan suhu di atas rata-rata (29.6°C ):
print(hari[suhu > rata2])
## [1] "Selasa" "Rabu"   "Kamis"  "Jumat"
# --- Loop interaktif untuk menampilkan suhu berdasarkan input pengguna ---
repeat {
  input <- readline(prompt = "Masukkan nama hari (UpperCamelCase, misal: Senin): ")
  
  if (!(input %in% hari)) {
    cat("Program berhenti. Input tidak ditemukan.\n")
    break
  }
  
  idx <- which(hari == input)
  cat("Suhu hari", input, ":", suhu[idx], "°C (", status[idx], ")\n")
}
## Masukkan nama hari (UpperCamelCase, misal: Senin): 
## Program berhenti. Input tidak ditemukan.
# --- Hitung persentase hari yang dikategorikan 'Panas' ---
persen_panas <- mean(status == "Panas") * 100
cat("\nPersentase hari dengan kategori Panas:", persen_panas, "%\n")
## 
## Persentase hari dengan kategori Panas: 42.85714 %