Latihan

Praktikum Week-4

Safina Zahra (52250033)

Student Majoring in Data Science

R Programming

Data Science

Statistics


Pendahuluan

Pemrograman merupakan keterampilan penting dalam bidang data science karena memungkinkan analis untuk mengolah data dan mengotomatisasi proses analisis. Salah satu konsep dasar dalam pemrograman adalah conditional statements (pernyataan kondisi), yaitu mekanisme yang memungkinkan program mengambil keputusan berdasarkan kondisi tertentu. Dengan menggunakan struktur seperti if dan if–else, program dapat menjalankan perintah yang berbeda tergantung pada apakah suatu kondisi bernilai benar atau salah.

Pemahaman tentang conditional statements membantu mahasiswa mengembangkan cara berpikir yang logis dan sistematis dalam menyelesaikan permasalahan berbasis data. Konsep ini sangat penting dalam data science karena data yang dianalisis sering kali memiliki kondisi yang berbeda sehingga memerlukan perlakuan atau proses yang berbeda pula.

Saya juga ingin menyampaikan terima kasih kepada Bapak Bakti Siregar, M.Sc., CDS., selaku dosen Data Science Programming, atas bimbingan dan penjelasannya yang telah membantu saya memahami konsep dasar pemrograman ini dengan lebih jelas.

1. Dataset

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
library(knitr)
library(kableExtra)
## Warning: package 'kableExtra' was built under R version 4.5.2
## 
## Attaching package: 'kableExtra'
## The following object is masked from 'package:dplyr':
## 
##     group_rows
# Membuat dataset
employees <- data.frame(
  name = c("Bagas","Joan","Alya","Dwi","Nabil"),
  age = c(25,30,27,35,40),
  salary = c(5000,7000,6500,10000,12000),
  position = c("Staff","Supervisor","Staff","Manager","Director"),
  performance = c("Good","Very Good","Average","Good","Very Good")
)

library(DT)

datatable(
  employees,
  caption = "Tabel Data Karyawan",
  extensions = "Buttons",
  options = list(
    pageLength = 5,
    dom = 'Bfrtip',
    buttons = c('copy','csv','excel','print'),
    scrollX = TRUE
  ),
  class = "stripe hover row-border"
)

Interpretasi

Kode ini membuat dataset karyawan dalam bentuk dataframe yang berisi informasi nama, usia, gaji, posisi, dan performa kerja. Dataset ini akan digunakan sebagai dasar untuk melakukan analisis menggunakan pernyataan bersyarat dan perulangan.

Visualisasi

library(dplyr)
library(highcharter)
## Warning: package 'highcharter' was built under R version 4.5.2
## Registered S3 method overwritten by 'quantmod':
##   method            from
##   as.zoo.data.frame zoo
library(htmlwidgets)

# Dataset karyawan
employees <- data.frame(
  name = c("Bagas","Joan","Alya","Dwi","Nabil"),
  age = c(25,30,27,35,40),
  salary = c(5000,7000,6500,10000,12000),
  position = c("Staff","Supervisor","Staff","Manager","Director"),
  performance = c("Good","Very Good","Average","Good","Very Good")
)

# Menambahkan warna
salary_data <- employees %>%
  mutate(
    color = c("#4E79A7","#F28E2B","#59A14F","#E15759","#B07AA1")
  )

highchart() %>%
  
  hc_chart(
    type = "column",
    height = 380,
    backgroundColor = "#F5F7FB",
    
    # Event ketika chart diklik
    events = list(
      click = JS(
        "function () {
           this.fullscreen.toggle();
        }"
      )
    )
  ) %>%
  
  hc_title(text = "Perbandingan Gaji Karyawan") %>%
  
  hc_xAxis(
    categories = salary_data$name,
    title = list(text = "Nama Karyawan")
  ) %>%
  
  hc_yAxis(
    title = list(text = "Gaji")
  ) %>%
  
  hc_add_series(
    name = "Gaji",
    data = list_parse(
      transform(salary_data, y = salary, color = color)
    )
  ) %>%
  
  hc_exporting(enabled = TRUE)

Interpretasi

