Ujian Tengah Semester
Pemograman Sains Data 1
1 Operasi dan Tipe Data Dasar
Program ini ditulis dalam bahasa R, dan bertujuan untuk:
Menerima dua bilangan dari pengguna.
Melakukan empat operasi matematika dasar: penjumlahan, perkalian, pembagian, dan perpangkatan.
Menampilkan hasil dari setiap operasi.
Menampilkan tipe data dari setiap hasil operasi.
# Menerima dua bilangan dari pengguna
bilangan_pertama <- as.numeric(readline(prompt = "Masukkan bilangan pertama: "))## Masukkan bilangan pertama:
## Masukkan bilangan kedua:
# a. Menghitung hasil operasi matematika
penjumlahan <- bilangan_pertama + bilangan_kedua
perkalian <- bilangan_pertama * bilangan_kedua
pembagian <- bilangan_pertama / bilangan_kedua
pangkat <- bilangan_pertama ^ bilangan_kedua
# b. Menampilkan hasil operasi matematika
cat("Hasil Penjumlahan: ", penjumlahan, "\n")## Hasil Penjumlahan: NA
## Hasil Perkalian: NA
## Hasil Pembagian: NA
## Hasil Pangkat: NA
# c. Menampilkan tipe data masing-masing hasil operasi matematika
cat("Tipe data hasil Penjumlahan: ", class(penjumlahan), "\n")## Tipe data hasil Penjumlahan: numeric
## Tipe data hasil Perkalian: numeric
## Tipe data hasil Pembagian: numeric
## Tipe data hasil Pangkat: numeric
Penjelasan Kode :
- Input Dari Pemgguna
readline() meminta input dari pengguna berupa teks.
as.numeric() mengubah input tersebut menjadi angka (tipe numeric).
Nilai ini disimpan ke dalam variabel bilangan_pertama dan bilangan_kedua.
- Operasi Matematika
Keempat operasi dilakukan langsung dengan operator matematika standar di R:
\(+\) untuk penjumlahan
\(*\) untuk perkalian
\(/\) untuk pembagian
\(^\) untuk perpangkatan
- Menampilkan Hasil
Fungsi cat() mencetak teks dan nilai variabel ke layar.
*digunakan untuk pindah baris.
- Menampilkan Tipe Data
Fungsi class() digunakan untuk mengetahui tipe data dari suatu variabel.
Karena semua operasi menggunakan angka, hasil dari class(…) umumnya akan berupa “numeric”.
2 Struktur Kendali (Control Flow)
Program ini dibuat untuk:
Menerima input nilai ujian dari pengguna.
Memastikan nilai berada pada rentang yang valid (0–100).
Memberikan kategori penilaian berdasarkan nilai tersebut.
Menampilkan pesan kesalahan jika input tidak valid.
# a. Menerima input nilai ujian dari pengguna
nilai <- as.numeric(readline(prompt = "Masukkan nilai ujian (0-100): "))## Masukkan nilai ujian (0-100):
# Validasi nilai harus berada dalam rentang 0–100
if (!is.na(nilai) && nilai >= 0 && nilai <= 100) {
# b. Menampilkan keterangan berdasarkan nilai
if (nilai >= 85) {
cat("Sangat Baik\n")
} else if (nilai >= 70 && nilai <= 84) {
cat("Baik\n")
} else if (nilai >= 60 && nilai <= 69) {
cat("Cukup\n")
} else if(nilai < 60) {
cat("Perlu Perbaikan\n")
}
} else {
cat("Nilai ujian tidak valid. Harap masukkan nilai antara 0-100.\n")
}## Nilai ujian tidak valid. Harap masukkan nilai antara 0-100.
Penjelasan Kode:
- Input Nilai Ujian
readline() digunakan untuk mengambil input dari pengguna dalam bentuk teks.
as.numeric() mengubah input menjadi angka.
Nilai disimpan dalam variabel nilai.
- Validasi Nilai
!is.na(nilai) memastikan nilai bukan NA (bukan kosong atau gagal dikonversi).
nilai >= 0 && nilai <= 100 memastikan nilai berada dalam rentang valid.
Jika kondisi ini terpenuhi, program lanjut mengevaluasi kategori nilai.
- Kategori Penilaian
- Setiap hasil ditampilkan dengan cat() disertai *untuk pindah baris.
- Penanganan Input Tidak Valid
- Jika nilai tidak memenuhi syarat valid, maka akan ditampilkan pesan kesalahan.
3 Fungsi dan Perulangan
Program ini dibuat untuk:
Menerima input bilangan bulat dari pengguna sebagai batas atas.
Mencetak semua bilangan kelipatan 4 dari 1 hingga bilangan tersebut.
Menampilkan pesan kesalahan jika input tidak valid.
# Menerima input integer dari pengguna
n <- as.integer(readline(prompt = "Masukkan nilai batasan dari kelipatan genap: "))## Masukkan nilai batasan dari kelipatan genap:
# Cek apakah n valid
if (is.na(n) || n <= 0) {
cat("Input tidak valid. Harap masukkan bilangan bulat positif.\n")
} else {
# Menyimpan hasil bilangan genap kelipatan 4 dalam vektor
kelipatan_4 <- c()
# Loop dari 1 sampai n
for (i in 1:n) {
if (i %% 4 == 0) {
kelipatan_4 <- c(kelipatan_4, i)
}
}
# Tampilkan hasil
cat("Kelipatan 4 dari 1 sampai", n, "adalah:\n")
cat(paste(kelipatan_4, collapse = ", "), "\n")
}## Input tidak valid. Harap masukkan bilangan bulat positif.
Penjelasan Kode:
- Input Dari Pengguna
readline() meminta input dari pengguna dalam bentuk teks.
as.integer() mengubah input menjadi bilangan bulat.
Nilai ini disimpan dalam variabel n.
- Validasi Input
is.na(n) mengecek apakah input gagal dikonversi ke integer.
n <= 0 memastikan nilai adalah bilangan bulat positif.
Jika kondisi ini terpenuhi, maka pengguna diberi peringatan.
- Perulangan dan Pengecekan Kelipatan
for (i in 1:n) artinya program akan memeriksa setiap bilangan dari 1 sampai n.
i %% 4 == 0 mengecek apakah i adalah kelipatan 4 (sisa bagi = 0).
c(kelipatan_4, i) menambahkan nilai i ke vektor kelipatan_4.
- Menampilkan Hasil
cat() mencetak hasil ke layar.
paste(…, collapse = “,”) digunakan untuk menggabungkan elemen vektor kelipatan_4 menjadi satu string dengan pemisah koma.
4 Studi Kasus
4.1 Data Collection
Program ini dibuat untuk:
Membaca satu sheet tertentu dari file Excel.
Menampilkan jumlah baris dan kolom dari data tersebut
## Warning: package 'readxl' was built under R version 4.4.3
# Baca sheet "Append1" dari file Excel
data <- read_excel("data_penjualan_kuartal1_full.append.xlsx", sheet = "Append1")
# Tampilkan jumlah baris dan kolom
cat("Jumlah baris:", nrow(data), "\n")## Jumlah baris: 150
## Jumlah kolom: 9
Penjelasan Kode :
- Memanggil Package:
readxl adalah package di R untuk membaca file Excel (.xls dan .xlsx).
Package ini harus di-install terlebih dahulu dengan install.packages(“readxl”) jika belum tersedia.
- Membaca Data dari Sheet Tertentu
read_excel() digunakan untuk membaca file Excel.
Argumen sheet = “Append1” menandakan bahwa hanya sheet bernama “Append1” yang akan dibaca.
Data hasil pembacaan disimpan dalam variabel data.
- Menampilkan Dimensi Data
nrow(data) menghitung jumlah baris (observasi).
ncol(data) menghitung jumlah kolom (variabel).
cat() digunakan untuk mencetak informasi ke konsol.
4.2 Data Cleaning
Program ini dibuat untuk:
- Membersihkan dan mempersiapkan data penjualan dari file Excel agar siap dianalisis. Proses ini melibatkan:
standarisasi tanggal,
konversi kolom numerik,
perhitungan ulang nilai total,
penanganan data tidak valid,
penghapusan data kosong.
## Warning: package 'dplyr' was built under R version 4.4.3
##
## 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
## Warning: package 'lubridate' was built under R version 4.4.3
##
## Attaching package: 'lubridate'
## The following objects are masked from 'package:base':
##
## date, intersect, setdiff, union
## Warning: package 'writexl' was built under R version 4.4.3
# Load data
df <- read_excel("data_penjualan_kuartal1_full.append.xlsx")
# a. Standarkan format tanggal
df <- df %>% mutate(Tanggal = format(dmy(Tanggal), "%Y-%m-%d"))
# b. Ubah Harga dan Jumlah ke numerik
# Harga: hapus karakter non-digit
df$Harga <- as.numeric(gsub("[^0-9]", "", df$Harga))
# Jumlah: ubah teks angka ke numerik
text_to_number <- c("satu"=1, "dua"=2, "tiga"=3, "empat"=4, "lima"=5,
"enam"=6, "tujuh"=7, "delapan"=8, "sembilan"=9, "sepuluh"=10)
df$Jumlah <- ifelse(df$Jumlah %in% names(text_to_number),
text_to_number[df$Jumlah],
df$Jumlah)
df$Jumlah <- as.numeric(df$Jumlah)
# c. Hitung ulang kolom Total
df <- df %>% mutate(Total = Harga * Jumlah)
# d. Ganti nilai tidak valid dengan NA
df[df == "-" | df == "Rp" | df == "_anonymous_"] <- NA
# e. Hapus baris dengan Produk kosong atau "-"
df <- df %>% filter(!Produk %in% c("-", NA, ""))
# Simpan hasil
write_xlsx(df, "data_penjualan_bersih.xlsx")
# Tampilkan beberapa baris pertama setelah setiap langkah
head(df)Penjelasan Kode:
- Library yang Digunakan
readxl : Membaca file Excel.
dplyr : Memudahkan manipulasi data (filter, mutate, dll).
stringr : Pemrosesan string (tidak dipakai eksplisit di sini, tapi berguna).
lubridate : Untuk parsing dan formatting tanggal.
writexl : Untuk menyimpan data ke Excel kembali.
- Membaca Data
- Membaca seluruh isi file Excel ke dalam variabel df.
- Standarisasi Format Tanggal
- Mengubah kolom Tanggal ke format YYYY-MM-DD setelah memastikan bahwa urutan tanggalnya day-month-year.
- Konversi Harga dan Jumlah
Menghapus semua karakter non-angka (misalnya simbol Rp, titik, koma) dan ubah menjadi numerik.
Konversi teks angka (seperti “lima”) menjadi angka (5).
Kemudian as.numeric() untuk memastikan semuanya bertipe numerik.
- Hitung Kolom Total
- Membuat ulang kolom Total berdasarkan hasil perkalian Harga dan Jumlah.
- Ganti Nilai Tak Valid dengan NA
- Semua nilai tidak valid diganti menjadi NA agar bisa difilter atau dianalisis lebih baik.
- Hapus Baris dengan Produk Kosong
- Hapus semua baris yang memiliki nilai Produk kosong, tanda -, atau NA.
- Simpan Data ke File Baru
- Simpan hasil akhir ke file Excel baru untuk dokumentasi atau analisis lanjutan.
- Tampilkan Data
- Menampilkan beberapa baris awal untuk melihat hasil akhir pembersihan data.
4.3 Data Transformation
Program ini dibuat untuk:
- Melakukan analisis ringkasan terhadap data penjualan yang telah dibersihkan sebelumnya, mencakup:
Penjualan per kategori produk
Jumlah transaksi per kota
Total penjualan bulanan
library(readxl)
library(dplyr)
library(lubridate)
library(writexl)
# Load data (asumsi data sudah dibersihkan)
df <- read_excel("data_penjualan_bersih.xlsx")
# a. Tambahkan kolom Bulan
df <- df %>% mutate(Bulan = format(ymd(Tanggal), "%Y-%m"))
# b. Hitung total penjualan per kategori produk
total_per_kategori <- df %>%
group_by(Kategori) %>%
summarise(`Total Penjualan` = sum(Total, na.rm = TRUE))
# c. Hitung jumlah transaksi dari setiap kota
transaksi_per_kota <- df %>%
group_by(Kota) %>%
summarise(`Jumlah Transaksi` = n())
# d. Ringkasan jumlah total penjualan per bulan
total_per_bulan <- df %>%
group_by(Bulan) %>%
summarise(`Total Penjualan Bulanan` = sum(Total, na.rm = TRUE))
# (Opsional) Simpan semua hasil ke file Excel
write_xlsx(list(
"Penjualan per Kategori" = total_per_kategori,
"Transaksi per Kota" = transaksi_per_kota,
"Penjualan per Bulan" = total_per_bulan
), "ringkasan_penjualan.xlsx")
cat("Total Penjualan per Kategori:\n")## Total Penjualan per Kategori:
## # A tibble: 4 × 2
## Kategori `Total Penjualan`
## <chr> <dbl>
## 1 Aksesoris 181400000
## 2 Elektronik 87750000
## 3 Fashion 143600000
## 4 <NA> 194700000
##
## Jumlah Transaksi per Kota:
## # A tibble: 4 × 2
## Kota `Jumlah Transaksi`
## <chr> <int>
## 1 Bandung 10
## 2 Jakarta 10
## 3 Surabaya 10
## 4 <NA> 12
##
## Total Penjualan per Bulan:
## # A tibble: 2 × 2
## Bulan `Total Penjualan Bulanan`
## <chr> <dbl>
## 1 2024-01 489150000
## 2 2024-02 118300000
Penjelasan Kode:
- Tambah Kolom Bulan
- Ekstrak bagian bulan dari kolom Tanggal dan simpan dalam format YYYY-MM.
- Total Penjualan per Kategori
- Menjumlahkan nilai Total untuk tiap kategori, mengabaikan NA.
- Jumlah Transaksi per Kota
- Menghitung jumlah baris (transaksi) untuk setiap kota.
- Ringkasan Penjualan Bulanan
- Menjumlahkan total penjualan per bulan.
- Simpan ke Excel (opsional tapi sangat berguna)
- Menyimpan tiga tabel ringkasan ke dalam satu file Excel, tiap tabel di sheet terpisah.
- Cetak Hasil ke Konsol
- Menampilkan hasil ke terminal atau konsol R.