Ujian Tengah Semester

Programming Data Science

awokwowk


1. Operasi dan Tipe Data Dasar

1.1 Menerima dua bilangan dari pengguna

# A <- as.numeric(readline(prompt = "Bilangan 1: "))
# B <- as.numeric(readline(prompt = "Bilangan 2: "))

A <- 14
B <- 5

Fungsi ini digunakan untuk meminta input dari pengguna dan mengubahnya menjadi tipe data numerik.

  • readline(prompt = “Bilangan 1:”) : Menampilkan pesan “Bilangan 1:” di konsol dan menunggu pengguna memasukkan nilai. Nilai yang dimasukkan akan dibaca sebagai string (teks).​

  • as.numeric(…) : Mengonversi string yang dimasukkan oleh pengguna menjadi nilai numerik (angka). Jika pengguna memasukkan nilai yang tidak dapat dikonversi menjadi angka, hasilnya akan menjadi NA (Not Available)

1.2 Menghitung dan Menampilkan Hasil

A = 14
B = 5

# Penjumlahan 
Penjumlahan <- A + B
 
print(paste("Perjumlahan =", Penjumlahan))
## [1] "Perjumlahan = 19"
# Perkalian
Perkalian <- A * B

print(paste("Perkalian =", Perkalian))
## [1] "Perkalian = 70"
# Pembagian 
Pembagian <- A / B

print(paste("Pembagian =", Pembagian))
## [1] "Pembagian = 2.8"
# Pangkat 
Pangkat <- A ^ B

print(paste("Pangkat =", Pangkat))
## [1] "Pangkat = 537824"

Kode ini digunakan untuk melakukan operasi matematika dasar antara dua variabel, yaitu A dan B. Operasi yang dilakukan meliputi penjumlahan (A + B), perkalian (A * B), pembagian (A / B), dan perpangkatan (A ^ B). Hasil dari masing-masing operasi kemudian ditampilkan ke layar menggunakan fungsi print().

1.3 Menampilkan Tipe Data Masing - masing Hasil Operasi

A = 14
B = 5

# Penjumlahan 
Penjumlahan <- A + B

print(paste("Tipe =", class(Penjumlahan)))
## [1] "Tipe = numeric"
# Perkalian
Perkalian <- A * B

print(paste("Tipe =", class(Perkalian)))
## [1] "Tipe = numeric"
# Pembagian 
Pembagian <- A / B

print(paste("Tipe =", class(Pembagian)))
## [1] "Tipe = numeric"
# Pangkat 
Pangkat <- A ^ B

print(paste("Tipe =", class(Pangkat)))
## [1] "Tipe = numeric"

kode ini juga mencetak tipe data dari masing-masing hasil menggunakan fungsi class(). Hal ini berguna untuk mengetahui apakah hasil perhitungan bertipe integer (bilangan bulat), float (bilangan desimal), atau tipe data lainnya.


2. Control Flow

2.1 Menerima input nilai dari pengguna (0 - 100)

# A <- as.numeric(readline(prompt = "Nilai Ujian: "))

A <- 83

2.2 Menampilkan keterangan berdasarkan ketentuan

# A <- as.numeric(readline(prompt = "Nilai Ujian: "))

A <- 83

if (A >= 85){
  print(paste("Sangat Baik"))
} else if (A >= 70){
  print(paste("Baik"))
} else if (A >= 60){
  print(paste("Cukup"))
} else {
  print(paste("Perlu Perbaikan"))
}
## [1] "Baik"

Fungsi ini berguna ketika ingin mengetahui seberapa bagus nilai yang didapatkan.

  • A <- 83 : Menyimpan nilai 83 ke dalam variabel A.
  • if (A >= 85) : Mengecek apakah nilai A lebih besar atau sama dengan 85. Jika ya, maka cetak “Sangat Baik”.
  • else if (A >= 70) : Jika nilai A kurang dari 85 tapi lebih dari atau sama dengan 70, maka cetak “Baik”.
  • else if (A >= 60) : Jika tidak memenuhi kondisi sebelumnya, tapi nilai A ≥ 60, maka cetak “Cukup”.
  • else if (A < 60)* : Jika nilai A di bawah 60, maka cetak “Perlu Perbaikan”.
  • else : Jika semua kondisi tidak terpenuhi, maka cetak “Gagal”.

3. Fungsi dan Perulangan

3.1 Menerima Input Integer n

# A <- as.numeric(readline(prompt = "N: "))

n <- 35

3.2 Menggunakan loop untuk kelipatan 4 dari 1 hingga n

n <- 35

print(paste("n :", n))
## [1] "n : 35"
# Looping habis dibagi 4
for (i in 1:n) {
  if (i %% 4 == 0) {
    cat(i, " ")
  }
}
## 4  8  12  16  20  24  28  32

