library(readxl)
## Warning: package 'readxl' was built under R version 4.4.3
file_path <- "C:/Users/salsa/Downloads/Chocolate Sales.xlsx"
data <- read_excel(file_path)
data
## # A tibble: 1,094 × 6
##    `Sales Person`  Country    Product Date                Amount `Boxes Shipped`
##    <chr>           <chr>      <chr>   <dttm>               <dbl>           <dbl>
##  1 Jehu Rudeforth  UK         Mint C… 2022-01-04 00:00:00   5320             180
##  2 Van Tuxwell     India      85% Da… 2022-08-01 00:00:00   7896              94
##  3 Gigi Bohling    India      Peanut… 2022-07-07 00:00:00   4501              91
##  4 Jan Morforth    Australia  Peanut… 2022-04-27 00:00:00  12726             342
##  5 Jehu Rudeforth  UK         Peanut… 2022-02-24 00:00:00  13685             184
##  6 Van Tuxwell     India      Smooth… 2022-06-06 00:00:00   5376              38
##  7 Oby Sorrel      UK         99% Da… 2022-01-25 00:00:00  13685             176
##  8 Gunar Cockshoot Australia  After … 2022-03-24 00:00:00   3080              73
##  9 Jehu Rudeforth  New Zeala… 50% Da… 2022-04-20 00:00:00   3990              59
## 10 Brien Boise     Australia  99% Da… 2022-07-04 00:00:00   2835             102
## # ℹ 1,084 more rows

Ringkasan

#Struktur Data 
str(data)
## tibble [1,094 × 6] (S3: tbl_df/tbl/data.frame)
##  $ Sales Person : chr [1:1094] "Jehu Rudeforth" "Van Tuxwell" "Gigi Bohling" "Jan Morforth" ...
##  $ Country      : chr [1:1094] "UK" "India" "India" "Australia" ...
##  $ Product      : chr [1:1094] "Mint Chip Choco" "85% Dark Bars" "Peanut Butter Cubes" "Peanut Butter Cubes" ...
##  $ Date         : POSIXct[1:1094], format: "2022-01-04" "2022-08-01" ...
##  $ Amount       : num [1:1094] 5320 7896 4501 12726 13685 ...
##  $ Boxes Shipped: num [1:1094] 180 94 91 342 184 38 176 73 59 102 ...
summary(data)
##  Sales Person         Country            Product         
##  Length:1094        Length:1094        Length:1094       
##  Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character  
##                                                          
##                                                          
##                                                          
##       Date                            Amount      Boxes Shipped  
##  Min.   :2022-01-03 00:00:00.00   Min.   :    7   Min.   :  1.0  
##  1st Qu.:2022-03-02 00:00:00.00   1st Qu.: 2390   1st Qu.: 70.0  
##  Median :2022-05-11 00:00:00.00   Median : 4868   Median :135.0  
##  Mean   :2022-05-03 09:04:56.16   Mean   : 5652   Mean   :161.8  
##  3rd Qu.:2022-07-04 00:00:00.00   3rd Qu.: 8027   3rd Qu.:228.8  
##  Max.   :2022-08-31 00:00:00.00   Max.   :22050   Max.   :709.0
# Menampilkan jumlah transaksi per negara
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
data %>%
  group_by(Country) %>%
  summarise(Jumlah_Transaksi = n()) %>%
  arrange(desc(Jumlah_Transaksi))
## # A tibble: 6 × 2
##   Country     Jumlah_Transaksi
##   <chr>                  <int>
## 1 Australia                205
## 2 India                    184
## 3 USA                      179
## 4 UK                       178
## 5 Canada                   175
## 6 New Zealand              173
# Pilih subset kolom Country dan Boxes Shipped
data_subset <- data[, c("Country", "Boxes Shipped")]

