# Memuat paket yang diperlukan untuk koneksi database dan visualisasi
library(DBI)
## Warning: package 'DBI' was built under R version 4.4.2
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.4.2
library(scales)
## Warning: package 'scales' was built under R version 4.4.2

Pendahuluan

Laporan ini menyajikan banyaknya item untuk tiap product scale dari database “classicmodels”. Proses ini mengintegrasikan SQL untuk pengambilan data dan R untuk visualisasi. # Koneksi Database dan Pengambilan Data Langkah pertama adalah membangun koneksi antara RStudio dan database MySQL menggunakan fungsi dbConnect()

con <- DBI::dbConnect(odbc::odbc(),
 Driver = "MySQL ODBC 8.0 ANSI Driver",
 Server = "127.0.0.1",
 Database = "classicmodels",
 UID = "root",
 PWD = "nisaaul776",
 Port = 3306)

Setelah koneksi terjalin, kita menggunakan blok kode SQL untuk mendapatkan banyaknya item untuk tiap product scale. Simpan data hasil kueri data dalam suatu data frame R.

# Mendapatkan data yang diperlukan
data1 <- dbGetQuery(con, "SELECT productScale,
 COUNT(*) AS totalItems
 FROM products
GROUP BY productScale")
data1
##   productScale totalItems
## 1         1:10          6
## 2         1:12          9
## 3         1:18         42
## 4         1:72          4
## 5         1:24         27
## 6         1:32          8
## 7         1:50          4
## 8        1:700         10

Visualisasi banyaknya item tiap product scale

Kita menggunakan library ggplot2 untuk membuat barchart. Fungsi geom_bar() digunakan untuk melihat banyaknya item tiap product scale.

# Membuat barchart untuk banyaknya item tiap product scale
ggplot(data1, aes(x = productScale, y = totalItems)) +
 geom_bar(stat = "identity", fill = "blue", alpha = 1) +
 theme_minimal() +
 labs(title = "Total Item per Skala Produk",
 x = "Skala Produk",
 y = "Total Item") +
 theme(axis.text.x = element_text(angle = 45, hjust = 1))
## Don't know how to automatically pick scale for object of type <integer64>.
## Defaulting to continuous.

# Latihan Buatlah sebuah histogram dengan label yang sesuai untuk nilai (value) dari orders yang diterima dari negara-negara Nordic (Denmark, Finland, Norway, Sweden)! Berikan penjelasan dari koneksi dan pengambilan data sampai diperoleh visualisasinya!

dt_orders <- dbGetQuery(con, "
SELECT 
    c.country,
    o.orderNumber,
    SUM(od.quantityOrdered * od.priceEach) AS order_value
FROM customers c
JOIN orders o ON c.customerNumber = o.customerNumber
JOIN orderdetails od ON o.orderNumber = od.orderNumber
WHERE c.country IN ('Denmark','Finland','Norway','Sweden')
GROUP BY o.orderNumber, c.country
")
dt_orders
##     country orderNumber order_value
## 1    Norway       10103    50218.95
## 2    Norway       10158     1491.38
## 3    Norway       10309    17876.32
## 4    Norway       10325    34638.14
## 5    Sweden       10112     7674.94
## 6    Sweden       10320    16799.03
## 7    Sweden       10326    19206.68
## 8    Sweden       10334    23014.17
## 9   Denmark       10105    53959.21
## 10  Denmark       10238    28211.70
## 11  Denmark       10256     4710.73
## 12  Denmark       10327    20564.86
## 13  Denmark       10406    21638.62
## 14 Norway         10181    55069.55
## 15 Norway         10188    29954.91
## 16 Norway         10289    12538.01
## 17  Finland       10155    37602.48
## 18  Finland       10299    34341.08
## 19  Finland       10377    23602.90
## 20  Denmark       10161    36164.46
## 21  Denmark       10314    53745.34
## 22 Norway         10284    32260.16
## 23 Norway         10301    36798.88
## 24  Finland       10151    32723.04
## 25  Finland       10239    16212.59
## 26  Finland       10373    46770.52
## 27  Finland       10141    29716.86
## 28  Finland       10247    28394.54
## 29  Finland       10363    45785.34
## 30   Sweden       10167    44167.09
## 31   Sweden       10291    48809.90
## 32   Sweden       10389    27966.54
ggplot(dt_orders, aes(x = order_value)) + 
  geom_histogram(binwidth = 5000, fill = "blue", color = "#4D2FB2", alpha = 0.8) + 
  theme_minimal() + 
  labs(title = "Distribusi Nilai Orders dari Negara Nordic", 
       x = "Nilai Order (USD)", 
       y = "Frekuensi")