UTS Pemrograman Sains Data
1. Operasi dan Tipe Data Dasar
A. Menerima dua bilangan dari pengguna
B. Menghitung dan menampilkan hasil operasi
# Mendefinisikan variabel
a <- 2
b <- 9
# Penjumlahan
jumlah <- a + b # Menambahkan dua bilangan
# Perkalian
perkalian <- a * b # Mengalikan dua bilangan
# Pembagian
pembagian <- a / b # Membagi satu bilangan dengan bilangan yang lainnya
# Pangkat
pangkat <- a ^ b # bilangan pertama pangkat bilangan kedua
# Menampilkan hasil
cat("Hasil Penjumlahan:", jumlah, "\n")## Hasil Penjumlahan: 11
## Hasil Perkalian: 18
## Hasil Pembagian: 0.2222222
## Hasil bilangan pertama pangkat bilangan kedua: 512
C. Menampilkan tipe data masing-masing hasil operasi
## Hasil Penjumlahan: 11 | Tipe data: numeric
## Hasil Perkalian: 18 | Tipe data: numeric
## Hasil Pembagian: 0.2222222 | Tipe data: numeric
## Hasil Pangkat: 512 | Tipe data: numeric
2. Struktur Kendali (Control Flow)
A. Menerima input nilai ujian dari pengguna (0–100)
# Menentukan nilai ujian langsung (tanpa input)
nilai <- 100
# Menampilkan nilai yang ditentukan
cat("Nilai ujian:", nilai, "\n")## Nilai ujian: 100
B. Menampilkan keterangan berdasarkan ketentuan berikut
- Nilai ≥ 85: “Sangat Baik”
- Nilai 70–84: “Baik”
- Nilai 60–69: “Cukup”
- Nilai < 60: “Perlu Perbaikan”
if (nilai >= 85) {
cat("Sangat Baik (A)\n")
} else if (nilai >= 70) {
cat("Baik (B)\n")
} else if (nilai >= 60) {
cat("Cukup (C)\n")
} else {
cat("Nilai Perlu Perbaikan\n")
}## Sangat Baik (A)
3. Fungsi dan Perulangan
A. Menerima input integer n
## [1] "n : 20"
B. Menggunakan loop untuk mencetak semua bilangan genap kelipatan 4 dari 1 hingga n
# Fungsi untuk mencetak bilangan genap kelipatan 4 dari 1 hingga n
kelipatan_genap <- function(n) {
hasil <- c()
for (i in 1:n) {
if (i %% 4 == 0) {
hasil <- c(hasil, i)
}
}
cat(paste(hasil, collapse = ", "), "\n")
}
# Menentukan nilai n langsung
n <- 20
# Menampilkan hasil
cat("Bilangan genap kelipatan 4 dari 1 hingga", n, ":\n")## Bilangan genap kelipatan 4 dari 1 hingga 20 :
## 4, 8, 12, 16, 20
4. Studi Kasus
Sebuah perusahaan e-commerce ingin menganalisis performa penjualannya berdasarkan data transaksi selama 3 bulan terakhir. Namun, data yang tersedia berasal dari berbagai sumber dan memiliki kualitas yang beragam. Anda diminta untuk melakukan Data Wrangling sebelum dianalisis lebih lanjut.
Bagian 1: Data Collection
1. Menggabungkan ketiga file menjadi satu dataset.
2. Menampilkan jumlah total baris dan kolom setelah digabung.
## Warning: package 'readr' was built under R version 4.4.3
## Warning: package 'dplyr' was built under R version 4.4.2
##
## 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
## Rows: 50 Columns: 9
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (7): Tanggal, Produk, Kategori, Harga, Jumlah, Pembeli, Kota
## dbl (1): OrderID
## lgl (1): Total
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
## Rows: 50 Columns: 9
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (7): Tanggal, Produk, Kategori, Harga, Jumlah, Pembeli, Kota
## dbl (1): OrderID
## lgl (1): Total
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
## Rows: 50 Columns: 9
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (7): Tanggal, Produk, Kategori, Harga, Jumlah, Pembeli, Kota
## dbl (1): OrderID
## lgl (1): Total
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
## Data Januari:
## # A tibble: 6 × 9
## OrderID Tanggal Produk Kategori Harga Jumlah Total Pembeli Kota
## <dbl> <chr> <chr> <chr> <chr> <chr> <lgl> <chr> <chr>
## 1 1001 01-01-2024 Laptop A <NA> 15000000 empat NA Budi@ Band…
## 2 1002 02-01-2024 Tas Branded Fashion 15000000 2 NA Budi@ Sura…
## 3 1003 03-01-2024 Tas Branded Aksesoris 15000000 3 NA _anony… Band…
## 4 1004 04-01-2024 Kemeja <NA> 15000000 dua NA Andi123 Band…
## 5 1005 05-01-2024 - Fashion Rp750.000 3 NA _anony… Jaka…
## 6 1006 06-01-2024 Smartphone X Fashion 15000000 empat NA Sinta99 Band…
## Data Februari:
## # A tibble: 6 × 9
## OrderID Tanggal Produk Kategori Harga Jumlah Total Pembeli Kota
## <dbl> <chr> <chr> <chr> <chr> <chr> <lgl> <chr> <chr>
## 1 1101 01-02-2024 Tas Branded Aksesoris 1.200.000 dua NA Budi@ Band…
## 2 1102 02-02-2024 Smartphone X Fashion Rp750.000 2 NA _anony… -
## 3 1103 03-02-2024 Kemeja Fashion 15000000 1 NA Budi@ Sura…
## 4 1104 04-02-2024 Kemeja Fashion 15000000 empat NA _anony… Band…
## 5 1105 05-02-2024 Smartphone X <NA> 15000000 empat NA _anony… Sura…
## 6 1106 06-02-2024 - Aksesoris Rp750.000 3 NA _anony… Band…
## Data Maret:
## # A tibble: 6 × 9
## OrderID Tanggal Produk Kategori Harga Jumlah Total Pembeli Kota
## <dbl> <chr> <chr> <chr> <chr> <chr> <lgl> <chr> <chr>
## 1 1201 01-03-2024 Sepatu 'Nike' Fashion 1.200.… empat NA Andi123 Sura…
## 2 1202 02-03-2024 - Elektronik 150000… 3 NA _anony… Jaka…
## 3 1203 03-03-2024 - Fashion 1.200.… dua NA Sinta99 Sura…
## 4 1204 04-03-2024 - <NA> Rp750.… 3 NA Budi@ Sura…
## 5 1205 05-03-2024 Tas Branded <NA> Rp750.… dua NA Andi123 Jaka…
## 6 1206 06-03-2024 Kemeja Aksesoris 150000… 2 NA Andi123 Sura…
# Menggabungkan ketiga data frame menjadi satu
data_all <- rbind(data_jan, data_feb, data_mar)
# Menampilkan jumlah baris dan kolom setelah penggabungan
cat("Total baris:", nrow(data_all), "\n")## Total baris: 150
## Total kolom: 9
Bagian 2: Data Cleaning
1. Standarkan format tanggal ke bentuk YYYY-MM-DD.
2. Mengubah kolom Harga dan Jumlah menjadi format numerik.
3. Menghitung ulang nilai kolom Total = Harga * Jumlah.
4. Mengganti nilai yang tidak valid (contoh: -, “dua”, “Rp”, “anonymous”) dengan nilai yang sesuai atau NA.
5. Menghapus baris yang tidak memiliki nama produk (Produk kosong atau -).
library(dplyr)
library(stringr)
library(readr)
library(lubridate)
# Membaca 3 file CSV
data_jan <- read_csv("januari.csv")
data_feb <- read_csv("februari.csv")
data_mar <- read_csv("maret.csv")
# Menggabungkan ketiga dataset
data_all <- bind_rows(data_jan, data_feb, data_mar)
# Menyalin data untuk pembersihan
data <- data_all
# 1. Standarkan format Tanggal ke YYYY-MM-DD
data$Tanggal <- dmy(data$Tanggal) # Mengubah format tanggal dengan lubridate
# 2. Membersihkan kolom Harga dan Jumlah
# Hilangkan simbol dan teks seperti "Rp", titik, koma
data$Harga <- str_replace_all(as.character(data$Harga), "[^0-9]", "")
data$Harga <- as.numeric(data$Harga)
# Konversi kata-kata ke angka
kata_ke_angka <- c("satu" = 1, "dua" = 2, "tiga" = 3, "empat" = 4, "lima" = 5)
data$Jumlah <- recode(data$Jumlah, !!!kata_ke_angka)
data$Jumlah <- as.numeric(data$Jumlah)
# 3. Menghitung ulang nilai kolom Total
data$Total <- data$Harga * data$Jumlah
# 4. Mengganti nilai tidak valid menjadi NA
invalid_values <- c("-", "Rp", "_anonymous_")
data <- data %>%
mutate(across(where(is.character), ~replace(.x, .x %in% invalid_values, NA)))
# 5. Menghapus baris yang tidak memiliki nama produk
data <- data %>% filter(!is.na(Produk))
# Menampilkan data hasil pembersihan
cat("Jumlah baris setelah dibersihkan:", nrow(data), "\n")## Jumlah baris setelah dibersihkan: 122
## # A tibble: 6 × 9
## OrderID Tanggal Produk Kategori Harga Jumlah Total Pembeli Kota
## <dbl> <date> <chr> <chr> <dbl> <dbl> <dbl> <chr> <chr>
## 1 1001 2024-01-01 Laptop A <NA> 1.5 e7 4 6e7 Budi@ Band…
## 2 1002 2024-01-02 Tas Branded Fashion 1.5 e7 NA NA Budi@ Sura…
## 3 1003 2024-01-03 Tas Branded Aksesoris 1.5 e7 NA NA <NA> Band…
## 4 1004 2024-01-04 Kemeja <NA> 1.5 e7 2 3e7 Andi123 Band…
## 5 1006 2024-01-06 Smartphone X Fashion 1.5 e7 4 6e7 Sinta99 Band…
## 6 1007 2024-01-07 Sepatu 'Nike' Elektronik 1.20e6 NA NA <NA> Band…
library(dplyr)
library(readr)
library(stringr)
library(lubridate)
# Salin data
data <- data_all
# Konversi tanggal
data <- data %>%
mutate(Tanggal = dmy(Tanggal))
# Bersihkan kolom Harga
data <- data %>%
mutate(
Harga = str_remove_all(as.character(Harga), "[^0-9]"),
Harga = as.numeric(Harga)
)
# Konversi teks ke angka di kolom Jumlah
data <- data %>%
mutate(
Jumlah = recode(Jumlah,
"satu" = "1",
"dua" = "2",
"tiga" = "3",
"empat" = "4",
"lima" = "5",
.default = as.character(Jumlah)),
Jumlah = as.numeric(Jumlah)
)
# Hitung Total
data <- data %>%
mutate(Total = Harga * Jumlah)
# Ganti nilai invalid di kolom karakter
invalid_values <- c("-", "Rp", "anonymous")
data <- data %>%
mutate(across(where(is.character), ~replace(., . %in% invalid_values, NA)))
# Hapus baris dengan Produk kosong
data <- data %>%
filter(!is.na(Produk))
# Tampilkan hasil akhir
cat("Data setelah cleaning:\n")## Data setelah cleaning:
## # A tibble: 6 × 9
## OrderID Tanggal Produk Kategori Harga Jumlah Total Pembeli Kota
## <dbl> <date> <chr> <chr> <dbl> <dbl> <dbl> <chr> <chr>
## 1 1001 2024-01-01 Laptop A <NA> 1.5 e7 4 6 e7 Budi@ Band…
## 2 1002 2024-01-02 Tas Branded Fashion 1.5 e7 2 3 e7 Budi@ Sura…
## 3 1003 2024-01-03 Tas Branded Aksesoris 1.5 e7 3 4.50e7 _anony… Band…
## 4 1004 2024-01-04 Kemeja <NA> 1.5 e7 2 3 e7 Andi123 Band…
## 5 1006 2024-01-06 Smartphone X Fashion 1.5 e7 4 6 e7 Sinta99 Band…
## 6 1007 2024-01-07 Sepatu 'Nike' Elektronik 1.20e6 3 3.60e6 _anony… Band…
Bagian 3: Data Transformation
1. Membuat kolom baru Bulan berdasarkan tanggal transaksi.
2. Menghitung total penjualan (Total) per kategori produk.
3. Menghitung jumlah transaksi dari setiap kota.
4. Membuat ringkasan jumlah total penjualan per bulan.
library(dplyr)
library(lubridate)
# 1. Menambahkan kolom Bulan berdasarkan tanggal transaksi
bulan_map <- c("Januari", "Februari", "Maret")
data <- data %>%
mutate(Bulan = factor(month(Tanggal), levels = 1:3, labels = bulan_map))
# 2. Menghitung total penjualan per kategori produk
penjualan_per_kategori <- data %>%
group_by(Kategori) %>%
summarise(Total = sum(Total, na.rm = TRUE)) %>%
arrange(desc(Total))
# 3. Menghitung jumlah transaksi per kota
penjualan_per_kota <- data %>%
group_by(Kota) %>%
summarise(Total = sum(Total, na.rm = TRUE)) %>%
arrange(desc(Total))
# 4. Membuat ringkasan jumlah total penjualan per bulan
penjualan_per_bulan <- data %>%
group_by(Bulan) %>%
summarise(Total = sum(Total, na.rm = TRUE)) %>%
arrange(desc(Total))
# Menampilkan hasil
cat("Total Penjualan per Kategori Produk:\n")## Total Penjualan per Kategori Produk:
## # A tibble: 4 × 2
## Kategori Total
## <chr> <dbl>
## 1 Fashion 440150000
## 2 Elektronik 419350000
## 3 <NA> 393350000
## 4 Aksesoris 380850000
##
## Total Penjualan per Kota:
## # A tibble: 4 × 2
## Kota Total
## <chr> <dbl>
## 1 Bandung 583750000
## 2 Jakarta 392050000
## 3 Surabaya 384500000
## 4 <NA> 273400000
##
## Total Penjualan per Bulan:
## # A tibble: 4 × 2
## Bulan Total
## <fct> <dbl>
## 1 Februari 494400000
## 2 Januari 489150000
## 3 Maret 458950000
## 4 <NA> 191200000
Bagian 4:Data Visualization
library(ggplot2)
# 1. Visualisasi total penjualan berdasarkan kategori produk
ggplot(penjualan_per_kategori, aes(x = reorder(Kategori, Total), y = Total)) +
geom_bar(stat = "identity", fill = "#F1948A") +
coord_flip() +
labs(title = "Total Penjualan Berdasarkan Kategori Produk",
x = "Kategori Produk", y = "Total Penjualan") +
theme_minimal()# 2. Visualisasi total penjualan dari setiap kota
ggplot(penjualan_per_kota, aes(x = reorder(Kota, Total), y = Total)) +
geom_bar(stat = "identity", fill = "#D2B4DE") +
coord_flip() +
labs(title = "Total Penjualan Berdasarkan Kota",
x = "Kota", y = "Total Penjualan") +
theme_minimal()# 3. Visualisasi ringkasan penjualan bulanan
penjualan_per_bulan$Bulan <- factor(penjualan_per_bulan$Bulan,
levels = c("Januari", "Februari", "Maret"))
ggplot(penjualan_per_bulan, aes(x = Bulan, y = Total, group = 1)) +
geom_line(color = "#C39BD3", size = 1.2) +
geom_point(color = "#C39BD3", size = 3) +
labs(title = "Ringkasan Total Penjualan per Bulan",
x = "Bulan", y = "Total Penjualan") +
theme_minimal()Interpretasi
1. Data Collection:
- Menggabungkan data Januari–Maret: total 150 baris, 9 kolom.
- Tujuan: memudahkan analisis tren lintas waktu.
2. Data Cleaning:
- Menghapus simbol “Rp”, titik, dan karakter tidak valid.
- Mengubah kata seperti “dua” jadi angka.
- Tujuan: memastikan data bersih, konsisten, dan siap dianalisis.
3. Data Transformation:
- Menambahkan kolom bulan, menghitung total pembelian, dan
mengelompokkan data.
- Tujuan: mengungkap pola penjualan dari berbagai sudut.
4. Data Visualization:
Bar chart & line chart digunakan untuk memperjelas tren dan
perbandingan.
Hasil yang diperoleh:
- Penjualan tertinggi per bulan: Februari >
Januari > Maret.
- Urutan Tertinggi Kota terlaris: Bandung,
Jakarta, Surabaya.
- Urutan Tertinggi Produk paling laku: Fashion, Elektronik, Aksesoris.
Perbandingan Python vs R:
- Python unggul untuk fleksibilitas dan scripting
analitik dengan
pandasdanseaborn.
- R unggul dalam sintaks ringkas dan visualisasi
statistik via
ggplot2.
Keduanya efektif—pilihan tergantung kebutuhan dan preferensi pengguna.