# Tampilkan beberapa baris pertama
head(data_subset)
## # A tibble: 6 × 2
##   Country   `Boxes Shipped`
##   <chr>               <dbl>
## 1 UK                    180
## 2 India                  94
## 3 India                  91
## 4 Australia             342
## 5 UK                    184
## 6 India                  38

Histogram

# Histogram untuk kolom "Amount"
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.4.3
ggplot(data, aes(x = Amount)) +
  geom_histogram(binwidth = 1000, fill = "blue", color = "black", alpha = 0.7) +
  labs(title = "Histogram of Amount", x = "Amount", y = "Frequency") +
  theme_minimal()

Interpretasi: Histogram menunjukkan Distribusi Positif Skewed dan memiliki puncak frekuensi sekitar 0-5000. Ada beberapa nilai di atas 15.000-20.000 yang memiliki frekuensi rendah dan berindikasi adanya outlier.

# Histogram untuk kolom "Boxes Shipped"
ggplot(data, aes(x = `Boxes Shipped`)) +
  geom_histogram(binwidth = 5, fill = "purple", color = "black", alpha = 0.7) +
  labs(title = "Histogram of Boxes Shipped", x = "Boxes Shipped", y = "Frequency") +
  theme_minimal()

Interpretasi: Histogram menunjukkan Distribusi Positif Skewed. Hal ini menunjukkah bahwa sebagian besar pengiriman terjadi dalam jumlah kecil hingga menengah, sementara jumlah pengiriman besar lebih jarang terjadi.Sebagian besar nilai berada di bawah 200 kotak yang dikirim, setelahnya frekuensi mulai menurun secara bertahap. Beberapa kasus pengiriman dalam jumlah besar di atas 400-600 kotak dengan frekuensi yang rendah.

# Bar chart untuk produk terlaris
ggplot(data, aes(x = Product)) +
  geom_bar(fill = "red", color = "black", alpha = 0.7) +
  labs(title = "Bar Chart of Product Sales", x = "Product", y = "Count") +
  theme_minimal() +
  coord_flip()

Interpretasi: Produk dengan penjualan tertinggi adalah 50% Dark Bites, yang memiliki jumlah tertinggi di antara semua produk. Drinking Coco juga memiliki jumlah penjualan yang tinggi, mendekati produk 50% Dark Bites. Choco Coated Almonds dan Caramel Stuffed Bars memiliki jumlah penjualan yang lebih rendah dibandingkan produk lainnya. ## Scatterplot

# Scatter plot antara "Amount" dan "Boxes Shipped"
ggplot(data, aes(x = `Boxes Shipped`, y = Amount)) +
  geom_point(color = "blue", alpha = 0.7) +
  labs(title = "Scatter Plot of Amount vs. Boxes Shipped", x = "Boxes Shipped", y = "Amount") +
  theme_minimal()

Scatter plot menunjukkan bahwa jumlah penjualan tidak selalu meningkat seiring dengan jumlah kotak yang dikirim, mengindikasikan variasi harga atau permintaan produk. Secara keseluruhan, analisis grafik mengungkap pola penjualan yang kompleks.

# Scatterplot antara jumlah penjualan dan jumlah kotak yang dikirim
ggplot(data, aes(x = `Boxes Shipped`, y = Amount)) +
  geom_point(color = "red", alpha = 0.5) +
  geom_smooth(method = "lm", color = "blue", se = FALSE) +
  labs(title = "Scatter Plot Amount vs. Boxes Shipped dengan Regresi", 
       x = "Boxes Shipped", y = "Amount") +
  theme_minimal()
## `geom_smooth()` using formula = 'y ~ x'

Interpretasi: Data terlihat cukup tersebar, dengan banyak titik yang berada di berbagai rentang nilai Amount, tidak menunjukkan pola yang jelas. Berdasarkan scatter plot ini, hubungan antara jumlah kotak yang dikirim dan pendapatan terlihat lemah atau tidak signifikan secara linear. ## Corrplot

# Hitung korelasi
korelasi <- cor(data[, c("Amount", "Boxes Shipped")], use = "complete.obs")

