#1. Deskripsi Insight Data#
Pada analisis ini digunakan *Coffee Chain Dataset* dengan mengambil beberapa variabel utama yaitu **Sales, Profit, Product Line, dan Product Type**.
Insight yang dianalisis adalah:
- Hubungan antara **Sales (penjualan)** dan **Profit (keuntungan)**
- Perbandingan keuntungan berdasarkan **Product Line**
- Distribusi penjualan berdasarkan **Product Type**
Tujuan dari analisis ini adalah untuk mengetahui apakah peningkatan penjualan berpengaruh terhadap keuntungan serta mengidentifikasi kategori produk yang memiliki performa terbaik.
#IMPORT DATASET
library(readxl)
data <- read_excel("C:/Users/LENOVO/Downloads/halima/SIM_TUGAS_B_M0725080/Tugas SIM 2025B - Coffee Chain Datasets.xlsx")
head(data)
## # A tibble: 6 × 20
## `Area Code` Date Market `Market Size` Product `Product Line`
## <dbl> <dttm> <chr> <chr> <chr> <chr>
## 1 719 2012-01-01 00:00:00 Central Major Market Amaretto Beans
## 2 970 2012-01-01 00:00:00 Central Major Market Colombian Beans
## 3 970 2012-01-01 00:00:00 Central Major Market Decaf Ir… Beans
## 4 303 2012-01-01 00:00:00 Central Major Market Green Tea Leaves
## 5 303 2012-01-01 00:00:00 Central Major Market Caffe Mo… Beans
## 6 720 2012-01-01 00:00:00 Central Major Market Decaf Es… Beans
## # ℹ 14 more variables: `Product Type` <chr>, State <chr>, Type <chr>,
## # `Budget COGS` <dbl>, `Budget Margin` <dbl>, `Budget Profit` <dbl>,
## # `Budget Sales` <dbl>, COGS <dbl>, Inventory <dbl>, Margin <dbl>,
## # Marketing <dbl>, Profit <dbl>, Sales <dbl>, `Total Expenses` <dbl>
str(data)
## tibble [4,248 × 20] (S3: tbl_df/tbl/data.frame)
## $ Area Code : num [1:4248] 719 970 970 303 303 720 970 719 970 719 ...
## $ Date : POSIXct[1:4248], format: "2012-01-01" "2012-01-01" ...
## $ Market : chr [1:4248] "Central" "Central" "Central" "Central" ...
## $ Market Size : chr [1:4248] "Major Market" "Major Market" "Major Market" "Major Market" ...
## $ Product : chr [1:4248] "Amaretto" "Colombian" "Decaf Irish Cream" "Green Tea" ...
## $ Product Line : chr [1:4248] "Beans" "Beans" "Beans" "Leaves" ...
## $ Product Type : chr [1:4248] "Coffee" "Coffee" "Coffee" "Tea" ...
## $ State : chr [1:4248] "Colorado" "Colorado" "Colorado" "Colorado" ...
## $ Type : chr [1:4248] "Regular" "Regular" "Decaf" "Regular" ...
## $ Budget COGS : num [1:4248] 90 80 100 30 60 80 140 50 50 40 ...
## $ Budget Margin : num [1:4248] 130 110 140 50 90 130 160 80 70 70 ...
## $ Budget Profit : num [1:4248] 100 80 110 30 70 80 110 20 40 20 ...
## $ Budget Sales : num [1:4248] 220 190 240 80 150 210 300 130 120 110 ...
## $ COGS : num [1:4248] 89 83 95 44 54 72 170 63 60 58 ...
## $ Inventory : num [1:4248] 777 623 821 623 456 ...
## $ Margin : num [1:4248] 130 107 139 56 80 108 171 87 80 72 ...
## $ Marketing : num [1:4248] 24 27 26 14 15 23 47 57 19 22 ...
## $ Profit : num [1:4248] 94 68 101 30 54 53 99 0 33 17 ...
## $ Sales : num [1:4248] 219 190 234 100 134 180 341 150 140 130 ...
## $ Total Expenses: num [1:4248] 36 39 38 26 26 55 72 87 47 55 ...
Coffee_data <- data[, c("Sales", "Profit", "Product Line", "Product Type")]
View(Coffee_data)
set.seed(123)
data_coffee_sample <- Coffee_data[sample(nrow(Coffee_data), 15), ]
View(data_coffee_sample)
Data diimpor menggunakan read_excel() dari file Coffee Chain Datasets untuk digunakan dalam analisis.
Pengambilan sampel sebanyak *15 data* dilakukan secara acak (sample()) dengan tujuan:
- Mempermudah analisis tanpa menggunakan seluruh data
- Menghemat waktu komputasi
- Tetap merepresentasikan data secara umum
Penggunaan set.seed(123) bertujuan agar hasil sampling konsisten (reproducible).
# EKSPLORASI DATA
names(data_coffee_sample)
## [1] "Sales" "Profit" "Product Line" "Product Type"
dim(data_coffee_sample)
## [1] 15 4
str(data_coffee_sample)
## tibble [15 × 4] (S3: tbl_df/tbl/data.frame)
## $ Sales : num [1:15] 362 80 134 309 49 245 43 119 64 56 ...
## $ Profit : num [1:15] 147 -4 41 115 18 89 31 54 -12 -11 ...
## $ Product Line: chr [1:15] "Beans" "Leaves" "Beans" "Leaves" ...
## $ Product Type: chr [1:15] "Espresso" "Tea" "Coffee" "Herbal Tea" ...
head(data_coffee_sample)
## # A tibble: 6 × 4
## Sales Profit `Product Line` `Product Type`
## <dbl> <dbl> <chr> <chr>
## 1 362 147 Beans Espresso
## 2 80 -4 Leaves Tea
## 3 134 41 Beans Coffee
## 4 309 115 Leaves Herbal Tea
## 5 49 18 Beans Espresso
## 6 245 89 Beans Coffee
tail(data_coffee_sample)
## # A tibble: 6 × 4
## Sales Profit `Product Line` `Product Type`
## <dbl> <dbl> <chr> <chr>
## 1 56 -11 Leaves Tea
## 2 65 4 Leaves Herbal Tea
## 3 278 99 Beans Coffee
## 4 78 -3 Leaves Tea
## 5 56 12 Leaves Herbal Tea
## 6 202 86 Beans Coffee
summary(data_coffee_sample)
## Sales Profit Product Line Product Type
## Min. : 43.0 Min. :-12.0 Length:15 Length:15
## 1st Qu.: 60.0 1st Qu.: 0.5 Class :character Class :character
## Median : 80.0 Median : 31.0 Mode :character Mode :character
## Mean :142.7 Mean : 44.4
## 3rd Qu.:223.5 3rd Qu.: 87.5
## Max. :362.0 Max. :147.0
Eksplorasi data dilakukan sebagai langkah awal untuk memahami struktur dataset yang digunakan.
Fungsi *names()* digunakan untuk mengetahui nama-nama variabel dalam dataset.
Fungsi *dim()* digunakan untuk melihat jumlah baris dan kolom data.
Fungsi *str()* membantu mengetahui tipe data dari setiap variabel.
Fungsi *head()* digunakan untuk melihat beberapa data teratas sebagai gambaran awal.
Fungsi *tail()* digunakan untuk melihat beberapa data terakhir dari dataset.
Sedangkan *summary()* memberikan ringkasan statistik dari masing-masing variabel.
Dengan eksplorasi ini, dapat dipahami bahwa dataset memiliki variabel numerik seperti Sales dan Profit, serta variabel kategorik seperti Product Line dan Product Type.
#Fungsi Modus
mode_function <- function(x) {
ux <- unique(x)
ux[which.max(tabulate(match(x, ux)))]
}
#Analisis Statistik
Analisis statistik dilakukan untuk mengetahui karakteristik data, baik dari segi pemusatan maupun penyebaran data.
*Fungsi ini digunakan untuk mencari nilai yang paling sering muncul (modus) dalam suatu data.*
#STATISTIK SALES
mode_function(data_coffee_sample$Sales)
## [1] 56
range(data_coffee_sample$Sales)
## [1] 43 362
sd(data_coffee_sample$Sales)
## [1] 107.8277
var(data_coffee_sample$Sales)
## [1] 11626.81
Analisis ini bertujuan untuk mengetahui:
1. Nilai rata-rata penjualan (mean)
2. Nilai minimum dan maksimum (range)
3. Tingkat penyebaran data (standar deviasi dan varians)
4. Nilai yang paling sering muncul (modus)
#STATISTIK PROFIT
mode_function(data_coffee_sample$Profit)
## [1] 147
range(data_coffee_sample$Profit)
## [1] -12 147
sd(data_coffee_sample$Profit)
## [1] 51.20937
var(data_coffee_sample$Profit)
## [1] 2622.4
Analisis pada Profit dilakukan untuk memahami distribusi keuntungan, apakah stabil atau memiliki variasi yang tinggi.
#KORELASI
cor(data_coffee_sample$Sales, data_coffee_sample$Profit)
## [1] 0.951568
cor.test(data_coffee_sample$Sales, data_coffee_sample$Profit)
##
## Pearson's product-moment correlation
##
## data: data_coffee_sample$Sales and data_coffee_sample$Profit
## t = 11.16, df = 13, p-value = 4.967e-08
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.8571022 0.9841191
## sample estimates:
## cor
## 0.951568
Analisis korelasi dilakukan untuk mengetahui hubungan antara variabel Sales dan Profit.
Fungsi *cor()* digunakan untuk menghitung nilai korelasi, sedangkan *cor.test()* digunakan untuk menguji signifikansi hubungan tersebut secara statistik.
Jika nilai korelasi mendekati +1, maka hubungan bersifat positif kuat.
Jika mendekati 0, maka hubungan lemah.
Jika mendekati -1, maka hubungan negatif.
#VISUALISASI
#Visualisasi data dilakukan untuk mempermudah pemahaman pola dan hubungan antar variabel.
library(ggplot2)
# Scatter plot: hubungan antara Sales dan Profit
ggplot(data_coffee_sample, aes(x = Sales, y = Profit, color = `Product Line`)) +
geom_point(size = 3, alpha = 0.8) +
scale_color_manual(values = c("Beans" = "#42A5F5", "Leaves" = "#EC407A")) +
theme_minimal() +
labs(title = "Sales vs Profit by Product Line") +
theme(
plot.title = element_text(face = "bold", size = 14)
)

