◈ PERSIAPAN

library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
data_pendidikan <- read.csv("D:/Pengantar Sains Data/dataset_pendidikan.csv")
head(data_pendidikan)
##   ID_Mahasiswa  IPK Semester Total_Kehadiran Total_Jam_Belajar Rata2_Jam_Tidur
## 1       MHS001 3.45        2              58               238             7.5
## 2       MHS002 3.13        5              54               246             7.1
## 3       MHS003 2.75        4              61                91             7.0
## 4       MHS004 3.52        4              67               162             6.6
## 5       MHS005 3.57        4              56               258             7.4
## 6       MHS006 3.52        7              56               222             7.5
str(data_pendidikan)
## 'data.frame':    200 obs. of  6 variables:
##  $ ID_Mahasiswa     : chr  "MHS001" "MHS002" "MHS003" "MHS004" ...
##  $ IPK              : num  3.45 3.13 2.75 3.52 3.57 3.52 2.97 2.86 2.74 3.24 ...
##  $ Semester         : int  2 5 4 4 4 7 8 2 6 3 ...
##  $ Total_Kehadiran  : int  58 54 61 67 56 56 43 55 63 57 ...
##  $ Total_Jam_Belajar: int  238 246 91 162 258 222 153 114 189 201 ...
##  $ Rata2_Jam_Tidur  : num  7.5 7.1 7 6.6 7.4 7.5 7.4 6.2 7 6.3 ...



◈ SOAL

1. Berapa jumlah mahasiswa yang memiliki IPK lebih besar atau sama dengan 3,5?
cumlaude <- filter(data_pendidikan, IPK >= 3.5)
nrow(cumlaude)
## [1] 49
2. Siapa saja yang menjadi top 3 IPK tertinggi?
data_pendidikan %>%
  arrange(desc(IPK)) %>%
  head(3)
##   ID_Mahasiswa IPK Semester Total_Kehadiran Total_Jam_Belajar Rata2_Jam_Tidur
## 1       MHS052   4        4              70               377             6.8
## 2       MHS111   4        6              61               258             7.2
## 3       MHS123   4        4              66               341             6.2
3. Buat kolom Kategori_IPK dengan case_when(): <2,50 = Kurang; 2,50-2,99 = Cukup; 3,00-3,49 = Baik; >=3,50 = Sangat Baik. Berapa mahasiswa yang masuk kategori “Baik”?
data_pendidikan <- data_pendidikan %>%
  mutate(
    Kategori_IPK = case_when(
      IPK < 2.50 ~ "Kurang",
      IPK >= 2.50 & IPK < 3.00 ~ "Cukup",
      IPK >= 3.00 & IPK < 3.50 ~ "Baik",
      IPK >= 3.50 ~ "Sangat Baik"
    )
  )

table(data_pendidikan$Kategori_IPK)
## 
##        Baik       Cukup      Kurang Sangat Baik 
##          71          63          17          49
4. Hitung rata-rata IPK per semester dengan group_by() dan summarise(). Semester berapa yang rata-rata IPK-nya tertinggi?
data_IPK_semester <- data_pendidikan %>%
  group_by(Semester) %>%
  summarise(rata_rata_IPK = mean(IPK))
data_IPK_semester
## # A tibble: 8 × 2
##   Semester rata_rata_IPK
##      <int>         <dbl>
## 1        1          3.06
## 2        2          3.04
## 3        3          3.17
## 4        4          3.20
## 5        5          3.12
## 6        6          3.19
## 7        7          3.06
## 8        8          3.04
Tertinggi :
data_IPK_semester %>%
  arrange(desc(rata_rata_IPK)) %>%
  head(1)
## # A tibble: 1 × 2
##   Semester rata_rata_IPK
##      <int>         <dbl>
## 1        4          3.20
5. Jumlah pertemuan per semester adalah 70 (= 100%). Buat kolom Persen_Kehadiran = Total_Kehadiran / 70 * 100. Berapa mahasiswa yang kehadirannya kurang dari 75%?
data_pendidikan <- data_pendidikan %>%
  mutate(
    Persentase = Total_Kehadiran / 70 * 100
  )
data_kehadiran <- filter(data_pendidikan, Persentase < 75)
nrow(data_kehadiran)
## [1] 40
6. Mahasiswa “rajin tapi IPK rendah” didefinisikan sebagai jam belajar di atas median DAN IPK di bawah rata-rata IPK seluruh mahasiswa. Berapa jumlahnya?
data_rajin_ipk_rendah <- filter(
  data_pendidikan, 
  Total_Jam_Belajar > median(Total_Jam_Belajar, na.rm = TRUE) & 
  IPK < mean(IPK, na.rm = TRUE)
)
nrow(data_rajin_ipk_rendah)
## [1] 17