# Tampilkan korelasi Amount dan Boxes Shipped dengan corrplot
library(corrplot)
## Warning: package 'corrplot' was built under R version 4.4.3
## corrplot 0.95 loaded
corrplot(korelasi, method = "number", type = "upper", tl.col = "black", tl.srt = 45)

## Diagram Batang

# Untuk mengetahui TOP 3 Negara Yang 
library(ggplot2)
ggplot(data_subset, aes(x = Country)) +
  geom_bar(fill = "blue", color = "black", alpha = 0.7) +
  labs(title = "Bar Chart of Country", x = "Country", y = "Count") +
  theme_minimal()

Diagram batang menunjukkan bahwa Australia memiliki jumlah penjualan tertinggi dibandingkan negara lain, sementara negara seperti Kanada, India, New Zealand, UK, dan USA memiliki jumlah penjualan yang relatif seimbang.

# Penjualan per Produk 
library(ggplot2)
ggplot(data, aes(x = Product, y = Amount)) +
  geom_bar(stat = "identity", fill = "blue", color = "black", alpha = 0.7) +
  labs(title = "Total Sales per Product", x = "Product", y = "Total Sales") +
  theme_minimal() +
  coord_flip()

# Pengelompokan dengan x = numerik dan y = kategorik
library(ggplot2)
ggplot(data, aes(x = Product, y = Amount)) +
  geom_boxplot(fill = "cyan", color = "black", alpha = 0.7) +
  labs(title = "Boxplot of Amount by Product", x = "Product", y = "Amount") +
  theme_minimal() +
  coord_flip()

## Heatmap

# Heatmap korelasi antara jumlah penjualan dan jumlah kotak yang dikirim
library(reshape2)

cor_data <- cor(data[, c("Amount", "Boxes Shipped")], use = "complete.obs")
melted_cor_data <- melt(cor_data)

ggplot(melted_cor_data, aes(x = Var1, y = Var2, fill = value)) +
  geom_tile() +
  scale_fill_gradient2(low = "red", high = "blue", mid = "white", midpoint = 0) +
  labs(title = "Heatmap Korelasi", x = "", y = "") +
  theme_minimal()

Interpretasi: Korelasi mendekati 1 berarti kedua variabel memiliki hubungan linier positif yang kuat. Heatmap ini mengindikasikan bahwa jumlah kotak yang dikirim (Boxes Shipped) sangat berkorelasi positif dengan jumlah penjualan (Amount), yang berarti semakin banyak pengiriman, semakin besar pendapatan yang diperoleh. ## Density Penduga Kernel

# Plot estimasi densitas kernel dengan berbagai jenis kernel
par(mfrow = c(2, 3)) # Mengatur tampilan menjadi 2 baris x 3 kolom

plot(density(data$Amount, kernel = "gaussian", bw = .2), lwd = 2, type = "l", main = "Gaussian")
plot(density(data$Amount, kernel = "epanechnikov", bw = .2), lwd = 2, type = "l", main = "Epanechnikov")
plot(density(data$Amount, kernel = "triangular", bw = .2), lwd = 2, type = "l", main = "Triangular")
plot(density(data$Amount, kernel = "biweight", bw = .2), lwd = 2, type = "l", main = "Biweight")
plot(density(data$Amount, kernel = "cosine", bw = .2), lwd = 2, type = "l", main = "Cosine")
plot(density(data$Amount, kernel = "optcosine", bw = .2), lwd = 2, type = "l", main = "Optcosine")

Plot kepadatan menunjukkan distribusi data menggunakan berbagai kernel, yaitu Gaussian, Epanechnikov, Triangular, Biweight, dan Cosine, dengan bandwidth yang sama sebesar 0.2. Semua metode menunjukkan pola distribusi yang mirip, dengan puncak pada nilai rendah dan penurunan kepadatan seiring meningkatnya nilai.