Grafik ini menunjukkan perbandingan gaji setiap karyawan. Terlihat bahwa Nabil memiliki gaji paling tinggi, sedangkan Bagas memiliki gaji paling rendah. Perbedaan ini kemungkinan dipengaruhi oleh posisi jabatan dalam perusahaan.

2. Conditional Statement (Menghitung Bonus)

for(i in 1:nrow(employees)){
  
  # mengambil nilai performa dan gaji
  perf <- employees$performance[i]
  sal <- employees$salary[i]
  
  # menentukan bonus menggunakan kondisi
  if(perf == "Very Good"){
    bonus <- sal * 0.20
    
  } else if(perf == "Good"){
    bonus <- sal * 0.10
    
  } else {
    bonus <- sal * 0.05
  }
  
  # menampilkan output sesuai format
  cat("Name:", employees$name[i], ", Bonus:", bonus, "\n")
}
## Name: Bagas , Bonus: 500 
## Name: Joan , Bonus: 1400 
## Name: Alya , Bonus: 325 
## Name: Dwi , Bonus: 1000 
## Name: Nabil , Bonus: 2400

Interpretasi

Kode ini menggunakan perulangan for untuk membaca setiap karyawan dalam dataset. Program kemudian menggunakan pernyataan bersyarat (if, else if, else) untuk menentukan besarnya bonus berdasarkan tingkat performa karyawan. Setelah bonus dihitung, program menampilkan hasil dalam format tersebut.

Visualisasi

library(dplyr)
library(highcharter)
library(htmlwidgets)

# Dataset karyawan
employees <- data.frame(
  name = c("Bagas","Joan","Alya","Dwi","Nabil"),
  age = c(25,30,27,35,40),
  salary = c(5000,7000,6500,10000,12000),
  position = c("Staff","Supervisor","Staff","Manager","Director"),
  performance = c("Good","Very Good","Average","Good","Very Good")
)

# Menghitung bonus berdasarkan performa
bonus_df <- employees %>%
  mutate(
    bonus = case_when(
      performance == "Very Good" ~ salary * 0.20,
      performance == "Good" ~ salary * 0.10,
      TRUE ~ salary * 0.05
    )
  )

# Visualisasi bonus
highchart() %>%
  
  hc_chart(
    type = "column",
    backgroundColor = "#F5F7FB",
    zoomType = "x",  # memungkinkan zoom dengan drag
    
    # klik grafik → fullscreen
    events = list(
      click = JS(
        "function () {
          this.fullscreen.toggle();
        }"
      )
    )
  ) %>%
  
  hc_title(text = "Perbandingan Bonus Karyawan") %>%
  
  hc_xAxis(
    categories = bonus_df$name,
    title = list(text = "Nama Karyawan")
  ) %>%
  
  hc_yAxis(
    title = list(text = "Bonus")
  ) %>%
  
  hc_add_series(
    name = "Bonus",
    data = bonus_df$bonus
  ) %>%
  
  hc_exporting(enabled = TRUE)

Interpretasi

Grafik ini menunjukkan jumlah bonus yang diterima oleh setiap karyawan. Bonus dihitung berdasarkan tingkat performa kerja. Karyawan dengan performa Very Good memperoleh bonus yang lebih besar dibandingkan dengan karyawan dengan performa Good atau Average.

3. For Loop (Menampilkan Gaji > 6000)

for(i in 1:nrow(employees)){
  
  # cek apakah gaji lebih dari 6000
  if(employees$salary[i] > 6000){
    
    # menampilkan nama dan gaji
    cat(
      "Name:", employees$name[i],
      ", Salary:", employees$salary[i], "\n"
    )
    
  }
}
## Name: Joan , Salary: 7000 
## Name: Alya , Salary: 6500 
## Name: Dwi , Salary: 10000 
## Name: Nabil , Salary: 12000

Interpretasi

Perulangan ini digunakan untuk memfilter karyawan yang memiliki gaji lebih dari 6000. Program memeriksa setiap baris dataset dan hanya menampilkan data yang memenuhi kondisi tersebut.

4. While Loop (Berhenti Saat Manager)

