# 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
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
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")