1 Soal 1 - Operasi dan Tipe Data Dasar

Buat program sederhana dalam R dan Python yang melakukan hal berikut:

  1. Menerima dua bilangan dari pengguna
  2. Menghitung dan menampilkan hasil:
  • Penjumlahan
  • Perkalian
  • Pembagian
  • Bilangan pertama pangkat bilangan kedua
  1. Menampilkan tipe data masing-masing hasil operasi
# Bilangan pertama dan kedua 
a <- 5
b <- 2

# Operasi dasar
penjumlahan <- a + b
perkalian <- a * b
pembagian <- a / b
pangkat <- a ^ b

# Menampilkan hasil
cat("Hasil Penjumlahan:", penjumlahan, "\n")
## Hasil Penjumlahan: 7
cat("Hasil Perkalian:", perkalian, "\n")
## Hasil Perkalian: 10
cat("Hasil Pembagian:", pembagian, "\n")
## Hasil Pembagian: 2.5
cat("Hasil Pangkat:", pangkat, "\n\n")
## Hasil Pangkat: 25
# Menampilkan tipe data hasil
cat("Tipe Data Penjumlahan:", typeof(penjumlahan), "\n")
## Tipe Data Penjumlahan: double
cat("Tipe Data Perkalian:", typeof(perkalian), "\n")
## Tipe Data Perkalian: double
cat("Tipe Data Pembagian:", typeof(pembagian), "\n")
## Tipe Data Pembagian: double
cat("Tipe Data Pangkat:", typeof(pangkat), "\n")
## Tipe Data Pangkat: double

2 Soal 2 - Struktur Kendali (Control Flow)

Tulislah program dalam R dan Python yang:

  1. Menerima input nilai ujian dari pengguna (0–100)
  2. Menampilkan keterangan berdasarkan ketentuan berikut:
  • Nilai ≥ 85: “Sangat Baik”
  • Nilai 70–84: “Baik”
  • Nilai 60–69: “Cukup”
  • Nilai < 60: “Perlu Perbaikan”
# Gunakan nilai tetap agar bisa di-knit (misalnya: 72)
nilai <- 72

# Struktur kendali if-else
if (nilai >= 85) {
  cat("Nilai:", nilai, "- Sangat Baik\n")
} else if (nilai >= 70) {
  cat("Nilai:", nilai, "- Baik\n")
} else if (nilai >= 60) {
  cat("Nilai:", nilai, "- Cukup\n")
} else {
  cat("Nilai:", nilai, "- Perlu Perbaikan\n")
}
## Nilai: 72 - Baik

3 Soal 3 - Fungsi dan Perulangan

Buatlah fungsi dalam R dan Python bernama kelipatan_genap(n) yang:

  1. Menerima input integer n
  2. Menggunakan loop untuk mencetak semua bilangan genap kelipatan 4 dari 1 hingga n
  3. Contoh output jika n = 20: 4, 8, 12, 16, 20
kelipatan_genap <- function(n) {
  for (i in 1:n) {
    if (i %% 2 == 0 && i %% 4 == 0) {
      cat(i, " ")
    }
  }
}

# Contoh pemanggilan fungsi
kelipatan_genap(20)
## 4  8  12  16  20

4 Soal 4 - Studi Kasus: Analisis Penjualan

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.

4.1 Bagian 1: Data Collection

  1. Menggabungkan ketiga file menjadi satu dataset.
  2. Menampilkan jumlah total baris dan kolom setelah digabung.
library(readr)
## Warning: package 'readr' was built under R version 4.4.3
library(dplyr)
## 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
# Load file CSV
jan <- read_csv("januari.csv")
## 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.
feb <- read_csv("februari.csv")
## 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.
mar <- read_csv("maret.csv")
## 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.
# Print head masing-masing data
head(jan)
## # 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…
head(feb)
## # 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…
head(mar)
## # 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…
# Gabungkan data
data <- bind_rows(jan, feb, mar)

# Tampilkan jumlah baris dan kolom
dim(data)
## [1] 150   9

4.2 Bagian 2: Data Cleaning

library(lubridate)
## 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
library(dplyr)

# Standarkan tanggal
data$Tanggal <- as.Date(data$Tanggal)

# Konversi Harga: hapus Rp, koma, spasi
data$Harga <- gsub("Rp", "", data$Harga)
data$Harga <- gsub(",", "", data$Harga)
data$Harga <- gsub(" ", "", data$Harga)
data$Harga <- as.numeric(data$Harga)
## Warning: NAs introduced by coercion
# Konversi Jumlah
data$Jumlah <- as.numeric(data$Jumlah)
## Warning: NAs introduced by coercion
# Hitung ulang kolom Total
data <- data %>% mutate(Total = Harga * Jumlah)

# Ganti nilai tidak valid di seluruh kolom karakter
data <- data %>%
  mutate(across(where(is.character), ~na_if(., "-"))) %>%
  mutate(across(where(is.character), ~na_if(., "dua"))) %>%
  mutate(across(where(is.character), ~na_if(., "_anonymous_")))

# Hapus baris dengan Produk kosong
data <- data %>% filter(!is.na(Produk))

