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