Fungsi ini berguna untuk mengetahui bilangan - bilangan kelipatan 4 sampai bilangan yang kita input.

  • n <- 35: Menyimpan angka 35 ke dalam variabel n.
  • print(paste(“n :”, n)) : Menampilkan nilai n di konsol.
  • for (i in 1:n) : Melakukan perulangan dari angka 1 sampai 35.
  • if (i %% 4 == 0) : Mengecek apakah i habis dibagi 4 (menggunakan operator modulo %).
  • cat(i, ” “): Menampilkan angka yang habis dibagi 4 secara horizontal, dipisahkan oleh spasi.

4. Studi Kasus

Sebuah perusahaan e-commerce ingin menganalisis perfoma penjualannya berdasarkan data transaksi selama 3 bulan terakhir. Namun, data yang tersedia berasal dari berbagai sumber dan memiliki kualitas yang beragam.

4.1 Data Collection

library(dplyr)
library(readr)

# Baca ketiga file CSV
DTJan <- read_csv("Januari.csv")
DTFeb <- read_csv("Februari.csv")
DTMar <- read_csv("Maret.csv")

# Gabungan ketiga data menjadi satu
DT <- rbind(DTJan, DTFeb, DTMar)

# Simpan file gabungan 
write_csv(DT, "data_transaksi.csv")

# Jumlah Baris 
DTBaris <- nrow(DT)

# Jumlah Kolom 
DTKolom <- ncol(DT)

print(paste("Jumlah Baris =", DTBaris))
## [1] "Jumlah Baris = 150"
print(paste("Jumlah Kolom =", DTKolom))
## [1] "Jumlah Kolom = 9"

Tergabungnya data transaksi pada bulan Januari, Februaridan Maret ini bertujuan untuk memudahkan analisis data secara menyeluruh. Data transaksi gabungan ini terdapat sebanyak 150 baris dan 9 kolom.

Penjelasan Fungsi

  • dplyr = Package untuk memanipulasi data
  • readr = Package untuk Membaca file
  • read_csv = Membaca file csv
  • rbind = Menggambungkan ketiga file
  • write_csv = Menyimpan file gabungan dalam bentuk csv
  • nrow = Menghitung baris pada file gabungan
  • ncol = Menghitung kolom pada file gabungan

4.2 Data Cleaning

4.2.1 Format tanggal

library(dplyr)
library(readr)

DTDate <- read_csv("data_transaksi.csv")

# mengubah format tanggal

DTDate$Tanggal <- as.Date(DTDate$Tanggal, format = "%d-%m-%Y")

write.csv(DTDate, "data_cleaning_date.csv")

Fungsi ini berguna untuk mengubah kolom tanggal menjadi fomat tanggal dengan menggunakan as.Date dan mengambil kolom DTDate$Tanggal kolom yang akan diubah formatnya.


4.2.2 Format Numerik

library(stringr)
library(dplyr)
library(readr)

DTB <- read_csv("data_cleaning_date.csv")

# Membersihkan kolom 'harga'

DTB$Harga_B <- DTB$Harga |>
  str_to_lower() |>
  str_remove_all("rp") |>
  str_remove_all("[^0-9]") |>
  as.numeric()

# Membersihkan kolom 'jumlah'
DTB$Jumlah_B <- DTB$Jumlah |>
  str_to_lower() |>
  str_remove_all("rp") |>
  str_remove_all("[^0-9]") |>
  as.numeric()

# Mengganti NA dengan nilai acak 
DTB$Jumlah_B[is.na(DTB$Jumlah_B)] <- median(DTB$Jumlah_B, na.rm = TRUE)

write.csv(DTB, "data_cleaning_b.csv", row.names = FALSE)

Fungsi ini berguna untuk mengubah menjadi tipe data numeric as.numeric dengan membersihkan nilai yang kosong maupun yang ada “rp dan”-” dan mengubahnya menjadi lalu diubah menjadi nilai acak dan menyimpannya di kolom baru.


4.2.3 Menghitung Total Harga

library(dplyr)
library(readr)

DTC <- read_csv("data_cleaning_b.csv")

DTC$Total <- DTC$Harga_B * DTC$Jumlah_B

write.csv(DTC, "data_cleaning_c.csv")

Fungsi ini berguna untuk menghitung kolom harga dan kolom jumlah dengan mengkalikan dan menaruh hasilnya di kolom Total.


4.2.4 Ganti Karakter Tidak Valid

library(dplyr)
library(readr)

DTD <- read_csv("data_cleaning_c.csv")

DTD$Produk <- na_if(DTD$Produk, "-")
DTD$Pembeli <- na_if(DTD$Pembeli, "_anonymous_")

write.csv(DTD, "data_cleaning_d.csv")

Fungsi ini berguna untuk mengubah karakter yang tidak jelas menjadi NA dengan menggunakan na_if.

