Pada tugas SIM kali ini, Saya menggunakan mySQL dalam mengimpor data Coffee chain Ke R.Karena dalam file masih dibedakan menjadi tiga tabel yaitu facttable, location, dan production, maka saya gabungkan ketiga tabel tersebut menjadi satu agar memudahkan dalam menganalisis data tersebut. Saya membuat tabel baru bernama coffeechain di database Coffee_Chain yang berisi gabungan ketiga tabel tersebut di SQL. Untuk membuatnya, Saya menggunakan INNER JOIN dengan ProductID dan Area Code sebagai Primary Key yang query nya sebagai berikut :
CREATE TABLE COFFEECHAIN AS SELECT f.Profit, f.Margin, f.Sales, f.COGS, f.`Total Expenses`,
f.Marketing, f.Inventory, f.`Budget Profit`, f.`Budget COGS`,
f.`Budget Margin`, f.`Budget Sales`, f.`Area Code`,
f.ProductID, f. Date,
p.`Product Line`, p.`Product Type`,
p.Product, p.Type,
l.State, l.Market,
l.`Market Size`
FROM Facttable f
JOIN Product p
ON f.ProductID = p.ProductID
JOIN Location l
ON f.`Area Code` = l.`Area Code`;
library(DBI)
library(odbc)
con1 = dbConnect(odbc(),
Driver = "MySQL ODBC 8.0 ANSI Driver",
Server = "127.0.0.1",
UID = "root",
PWD = "admin123",
Port = 3306,
Database = "coffee_chain"
)
Untuk mengimpor File dari SQL ke R digunakan package DBI dan odbc, lalu saya sambungkan dengan database saya di my SQL
Dalam analisis kaki ini, saya mengambil insight dari state, budget sales, sales, budget profit,dan profit. Untuk memidahkan analisis dan visualisasi, Saya memilih insight yang hanya berada di tiga state yang saya pilih secara ramdom, yaitu:Ohio,Utah, dan Wiconsin. Jadi, Insight dari analisis ini adalah untuk membandingkan Sales terhadap budget Sales dan Profit terhadap Budget Profit dari ketiga State tersebut.
Data1<-dbGetQuery(con1,
"SELECT STATE,SALES, `BUDGET SALES`, PROFIT,`BUDGET PROFIT`
FROM COFFEECHAIN
WHERE STATE IN ('OHIO','UTAH', 'WISCONSIN')
ORDER BY STATE")
names(Data1)
## [1] "STATE" "SALES" "BUDGET SALES" "PROFIT"
## [5] "BUDGET PROFIT"
dim(Data1)
## [1] 720 5
str(Data1)
## 'data.frame': 720 obs. of 5 variables:
## $ STATE : chr "Ohio" "Ohio" "Ohio" "Ohio" ...
## $ SALES : int 140 140 150 200 130 341 80 80 210 108 ...
## $ BUDGET SALES : int 140 140 150 170 150 400 70 70 180 110 ...
## $ PROFIT : int 34 42 0 67 16 99 29 29 68 19 ...
## $ BUDGET PROFIT: int 50 50 20 60 40 140 50 50 60 40 ...
head(Data1)
## STATE SALES BUDGET SALES PROFIT BUDGET PROFIT
## 1 Ohio 140 140 34 50
## 2 Ohio 140 140 42 50
## 3 Ohio 150 150 0 20
## 4 Ohio 200 170 67 60
## 5 Ohio 130 150 16 40
## 6 Ohio 341 400 99 140
summary(Data1)
## STATE SALES BUDGET SALES PROFIT
## Length:720 Min. : 41.0 Min. : 20.0 Min. :-67.00
## Class :character 1st Qu.:106.0 1st Qu.: 90.0 1st Qu.: 16.75
## Mode :character Median :127.5 Median :120.0 Median : 34.00
## Mean :143.0 Mean :134.7 Mean : 37.81
## 3rd Qu.:167.0 3rd Qu.:170.0 3rd Qu.: 53.00
## Max. :387.0 Max. :470.0 Max. :180.00
## BUDGET PROFIT
## Min. :-30.00
## 1st Qu.: 30.00
## Median : 40.00
## Mean : 44.92
## 3rd Qu.: 60.00
## Max. :190.00
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.2.0 ✔ readr 2.2.0
## ✔ forcats 1.0.1 ✔ stringr 1.6.0
## ✔ ggplot2 4.0.2 ✔ tibble 3.3.0
## ✔ lubridate 1.9.5 ✔ tidyr 1.3.2
## ✔ purrr 1.2.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
tabel_rata_rata <- Data1 %>%
group_by(STATE) %>%
summarise(
avg_sales = mean(SALES, na.rm = TRUE),
avg_budget_sales = mean(`BUDGET SALES`, na.rm = TRUE),
avg_profit = mean(PROFIT, na.rm = TRUE),
avg_budget_profit = mean(`BUDGET PROFIT`, na.rm = TRUE)
)
tabel_rata_rata
## # A tibble: 3 × 5
## STATE avg_sales avg_budget_sales avg_profit avg_budget_profit
## <chr> <dbl> <dbl> <dbl> <dbl>
## 1 Ohio 160. 154. 49.9 55.4
## 2 Utah 123. 112. 26.9 36.4
## 3 Wisconsin 153. 145. 40.3 45.8
Dilihat dari tabel Data1, ada perbedaan kontras antara volume penjualan dan hasil keuntungan antara Sales vs Budget Sales: Rata-rata (Mean) Sales (143.0) lebih tinggi dibandingkan Budget Sales (134.7). Hali ini menunjukkan tim penjualan berhasil melampaui target yang ditetapkan secara umum.Selanjutnya, karena Data ini bersifat menceng kanan,dilihat dari nilai Mean > Median. Artinya, ada beberapa wilayah atau transaksi dengan penjualan sangat tinggi yang mendongkrak rata-rata.
Sebaliknya, Rata-rata Profit (37.81) justru lebih rendah dari Budget Profit (44.92).Meskipun penjualannya melampaui target, keuntungannya malah di bawah harapan. Ada kerugian maksimum mencapai -67.00, yang sangat kontras dengan profit maksimal 180.00.
Ohio: Rata-rata penjualan (\(159.8\)) lebih tinggi dari target (\(154.1\)). Utah: Berhasil melampaui target cukup jauh (\(122.9\) vs \(112.2\)). Wisconsin: Juga melampaui target (\(153.1\) vs \(145.4\)).
Ohio: Target profit \(55.4\), tapi Keuntungannya \(49.8\). Utah: Target profit \(36.4\), tapi Keuntungannya \(26.9\). Wisconsin: Target profit \(45.8\), tapi Keuntungannya\(40.2\).
Untuk mengeetahui apakah ada perbedaan yang signifikan dari tiga state tersebut dilakukan uji anava satu arah ## Uji Hipotesis ANAVA
anova_sales <- aov(SALES ~ STATE, data=Data1)
hasil_sales <- summary(anova_sales)
anova_profit <- aov(PROFIT ~ STATE, data=Data1)
hasil_profit <- summary(anova_profit)
p_sales <- hasil_sales[[1]]$`Pr(>F)`[1]
cat("\n=== Interpretasi ANOVA Sales ===\n")
##
## === Interpretasi ANOVA Sales ===
if (p_sales < 0.05) {
cat("p-value =", p_sales, "< 0.05 → Tolak H0\n")
cat("Artinya: Terdapat perbedaan rata-rata SALES yang signifikan antar STATE.\n")
} else {
cat("p-value =", p_sales, "≥ 0.05 → Gagal tolak H0\n")
cat("Artinya: Tidak terdapat perbedaan rata-rata SALES yang signifikan antar STATE.\n")
}
## p-value = 4.743376e-12 < 0.05 → Tolak H0
## Artinya: Terdapat perbedaan rata-rata SALES yang signifikan antar STATE.
p_profit <- hasil_profit[[1]]$`Pr(>F)`[1]
cat("\n=== Interpretasi ANOVA Profit ===\n")
##
## === Interpretasi ANOVA Profit ===
if (p_profit < 0.05) {
cat("p-value =", p_profit, "< 0.05 → Tolak H0\n")
cat("Artinya: Terdapat perbedaan rata-rata PROFIT yang signifikan antar STATE.\n")
} else {
cat("p-value =", p_profit, "≥ 0.05 → Gagal tolak H0\n")
cat("Artinya: Tidak terdapat perbedaan rata-rata PROFIT yang signifikan antar STATE.\n")
}
## p-value = 1.685406e-12 < 0.05 → Tolak H0
## Artinya: Terdapat perbedaan rata-rata PROFIT yang signifikan antar STATE.
Hasil uji ANOVA menunjukkan bahwa nilai p-value < 0.05, sehingga H0 ditolak. Hal ini berarti terdapat perbedaan rata-rata sales atau profit yang signifikan antar state (Ohio, Utah, dan Wisconsin). Dengan demikian, performa penjualan dan profit tidak merata di setiap State.
Untuk Menjelaskan perbedaan secara detail tentang Sales dan Profit Setiap State, saya menggunakan beberapa visualisasi data sebagai berikut:
library(ggplot2)
ggplot(Data1, aes(x = `BUDGET SALES`, y = SALES, color = STATE)) +
geom_point(size = 3, alpha = 0.8) +
geom_abline(slope = 1, intercept = 0, linetype="dashed", color="black") +
scale_color_manual(values = c("Ohio"="red",
"Utah"="yellow",
"Wisconsin"="blue")) +
labs(
title = "Perbandingan Sales vs Budget Sales",
subtitle = "Garis merah = target tercapai",
x = "Budget Sales",
y = "Actual Sales",
color = "Market"
)
Grafik Scatter Plot tersebut menunjukkan perbandingan antara budget sales dan actual sales pada masing-masing state. Garis merah merepresentasikan kondisi di mana realisasi penjualan sama dengan target. Berdasarkan grafik, sebagian titik berada di bawah garis, yang menunjukkan bahwa masih terdapat penjualan yang belum mencapai target. Namun, terdapat pula beberapa titik di atas garis yang mengindikasikan adanya kinerja yang melebihi target.
library(ggplot2)
library(tidyr)
library(dplyr)
# ubah ke format long
Data_long <- Data1 %>%
pivot_longer(cols = c(SALES, `BUDGET SALES`),
names_to = "type",
values_to = "value")
ggplot(Data_long, aes(x=STATE, y=value, fill=type)) +
geom_boxplot(alpha=0.7) +
scale_fill_manual(values=c("SALES"="blue",
"BUDGET SALES"="red")) +
labs(title="Perbandingan Sales vs Budget Sales",
x="State", y="Value", fill="Kategori") +
theme_minimal()
Boxplot tersebut menunjukkan distribusi sales dan budget sales pada masing-masing state. Terlihat bahwa terdapat perbedaan antara realisasi dan target, di mana pada beberapa state nilai median sales masih berada di bawah budget. Selain itu, variasi data yang cukup besar menunjukkan bahwa performa penjualan belum konsisten di setiap wilayah.
Membandingkan Actual Sales vs Budget Sales (Grafik Scatter & Box Plot biru-merah).
Akurasi Target: Pada scatter plot, sebagian besar titik berada sangat dekat dengan garis diagonal (\(y = x\)). Ini artinya apa yang dianggarkan hampir selalu mendekati kenyataan.
Ohio adalah memiliki dominasi terbesar di sini. Jangkauan penjualannya paling luas (mencapai angka 400+). Namun, box plot menunjukkan Ohio punya banyak outliers anggaran yang sangat tinggi yang belum berhasil ditembus oleh penjualan riil. sedangkan, Efisiensi Utah & Wisconsinlebih konsisten. Meskipun skalanya lebih kecil dari Ohio, median penjualan mereka (box biru) cenderung berada sedikit di atas median budget (garis hitam di dalam box merah), menunjukkan mereka sering melampaui target secara tipis tapi pasti.
library(ggplot2)
ggplot(Data1, aes(x = `BUDGET PROFIT`, y = PROFIT, color = STATE)) +
geom_point(size = 3, alpha = 0.8) +
geom_abline(slope = 1, intercept = 0, linetype="dashed", color="black") +
scale_color_manual(values = c("Ohio"="purple",
"Utah"="orange",
"Wisconsin"="green"
)) +
labs(
title = "Perbandingan Profit vs Budget Profit",
subtitle = "Garis hitam = target tercapai",
x = "Budget Profit",
y = "Actual Profit",
color = "Market"
)
Grafik Scatter Plot tersebut menunjukkan perbandingan antara budget
profit dan actual profit pada masing-masing state. Garis putus-putus
hitam merepresentasikan kondisi di mana realisasi laba (actual profit)
sama dengan target laba (budget). Berdasarkan grafik, sebagian besar
titik berada di bawah garis, yang menunjukkan bahwa masih terdapat
banyak capaian laba yang belum mencapai target, terutama terlihat pada
wilayah Utah (titik oranye) yang bahkan memiliki beberapa titik di area
negatif. Namun, terdapat pula beberapa titik di atas garis—khususnya
pada wilayah Ohio (titik ungu) dan Wisconsin (titik hijau)
library(ggplot2)
library(tidyr)
library(dplyr)
# ubah ke format long
Data_long_profit <- Data1 %>%
pivot_longer(cols = c(PROFIT, `BUDGET PROFIT`),
names_to = "type",
values_to = "value")
ggplot(Data_long_profit, aes(x=STATE, y=value, fill=type)) +
geom_boxplot(alpha=0.7) +
scale_fill_manual(values=c("PROFIT"="orange",
"BUDGET PROFIT"="green"
)) +
labs(title="Perbandingan Profit vs Budget Profit",
x="State", y="Value", fill="Kategori") +
theme_minimal()
Grafik Grouped Box Plot tersebut menunjukkan perbandingan sebaran antara
target keuntungan (budget profit) dan realisasi keuntungan (profit) pada
masing-masing state.
Membandingkan Actual Profit vs Budget Profit (Grafik Scatter & Box Plot ungu-hijau-oranye).
Korelasi Profit: Sama seperti sales, Profit memiliki korelasi positif yang kuat dengan anggaran. Namun, sebarannya lebih berantakan dibandingkan sales. Ini menunjukkan bahwa meskipun penjualan stabil, biaya operasional mungkin fluktuatif.
Pada State Utah titik-titik oranye pada scatter plot laba dan outliers bawah pada box plot profit. Artinya, Ada beberapa kejadian di mana Utah mengalami kerugian riil (profit di bawah 0), padahal anggarannya positif.
Box plot profit Ohio menunjukkan bahwa meskipun penjualannya volatil, mereka memiliki potensi profit yang sangat tinggi (terlihat dari whisker atas yang sangat panjang pada box kuning).
Secara visual, Wisconsin memiliki sebaran profit yang paling rapat. Meskipun tidak memberikan untung sebesar Ohio, wisconsin paling jarang mengalami kerugian ekstrem.
coffeechain_kombinasi <- Data1 %>%
mutate(MARGIN = (PROFIT / SALES) * 100)
ggplot(coffeechain_kombinasi, aes(x = SALES, y = PROFIT, color = STATE)) +
geom_point(aes(size = MARGIN), alpha = 0.6) +
geom_smooth(method = "lm", formula = 'y ~ x', se = FALSE, color = "black") +
scale_color_viridis_d(option = "plasma") +
theme_minimal() +
labs(title = "Hubungan Sales dan Profit",)
Grafik Scatter Plot tersebut menunjukkan hubungan antara sales
(penjualan) dan profit (laba) pada masing-masing state. Garis hitam
merepresentasikan tren linear yang menunjukkan korelasi antara kedua
variabel tersebut. Berdasarkan grafik, terlihat adanya hubungan positif
di mana secara umum peningkatan penjualan diikuti oleh peningkatan
laba.
Ukuran titik yang merepresentasikan margin memberikan informasi mengenai efisiensi operasional; titik-titik berukuran besar yang berada di atas garis tren mengindikasikan tingkat efisiensi yang tinggi di mana perusahaan mampu menghasilkan laba besar dari volume penjualan yang ada. Sebaliknya, titik-titik yang berada di bawah garis, terutama yang mendekati atau di bawah angka nol, menunjukkan kinerja yang belum optimal karena biaya operasional yang tinggi menghabiskan potensi laba.
Titik-titik biru mendominasi area kanan atas. Artinya, Ohio adalah penggerak utama volume penjualan. Sebagian besar titik biru berada di atas garis tren, artinya performa Ohio secara rata-rata lebih baik daripada standar yang telah ditetapkan.
Meskipun penjualannya tidak setinggi Ohio, titik-titik kuning berkumpul sangat rapat dan konsisten di atas garis tren. Dapat diperhatikan ukurannya Plot yang cenderung besar-besar, Ini menandakan Wisconsin memiliki manajemen biaya yang sangat bagus.Artinya, Wisconsin adalah model bisnis yang paling stabil.
Banyak titik pink yang berada di bawah garis 0 (area laba negatif).Perhatikan ada titik pink yang penjualannya mencapai 200, tapi profitnya mendekati nol atau negatif, dan ukurannya sangat kecil. Ini artinya Keuntugan yang didapat Utah tidak sebanding dengan Penghasilan. Utah kemungkinan besar terjebak dalam perang harga atau biaya operasional yang terlalu tinggi.
Berdasarkan analisis komprehensif terhadap variabel Sales dan Profit, ditemukan bahwa terdapat perbedaan performa yang signifikan secara statistik (\(p < 0.05\) pada uji ANOVA) di antara ketiga negara bagian tersebut. Berikut adalah perbandingannya:
Secara umum, seluruh wilayah berhasil melampaui target anggaran penjualan (Budget Sales), namun dengan skala yang berbeda:
Ohio merupakan pemimpin pasar dengan volume penjualan tertinggi dan jangkauan pasar paling luas, meskipun memiliki beberapa target anggaran yang terlalu ambisius (outliers atas).
Wisconsin menunjukkan performa yang sangat stabil, di mana realisasi penjualannya secara konsisten berada di atas median anggaran.
Utah memiliki volume penjualan terendah di antara ketiganya, namun tetap mampu memenuhi target minimal yang ditetapkan.
Berbeda dengan penjualan, performa laba menunjukkan adanya kendala efisiensi yang sistemik:
Wisconsin adalah wilayah yang paling sehat secara finansial karena mampu menjaga realisasi profit tetap stabil dan mendekati rencana anggaran tanpa fluktuasi yang ekstrem.
Ohio memiliki potensi profit tertinggi, namun tingkat ketidakpastiannya sangat besar (volatil). Laba di Ohio bisa sangat tinggi, namun sering kali gagal mencapai target Budget Profit yang ditetapkan.
Utah menunjukkan performa terburuk. Meskipun penjualannya mencapai target, Utah sering kali mengalami kerugian riil (profit negatif), yang mengindikasikan struktur biaya yang tidak terkontrol.
Melalui analisis korelasi, hubungan antara omzet dan laba dapat disimpulkan sebagai berikut Korelasi Positif: Secara umum, kenaikan Sales diikuti oleh kenaikan Profit. Namun, efisiensi dalam mengubah Sales menjadi Profit berbeda di tiap negara bagian.
memiliki efisiensi tertinggi.
memiliki efisiensi Sedang, tertinggi setelah Wisconsin.
memiliki efisiensi terendah daripada Ohio dan Wisconsin