Đọc dữ liệu

if (!require("readxl")) install.packages("readxl")
## Loading required package: readxl
if (!require("dplyr")) install.packages("dplyr")
## Loading required package: 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
if (!require("ggplot2")) install.packages("ggplot2")
## Loading required package: ggplot2
library(readxl)
library(dplyr)
library(ggplot2)
data <- read_excel("C:/Users/Nep/Downloads/Supermarket Transactions.xlsx")
## New names:
## • `` -> `...1`
glimpse(data)
## Rows: 14,059
## Columns: 16
## $ ...1              <dbl> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 1…
## $ PurchaseDate      <dttm> 2007-12-18, 2007-12-20, 2007-12-21, 2007-12-21, 200…
## $ CustomerID        <dbl> 7223, 7841, 8374, 9619, 1900, 6696, 9673, 354, 1293,…
## $ Gender            <chr> "F", "M", "F", "M", "F", "F", "M", "F", "M", "M", "F…
## $ MaritalStatus     <chr> "S", "M", "M", "M", "S", "M", "S", "M", "M", "S", "M…
## $ Homeowner         <chr> "Y", "Y", "N", "Y", "Y", "Y", "Y", "Y", "Y", "N", "N…
## $ Children          <dbl> 2, 5, 2, 3, 3, 3, 2, 2, 3, 1, 0, 1, 3, 3, 0, 3, 1, 0…
## $ AnnualIncome      <chr> "$30K - $50K", "$70K - $90K", "$50K - $70K", "$30K -…
## $ City              <chr> "Los Angeles", "Los Angeles", "Bremerton", "Portland…
## $ StateorProvince   <chr> "CA", "CA", "WA", "OR", "CA", "CA", "OR", "WA", "WA"…
## $ Country           <chr> "USA", "USA", "USA", "USA", "USA", "USA", "USA", "US…
## $ ProductFamily     <chr> "Food", "Food", "Food", "Food", "Drink", "Food", "Fo…
## $ ProductDepartment <chr> "Snack Foods", "Produce", "Snack Foods", "Snacks", "…
## $ ProductCategory   <chr> "Snack Foods", "Vegetables", "Snack Foods", "Candy",…
## $ UnitsSold         <dbl> 5, 5, 3, 4, 4, 3, 4, 6, 1, 2, 3, 5, 4, 4, 5, 5, 5, 3…
## $ Revenue           <dbl> 27.38, 14.90, 5.52, 4.44, 14.00, 4.37, 13.78, 7.34, …
phan_tich_bien_dinh_tinh <- function(df, var_name, label = NULL) {
  label <- ifelse(is.null(label), var_name, label)
  
  cat("### Biến:", label, "\n")
  
  df %>%
    group_by(.data[[var_name]]) %>%
    summarise(Frequency = n()) %>%
    arrange(desc(Frequency)) -> freq_tbl
  
  print(freq_tbl)
  
  ggplot(freq_tbl, aes(x = reorder(.data[[var_name]], -Frequency), y = Frequency)) +
    geom_bar(stat = "identity", fill = "steelblue") +
    labs(title = paste("Biểu đồ cột:", label),
         x = label, y = "Tần suất") +
    theme_minimal() +
    theme(axis.text.x = element_text(angle = 45, hjust = 1)) -> p
  
  print(p)
}

#Gender

Tỷ lệ giới tính giữa nam và nữ khá cân bằng, điều này cho thấy cả hai giới đều là khách hàng mục tiêu quan trọng.

Việc không có sự chênh lệch lớn giúp siêu thị xây dựng chiến lược marketing trung tính về giới.

phan_tich_bien_dinh_tinh(data, "Gender", "Giới tính")
## ### Biến: Giới tính 
## # A tibble: 2 × 2
##   Gender Frequency
##   <chr>      <int>
## 1 F           7170
## 2 M           6889

#MaritalStatus

Phần lớn khách hàng là người đã kết hôn, điều này có thể liên quan đến xu hướng mua sắm hộ gia đình.

Do đó, các chương trình khuyến mãi gia đình hoặc gói sản phẩm theo nhóm có thể phù hợp với phân khúc này.

phan_tich_bien_dinh_tinh(data, "MaritalStatus", "Tình trạng hôn nhân")
## ### Biến: Tình trạng hôn nhân 
## # A tibble: 2 × 2
##   MaritalStatus Frequency
##   <chr>             <int>
## 1 S                  7193
## 2 M                  6866

#Homeowner

Phần lớn khách hàng là người có nhà riêng, phản ánh mức độ ổn định tài chính và nhu cầu tiêu dùng dài hạn.

Nhóm khách này có thể quan tâm nhiều đến các mặt hàng thiết yếu và sản phẩm tiện ích cho hộ gia đình.

phan_tich_bien_dinh_tinh(data, "Homeowner", "Chủ sở hữu nhà")
## ### Biến: Chủ sở hữu nhà 
## # A tibble: 2 × 2
##   Homeowner Frequency
##   <chr>         <int>
## 1 Y              8444
## 2 N              5615

#AnnualIncome

Thu nhập của khách hàng phân bố tương đối đa dạng, với một số mức phổ biến hơn (ví dụ: $50,000 - $74,999).