4.2.5 Hapus Baris yang Tidak Memiliki Produk

library(dplyr)
library(readr)

DTE <- read_csv("data_cleaning_d.csv")

DTE <- DTE %>% filter(!is.na(Produk))

DTE <- DTE %>% select(-Harga, -Jumlah)

DTBaris <- nrow(DTE)

print(paste("Jumlah baris =",DTBaris))
## [1] "Jumlah baris = 122"
write.csv(DTE, "data_cleaning_e.csv")

Fungsi ini berguna untuk menghapus baris yang tidak memiliki nilai NA pada kolom produk dengan menggunakan %>% filter(is.na()) dan kolom yang sudah tidak digunakan.


4.3 Data Transformation

4.3.1 membuat kolom baru bulan berdasarkan tanggal

library(dplyr)
library(readr)

Data_clean <- read_csv("Data_Clean_B.csv")

Data_clean$Tanggal <- as.Date(Data_clean$Tanggal)

Data_clean$Bulan <- format(Data_clean$Tanggal, "%m")

nama_bulan <- c("01" = "Januari", "02" = "Februari", "03" = "Maret", "04" = "April")

Data_clean$bulan_nama <- nama_bulan[Data_clean$Bulan]


write.csv(Data_clean, "data_transformation_a.csv")

Fungsi format(Data_clean\(Tanggal, "%m")** berguna untuk mengubahnya menjadi nama bulan dari angka bulan dan menyimpannya di kolom baru **Data_clean\)Bulan.

Data yang sudah dibersihkan dapat dianalisis.


4.3.2 Total Penjualan per Kategori

library(dplyr)
library(readr)

Data_clean <- read_csv("data_transformation_a.csv")

Total_penjualan_A <- Data_clean %>%
  group_by(Kategori) %>%
  summarise(Total_penjualan = sum(Total, na.rm = TRUE))

knitr::kable(Total_penjualan_A)
Kategori Total_penjualan
Aksesoris 251150000
Elektronik 535250000
Fashion 579900000

Fungsi ini berguna untuk menghitung jumlah sum() dari kolom kategori yang dikelompokkan sesuai dengan jenis kategori group_by()

4.3.3 Total Penjualan per Kota

library(dplyr)
library(readr)

Data_clean <- read_csv("data_transformation_a.csv")

Total_penjualan_B <- Data_clean %>%
  group_by(Kota) %>%
  summarise(Total_penjualan = sum(Total, na.rm = TRUE))

knitr::kable(Total_penjualan_B)
Kota Total_penjualan
- 234100000
Bandung 427850000
Jakarta 357550000
Surabaya 346800000

Fungsi ini berguna untuk menghitung jumlah sum() dari kolom bulan yang dikelompokkan sesuai dengan bulan group_by()


4.3.4 Total Penjualan per Bulan

library(dplyr)
library(readr)

Data_clean <- read_csv("data_transformation_a.csv")

Total_penjualan_C <- Data_clean %>%
  group_by(bulan_nama) %>%
  summarise(Total_penjualan = sum(Total, na.rm = TRUE))

knitr::kable(Total_penjualan_C)
bulan_nama Total_penjualan
April 154900000
Februari 422200000
Januari 367650000
Maret 421550000

Fungsi ini berguna untuk menghitung jumlah sum() dari kolom kota yang dikelompokkan sesuai dengan jenis kota group_by()


4.4 Visualisasi

Grafik menunjukkan penjualan tiga kategori produk—Aksesoris, Elektronik, dan Fashion—selama Januari hingga Maret.

Di Januari, Elektronik unggul dalam penjualan, tapi pada Februari dan Maret, Fashion mengalami lonjakan tajam hingga menjadi yang tertinggi.

Sebaliknya, Aksesoris justru mengalami penurunan signifikan dari bulan ke bulan, sementara Elektronik relatif stabil.


Referensi

  1. DScienceLabs. (n.d.). Basic Programming. Retrieved from https://bookdown.org/dsciencelabs/data_science_programming/01-Basic-Programming.html

  2. DScienceLabs. (n.d.). Syntac and control Flow. Retrieved from https://bookdown.org/dsciencelabs/data_science_programming/02-Syntax-and-Control-Flow.html

  3. DScienceLabs. (n.d.). Functions and Loops. Retrieved from https://bookdown.org/dsciencelabs/data_science_programming/03-Functions-and-Loops.html

  4. DScienceLabs. (n.d.). Data collection. Retrieved from https://bookdown.org/dsciencelabs/data_science_programming/04-Data_Collection.html

  5. DScienceLabs. (n.d.). Data Cleaning. Retrieved from https://bookdown.org/dsciencelabs/data_science_programming/05-Data-Cleaning.html

  6. DScienceLabs. (n.d.). Data Transformation. Retrieved from https://bookdown.org/dsciencelabs/data_science_programming/06-Data-Transformation.html