Dari grafik ini, setiap titik merepresentasikan satu data observasi.
Pola sebaran titik menunjukkan kecenderungan hubungan antara Sales dan Profit.
Jika titik-titik membentuk pola naik, maka menunjukkan hubungan positif, yaitu semakin tinggi Sales maka Profit juga meningkat.
Perbedaan warna menunjukkan kategori Product Line, sehingga dapat dibandingkan performa antar kategori.
# Boxplot: membandingkan Profit antara Beans dan Leaves
#Boxplot digunakan untuk melihat distribusi data Profit serta membandingkan nilai median, kuartil, dan kemungkinan adanya outlier antar kategori Product Line.
ggplot(data_coffee_sample, aes(x = `Product Line`, y = Profit, fill = `Product Line`)) +
geom_boxplot() +
scale_fill_manual(values = c("Beans" = "#42A5F5", "Leaves" = "#EC407A")) +
theme_minimal() +
labs(title = "Profit Distribution by Product Line") +
theme(
plot.title = element_text(face = "bold", size = 14)
)

Pada boxplot, garis di tengah kotak menunjukkan median, sedangkan kotak menunjukkan rentang kuartil (Q1–Q3).
Jika median pada satu kategori lebih tinggi, maka kategori tersebut cenderung lebih menguntungkan.
Outlier (jika ada) menunjukkan nilai ekstrem yang berbeda jauh dari data lainnya.
# Histogram: distribusi Sales berdasarkan Product Type
#Histogram digunakan untuk melihat distribusi frekuensi dari variabel Sales dan mengetahui pola penyebaran data.
ggplot(data_coffee_sample, aes(x = Sales, fill = `Product Type`)) +
geom_histogram(alpha = 0.6, bins = 10, position = "identity") +
scale_fill_manual(values = c(
"Espresso" = "#42A5F5",
"Coffee" = "#66BB6A",
"Tea" = "#FFA726",
"Herbal Tea" = "#EC407A"
)) +
theme_minimal() +
labs(title = "Sales Distribution by Product Type")

