# Library untuk koneksi database dan visualisasi
library(DBI)
## Warning: package 'DBI' was built under R version 4.5.2
library(odbc)
## Warning: package 'odbc' was built under R version 4.5.2
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.5.2
library(scales)
## Warning: package 'scales' was built under R version 4.5.2

Pendahuluan

Laporan ini bertujuan untuk menampilkan distribusi nilai pesanan (order value) yang berasal dari negara-negara Nordic, yaitu Denmark, Finland, Norway, dan Sweden. Data diambil dari database classicmodels, kemudian divisualisasikan menggunakan histogram di R.

Koneksi Database Langkah pertama adalah menghubungkan R dengan database MySQL menggunakan ODBC.

con2 <- dbConnect(odbc::odbc(),
                 Driver   = "MySQL ODBC 8.0 ANSI Driver",
                 Server   = "127.0.0.1",
                 Database = "classicmodels",
                 UID      = "root",
                 PWD      = "Ochi1808",  # sesuaikan
                 Port     = 3306)

Pengambilan Data

Data diambil dengan query SQL yang menghitung total nilai pesanan dari setiap order.

query <- "
SELECT 
  o.orderNumber,
  c.country,
  SUM(od.quantityOrdered * od.priceEach) AS total_value
FROM orders o
JOIN orderdetails od ON o.orderNumber = od.orderNumber
JOIN customers c ON o.customerNumber = c.customerNumber
WHERE c.country IN ('Denmark', 'Finland', 'Norway', 'Sweden')
GROUP BY o.orderNumber, c.country;
"

data_nordic <- dbGetQuery(con2, query)

# Menampilkan data
head(data_nordic)
##   orderNumber country total_value
## 1       10103  Norway    50218.95
## 2       10158  Norway     1491.38
## 3       10309  Norway    17876.32
## 4       10325  Norway    34638.14
## 5       10112  Sweden     7674.94
## 6       10320  Sweden    16799.03

Visualisasi Histogram

Histogram digunakan untuk melihat distribusi nilai pesanan dari negara Nordic.

ggplot(data_nordic, aes(x = total_value)) +
  geom_histogram(aes(fill = after_stat(count)),
                 bins = 15,
                 color = "black") +
  stat_bin(bins = 15,
           geom = "text",
           aes(label = after_stat(count)),
           vjust = -0.5) +
  scale_fill_gradient(low = "lightblue", high = "darkblue") +
  scale_x_continuous(labels = label_dollar()) +
  scale_y_continuous(expand = expansion(c(0, 0.15))) +
  theme_minimal() +
  labs(
    title = "Distribusi Nilai Pesanan Negara Nordic",
    subtitle = "Denmark, Finland, Norway, Sweden",
    x = "Nilai Pesanan (USD)",
    y = "Frekuensi"
  ) +
  theme(legend.position = "none")

Penjelasan Proses (Jawaban Soal b)

Proses dimulai dengan membangun koneksi antara R dan database MySQL menggunakan fungsi dbConnect() dari package DBI dan odbc. Setelah koneksi berhasil, data diambil menggunakan query SQL yang menggabungkan tiga tabel yaitu orders, orderdetails, dan customers. Query tersebut menghitung total nilai pesanan dengan rumus jumlah dari perkalian quantityOrdered dan priceEach.

Selanjutnya, data difilter hanya untuk negara Nordic yaitu Denmark, Finland, Norway, dan Sweden. Hasil query kemudian disimpan dalam bentuk data frame di R.

Tahap terakhir adalah visualisasi menggunakan ggplot2 dengan grafik histogram (geom_histogram()). Histogram ini digunakan untuk melihat distribusi nilai pesanan, sehingga dapat diketahui pola penyebaran data, seperti apakah nilai pesanan cenderung kecil, besar, atau merata. Label dan format angka ditambahkan agar grafik lebih informatif dan mudah dibaca.