# Tampilkan data yang sudah dibersihkan
library(knitr)
kable(head(data, 10), caption = "Tabel: 10 Data Pertama Setelah Pembersihan")
Table 1: Tabel: 10 Data Pertama Setelah Pembersihan
OrderID Tanggal Produk Kategori Harga Jumlah Total Pembeli Kota
1001 0001-01-20 Laptop A NA 1.5e+07 NA NA Budi@ Bandung
1002 0002-01-20 Tas Branded Fashion 1.5e+07 2 3.0e+07 Budi@ Surabaya
1003 0003-01-20 Tas Branded Aksesoris 1.5e+07 3 4.5e+07 NA Bandung
1004 0004-01-20 Kemeja NA 1.5e+07 NA NA Andi123 Bandung
1006 0006-01-20 Smartphone X Fashion 1.5e+07 NA NA Sinta99 Bandung
1007 0007-01-20 Sepatu ‘Nike’ Elektronik NA 3 NA NA Bandung
1009 0009-01-20 Smartphone X Elektronik 1.5e+07 NA NA NA NA
1010 0010-01-20 Sepatu ‘Nike’ Aksesoris 7.5e+02 2 1.5e+03 Sinta99 Surabaya
1012 0012-01-20 Tas Branded Aksesoris 2.5e+05 NA NA Andi123 Surabaya
1013 0013-01-20 Laptop A Aksesoris 7.5e+02 2 1.5e+03 Sinta99 Surabaya

4.3 Bagian 3: Data Transformation

# Buat kolom Bulan
data$Bulan <- month.name[month(data$Tanggal)]

# Agregasi
penjualan_per_kategori <- data %>% group_by(Kategori) %>% summarise(Total_Penjualan = sum(Total, na.rm = TRUE))
penjualan_per_kota <- data %>% count(Kota)
penjualan_per_bulan <- data %>% group_by(Bulan) %>% summarise(Total_Penjualan = sum(Total, na.rm = TRUE))

penjualan_per_kategori
## # A tibble: 4 × 2
##   Kategori   Total_Penjualan
##   <chr>                <dbl>
## 1 Aksesoris        331762000
## 2 Elektronik       167006750
## 3 Fashion          225006750
## 4 <NA>             123009750
penjualan_per_kota
## # A tibble: 4 × 2
##   Kota         n
##   <chr>    <int>
## 1 Bandung     33
## 2 Jakarta     29
## 3 Surabaya    30
## 4 <NA>        30
penjualan_per_bulan
## # A tibble: 4 × 2
##   Bulan    Total_Penjualan
##   <chr>              <dbl>
## 1 April           46258250
## 2 February       286761250
## 3 January        195757500
## 4 March          318008250

4.4 Visualisasi

library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.4.2
library(plotly)
## Warning: package 'plotly' was built under R version 4.4.3
# Grafik batang interaktif: Penjualan per kategori
p1 <- ggplot(penjualan_per_kategori, aes(x = Kategori, y = Total_Penjualan, fill = Kategori)) +
  geom_bar(stat = "identity") +
  labs(title = "Total Penjualan per Kategori", y = "Total Penjualan") +
  theme_minimal()

ggplotly(p1)
# Grafik batang interaktif: Penjualan per bulan
p2 <- ggplot(penjualan_per_bulan, aes(x = Bulan, y = Total_Penjualan, fill = Bulan)) +
  geom_col() +
  labs(title = "Total Penjualan per Bulan", y = "Total Penjualan") +
  theme_minimal()

ggplotly(p2)
# Tampilkan sebagian data
head(data)
## # A tibble: 6 × 10
##   OrderID Tanggal    Produk   Kategori  Harga Jumlah   Total Pembeli Kota  Bulan
##     <dbl> <date>     <chr>    <chr>     <dbl>  <dbl>   <dbl> <chr>   <chr> <chr>
## 1    1001 0001-01-20 Laptop A <NA>      1.5e7     NA NA      Budi@   Band… Janu…
## 2    1002 0002-01-20 Tas Bra… Fashion   1.5e7      2  3   e7 Budi@   Sura… Janu…
## 3    1003 0003-01-20 Tas Bra… Aksesor…  1.5e7      3  4.50e7 <NA>    Band… Janu…
## 4    1004 0004-01-20 Kemeja   <NA>      1.5e7     NA NA      Andi123 Band… Janu…
## 5    1006 0006-01-20 Smartph… Fashion   1.5e7     NA NA      Sinta99 Band… Janu…
## 6    1007 0007-01-20 Sepatu … Elektro… NA          3 NA      <NA>    Band… Janu…

4.5 Kesimpulan

Dari hasil analisis penjualan 3 bulan terakhir:

  • Kategori produk tertentu menunjukkan performa penjualan yang tinggi dan konsisten.
  • Kota dengan jumlah transaksi terbanyak dapat menjadi target pemasaran.
  • Tren penjualan bulanan membantu merancang strategi stok dan promosi.

Rekomendasi:

  • Fokus pada kategori dengan penjualan tinggi.
  • Tingkatkan promosi di kota dengan volume transaksi tinggi.
  • Siapkan stok lebih banyak pada bulan dengan puncak penjualan.