1 Lọc dữ liệu

library(readxl)
## Warning: package 'readxl' was built under R version 4.4.3
library(DT)
## Warning: package 'DT' was built under R version 4.4.3
Supermarket_Transactions <- read_excel("D:/tai/Supermarket Transactions.xlsx")
## New names:
## • `` -> `...1`
datatable(Supermarket_Transactions)
## Warning in instance$preRenderHook(instance): It seems your data is too big for
## client-side DataTables. You may consider server-side processing:
## https://rstudio.github.io/DT/server.html

2 Giới thiệu các biến

names (Supermarket_Transactions)
##  [1] "...1"              "PurchaseDate"      "CustomerID"       
##  [4] "Gender"            "MaritalStatus"     "Homeowner"        
##  [7] "Children"          "AnnualIncome"      "City"             
## [10] "StateorProvince"   "Country"           "ProductFamily"    
## [13] "ProductDepartment" "ProductCategory"   "UnitsSold"        
## [16] "Revenue"

3 Lọc các dữ liệu định tính

dt <- c("Gender", "Homeowner", "MaritalStatus", "City", "StateorProvince", "Country", "ProductFamily", "ProductDepartment")

4 Tạo dữ liệu mới với các biến định tính

df_dt <- Supermarket_Transactions[,dt]

5 Lặp bảng tầng số

table(df_dt$Gender)/sum(nrow(df_dt))
## 
##         F         M 
## 0.5099936 0.4900064

Vậy trong bộ dữ liệu có 50.9993598% nữ và 49.0006402% nam

  • Biểu diễn dưới dạng biểu đồ
library(dplyr)
## Warning: package 'dplyr' was built under R version 4.4.3
## 
## 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
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.4.3
# Đếm số lượng đơn hàng theo quốc gia, tính tỷ lệ %
df_p <- df_dt %>%
  count(Gender) %>%
  mutate(percent = n / sum(n),
         label = scales::percent(percent, accuracy = 0.1))
# Vẽ pie chart
ggplot(df_p, aes(x = "", y = percent, fill = Gender)) +
  geom_col(width = 1, color = "black") +  # tạo cột cho pie chart
  coord_polar(theta = "y") +               # chuyển sang hình tròn
  geom_text(aes(label = label), 
            position = position_stack(vjust = 0.5), size = 3, color = "black") +  # label % ở giữa mỗi lát
  labs(title = "Tỷ lệ % số đơn hàng theo quốc gia") +
  scale_fill_brewer(palette = "Set3")     # màu sắc dễ nhìn

table(df_dt$ProductDepartment)/sum(nrow(df_dt))
## 
## Alcoholic Beverages         Baked Goods        Baking Goods           Beverages 
##         0.025321858         0.030229746         0.076250089         0.048367594 
##     Breakfast Foods        Canned Foods     Canned Products            Carousel 
##         0.013372217         0.069492852         0.007753041         0.004196600 
##            Checkout               Dairy                Deli                Eggs 
##         0.005832563         0.064229319         0.049719041         0.014083505 
##        Frozen Foods  Health and Hygiene           Household                Meat 
##         0.098300021         0.063518031         0.101002916         0.006330464 
##         Periodicals             Produce             Seafood         Snack Foods 
##         0.014368020         0.141830856         0.007255139         0.113806103 
##              Snacks       Starchy Foods 
##         0.025037343         0.019702682

Loại các sản phẩm Meat chiếm tỷ lệ nhỏ nhất với 0.6330464%. Ngoài ra còn nhiều món hàng khác nhau.

# Đếm số lượng và tính tỷ lệ phần trăm trên tổng số
df_t <- df_dt %>%
  count(ProductDepartment) %>%
  mutate(percent = n / sum(n))
# Vẽ biểu đồ
ggplot(df_t, aes(x = ProductDepartment, y = n, fill = ProductDepartment)) +
  geom_col(position = position_dodge(width = 0.9)) +
  geom_text(aes(label = scales::percent(percent, accuracy = 0.1)),
            position = position_dodge(width = 0.9),
            vjust = -0.5, size = 2.5) +
  labs(
    title = "Lượng mua hàng trên mỗi hàng hóa",
    x = "Hàng hóa",
    y = "Lượng mua hàng") +
  theme(
    axis.text.x = element_text(angle = 60, hjust = 1),
    legend.position = "none"  # Xóa đề mục màu 
    )

table(df_dt$ProductFamily, df_dt$Homeowner)/sum(nrow(df_dt)) 
##                 
##                           N          Y
##   Drink          0.03584892 0.05306210
##   Food           0.28615122 0.43601963
##   Non-Consumable 0.07738815 0.11152998

Dựa trên bảng tần số giữa nhóm sản phẩm (ProductFamily) và tình trạng sở hữu nhà (Homeowner), ta nhận thấy rằng thực phẩm là nhóm hàng chiếm tỷ lệ cao ở cả hai nhóm:

  • Đối với người không sở hữu nhà, thực phẩm chiếm khoảng 28.615122%.
  • Đối với người đã sở hữu nhà, thực phẩm chiếm khoảng 43.6019632%.

=> Điều này cho thấy nhu cầu về thực phẩm là rất lớn, bất kể tình trạng sở hữu nhà của người tiêu dùng.