Phân khúc thu nhập trung bình chiếm tỷ lệ lớn là cơ sở để điều chỉnh giá và chọn sản phẩm phù hợp.

phan_tich_bien_dinh_tinh(data, "AnnualIncome", "Thu nhập hàng năm")
## ### Biến: Thu nhập hàng năm 
## # A tibble: 8 × 2
##   AnnualIncome  Frequency
##   <chr>             <int>
## 1 $30K - $50K        4601
## 2 $10K - $30K        3090
## 3 $50K - $70K        2370
## 4 $70K - $90K        1709
## 5 $130K - $150K       760
## 6 $110K - $130K       643
## 7 $90K - $110K        613
## 8 $150K +             273

#City

Một số thành phố có số lượng khách hàng vượt trội như Chicago hoặc Seattle.

Siêu thị nên ưu tiên mở rộng chi nhánh hoặc chiến dịch quảng bá tại những khu vực có lượng khách lớn.

phan_tich_bien_dinh_tinh(data, "City", "Thành phố")
## ### Biến: Thành phố 
## # A tibble: 23 × 2
##    City          Frequency
##    <chr>             <int>
##  1 Salem              1386
##  2 Tacoma             1257
##  3 Los Angeles         926
##  4 Seattle             922
##  5 Portland            876
##  6 Spokane             875
##  7 San Diego           866
##  8 Hidalgo             845
##  9 Bremerton           834
## 10 Beverly Hills       811
## # ℹ 13 more rows

#StateorProvince

Một số bang như California và Washington có số lượng khách hàng nhiều hơn rõ rệt.

Điều này gợi ý việc phân bổ ngân sách marketing và hàng tồn kho nên ưu tiên các bang này.

phan_tich_bien_dinh_tinh(data, "StateorProvince", "Tỉnh/Bang")
## ### Biến: Tỉnh/Bang 
## # A tibble: 10 × 2
##    StateorProvince Frequency
##    <chr>               <int>
##  1 WA                   4567
##  2 CA                   2733
##  3 OR                   2262
##  4 Zacatecas            1297
##  5 DF                    815
##  6 BC                    809
##  7 Yucatan               654
##  8 Veracruz              464
##  9 Guerrero              383
## 10 Jalisco                75

#Country

Tất cả khách hàng đều đến từ cùng một quốc gia (có thể là Mỹ), do đó dữ liệu tập trung và không bị phân tán.

Điều này giúp việc phân tích hành vi tiêu dùng không cần kiểm soát thêm về khác biệt văn hoá quốc gia.

phan_tich_bien_dinh_tinh(data, "Country", "Quốc gia")
## ### Biến: Quốc gia 
## # A tibble: 3 × 2
##   Country Frequency
##   <chr>       <int>
## 1 USA          9562
## 2 Mexico       3688
## 3 Canada        809

#ProductFamily

Một vài nhóm sản phẩm chiếm ưu thế như Grocery hoặc Beverages.

Điều này phản ánh nhu cầu tiêu dùng thiết yếu và định hướng doanh thu chủ lực của siêu thị.

phan_tich_bien_dinh_tinh(data, "ProductFamily", "Nhóm sản phẩm")
## ### Biến: Nhóm sản phẩm 
## # A tibble: 3 × 2
##   ProductFamily  Frequency
##   <chr>              <int>
## 1 Food               10153
## 2 Non-Consumable      2656
## 3 Drink               1250

#ProductDepartment

Các phòng như “Food” hay “Health & Beauty” có số lượng giao dịch cao.

Đây là các danh mục cần được ưu tiên đầu tư về sản phẩm, không gian trưng bày, và khuyến mãi.

phan_tich_bien_dinh_tinh(data, "ProductDepartment", "Phòng sản phẩm")
## ### Biến: Phòng sản phẩm 
## # A tibble: 22 × 2
##    ProductDepartment  Frequency
##    <chr>                  <int>
##  1 Produce                 1994
##  2 Snack Foods             1600
##  3 Household               1420
##  4 Frozen Foods            1382
##  5 Baking Goods            1072
##  6 Canned Foods             977
##  7 Dairy                    903
##  8 Health and Hygiene       893
##  9 Deli                     699
## 10 Beverages                680
## # ℹ 12 more rows

#ProductCategory

Một số danh mục rất phổ biến như “Soft Drinks”, “Snacks”, “Dairy”.

Điều này phản ánh thói quen mua hàng thường ngày, và có thể định hướng các chương trình khách hàng thân thiết.

phan_tich_bien_dinh_tinh(data, "ProductCategory", "Danh mục sản phẩm")
## ### Biến: Danh mục sản phẩm 
## # A tibble: 45 × 2
##    ProductCategory  Frequency
##    <chr>                <int>
##  1 Vegetables            1728
##  2 Snack Foods           1600
##  3 Dairy                  903
##  4 Fruit                  765
##  5 Meat                   761
##  6 Jams and Jellies       588
##  7 Baking Goods           484
##  8 Bread                  425
##  9 Breakfast Foods        417
## 10 Canned Soup            404
## # ℹ 35 more rows