Histogram menunjukkan bagaimana data Sales tersebar dalam interval tertentu.
Jika distribusi condong ke kanan atau kiri, maka menunjukkan adanya skewness.
Perbedaan warna menunjukkan variasi distribusi berdasarkan Product Type, sehingga dapat diketahui jenis produk mana yang memiliki frekuensi penjualan lebih tinggi.
# Bar plot: total sales per product type
#Bar plot digunakan untuk membandingkan total nilai penjualan (Sales) pada setiap kategori Product Type.
ggplot(data_coffee_sample, aes(x = `Product Type`, y = Sales, fill = `Product Type`)) +
geom_bar(stat = "identity") +
scale_fill_manual(values = c(
"Espresso" = "#42A5F5",
"Coffee" = "#66BB6A",
"Tea" = "#FFA726",
"Herbal Tea" = "#EC407A"
)) +
theme_minimal() +
labs(title = "Total Sales by Product Type") +
theme(
plot.title = element_text(face = "bold", size = 14)
)

Pada grafik ini, setiap batang (bar) merepresentasikan total penjualan dari masing-masing jenis produk.
Tinggi batang menunjukkan besarnya nilai Sales, sehingga semakin tinggi batang, semakin besar kontribusi penjualan dari produk tersebut.
Melalui visualisasi ini, dapat dengan mudah dibandingkan produk mana yang memiliki penjualan tertinggi dan terendah.
Perbedaan warna membantu membedakan masing-masing kategori Product Type secara visual.
Grafik ini sangat berguna untuk mengidentifikasi produk yang paling dominan di pasar serta produk yang memiliki performa penjualan rendah.
#Interpretasi Hasil
Berdasarkan seluruh analisis statistik dan visualisasi yang telah dilakukan, diperoleh beberapa hal penting sebagai berikut:
#1. Hubungan antara Sales dan Profit
Berdasarkan scatter plot, terlihat adanya kecenderungan hubungan positif antara Sales dan Profit. Hal ini menunjukkan bahwa peningkatan nilai penjualan cenderung diikuti dengan peningkatan keuntungan. Meskipun demikian, terdapat beberapa titik data yang menyebar, yang mengindikasikan bahwa tidak semua peningkatan penjualan selalu menghasilkan keuntungan yang proporsional.
#2. Performa berdasarkan Product Line
Dari hasil boxplot, terlihat bahwa Product Line **Beans** memiliki median profit yang lebih tinggi dibandingkan dengan **Leaves**. Selain itu, distribusi profit pada kategori Beans cenderung lebih stabil. Hal ini menunjukkan bahwa produk dalam kategori Beans lebih unggul dalam menghasilkan keuntungan dibandingkan kategori Leaves.
#3. Distribusi Sales
Histogram menunjukkan bahwa distribusi Sales tidak merata dan cenderung memiliki variasi yang cukup besar. Beberapa nilai penjualan berada pada rentang tinggi, yang mengindikasikan adanya produk dengan performa sangat baik, sementara sebagian lainnya memiliki nilai yang lebih rendah.
#4. Performa berdasarkan Product Type
Berdasarkan bar plot, terlihat adanya perbedaan yang cukup signifikan dalam total penjualan antar Product Type. Beberapa jenis produk memiliki kontribusi penjualan yang jauh lebih tinggi dibandingkan yang lain. Hal ini menunjukkan bahwa preferensi konsumen tidak merata dan terdapat produk tertentu yang lebih diminati di pasar.
#5. Hasil Korelasi
Hasil analisis korelasi menunjukkan adanya hubungan antara Sales dan Profit. Jika nilai korelasi mendekati angka positif yang tinggi, maka hubungan tersebut bersifat kuat dan signifikan. Hal ini memperkuat hasil visualisasi scatter plot yang menunjukkan tren peningkatan antara kedua variabel.
#6. Insight Keseluruhan
Secara keseluruhan, dapat disimpulkan bahwa:
- Sales memiliki pengaruh terhadap Profit, meskipun tidak selalu bersifat linier sempurna
- Produk dalam kategori Beans cenderung lebih menguntungkan
- Terdapat perbedaan performa yang signifikan antar Product Type
- Tidak semua produk memiliki tingkat penjualan yang sama, sehingga strategi bisnis perlu difokuskan pada produk unggulan