i <- 1

while(i <= nrow(employees)){
  
  # menampilkan nama dan posisi karyawan
  cat(
    "Name:", employees$name[i],
    ", Position:", employees$position[i], "\n"
  )
  
  # jika menemukan Manager maka berhenti
  if(employees$position[i] == "Manager"){
    
    cat("(Stop here)\n")
    break
    
  }
  
  i <- i + 1
}
## Name: Bagas , Position: Staff 
## Name: Joan , Position: Supervisor 
## Name: Alya , Position: Staff 
## Name: Dwi , Position: Manager 
## (Stop here)

Interpretasi

Perulangan while membaca data karyawan satu per satu hingga ditemukan posisi Manager. Ketika posisi tersebut ditemukan, perintah break menghentikan perulangan sehingga data setelahnya tidak ditampilkan.

5. Break (Berhenti Jika Gaji > 10000)

for(i in 1:nrow(employees)){
  
  # jika salary lebih dari 10000 maka berhenti
  if(employees$salary[i] > 10000){
    
    cat(
      "(Stopped because", employees$name[i],
      "has a salary above 10,000)\n"
    )
    
    break
  }
  
  # menampilkan nama dan salary
  cat(
    "Name:", employees$name[i],
    ", Salary:", employees$salary[i], "\n"
  )
}
## Name: Bagas , Salary: 5000 
## Name: Joan , Salary: 7000 
## Name: Alya , Salary: 6500 
## Name: Dwi , Salary: 10000 
## (Stopped because Nabil has a salary above 10,000)

Interpretasi

Kode ini menunjukkan penggunaan break dalam perulangan. Program akan menampilkan data karyawan hingga menemukan gaji yang lebih besar dari 10.000. Ketika kondisi tersebut terpenuhi, perulangan langsung dihentikan.

6. Continue / Next (Melewati Performance “Average”)

for(i in 1:nrow(employees)){
  
  # jika performa Average maka dilewati
  if(employees$performance[i] == "Average"){
    
    cat(
      employees$name[i],
      "is skipped because the performance is 'Average'\n"
    )
    
    next
  }
  
  # menampilkan nama dan performa
  cat(
    "Name:", employees$name[i],
    ", Performance:", employees$performance[i], "\n"
  )
}
## Name: Bagas , Performance: Good 
## Name: Joan , Performance: Very Good 
## Alya is skipped because the performance is 'Average'
## Name: Dwi , Performance: Good 
## Name: Nabil , Performance: Very Good

Interpretasi

Perintah next digunakan untuk melewati data tertentu dalam perulangan. Jika program menemukan karyawan dengan performa “Average”, maka program tidak akan menampilkan data tersebut dan langsung melanjutkan ke iterasi berikutnya.

Visualisasi

library(dplyr)
library(highcharter)
library(htmlwidgets)

# Menghitung jumlah karyawan berdasarkan performa
performance_df <- employees %>%
  count(performance)

# Membuat pie chart distribusi performa
highchart() %>%
  
  # Pengaturan chart
  hc_chart(
    type = "pie",
    backgroundColor = "#F5F7FB",
    
    # Klik grafik → otomatis fullscreen
    events = list(
      click = JS(
        "function () {
          this.fullscreen.toggle();
        }"
      )
    )
  ) %>%
  
  # Judul grafik
  hc_title(
    text = "Distribusi Performa Karyawan"
  ) %>%
  
  # Menambahkan data pie chart
  hc_add_series(
    name = "Jumlah",
    data = list_parse2(performance_df)
  ) %>%
  
  # Menampilkan label persentase pada pie
  hc_plotOptions(
    pie = list(
      dataLabels = list(
        enabled = TRUE,
        format = "{point.name}: {point.y}"
      )
    )
  ) %>%
  
  # Mengaktifkan tombol download dan fullscreen
  hc_exporting(enabled = TRUE)

Interpretasi

Diagram pie menunjukkan proporsi tingkat performa karyawan. Dari grafik ini dapat dilihat bahwa sebagian besar karyawan memiliki performa Good dan Very Good, sedangkan hanya sedikit yang berada pada kategori Average.