library(readr)
## Warning: package 'readr' was built under R version 4.3.3
library(ggplot2)
library(dplyr)
## Warning: package 'dplyr' was built under R version 4.3.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(skimr)
library(psych)
## Warning: package 'psych' was built under R version 4.3.3
##
## Attaching package: 'psych'
## The following objects are masked from 'package:ggplot2':
##
## %+%, alpha
library(csv)
## Warning: package 'csv' was built under R version 4.3.3
d <- read.csv("C:/Users/ASUS/Downloads/Supermarket Transactions.csv", header = T)
names(d)
## [1] "X" "PurchaseDate" "CustomerID"
## [4] "Gender" "MaritalStatus" "Homeowner"
## [7] "Children" "AnnualIncome" "City"
## [10] "StateorProvince" "Country" "ProductFamily"
## [13] "ProductDepartment" "ProductCategory" "UnitsSold"
## [16] "Revenue"
Tên biến | Ý nghĩa |
---|---|
X | Ngày mua hàng (định dạng YYYY-MM-DD ). |
CustomerID | Mã định danh duy nhất cho mỗi khách hàng. |
Gender | Giới tính của khách hàng (M = Male, F =
Female). |
MaritalStatus | Tình trạng hôn nhân (S = Single, M =
Married). |
Homeowner | Khách hàng có sở hữu nhà hay không (Y = Yes,
N = No). |
Children | Số lượng con nhỏ trong gia đình (số nguyên). |
AnnualIncome | Khoảng thu nhập hàng năm (ví dụ <$25K ,
$25K–$50K , …). |
City | Thành phố sinh sống. |
StateorProvince | Bang hoặc tỉnh tương ứng với thành phố. |
Country | Quốc gia nơi giao dịch diễn ra. |
ProductFamily | Nhóm sản phẩm cấp cao (ví dụ Food, Drink, …). |
ProductDepartment | Bộ phận sản phẩm trong nhóm (ví dụ Beverages, Snack Foods, …). |
ProductCategory | Hạng mục sản phẩm cụ thể (ví dụ Carbonated Beverages, Candy, …). |
UnitsSold | Số lượng đơn vị bán ra trong mỗi giao dịch. |
Revenue | Doanh thu thu về từ giao dịch (đơn vị tiền tệ, ví dụ USD). |
dim(d)
## [1] 14059 16
str(d)
## 'data.frame': 14059 obs. of 16 variables:
## $ X : int 1 2 3 4 5 6 7 8 9 10 ...
## $ PurchaseDate : chr "2007-12-18" "2007-12-20" "2007-12-21" "2007-12-21" ...
## $ CustomerID : int 7223 7841 8374 9619 1900 6696 9673 354 1293 7938 ...
## $ Gender : chr "F" "M" "F" "M" ...
## $ MaritalStatus : chr "S" "M" "M" "M" ...
## $ Homeowner : chr "Y" "Y" "N" "Y" ...
## $ Children : int 2 5 2 3 3 3 2 2 3 1 ...
## $ AnnualIncome : chr "$30K - $50K" "$70K - $90K" "$50K - $70K" "$30K - $50K" ...
## $ City : chr "Los Angeles" "Los Angeles" "Bremerton" "Portland" ...
## $ StateorProvince : chr "CA" "CA" "WA" "OR" ...
## $ Country : chr "USA" "USA" "USA" "USA" ...
## $ ProductFamily : chr "Food" "Food" "Food" "Food" ...
## $ ProductDepartment: chr "Snack Foods" "Produce" "Snack Foods" "Snacks" ...
## $ ProductCategory : chr "Snack Foods" "Vegetables" "Snack Foods" "Candy" ...
## $ UnitsSold : int 5 5 3 4 4 3 4 6 1 2 ...
## $ Revenue : num 27.38 14.9 5.52 4.44 14 ...
dldt <- c("Gender", "MaritalStatus", "Homeowner","City", "StateorProvince", "Country", "ProductFamily", "ProductDepartment", "ProductCategory","AnnualIncome")
dldt
## [1] "Gender" "MaritalStatus" "Homeowner"
## [4] "City" "StateorProvince" "Country"
## [7] "ProductFamily" "ProductDepartment" "ProductCategory"
## [10] "AnnualIncome"
dt <- d[, dldt]
str(dt)
## 'data.frame': 14059 obs. of 10 variables:
## $ Gender : chr "F" "M" "F" "M" ...
## $ MaritalStatus : chr "S" "M" "M" "M" ...
## $ Homeowner : chr "Y" "Y" "N" "Y" ...
## $ City : chr "Los Angeles" "Los Angeles" "Bremerton" "Portland" ...
## $ StateorProvince : chr "CA" "CA" "WA" "OR" ...
## $ Country : chr "USA" "USA" "USA" "USA" ...
## $ ProductFamily : chr "Food" "Food" "Food" "Food" ...
## $ ProductDepartment: chr "Snack Foods" "Produce" "Snack Foods" "Snacks" ...
## $ ProductCategory : chr "Snack Foods" "Vegetables" "Snack Foods" "Candy" ...
## $ AnnualIncome : chr "$30K - $50K" "$70K - $90K" "$50K - $70K" "$30K - $50K" ...
head(dt)
## Gender MaritalStatus Homeowner City StateorProvince Country
## 1 F S Y Los Angeles CA USA
## 2 M M Y Los Angeles CA USA
## 3 F M N Bremerton WA USA
## 4 M M Y Portland OR USA
## 5 F S Y Beverly Hills CA USA
## 6 F M Y Beverly Hills CA USA
## ProductFamily ProductDepartment ProductCategory AnnualIncome
## 1 Food Snack Foods Snack Foods $30K - $50K
## 2 Food Produce Vegetables $70K - $90K
## 3 Food Snack Foods Snack Foods $50K - $70K
## 4 Food Snacks Candy $30K - $50K
## 5 Drink Beverages Carbonated Beverages $130K - $150K
## 6 Food Deli Side Dishes $10K - $30K
tail(dt)
## Gender MaritalStatus Homeowner City StateorProvince Country
## 14054 F M N Yakima WA USA
## 14055 F M Y Bremerton WA USA
## 14056 F M Y Walla Walla WA USA
## 14057 M S Y Portland OR USA
## 14058 F S N Spokane WA USA
## 14059 M S N Portland OR USA
## ProductFamily ProductDepartment ProductCategory AnnualIncome
## 14054 Non-Consumable Household Paper Products $10K - $30K
## 14055 Food Baking Goods Baking Goods $10K - $30K
## 14056 Food Frozen Foods Vegetables $10K - $30K
## 14057 Drink Beverages Pure Juice Beverages $30K - $50K
## 14058 Drink Dairy Dairy $50K - $70K
## 14059 Non-Consumable Household Electrical $50K - $70K
any(is.na(dt))
## [1] FALSE
Vậy bộ dữ liệu không có giá trị thiếu
dt <- data.frame(lapply(dt, as.factor))
# Kiểm tra kiểu dữ liệu của từng biến trong dldt
sapply(dt, class)
## Gender MaritalStatus Homeowner City
## "factor" "factor" "factor" "factor"
## StateorProvince Country ProductFamily ProductDepartment
## "factor" "factor" "factor" "factor"
## ProductCategory AnnualIncome
## "factor" "factor"
Bảng tần số
#Lập bảng tần số biến Gender
tanso_gender <- table(dt$Gender)
tanso_gender
##
## F M
## 7170 6889
Biểu đồ
# Vẽ biểu đồ cột cho bảng tần số Gender
barplot(
tanso_gender,
main = "Tần số theo giới tính",
xlab = "Giới tính",
ylab = "Số quan sát",
las = 1,
col = c("blue", "tomato"),
border = "white")
Bảng tần suất
#Lập bảng tần suất của biến Gender
tansuat_gender <- tanso_gender/sum(nrow(dt))
tansuat_gender
##
## F M
## 0.5099936 0.4900064
Biểu đồ
# Màu cho từng lát
cols <- c("pink", "green")
# Nhãn phần trăm
nhangender <- paste0(round(tansuat_gender * 100, 1), "%")
# Vẽ pie chart không nhãn
pie(
tansuat_gender,
labels = NA, # ẩn nhãn ngay trên lát
main = "Tần suất theo giới tính",
col = cols,
border = "white"
)
# Thêm legend bên ngoài góc phải
legend(
x = "topright",
legend = paste(names(tansuat_gender), nhangender),
fill = cols,
)
Nhận xét:
counts <- table(dt$Gender)
diff_count <- abs(counts["F"] - counts["M"])
Vậy trong bộ dữ liệu này có 50.9993598 % nữ và 49.0006402% nam.
Trong bộ dữ liệu, số lượng nữ là 7170, số lượng nam là
Bảng tần số
#Lập bảng tần số biến Homeowner
tanso_homeowner <- table(dt$Homeowner)
tanso_homeowner
##
## N Y
## 5615 8444
Biểu đồ
barplot(
tanso_homeowner,
main = "tần số biến khách hàng có sở hửu nhà",
xlab = "sỡ hữu nhà",
ylab = "số lượng",
las = 1,
col = c("orange","purple"),
border = "white"
)
Bảng tần suất
#Lập bảng tần suất của biến Homeowner
tansuat_homeowner <- tanso_homeowner/sum(nrow(dt))
tansuat_homeowner
##
## N Y
## 0.3993883 0.6006117
Biểu đồ
# màu cho từng lát
cols <- c("lightblue","lightpink")
# nhãn phần trăm
nhanhomeowner <- paste0(round(tansuat_homeowner*100,1),"%")
# vẽ pie chart không nhãn
pie(
tansuat_homeowner,
labels = NA,
main = "tần số biến khách hàng có sở hửu nhà",
col = cols,
border = "white")
# thêm legend bên ngoài góc phải
legend(
x = "topright",
legend = paste(names(tansuat_homeowner),nhanhomeowner),
fill = cols
)
Nhận xét:
counts_homeowner <- table(dt$Homeowner)
diff_homeowner <- abs(counts_homeowner["Y"] - counts_homeowner["N"])
Vậy trong bộ dữ liệu này có 39.9388292 % không có nhà và 60.0611708% có nhà.
Số lượng người sở hữu nhà là 8444, số lượng người không sở hữu là 5615.
Sự chênh lệch về số lượng giữa hai nhóm là 2829 người, nghĩa là số người có nhà nhiều hơn khá đáng kể so với số người không có nhà.
Bảng tần số
#Lập bảng tần số của biến MaritalStatus
tanso_maritalStatus <- table(dt$MaritalStatus)
tanso_maritalStatus
##
## M S
## 6866 7193
Biểu đồ
# Vẽ biểu đồ cột cho MaritalStatus
barplot(
tanso_maritalStatus,
main = "Tần số biến tình trạng hôn nhân",
xlab = "tình trạng hôn nhân",
ylab = "Số quan sát",
las = 1,
col = c("yellow", "green"),
border = "white"
)
Bảng tần suất
#Lập bảng tần suất của biến MaritalStatus
tansuat_maritalStatus <- tanso_maritalStatus/sum(nrow(dt))
tansuat_maritalStatus
##
## M S
## 0.4883704 0.5116296
Biểu đồ
# Nhãn phần trăm
nhanmaritalStatus <- paste0( round(tansuat_maritalStatus * 100, 1), "%")
# Vẽ pie chart ẩn nhãn
pie(
tansuat_maritalStatus,
labels = NA,
main = "Tần suất biến MaritalStatus",
col = rainbow(length(nhanmaritalStatus)),
border = "white")
# Thêm legend bên ngoài
legend(
x ="topright",
legend = paste(names(tansuat_maritalStatus),nhanmaritalStatus),
fill = rainbow(length(nhanmaritalStatus))
)
Nhận xét:
# Đếm số người kết hôn (M) và độc thân (S)
ms_counts <- table(dt$MaritalStatus)
# Chênh lệch về số lượng giữa hai nhóm
ms_diff <- abs(ms_counts["M"] - ms_counts["S"])
Vậy trong bộ dữ liệu này có 48.8370439 % đã kết hôn và 51.1629561% độc thân.
Trong bộ dữ liệu này có 6866 người đã kết hôn và 7193 người độc thân. Nhóm kết hôn nhiều hơn nhóm độc thân 327 người.
Bảng tần số
# Lập bảng tần số biến City
tanso_city <- table(dt$City)
# Sắp xếp giảm dần để xem các thành phố phổ biến nhất
tanso_city <- sort(tanso_city, decreasing = TRUE)
# Hiển thị toàn bộ bảng tần số
tanso_city
##
## Salem Tacoma Los Angeles Seattle Portland
## 1386 1257 926 922 876
## Spokane San Diego Hidalgo Bremerton Beverly Hills
## 875 866 845 834 811
## Merida Vancouver San Andres Orizaba Camacho
## 654 633 621 464 452
## Acapulco Yakima Mexico City Victoria Walla Walla
## 383 376 194 176 160
## Bellingham San Francisco Guadalajara
## 143 130 75
Biểu đồ
barplot(
tanso_city,
main = "Tần số biến thành phố",
cex.names = 0.4,
xlab = "Số quan sát",
ylab = "Thành phố",
las = 1, # xoay nhãn trục y ngang
col = "steelblue",
border = "white",
horiz = TRUE # vẽ thanh ngang để đọc nhãn dễ hơn
)
Bảng tần suất
tansuat_city <- tanso_city/sum(nrow(dt))
tansuat_city
##
## Salem Tacoma Los Angeles Seattle Portland
## 0.098584537 0.089408920 0.065865282 0.065580767 0.062308841
## Spokane San Diego Hidalgo Bremerton Beverly Hills
## 0.062237712 0.061597553 0.060103848 0.059321431 0.057685468
## Merida Vancouver San Andres Orizaba Camacho
## 0.046518245 0.045024539 0.044170994 0.033003770 0.032150224
## Acapulco Yakima Mexico City Victoria Walla Walla
## 0.027242336 0.026744434 0.013798990 0.012518671 0.011380610
## Bellingham San Francisco Guadalajara
## 0.010171420 0.009246746 0.005334661
Biểu đồ
# Màu cho từng lát
cols <- rainbow(length(tansuat_city))
# Nhãn phần trăm
nhancity <- paste0( round(tansuat_city * 100, 1), "%")
# Vẽ pie chart ẩn nhãn
pie(
tansuat_city,
labels = NA,
main = "Tần suất biến city",
col = cols,
border = "white")
# Thêm legend bên ngoài
legend(
x ="topright",
legend = paste(names(tansuat_city),nhancity),
fill = cols,
bty = "n", # bỏ viền
cex = 0.5, # thu nhỏ chữ
ncol = 2, # chia thành 2 cột
x.intersp = 0.5, # giãn khoảng cách chữ–ký hiệu ngang
y.intersp = 0.7 # giãn khoảng cách giữa các dòng
)
Nhận xét:
Trong bộ dữ liệu này, thành phố có tỷ lệ giao dịch cao nhất là Salem với khoảng 9.86%, tiếp theo là Tacoma (8.94%), Los Angeles (6.59%) và Seattle (6.56%).
Các thành phố nhỏ hơn như Hidalgo (6.01%) hoặc Guadalajara (0.53%) có tỷ lệ thấp hơn nhiều.
Điều này cho thấy giao dịch chủ yếu tập trung ở một số thành phố lớn với dân số hoặc hoạt động kinh tế cao hơn. Các thành phố nhỏ hơn đóng góp ít hơn vào tổng số giao dịch, có thể do quy mô thị trường nhỏ hoặc mức độ phổ biến của sản phẩm thấp.
Ngoài ra, việc phân bố này cũng có thể phản ánh chiến lược tiếp thị hoặc kênh phân phối mà siêu thị đang tập trung vào các khu vực đô thị lớn.
Bảng tần số
#Lập bảng tần số của biến StateorProvince
tanso_stateorProvince <- table(dt$StateorProvince)
tanso_stateorProvince
##
## BC CA DF Guerrero Jalisco OR Veracruz WA
## 809 2733 815 383 75 2262 464 4567
## Yucatan Zacatecas
## 654 1297
Biểu đồ
barplot(
tanso_stateorProvince,
main = "Tần số biến bang hoặc tỉnh",
cex.names = 0.4,
xlab = "Số quan sát",
ylab = "bang hoặc tỉnh",
las = 1, # xoay nhãn trục y ngang
col = "green",
border = "white",
horiz = TRUE # vẽ thanh ngang để đọc nhãn dễ hơn
)
Bảng tần suất
#Lập bảng tần suất của biến StateorProvince
tansuat_stateorProvince <- tanso_stateorProvince/sum(nrow(dt))
tansuat_stateorProvince
##
## BC CA DF Guerrero Jalisco OR
## 0.057543211 0.194395049 0.057969984 0.027242336 0.005334661 0.160893378
## Veracruz WA Yucatan Zacatecas
## 0.033003770 0.324845295 0.046518245 0.092254072
Đồ thị
# Màu cho từng lát
cols <- rainbow(length(tansuat_stateorProvince))
# Nhãn phần trăm
nhanstateorProvince <- paste0( round(tansuat_stateorProvince * 100, 1), "%")
# Vẽ pie chart ẩn nhãn
pie(
tansuat_stateorProvince,
labels = NA,
main = "Tần suất biến bang hoặc tỉnh",
col = cols,
border = "white")
# Thêm legend bên ngoài
legend(
x ="topright",
legend = paste(names(tansuat_stateorProvince),nhanstateorProvince),
fill = cols,
bty = "n", # bỏ viền
cex = 0.5, # thu nhỏ chữ
ncol = 2, # chia thành 2 cột
)
Nhận xét: Trong bộ dữ liệu này, bang hoặc tỉnh có tỷ lệ giao dịch lớn nhất là WA với khoảng 32.48%, tiếp theo là CA (19.44%) và OR (16.09%). Các bang như Jalisco (0.53%) và Guerrero (2.72%) chiếm tỷ lệ thấp hơn. Như vậy, dữ liệu cho thấy sự tập trung giao dịch cao ở một số bang chính.
Bảng tần số
#Lập bảng tần số của biến Country
tanso_country <- table(dt$Country)
tanso_country
##
## Canada Mexico USA
## 809 3688 9562
Biểu đồ
barplot(
tanso_country,
main = "tần số biến quốc gia",
xlab = "quốc gia",
ylab = "số lượng",
las = 1,
col = c("brown","orange","pink"),
border = "white"
)
Bảng tần suất
#Lập bảng tần suất của biến Country
tansuat_country <- tanso_country/sum(nrow(dt))
tansuat_country
##
## Canada Mexico USA
## 0.05754321 0.26232307 0.68013372
Biểu đồ
# Nhãn phần trăm
nhancountry <- paste0( round(tansuat_country * 100, 1), "%")
# Vẽ pie chart ẩn nhãn
pie(
tansuat_country,
labels = NA,
main = "Tần suất biến quốc gia",
col = rainbow(length(nhancountry)),
border = "white")
# Thêm legend bên ngoài
legend(
x ="topright",
legend = paste(names(tansuat_country),nhancountry),
fill = rainbow(length(nhancountry)),
bty ="n"
)
Nhận xét:
# Đếm số bản ghi theo quốc gia
cty_counts <- table(dt$Country)
# Chênh lệch về số lượng giữa quốc gia đông nhất và ít nhất
cty_diff <- max(cty_counts) - min(cty_counts)
Vậy trong bộ dữ liệu này có 5.7543211 % ở Canada, 26.2323067% ở Mexico và 68.0133722% ở USA.
Quốc gia đông nhất có 9562, quốc gia ít nhất có 809.
Sự chênh lệch giữa hai quốc gia này là 8753 người.
Bảng tần số
#Lập bảng tần số của biến ProductFamily
tanso_productFamily <- table(dt$ProductFamily)
tanso_productFamily
##
## Drink Food Non-Consumable
## 1250 10153 2656
Biểu đồ
barplot(
tanso_productFamily,
main = "tần số biến nhóm sản phẩm",
xlab = "nhóm sản phẩm",
ylab = "số lượng",
las = 1,
col = c("yellow","purple","pink"),
border = "white"
)
Bảng tần suất
#Lập bảng tần suất của biến ProductFamily
tansuat_productFamily <- tanso_productFamily/sum(nrow(dt))
tansuat_productFamily
##
## Drink Food Non-Consumable
## 0.08891102 0.72217085 0.18891813
Biểu đồ
cols <- c("lightblue","lightpink","lightgreen")
# Nhãn phần trăm
nhanproductFamily <- paste0( round(tansuat_productFamily * 100, 1), "%")
# Vẽ pie chart ẩn nhãn
pie(
tansuat_productFamily,
labels = NA,
main = "Tần suất biến nhóm sản phẩm",
col = cols,
border = "white")
# Thêm legend bên ngoài
legend(
x ="topright",
legend = paste(names(tansuat_productFamily),nhanproductFamily),
fill = cols,
)
Nhận xét:
Bảng tần số
# Lập bảng tần số
tanso_productDepartment <- table(dt$ProductDepartment)
tanso_productDepartment
##
## Alcoholic Beverages Baked Goods Baking Goods Beverages
## 356 425 1072 680
## Breakfast Foods Canned Foods Canned Products Carousel
## 188 977 109 59
## Checkout Dairy Deli Eggs
## 82 903 699 198
## Frozen Foods Health and Hygiene Household Meat
## 1382 893 1420 89
## Periodicals Produce Seafood Snack Foods
## 202 1994 102 1600
## Snacks Starchy Foods
## 352 277
Biểu đồ
barplot(
tanso_productDepartment,
main = "Tần số biến bộ phận sản phẩm trong nhóm",
cex.names = 0.4,
xlab = "Số quan sát",
ylab = "",
las = 1, # xoay nhãn trục y ngang
col = "lightblue",
border = "white",
horiz = TRUE # vẽ thanh ngang để đọc nhãn dễ hơn
)
Bảng tần suất
tansuat_productDepartment <-tanso_productDepartment/sum(nrow(dt))
tansuat_productDepartment
##
## 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
Nhận xét:
Bảng tần số
tanso_productCategory <- table(dt$ProductCategory)
tanso_productCategory
##
## Baking Goods Bathroom Products Beer and Wine
## 484 365 356
## Bread Breakfast Foods Candles
## 425 417 45
## Candy Canned Anchovies Canned Clams
## 352 44 53
## Canned Oysters Canned Sardines Canned Shrimp
## 35 40 38
## Canned Soup Canned Tuna Carbonated Beverages
## 404 87 154
## Cleaning Supplies Cold Remedies Dairy
## 189 93 903
## Decongestants Drinks Eggs
## 85 135 198
## Electrical Frozen Desserts Frozen Entrees
## 355 323 118
## Fruit Hardware Hot Beverages
## 765 129 226
## Hygiene Jams and Jellies Kitchen Products
## 197 588 217
## Magazines Meat Miscellaneous
## 202 761 42
## Packaged Vegetables Pain Relievers Paper Products
## 48 192 345
## Pizza Plastic Products Pure Juice Beverages
## 194 141 165
## Seafood Side Dishes Snack Foods
## 102 153 1600
## Specialty Starchy Foods Vegetables
## 289 277 1728
Biểu đồ
barplot(
tanso_productCategory,
main = "Tần số biến hạng mục sản phẩm cụ thể",
cex.names = 0.4,
xlab = "Số quan sát",
ylab = "",
las = 1, # xoay nhãn trục y ngang
col = "lightpink",
border = "white",
horiz = TRUE # vẽ thanh ngang để đọc nhãn dễ hơn
)
Bảng tần suất
tansuat_productCategory <- tanso_productCategory/sum(nrow(dt))
tansuat_productCategory
##
## Baking Goods Bathroom Products Beer and Wine
## 0.034426346 0.025962017 0.025321858
## Bread Breakfast Foods Candles
## 0.030229746 0.029660716 0.003200797
## Candy Canned Anchovies Canned Clams
## 0.025037343 0.003129668 0.003769827
## Canned Oysters Canned Sardines Canned Shrimp
## 0.002489508 0.002845153 0.002702895
## Canned Soup Canned Tuna Carbonated Beverages
## 0.028736041 0.006188207 0.010953837
## Cleaning Supplies Cold Remedies Dairy
## 0.013443346 0.006614980 0.064229319
## Decongestants Drinks Eggs
## 0.006045949 0.009602390 0.014083505
## Electrical Frozen Desserts Frozen Entrees
## 0.025250729 0.022974607 0.008393200
## Fruit Hardware Hot Beverages
## 0.054413543 0.009175617 0.016075112
## Hygiene Jams and Jellies Kitchen Products
## 0.014012376 0.041823743 0.015434953
## Magazines Meat Miscellaneous
## 0.014368020 0.054129028 0.002987410
## Packaged Vegetables Pain Relievers Paper Products
## 0.003414183 0.013656732 0.024539441
## Pizza Plastic Products Pure Juice Beverages
## 0.013798990 0.010029163 0.011736254
## Seafood Side Dishes Snack Foods
## 0.007255139 0.010882709 0.113806103
## Specialty Starchy Foods Vegetables
## 0.020556227 0.019702682 0.122910591
Nhận xét:
Bảng tần số
# Bảng tần suất cho AnnualIncome
tanso_annualIncome <- table(dt$AnnualIncome)
tanso_annualIncome
##
## $10K - $30K $110K - $130K $130K - $150K $150K + $30K - $50K
## 3090 643 760 273 4601
## $50K - $70K $70K - $90K $90K - $110K
## 2370 1709 613
Biểu đồ
barplot(
tanso_annualIncome,
main = "Tần số theo Thu nhập",
cex.names = 0.4,
xlab = "AnnualIncome",
ylab = "số thu nhập",
las = 1, # xoay nhãn trục y ngang
col = "lightblue",
border = "white",
horiz = TRUE # vẽ thanh ngang để đọc nhãn dễ hơn
)
Bảng tần suất
tansuat_annualIncome <- tanso_annualIncome/sum(nrow(dt))
tansuat_annualIncome
##
## $10K - $30K $110K - $130K $130K - $150K $150K + $30K - $50K
## 0.21978804 0.04573583 0.05405790 0.01941817 0.32726367
## $50K - $70K $70K - $90K $90K - $110K
## 0.16857529 0.12155914 0.04360196
Biểu đồ
# Màu cho từng lát
cols <- rainbow(length(tansuat_annualIncome))
# Nhãn phần trăm
nhanannualIncome <- paste0( round(tansuat_annualIncome * 100, 1), "%")
# Vẽ pie chart ẩn nhãn
pie(
tansuat_annualIncome,
labels = NA,
main = "Tần suất biến thu nhập",
col = cols,
border = "white")
# Thêm legend bên ngoài
legend(
x ="topright",
legend = paste(names(tansuat_annualIncome),nhanannualIncome),
fill = cols,
bty = "n", # bỏ viền
cex = 0.5, # thu nhỏ chữ
ncol = 2, # chia thành 2 cột
x.intersp = 0.5, # giãn khoảng cách chữ–ký hiệu ngang
y.intersp = 0.7 # giãn khoảng cách giữa các dòng
)
Nhận xét:
Sự phân bố thu nhập không đều phản ánh cơ cấu khách hàng của siêu thị hoặc đơn vị khảo sát: tập trung nhiều ở các nhóm thu nhập trung bình đến trung cao, trong khi nhóm thu nhập quá thấp hoặc quá cao xuất hiện ít hơn.
Đây có thể là dấu hiệu để doanh nghiệp điều chỉnh chiến lược tiếp cận thị trường, như tập trung nhiều hơn vào các nhóm thu nhập đang chiếm ưu thế, hoặc mở rộng các chính sách ưu đãi để thu hút nhóm khách hàng ít phổ biến hơn.
# Tổng số bản ghi (n)
n <- nrow(dt)
Ước lượng khoảng tin cậy
# Số người nữ (Gender = "F") và tổng số quan sát
n_female <- sum(dt$Gender == "F")
n_total <- nrow(dt)
# Tính khoảng tin cậy 95% và kiểm định giả thuyết với tỷ lệ kỳ vọng p = 0.5
test_female <- prop.test(n_female, n_total, p = 0.5, correct = FALSE)
Tỷ lệ nữ trong dữ liệu là 0.51.
Khoảng tin cậy 95% cho tỷ lệ này là từ 0.5017 đến 0.5183.
Kiểm định giả thuyết
Giả thuyết đặt ra như sau:
H₀: p = 0.5 (Tỷ lệ nữ thuộc danh mục gender là 50%)
H₁: p ≠ 0.5 (Tỷ lệ nữ thuộc danh mục gender khác 50%)
# Kiểm định giả thuyết với prop.test
test_female <- prop.test(n_female, n_total, p = 0.5, correct = FALSE)
test_female
##
## 1-sample proportions test without continuity correction
##
## data: n_female out of n_total, null probability 0.5
## X-squared = 5.6164, df = 1, p-value = 0.01779
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
## 0.5017287 0.5182531
## sample estimates:
## p
## 0.5099936
#Giá trị thống kê Chi-bình phương: 5.6164 với bậc tự do 1.
#Giá trị p = 0.01779.
#Khoảng tin cậy 95% cho tỉ lệ nữ trong tổng thể là từ 0.5017 đến 0.5183.
#Ước lượng tỉ lệ mẫu: 0.5099936 (~50.999%).
Với mức ý nghĩa \(\alpha = 0.05\), kết quả kiểm định cho thấy giá trị p là 0.0178.
Vì p-value nhỏ hơn 0.05, chúng ta bác bỏ giả thuyết H₀. Vậy tỷ lệ nữ khác 50% .
# test_female$p.value: Giá trị p (p-value) từ kiểm định tỷ lệ nữ
# ifelse(...): Hàm điều kiện trong R. Nếu điều kiện đúng thì lấy phần 2, sai thì lấy phần 3
Ước lượng khoảng tin cậy cho tỷ lệ người đã kết hôn
# Số người đã kết hôn (ký hiệu M) và tổng số quan sát
n_married <- sum(dt$MaritalStatus == "M")
n_total <- nrow(dt)
# Tính khoảng tin cậy 95% và kiểm định giả thuyết
test_married <- prop.test(n_married, n_total, p = 0.5, correct = FALSE)
test_married
##
## 1-sample proportions test without continuity correction
##
## data: n_married out of n_total, null probability 0.5
## X-squared = 7.6057, df = 1, p-value = 0.005818
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
## 0.4801120 0.4966352
## sample estimates:
## p
## 0.4883704
#Giá trị thống kê Chi-bình phương: 7.6057 (df=1).
#Giá trị p = 0.005818.
#Khoảng tin cậy 95% cho tỉ lệ người đã kết hôn trong tổng thể: từ 48.01% đến 49.66%.
#Tỉ lệ mẫu ước lượng: 48.84%.
#p = 0.5: Tỷ lệ kỳ vọng trong giả thuyết không H₀ (ở đây: H₀: tỷ lệ đã kết hôn = 0.5)
#correct = FALSE: Không dùng hiệu chỉnh liên tục (continuity correction), cho kết quả gần với lý thuyết hơn khi mẫu lớn
Tỷ lệ người đã kết hôn trong dữ liệu là 0.4884.
Khoảng tin cậy 95% cho tỷ lệ này là từ 0.4801 đến 0.4966.
# test_married$conf.int[1] → Cận dưới
# test_married$conf.int[2] → Cận trên
Kiểm định giả thuyết
Giả thuyết:
H₀: p = 0.5 (Tỷ lệ người đã kết hôn là 50%)
H₁: p ≠ 0.5 (Tỷ lệ người đã kết hôn khác 50%)
Giá trị p từ kiểm định là: p_value = 0.0058
Với mức ý nghĩa \(\alpha = 0.05\), Vì P_value < 0.05, ta bác bỏ giả thuyết H₀. Do đó, có bằng chứng thống kê cho thấy tỷ lệ người đã kết hôn khác 50% trong tổng thể.
# Đếm số sản phẩm là Food
n_drink <- sum(dt$ProductFamily == "Drink", na.rm = TRUE)
# Tổng số quan sát
n_total <- nrow(dt)
# Tỷ lệ sản phẩm Food
prop_drink <- n_drink / n_total
prop_drink
## [1] 0.08891102
Ước lượng khoảng tin cậy cho nhóm sản phẩm Drink
ci_drink <- prop.test(n_drink, n_total, correct = FALSE)
Kiểm định giả thuyết:
Giả thuyết:
H₀: p <= 0.09 (Tỷ lệ sản phẩm thuộc nhóm Drink là 9%)
H₁: p > 0.09 (Tỷ lệ sản phẩm thuộc nhóm Drink lớn hơn 9%)
test_drink <- prop.test(n_drink, n_total, p = 0.09, alternative = "greater", correct = FALSE)
# # alternative = "greater": kiểm định 1 phía, H1: tỷ lệ thực tế lớn hơn 0.09
test_drink
##
## 1-sample proportions test without continuity correction
##
## data: n_drink out of n_total, null probability 0.09
## X-squared = 0.20357, df = 1, p-value = 0.6741
## alternative hypothesis: true p is greater than 0.09
## 95 percent confidence interval:
## 0.08504142 1.00000000
## sample estimates:
## p
## 0.08891102
#Giá trị thống kê Chi-bình phương: 0.20357 (df=1).
#Giá trị p = 0.6741.
#Khoảng tin cậy 95% cho tỉ lệ sản phẩm Drink trong tổng thể là từ 8.5% đến 100% (khoảng trên không giới hạn vì kiểm định một phía).
#Tỉ lệ mẫu ước lượng: 8.89%.
Giá trị p từ kiểm định: P_value = 0.6741.
Với mức ý nghĩa \(\alpha = 0.05\), 0.6741, Vì P_value > 0.05, ta không đủ cơ sở bác bỏ giả thuyết H₀.
→ Kết luận: Tỷ lệ sản phẩm Drink không lớn hơn 9%.
# Bảng chéo counts
tab_gf <- table(Gender = dt$Gender, ProductFamily = dt$ProductFamily)
tab_gf
## ProductFamily
## Gender Drink Food Non-Consumable
## F 669 5149 1352
## M 581 5004 1304
# Tỉ lệ theo hàng (row‐%)
pct_gf <- round(prop.table(tab_gf, margin = 1) * 100, 1)
pct_gf
## ProductFamily
## Gender Drink Food Non-Consumable
## F 9.3 71.8 18.9
## M 8.4 72.6 18.9
Nhận xét
Drink
Về số lượng: nữ có 669 giao dịch so với 581 của nam, nhiều hơn 88 giao dịch.
Về tỉ lệ: nữ chiếm 9.3% tổng giao dịch của mình, nam chiếm 8.4%, chênh +0.9%.
Vậy phụ nữ có xu hướng mua đồ uống hơi nhiều hơn nam, nhưng chênh chưa đến 1%.
Food
Về số lượng: nữ 5.149 giao dịch, nam 5.004, nhiều hơn 145 giao dịch.
Về tỉ lệ: nữ 71.8%, nam 72.6%, chênh −0.8%.
Vậy dù có nhiều giao dịch Food hơn về con số tuyệt đối, vì tổng giao dịch của nữ cũng nhiều hơn, nên tỉ lệ lại thấp hơn nam một chút.
Non-Consumable
Về số lượng: nữ 1.352 giao dịch, nam 1.304, nhiều hơn 48 giao dịch.
Về tỉ lệ: cả hai đều 18.9%, chênh 0.0%.
vậy sự khác biệt thật sự rất nhỏ, tỉ lệ ngang bằng.
library(ggplot2)
gf_df <- as.data.frame(table(Gender = dt$Gender, ProductFamily = dt$ProductFamily))
ggplot( gf_df, aes(x = ProductFamily,y = Freq, fill = Gender, group = Gender)) +
geom_col(position = position_dodge(width = 0.8), width = 0.7) +
scale_fill_manual(
name = "Giới tính",
values = c("F" = "lightgreen", "M" = "yellow"),
labels = c("Nữ", "Nam")
) +
labs(
title = "Số giao dịch theo sản phẩm & giới tính",
x = "Nhóm sản phẩm",
y = "Số giao dịch"
) +
theme_minimal()
Giả thuyết kiểm định:
H₀: Giới và nhóm sản phẩmlà hai biến độc lập.
H₁: Giới và nhóm sản phẩm có liên quan.
test_gf <- chisq.test(tab_gf)
test_gf
##
## Pearson's Chi-squared test
##
## data: tab_gf
## X-squared = 3.5185, df = 2, p-value = 0.1722
Nhận xét
tab_mo <- table(Marital = dt$MaritalStatus, Owner = dt$Homeowner)
tab_mo
## Owner
## Marital N Y
## M 1719 5147
## S 3896 3297
pct_mo <- round(prop.table(tab_mo, margin = 1) * 100, 1)
pct_mo
## Owner
## Marital N Y
## M 25.0 75.0
## S 54.2 45.8
# Giả sử tab_mo đã được tạo như trên
diff_owner_count <- tab_mo["M", "Y"] - tab_mo["S", "Y"]
diff_not_owner_count <- tab_mo["S", "N"] - tab_mo["M", "N"]
Nhận xét
Trong bộ dữ liệu, có 3896 người độc thân không sở hữu nhà và 3297 người độc thân sở hữu nhà. Ngoài ra, có 1719 người đã kết hôn không sở hữu nhà và 5147 người đã kết hôn sở hữu nhà.
Số người đã kết hôn sở hữu nhà nhiều hơn người độc thân là 1850 người.
Người độc thân không sở hữu nhà nhiều hơn người đã kết hôn là 2177 người.
library(ggplot2)
mo_df <- as.data.frame(table(Marital = dt$MaritalStatus, Owner = dt$Homeowner))
ggplot( mo_df, aes(x = Marital,y = Freq, fill = Owner, group = Owner)) +
geom_col(position = position_dodge(width = 0.8), width = 0.7) +
scale_fill_manual(
name = "Sở hữu nhà",
values = c("Y" = "lightblue","N" = "lightpink"),
labels = c("Có", "Không")
) +
labs(
title = "Số khách có/không sở hữu nhà theo tình trạng hôn nhân",
x = "Tình trạng hôn nhân",
y = "Số khách hàng"
) +
theme_minimal()
Giả thuyết kiểm định:
H₀: Tình trạng hôn nhân và việc sở hữu nhà là hai biến độc lập.
H₁: Tình trạng hôn nhân và việc sở hữu nhà có liên quan.
test_mo <- chisq.test(tab_mo)
test_mo
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: tab_mo
## X-squared = 1241.2, df = 1, p-value < 2.2e-16
Nhận xét
tab_ap <- table(Income = dt$AnnualIncome, Category = dt$ProductCategory)
tab_ap
## Category
## Income Baking Goods Bathroom Products Beer and Wine Bread
## $10K - $30K 119 85 80 108
## $110K - $130K 18 16 14 23
## $130K - $150K 22 19 15 24
## $150K + 11 8 3 10
## $30K - $50K 151 116 121 134
## $50K - $70K 86 50 61 63
## $70K - $90K 59 51 39 50
## $90K - $110K 18 20 23 13
## Category
## Income Breakfast Foods Candles Candy Canned Anchovies Canned Clams
## $10K - $30K 111 6 76 10 12
## $110K - $130K 7 1 16 2 1
## $130K - $150K 28 2 19 1 3
## $150K + 7 1 8 1 1
## $30K - $50K 143 21 127 14 20
## $50K - $70K 62 7 60 8 6
## $70K - $90K 42 7 29 6 7
## $90K - $110K 17 0 17 2 3
## Category
## Income Canned Oysters Canned Sardines Canned Shrimp Canned Soup
## $10K - $30K 5 8 9 98
## $110K - $130K 4 2 0 19
## $130K - $150K 3 1 2 17
## $150K + 1 1 0 8
## $30K - $50K 10 18 16 137
## $50K - $70K 5 5 7 67
## $70K - $90K 5 3 2 50
## $90K - $110K 2 2 2 8
## Category
## Income Canned Tuna Carbonated Beverages Cleaning Supplies
## $10K - $30K 13 36 47
## $110K - $130K 3 6 8
## $130K - $150K 5 3 7
## $150K + 3 6 4
## $30K - $50K 28 51 51
## $50K - $70K 19 20 35
## $70K - $90K 10 23 25
## $90K - $110K 6 9 12
## Category
## Income Cold Remedies Dairy Decongestants Drinks Eggs Electrical
## $10K - $30K 23 174 22 30 37 74
## $110K - $130K 2 38 4 9 9 20
## $130K - $150K 6 49 5 8 15 21
## $150K + 3 17 0 4 4 8
## $30K - $50K 32 299 31 46 67 114
## $50K - $70K 12 160 8 19 36 57
## $70K - $90K 10 126 10 16 20 47
## $90K - $110K 5 40 5 3 10 14
## Category
## Income Frozen Desserts Frozen Entrees Fruit Hardware Hot Beverages
## $10K - $30K 75 20 150 31 48
## $110K - $130K 17 10 29 3 11
## $130K - $150K 17 5 48 10 9
## $150K + 8 2 10 1 5
## $30K - $50K 112 35 252 41 79
## $50K - $70K 44 21 136 25 33
## $70K - $90K 36 18 104 13 26
## $90K - $110K 14 7 36 5 15
## Category
## Income Hygiene Jams and Jellies Kitchen Products Magazines Meat
## $10K - $30K 36 137 47 49 156
## $110K - $130K 6 31 5 17 41
## $130K - $150K 14 32 14 9 52
## $150K + 4 8 3 1 14
## $30K - $50K 62 185 74 65 253
## $50K - $70K 37 103 51 36 115
## $70K - $90K 29 71 20 18 100
## $90K - $110K 9 21 3 7 30
## Category
## Income Miscellaneous Packaged Vegetables Pain Relievers Paper Products
## $10K - $30K 10 9 42 70
## $110K - $130K 1 1 7 19
## $130K - $150K 6 1 8 17
## $150K + 0 2 5 8
## $30K - $50K 8 20 61 101
## $50K - $70K 14 8 34 67
## $70K - $90K 2 7 30 46
## $90K - $110K 1 0 5 17
## Category
## Income Pizza Plastic Products Pure Juice Beverages Seafood Side Dishes
## $10K - $30K 50 41 34 17 36
## $110K - $130K 13 6 9 3 2
## $130K - $150K 12 7 5 8 8
## $150K + 1 2 5 5 3
## $30K - $50K 59 33 52 44 53
## $50K - $70K 31 31 25 11 23
## $70K - $90K 15 17 26 12 23
## $90K - $110K 13 4 9 2 5
## Category
## Income Snack Foods Specialty Starchy Foods Vegetables
## $10K - $30K 329 65 70 385
## $110K - $130K 85 13 18 74
## $130K - $150K 83 18 15 87
## $150K + 35 5 5 32
## $30K - $50K 533 96 85 551
## $50K - $70K 274 50 48 300
## $70K - $90K 184 32 28 215
## $90K - $110K 77 10 8 84
pct_ap <- round(prop.table(tab_ap, margin = 1) * 100, 1)
pct_ap
## Category
## Income Baking Goods Bathroom Products Beer and Wine Bread
## $10K - $30K 3.9 2.8 2.6 3.5
## $110K - $130K 2.8 2.5 2.2 3.6
## $130K - $150K 2.9 2.5 2.0 3.2
## $150K + 4.0 2.9 1.1 3.7
## $30K - $50K 3.3 2.5 2.6 2.9
## $50K - $70K 3.6 2.1 2.6 2.7
## $70K - $90K 3.5 3.0 2.3 2.9
## $90K - $110K 2.9 3.3 3.8 2.1
## Category
## Income Breakfast Foods Candles Candy Canned Anchovies Canned Clams
## $10K - $30K 3.6 0.2 2.5 0.3 0.4
## $110K - $130K 1.1 0.2 2.5 0.3 0.2
## $130K - $150K 3.7 0.3 2.5 0.1 0.4
## $150K + 2.6 0.4 2.9 0.4 0.4
## $30K - $50K 3.1 0.5 2.8 0.3 0.4
## $50K - $70K 2.6 0.3 2.5 0.3 0.3
## $70K - $90K 2.5 0.4 1.7 0.4 0.4
## $90K - $110K 2.8 0.0 2.8 0.3 0.5
## Category
## Income Canned Oysters Canned Sardines Canned Shrimp Canned Soup
## $10K - $30K 0.2 0.3 0.3 3.2
## $110K - $130K 0.6 0.3 0.0 3.0
## $130K - $150K 0.4 0.1 0.3 2.2
## $150K + 0.4 0.4 0.0 2.9
## $30K - $50K 0.2 0.4 0.3 3.0
## $50K - $70K 0.2 0.2 0.3 2.8
## $70K - $90K 0.3 0.2 0.1 2.9
## $90K - $110K 0.3 0.3 0.3 1.3
## Category
## Income Canned Tuna Carbonated Beverages Cleaning Supplies
## $10K - $30K 0.4 1.2 1.5
## $110K - $130K 0.5 0.9 1.2
## $130K - $150K 0.7 0.4 0.9
## $150K + 1.1 2.2 1.5
## $30K - $50K 0.6 1.1 1.1
## $50K - $70K 0.8 0.8 1.5
## $70K - $90K 0.6 1.3 1.5
## $90K - $110K 1.0 1.5 2.0
## Category
## Income Cold Remedies Dairy Decongestants Drinks Eggs Electrical
## $10K - $30K 0.7 5.6 0.7 1.0 1.2 2.4
## $110K - $130K 0.3 5.9 0.6 1.4 1.4 3.1
## $130K - $150K 0.8 6.4 0.7 1.1 2.0 2.8
## $150K + 1.1 6.2 0.0 1.5 1.5 2.9
## $30K - $50K 0.7 6.5 0.7 1.0 1.5 2.5
## $50K - $70K 0.5 6.8 0.3 0.8 1.5 2.4
## $70K - $90K 0.6 7.4 0.6 0.9 1.2 2.8
## $90K - $110K 0.8 6.5 0.8 0.5 1.6 2.3
## Category
## Income Frozen Desserts Frozen Entrees Fruit Hardware Hot Beverages
## $10K - $30K 2.4 0.6 4.9 1.0 1.6
## $110K - $130K 2.6 1.6 4.5 0.5 1.7
## $130K - $150K 2.2 0.7 6.3 1.3 1.2
## $150K + 2.9 0.7 3.7 0.4 1.8
## $30K - $50K 2.4 0.8 5.5 0.9 1.7
## $50K - $70K 1.9 0.9 5.7 1.1 1.4
## $70K - $90K 2.1 1.1 6.1 0.8 1.5
## $90K - $110K 2.3 1.1 5.9 0.8 2.4
## Category
## Income Hygiene Jams and Jellies Kitchen Products Magazines Meat
## $10K - $30K 1.2 4.4 1.5 1.6 5.0
## $110K - $130K 0.9 4.8 0.8 2.6 6.4
## $130K - $150K 1.8 4.2 1.8 1.2 6.8
## $150K + 1.5 2.9 1.1 0.4 5.1
## $30K - $50K 1.3 4.0 1.6 1.4 5.5
## $50K - $70K 1.6 4.3 2.2 1.5 4.9
## $70K - $90K 1.7 4.2 1.2 1.1 5.9
## $90K - $110K 1.5 3.4 0.5 1.1 4.9
## Category
## Income Miscellaneous Packaged Vegetables Pain Relievers Paper Products
## $10K - $30K 0.3 0.3 1.4 2.3
## $110K - $130K 0.2 0.2 1.1 3.0
## $130K - $150K 0.8 0.1 1.1 2.2
## $150K + 0.0 0.7 1.8 2.9
## $30K - $50K 0.2 0.4 1.3 2.2
## $50K - $70K 0.6 0.3 1.4 2.8
## $70K - $90K 0.1 0.4 1.8 2.7
## $90K - $110K 0.2 0.0 0.8 2.8
## Category
## Income Pizza Plastic Products Pure Juice Beverages Seafood Side Dishes
## $10K - $30K 1.6 1.3 1.1 0.6 1.2
## $110K - $130K 2.0 0.9 1.4 0.5 0.3
## $130K - $150K 1.6 0.9 0.7 1.1 1.1
## $150K + 0.4 0.7 1.8 1.8 1.1
## $30K - $50K 1.3 0.7 1.1 1.0 1.2
## $50K - $70K 1.3 1.3 1.1 0.5 1.0
## $70K - $90K 0.9 1.0 1.5 0.7 1.3
## $90K - $110K 2.1 0.7 1.5 0.3 0.8
## Category
## Income Snack Foods Specialty Starchy Foods Vegetables
## $10K - $30K 10.6 2.1 2.3 12.5
## $110K - $130K 13.2 2.0 2.8 11.5
## $130K - $150K 10.9 2.4 2.0 11.4
## $150K + 12.8 1.8 1.8 11.7
## $30K - $50K 11.6 2.1 1.8 12.0
## $50K - $70K 11.6 2.1 2.0 12.7
## $70K - $90K 10.8 1.9 1.6 12.6
## $90K - $110K 12.6 1.6 1.3 13.7
Nhận xét
Nhóm thu nhập từ "$30K - $50K"
ghi nhận số giao dịch
cao nhất ở hầu hết các danh mục, ví dụ:
Điều này có thể là do nhóm thu nhập trung lưu có khả năng chi tiêu cao nhưng vẫn ưu tiên các mặt hàng thiết yếu.
Nhóm thu nhập thấp ("$10K - $30K"
) cũng có lượng
giao dịch tương đối lớn, đặc biệt ở:
Điều này cho thấy nhu cầu với sản phẩm cơ bản, giá cả phải chăng vẫn rất cao.
Ngược lại, nhóm thu nhập cao ("$130K - $150K"
,
"$150K +"
) có số giao dịch thấp hơn rõ rệt, ví dụ:
Có thể do số mẫu nhóm thu nhập cao ít hơn hoặc họ ưu tiên mua sắm online, sản phẩm cao cấp hơn.
Giả thuyết kiểm định:
H₀: Hai biến khoảng thu nhập hằng năm và hạng mục sản phẩm là độc lập.
H₁: Hai biến khoảng thu nhập hằng năm và hạng mục sản phẩm có mối liên quan.
test_sp <- chisq.test(tab_ap)
## Warning in chisq.test(tab_ap): Chi-squared approximation may be incorrect
test_sp
##
## Pearson's Chi-squared test
##
## data: tab_ap
## X-squared = 295.23, df = 308, p-value = 0.6897
Nhận xét