library(readr)
Sales <- read_csv("D:/Học các môn/Learn R/Thầy Tường/100000 Sales Records.csv/100000 Sales Records.csv")
## Rows: 100000 Columns: 14
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (7): Region, Country, Item Type, Sales Channel, Order Priority, Order Da...
## dbl (7): Order ID, Units Sold, Unit Price, Unit Cost, Total Revenue, Total C...
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
colnames(Sales) <- c("Region","Country", "Item.Type", "Sales.Channel","Order.Priority" ,"Order.Date","Order.ID" ,"Ship.Date","Units.Sold","Unit.Price", "Unit.Cost", "Total.Revenue", "Total.Cost", "Total.Profit")
Nhận xét: Kết quả in ra cho thấy bộ dữ liệu gồm 100.000 dòng và 14 cột, trong đó có 7 biến ký tự là Region, Country, Item.Type, Sales.Channel, Order.Priority, Order.Date, Ship.Date và 7 biến số là Units.Sold, Unit.Price, Unit.Cost, Total.Revenue, Total.Cost, Total.Profit. Đây là một bộ dữ liệu lớn, có cấu trúc rõ ràng và bao quát nhiều khía cạnh trong hoạt động bán hàng.
meaning_variable <- data.frame(
Tên_biến = c( "Region","Country", "Item.Type", "Sales.Channel","Order.Priority" ,"Order.Date","Order.ID" ,"Ship.Date","Units.Sold","Unit.Price", "Unit.Cost", "Total.Revenue", "Total.Cost", "Total.Profit"),
Ý_nghĩa = c("Châu lục","Đất nước","Loại hàng hóa","Kênh bán hàng","Mức độ ưu tiên cho đơn hàng","Ngày đặt hàng","Mã vận đơn","Ngày giao hàng","Số lượng hàng hóa bán ra","Giá của một đơn vị hàng hóa","Giá để sản xuất một đơn vị hàng hóa","Tổng doanh thu","Tổng chi phí","Tổng lợi nhuận")
)
print(meaning_variable)
## Tên_biến Ý_nghĩa
## 1 Region Châu lục
## 2 Country Đất nước
## 3 Item.Type Loại hàng hóa
## 4 Sales.Channel Kênh bán hàng
## 5 Order.Priority Mức độ ưu tiên cho đơn hàng
## 6 Order.Date Ngày đặt hàng
## 7 Order.ID Mã vận đơn
## 8 Ship.Date Ngày giao hàng
## 9 Units.Sold Số lượng hàng hóa bán ra
## 10 Unit.Price Giá của một đơn vị hàng hóa
## 11 Unit.Cost Giá để sản xuất một đơn vị hàng hóa
## 12 Total.Revenue Tổng doanh thu
## 13 Total.Cost Tổng chi phí
## 14 Total.Profit Tổng lợi nhuận
summary(Sales$Units.Sold)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 1 2505 5007 5001 7495 10000
Nhận xét: Phân bố khá đều, từ 1 đến 10.000, với trung vị và trung bình gần nhau (5007 và 5001), chứng tỏ không có nhiều ngoại lệ lớn, không bị lệch mạnh về một phía. Độ phân tán ổn định, quartile 1 (2505), quartile 3 (7495). Các sản phẩm bán ra đều, không hiện tượng quá thừa hoặc quá thiếu hàng tồn. Sản lượng tốt, thể hiện doanh nghiệp đang vận hành ổn định và khả năng tiêu thụ hàng hóa cao.
summary(Sales$Unit.Price)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 9.33 109.28 205.70 266.70 437.20 668.27
Nhận xét: Khoảng giá mở rộng (từ 9.33 đến 668.27), trung vị (205.70) và trung bình (266.70) thì trung bình lớn hơn trung vị, cho thấy có một số mặt hàng giá cao kéo giá trị trung bình lên. Sản phẩm đa dạng phân khúc từ giá rẻ đến cao cấp. Doanh nghiệp có thể tiếp cận nhiều tệp khách hàng và tối ưu hóa doanh thu. Sự hiện diện của sản phẩm giá cao có thể chú trọng vào phân khúc sinh lời tốt.
summary(Sales$Unit.Cost)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 6.92 56.67 117.11 188.02 364.69 524.96
Nhận xét: Khoảng chi phí từ 6.92 đến 524.96, trung vị (117.11), trung bình (188.02), cũng cho thấy tồn tại mặt hàng chi phí cao làm tăng trung bình.Doanh nghiệp chấp nhận đầu tư vào sản phẩm cao cấp, chi phí sản xuất đa dạng. Cần tối ưu quản lý chi phí đối với các mặt hàng giá vốn cao để bảo đảm lợi nhuận.
summary(Sales$Total.Revenue)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 18.7 279753.3 789891.6 1336066.7 1836489.6 6682700.0
Nhận xét: Dao động rộng từ 18.7 đến 6682700, median (789891.6), mean (1336066.7), mean lớn hơn median, doanh thu bị ảnh hưởng bởi một số giao dịch lớn. Hoạt động kinh doanh mang lại nguồn thu tốt, có những hợp đồng/giao dịch lớn giúp cải thiện kết quả tổng thể. Doanh nghiệp nên tận dụng và mở rộng các giao dịch có doanh thu cao.
summary(Sales$Total.Cost)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 13.8 162928.3 467937.4 941975.5 1209474.7 5249075.0
Nhận xét:Về kỹ thuật: Dao động từ 13.8 đến 5249075, trung vị (467937.4), trung bình (941975.5), xu hướng giống doanh thu, chi phí biến động theo quy mô giao dịch. Cần giám sát các khoản chi lớn, đảm bảo tổng chi phí gia tăng đi kèm với doanh thu - tránh để chi phí lớn trong các giao dịch nhỏ ảnh hưởng lợi nhuận.
summary(Sales$Total.Profit)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 4.820e+00 9.590e+04 2.837e+05 3.941e+05 5.684e+05 1.739e+06
Nhận xét:Về kỹ thuật: Biến động từ 4.820e+00 đến 1.739e+050, trung vị (2837e+05), trung bình (3941e+05), mean lớn hơn median. Cho thấy có một số nguồn lợi nhuận cực lớn làm trung bình bị kéo lên. Tình hình kinh doanh khả quan, có nhiều sản phẩm/dịch vụ sinh lợi vượt trội. Tuy nhiên cần quan tâm đến sự phân bố lợi nhuận - nên đánh giá lý do các sản phẩm giao dịch nhỏ đem lại lợi nhuận thấp để cải thiện.
sapply(Sales,function(Sales) sum(is.na(Sales)))
## Region Country Item.Type Sales.Channel Order.Priority
## 0 0 0 0 0
## Order.Date Order.ID Ship.Date Units.Sold Unit.Price
## 0 0 0 0 0
## Unit.Cost Total.Revenue Total.Cost Total.Profit
## 0 0 0 0
Nhận xét:Kết quả kiểm tra trả về toàn bộ giá trị bằng 0, nghĩa là không có bất kỳ giá trị thiếu nào trong 14 cột dữ liệu.Đây là một kết quả tốt vì dữ liệu đầy đủ, không bị NA .Điều này có nghĩa là không cần áp dụng thêm bất kỳ phương pháp xử lý bổ sung khác.Nhờ đó, các phân tích tiếp theo như tính tổng doanh thu, lợi nhuận hay vẽ biểu đồ đều đảm bảo chính xác và đáng tin cậy, không bị ảnh hưởng bởi lỗi thiếu dữ liệu.
boxplot(Sales$Units.Sold)
Nhận xét:Min= 1, Q1 = 2505, Q2 (Median) = 5007, Q3 = 7495, Max = 10000 Số lượng sản phẩm bán ra dao động từ 1 đến 10000 sản phẩm, thể hiện sự khác biệt lớn giữa các đơn hàng. Một nửa số đơn hàng (50%) có lượng bán nằm trong khoảng 2505 – 7495 sản phẩm, được giới hạn bởi hai tứ phân vị Q1 và Q3. Giá trị trung vị (Q2 = 5007) nằm gần giữa hộp, cho thấy dữ liệu phân bố khá cân đối quanh mức trung bình. Hầu hết các đơn hàng có quy mô trung bình, khoảng 5000 sản phẩm, trong khi một số đơn lớn đạt tới 10000 sản phẩm, có thể là đơn sỉ hoặc hợp đồng cung cấp số lượng lớn cho đại lý.
boxplot(Sales$Unit.Price)
Nhận xét:Min = 9,33, Q1 = 109,28, Q2 = 205,70, Q3 = 437,20, Max = 668,27 Giá bán mỗi sản phẩm có sự chênh lệch rõ rệt giữa các loại hàng. Một nửa số sản phẩm có giá nằm trong khoảng 109,28 – 437,20 đồng (Q1 – Q3). Giá trị trung vị (Q2 = 205,70) thể hiện mức giá phổ biến nhất rơi vào nhóm trung bình thấp, quanh 200 đồng. Giá thấp nhất là 9,33 đồng, trong khi cao nhất là 668,27 đồng, cho thấy doanh nghiệp kinh doanh đa dạng nhiều loại hàng hóa từ giá rẻ đến cao cấp. Biểu đồ có dạng lệch phải, nghĩa là phần lớn sản phẩm có giá thấp, chỉ một số ít có giá rất cao – thường là hàng cao cấp hoặc đặc biệt.
boxplot(Sales$Unit.Cost)
Nhận xét:Min = 6,92, Q1 = 56,67, Q2 = 117,11, Q3 = 364,69, Max = 524,96 Chi phí sản xuất dao động từ 6,92 đến 524,96 đồng, cho thấy mức độ khác biệt đáng kể giữa các mặt hàng. Khoảng giữa (Q1 – Q3) nằm trong khoảng 56,67 – 364,69 đồng, tức là 50% sản phẩm có chi phí ở mức trung bình. Giá trị trung vị (Q2 = 117,11) thấp hơn trung bình (188,02), phản ánh rằng đa số sản phẩm có chi phí thấp, chỉ một số ít sản phẩm đặc biệt có chi phí cao. So sánh với giá bán (trung bình 266,70 đồng), có thể thấy biên lợi nhuận dương, chứng tỏ doanh nghiệp đang hoạt động hiệu quả. Dữ liệu có dạng lệch phải nhẹ, do một vài sản phẩm có chi phí cao vượt trội so với phần còn lại.
boxplot(Sales$Total.Revenue)
Nhận xét:Min = 18,7, Q1 = 279753,3, Q2 = 789891,6, Q3 = 1836489,6, Max = 6682700,0 Tổng doanh thu của các đơn hàng thay đổi rất mạnh, từ 18,7 đồng đến 6682700 đồng, phản ánh sự khác biệt lớn về quy mô giao dịch. Một nửa số đơn hàng có doanh thu trong khoảng 279753 – 1836489 đồng (Q1 – Q3). Giá trị trung vị (Q2 = 789891) cho thấy đa số đơn hàng mang lại doanh thu trung bình, dưới 1 triệu đồng. Biểu đồ có dạng lệch phải, nghĩa là phần lớn đơn hàng ở mức doanh thu vừa phải, nhưng có một số ít đơn hàng đặc biệt lớn làm tổng doanh thu tăng cao.
boxplot(Sales$Total.Cost)
Nhận xét: Min = 13,8, Q1 = 162.928,3, Q2 = 467.937,4, Q3 = 1.209.474,7, Max = 5.249.075,0 Tổng chi phí của các đơn hàng phân bố từ 13,8 đến 5249075 . Phần lớn chi phí tập trung trong khoảng 162928 – 1209474, tương ứng với vùng giữa Q1 – Q3. Giá trị trung vị (Q2 = 467937) cho thấy đa số đơn hàng có chi phí trung bình khoảng 450000 đồng. Dữ liệu lệch phải, nghĩa là một vài đơn hàng có chi phí rất cao, thường đi kèm với doanh thu cao. Nhìn chung, chi phí tăng tỉ lệ thuận với doanh thu, và vì chi phí trung bình (941975) thấp hơn doanh thu trung bình (1336066 ), nên doanh nghiệp vẫn duy trì lợi nhuận dương và ổn định.
boxplot(Sales$Total.Profit)
Nhận xét:Min = 4,82, Q1 = 95900, Q2 = 283700, Q3 = 568400, Max = 1739000 Lợi nhuận của các đơn hàng dao động từ 4,82 đến 1739000, cho thấy hiệu quả bán hàng thay đổi tùy quy mô đơn hàng. Một nửa các đơn hàng có lợi nhuận trong khoảng 95900 – 568400 (Q1 – Q3). Giá trị trung vị (Q2 = 283700) thể hiện mức lợi nhuận phổ biến nhất mà doanh nghiệp thu được cho mỗi đơn hàng. Biểu đồ lệch phải, nghĩa là đa số đơn hàng có lợi nhuận trung bình hoặc thấp, nhưng vẫn có một số đơn hàng đặc biệt sinh lợi cao, kéo giá trị trung bình lên (394100). Điều này phản ánh tính hiệu quả và ổn định trong hoạt động kinh doanh, đồng thời thể hiện khả năng tạo ra lợi nhuận cao ở các giao dịch quy mô lớn.
Sales[duplicated(Sales),]
Nhận xét:Kết quả hiển thị là một bảng rỗng (# A tibble: 0 x 14), nghĩa là không có dòng dữ liệu nào bị trùng lặp. Kết quả này rất tốt vì đảm bảo các phép tính tổng hợp như doanh thu hoặc lợi nhuận không bị sai lệch do dữ liệu trùng. Dữ liệu có độ tin cậy cao và phản ánh đúng thực tế
scale <- function(vector){
if(is.numeric(vector) != TRUE){
print("No have num")
}
empty=c()
minus <- vector - min(vector)
scaling <- minus / (max(vector)-min(vector))
}
Units.Sold <- as.data.frame(scale(Sales$Units.Sold))
colnames(Units.Sold) <- c("scale.UNS")
Nhận xét:Việc chuẩn hóa giúp đưa các biến về cùng thang đo, thuận tiện khi so sánh hoặc vẽ biểu đồ. Đây là bước cần thiết trong các phân tích thống kê hoặc mô hình hóa vì nó giúp loại bỏ sự khác biệt về đơn vị đo lường giữa các biến (ví dụ doanh thu tính bằng triệu đồng trong khi giá đơn vị tính bằng nghìn đồng).
Sales$Order.Date <- as.Date(Sales$Order.Date, format = "%m/%d/%Y") # Đưa ngày về đúng dạng
Sales$Year <- format(Sales$Order.Date, "%Y") # Tách cột Year (năm) ra từ Order.Date
library(dplyr)
## Warning: package 'dplyr' was built under R version 4.5.1
##
## 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
avg_profit <- summarise(
group_by(Sales, Year),
Average_P = mean(Total.Profit, na.rm = TRUE),
Min_Profit = min(Total.Profit, na.rm = TRUE),
Max_Profit = max(Total.Profit, na.rm = TRUE),
Var_Profit = var(Total.Profit, na.rm = TRUE)
)
print(avg_profit)
## # A tibble: 8 × 5
## Year Average_P Min_Profit Max_Profit Var_Profit
## <chr> <dbl> <dbl> <dbl> <dbl>
## 1 2010 397426. 62.7 1738005. 146095869906.
## 2 2011 391841. 4.82 1737135. 141932697999.
## 3 2012 391690. 19.3 1737657. 143903665038.
## 4 2013 393710. 33.7 1736440. 141249713124.
## 5 2014 395346. 16.9 1736440. 147391373820.
## 6 2015 396583. 15.7 1738178. 142765428327.
## 7 2016 391673. 7.23 1738700 144482594801.
## 8 2017 394809. 14.5 1737309. 145732448121.
Nhận xét: Trong các năm từ 2010 đến 2017, lợi nhuận trung bình của doanh nghiệp dao động trong khoảng từ 391673.0 đến 397426.2, thể hiện sự ổn định rất cao trong hoạt động kinh doanh. Khoản lợi nhuận nhỏ nhất mỗi năm khá thấp, như 4.82 ở năm 2011, 7.23 ở năm 2016, và cao nhất là 62.66 ở năm 2010. Điều này có nghĩa doanh nghiệp có nhiều sản phẩm hoặc giao dịch có lợi nhuận rất nhỏ. Ngược lại, các khoản lợi nhuận lớn nhất mỗi năm đều ở mức cao, như 1738005 năm 2010, 1738178 năm 2015, cho thấy vẫn có những giao dịch cực kỳ thành công. Phương sai lợi nhuận dao động từ 141249713124 đến 147391373820, chứng tỏ sự chênh lệch giữa các khoản lợi nhuận là rất lớn, doanh nghiệp vừa có giao dịch rất nhỏ vừa có giao dịch rất lớn Tổng thể, doanh nghiệp đang duy trì lợi nhuận ổn định qua các năm, doanh nghiệp nên duy trì và phát triển các sản phẩm và hợp đồng mang lại lợi nhuận cao, đồng thời cần rà soát và tối ưu hóa những nhóm sản phẩm lợi nhuận thấp để toàn bộ hoạt động kinh doanh phát triển đều và an toàn hơn.
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.5.1
ggplot(avg_profit, aes(x = Year, y = Average_P, group = 1)) +
geom_line(color = "blue", linewidth = 1) +
geom_point(size = 2, color = "darkblue") +
theme_minimal() +
labs(
title = "Xu hướng lợi nhuận trung bình theo năm",
x = "Năm",
y = "Lợi nhuận trung bình")
>Nhận xét: Biểu đồ đường thể hiện xu hướng lợi nhuận
trung bình qua các năm cho thấy số liệu có biến động, nhưng biên độ
chênh lệch giữa các năm là nhỏ. Lợi nhuận trung bình đạt đỉnh vào năm
2010 và năm 2015, giảm sâu nhất vào năm 2011, 2012 và 2016. Sau mỗi giai
đoạn giảm đều xuất hiện sự phục hồi trong các năm tiếp theo, tạo nên
hình “răng cưa” nhẹ. Nhìn chung, xu hướng tổng thể là ổn định, không
xuất hiện năm nào có lợi nhuận trung bình quá khác biệt, cho thấy dữ
liệu tin cậy và phân phối đồng đều giữa các năm. Qua các năm, lợi nhuận
trung bình của doanh nghiệp duy trì ở mức cao, dao động quanh 392000 đến
397000 và không chịu ảnh hưởng lớn từ biến động thị trường. Điều này
phản ánh doanh nghiệp quản trị tốt, có khả năng thích ứng với các thay
đổi về môi trường kinh doanh hoặc thị trường đầu ra, duy trì hiệu quả
hoạt động ổn định. Các năm giảm mạnh lợi nhuận trung bình, như 2011,
2012, 2016, có thể do yếu tố mùa vụ, biến động thị trường hoặc doanh
nghiệp chuyển hướng chính sách, tuy nhiên các năm sau đó đều có dấu hiệu
phục hồi nhanh chóng, chứng tỏ sức khỏe tài chính và khả năng cạnh tranh
bền vững.
library(tidyr)
ggplot(Sales, aes(x = Unit.Cost, y = Total.Profit, color = Region)) +
geom_point(alpha = 0.5) +
theme_minimal() +
labs(title = "Quan hệ giữa chi phí sản xuất và lợi nhuận", x = "Tổng chi phí sản xuất", y = "Tổng lợi nhuận")
>Nhận xét: Biểu đồ này là dạng điểm, thể hiện mỗi
sản phẩm của doanh nghiệp có mức chi phí sản xuất khác nhau và lợi nhuận
thu về cũng khác nhau. Có nhiều điểm nằm ở chi phí rất thấp nhưng lợi
nhuận vẫn khá cao, đồng thời cũng có những điểm chi phí cao mà lợi nhuận
cũng lớn. Đặc biệt, không phải chi phí càng cao thì lợi nhuận càng lớn
hoặc ngược lại. Các màu sắc khác nhau là các khu vực địa lý, không có
khu vực nào vượt trội hoàn toàn trên biểu đồ. Biểu đồ cho thấy doanh
nghiệp bán đa dạng sản phẩm ở nhiều mức chi phí sản xuất khác nhau, cả
sản phẩm rẻ và sản phẩm đắt đều có cơ hội đạt lợi nhuận cao. Điều này
tốt cho doanh nghiệp vì không bị lệ thuộc vào một loại sản phẩm. Tuy
nhiên, doanh nghiệp cũng nên chú ý kiểm soát các sản phẩm chi phí cao,
đảm bảo rằng bỏ ra nhiều chi phí thì phải mang về lợi nhuận xứng
đáng.
Ta cần đưa dữ liệu về dạng dài (long format) để ggplot vẽ được nhiều đường dễ dàng:
avg_long <- avg_profit %>%
pivot_longer(
cols = c(Average_P, Min_Profit, Max_Profit, Var_Profit),
names_to = "Statistic",
values_to = "Profit_Value"
)
ggplot(avg_long, aes(x = Statistic, y = Profit_Value, group = Year, color = Year)) +
geom_line(linewidth = 1.2) +
geom_point(size = 3) +
theme_light() +
labs(
title = "Biểu đồ nhiều đường: Lợi nhuận theo năm và chỉ tiêu",
x = "Chỉ tiêu (Min - Max - Mean - Var)",
y = "Giá trị lợi nhuận",
color = "Năm"
) +
theme(
plot.title = element_text(size = 14, face = "bold", hjust = 0.5),
legend.position = "bottom"
)
>Nhận xét: Biểu đồ nhiều đường so sánh giá trị các
chỉ tiêu lợi nhuận (trung bình, lớn nhất, nhỏ nhất, phương sai) cho các
năm cho thấy xu hướng gần như giống nhau giữa các năm ở mọi chỉ tiêu.
Các đường màu đại diện cho từng năm gần như trùng khớp, đặc biệt là ở
nhóm chỉ tiêu phương sai (Var_Profit) – đều ở mức rất lớn so với các chỉ
tiêu còn lại. Điều này chứng tỏ cấu trúc lợi nhuận giữa các năm là ổn
định, không có năm nào vượt trội hẳn hoặc kém hơn rõ rệt, doanh nghiệp
kiểm soát tốt rủi ro và các nguồn lợi nhuận qua từng giai đoạn. Biểu đồ
cho thấy doanh nghiệp duy trì hiệu quả kinh doanh đều đặn trong suốt
nhiều năm, không bị ảnh hưởng quá mạnh bởi các biến động thị trường hoặc
chính sách. Dù có sự khác biệt nhỏ ở các chỉ tiêu giá trị thấp, tổng thể
vẫn đều và bền vững, chứng tỏ doanh nghiệp có khả năng duy trì chiến
lược ổn định, phát triển dài hạn hiệu quả.
Sales$Order.Date <- as.Date(Sales$Order.Date, format = "%m/%d/%Y") #chuyển định dạng về Date
Sales$Year <- format(as.Date(Sales$Order.Date), "%Y")
head(Sales,5)
Nhận Xét: Thực hiện phân tổ theo năm giúp ta dễ kiểm soát được năm đó có bao nhiêu đơn hàng được đặt
Profit_Year <- aggregate(
x=Sales$Total.Profit,
by=list(Sales$Year),
FUN = sum
)
colnames(Profit_Year) <-c("Year","SUM")
Profit_Year[order(Profit_Year$SUM),] #sắp xếp thứ từ từ nhỏ đến lớn
Nhận xét: Bảng tổng hợp lợi nhuận từng năm (SUM) cho thấy sự chênh lệch khá rõ giữa các năm. Năm 2017 có tổng lợi nhuận thấp nhất với 2983968206, các năm còn lại đều có tổng lợi nhuận trên 5 tỷ, đặc biệt năm 2013 đạt mức cao nhất với 5258788354. Trong giai đoạn từ 2010 tới 2016, tổng lợi nhuận các năm giữ mức ổn định từ khoảng 5166744930 đến 5226962291, không có biến động lớn. Tuy nhiên, năm 2017 sụt giảm mạnh so với các năm trước, cho thấy có thể năm này doanh nghiệp gặp khó khăn hoặc thị trường thay đổi bất lợi.Bảng đã được sắp xếp số liệu theo thứ tự từ nhỏ đến lớn, dễ nhận định xu hướng từng năm. Doanh nghiệp duy trì được tổng lợi nhuận khá đều qua nhiều năm, ngoại trừ năm cuối cùng bị thấp đi đáng kể nên cần xem lại nguyên nhân để có giải pháp cải thiện hoặc phòng tránh rủi ro tương tự trong các năm tiếp theo.
Sales$Ship.Date <- as.Date(Sales$Ship.Date, format = "%m/%d/%Y")
Sales$delivery_Date <- as.data.frame(Sales$Ship.Date-Sales$Order.Date)
summary(Sales$delivery_Date )
## Sales$Ship.Date - Sales$Order.Date
## Min. : 0.00 days
## 1st Qu.:12.00 days
## Median :25.00 days
## Mean :25.04 days
## 3rd Qu.:38.00 days
## Max. :50.00 days
Dựa vào thống kê ngày giao hàng, sẽ phân ra làm ba mức ngày giao hàng theo tứ phân vị: - Khoảng 1 nếu nhỏ hơn tứ phân vị 1 thì có tốc độ giao hàng nhanh. - Khoảng 2 nếu nhỏ hơn tứ phân vị 3 thì có tốc độ giao hàng trung bình. - Khoảng 3 nếu lớn hơn tứ phân vị 3 thì có tốc độ giao hàng nhanh.
Sales$Sort_Date <- ifelse(
Sales$delivery_Date < 12, "Tốc độ nhanh",
ifelse(
Sales$delivery_Date < 38, "Tốc độ trung bình",
"Tốc độ chậm"))
table(Sales$Sort_Date)
##
## Tốc độ chậm Tốc độ nhanh Tốc độ trung bình
## 25709 23553 50738
Nhận xét:Kết quả thống kê cho thấy thời gian giao hàng trung bình là khoảng 25,04 ngày, với giá trị nhỏ nhất là 0 ngày và lớn nhất là 50 ngày. Các tứ phân vị lần lượt là Q1 = 12 ngày, Q2 = 25 ngày và Q3 = 38 ngày, cho thấy phần lớn các đơn hàng được giao trong khoảng từ 12 đến 38 ngày. Dựa trên kết quả này, dữ liệu được phân loại thành ba nhóm: “Tốc độ nhanh” (dưới 12 ngày) với 23.553 đơn hàng, “Tốc độ trung bình” (từ 12 đến 38 ngày) với 50.738 đơn hàng, và “Tốc độ chậm” (trên 38 ngày) với 25.709 đơn hàng
Tốc_độ_chậm <- Sales[Sales$Sort_Date == "Tốc độ chậm",]
head(Tốc_độ_chậm)
Nhận xét: Kết quả phân tích cho thấy thời gian giao hàng trung bình của doanh nghiệp là khoảng 25.04 ngày, với các giá trị dao động từ 0 đến 50 ngày. Khi chia theo nhóm tốc độ, phần lớn đơn hàng (50,738 đơn, chiếm khoảng 50%) nằm trong nhóm tốc độ trung bình (thời gian giao hàng từ 12 đến 38 ngày), cho thấy đây là mức phổ biến và ổn định nhất trong quy trình giao hàng. Nhóm tốc độ nhanh (dưới 12 ngày) có 23,553 đơn, chiếm tỷ lệ khá cao, phản ánh khả năng xử lý đơn hàng linh hoạt và hiệu quả đối với một số tuyến giao hàng hoặc sản phẩm. Trong khi đó, nhóm tốc độ chậm (trên 38 ngày) gồm 25,709 đơn, chiếm gần 25%, chỉ ra rằng vẫn còn tồn tại các vấn đề trong khâu vận chuyển như tắc nghẽn logistics hoặc khoảng cách địa lý xa. Kết quả này mang ý nghĩa quan trọng: tốc độ giao hàng ảnh hưởng trực tiếp đến trải nghiệm khách hàng và sức cạnh tranh trên thị trường. Việc duy trì được số lượng lớn đơn hàng trong nhóm giao trung bình và nhanh là tín hiệu tích cực. Tuy nhiên, doanh nghiệp vẫn cần tìm cách rút ngắn thời gian của nhóm “chậm” để nâng cao chất lượng dịch vụ, tối ưu quy trình vận chuyển, và tăng tỷ lệ đơn hàng giao đúng hoặc sớm hơn dự kiến.
Đầu tiên, các ký hiệu “C”, “H”, “M”, “L” trong cột Order.Priority được thay thế lần lượt bằng “Critical”, “High”, “Medium” và “Low” để dữ liệu dễ hiểu và thuận tiện cho phân tích. Sau đó, dữ liệu được phân tổ theo loại hàng (Item.Type) và độ ưu tiên (Order.Priority) để xem xét mức doanh thu tương ứng.
Sales$Order.Priority[Sales$Order.Priority == "C"] <- "Critical"
Sales$Order.Priority[Sales$Order.Priority == "H"] <- "High"
Sales$Order.Priority[Sales$Order.Priority == "M"] <- "Medium"
Sales$Order.Priority[Sales$Order.Priority == "L"] <- "Low"
Reve_Item_Priority <- aggregate(Sales$Total.Revenue,
by = list(Item = Sales$Item.Type, Priority = Sales$Order.Priority),
FUN = sum)
print(head(Reve_Item_Priority[order(Reve_Item_Priority$x, decreasing = TRUE),], 5)) # Doanh thu cao nhất
## Item Priority x
## 45 Office Supplies Medium 7092747489
## 31 Household Low 7075645433
## 43 Household Medium 6963174924
## 21 Office Supplies High 6934264465
## 7 Household Critical 6892145842
print(tail(Reve_Item_Priority[order(Reve_Item_Priority$x, decreasing = TRUE),], 5)) # Doanh thu thấp nhất
## Item Priority x
## 2 Beverages Critical 489781794
## 18 Fruits High 97379757
## 6 Fruits Critical 96050857
## 30 Fruits Low 93937323
## 42 Fruits Medium 93270648
Nhận xét:Nhìn vào hai bảng dữ liệu, có thể thấy nhóm hàng Office Supplies và Household đạt doanh thu cao nhất ở các mức ưu tiên khác nhau. Điều này cho thấy nhu cầu của khách hàng với các mặt hàng này rất ổn định, bất kể ở mức độ ưu tiên đơn hàng là Medium, Low hay High. Đây là các nhóm sản phẩm chiến lược mang lại nguồn thu lớn cho doanh nghiệp. Trong khi đó, các nhóm như Fruits và Beverages có doanh thu thấp hơn đáng kể, kể cả khi đơn hàng được đặt ở mức độ ưu tiên Critical hoặc High. Điều này phản ánh đây là các mặt hàng không phải chủ lực, có lượng tiêu thụ hoặc giá trị đơn hàng thấp, và ít được chú trọng trên tổng thể hoạt động kinh doanh. Nhận định này giúp doanh nghiệp xác định đúng nhóm sản phẩm cần ưu tiên phát triển và tối ưu hóa danh mục sản phẩm để tăng trưởng doanh thu bền vững.
ggplot(Reve_Item_Priority, aes(x = Item, y = x, fill = Priority)) +
geom_col(position = "dodge") +
theme_minimal() +
labs(
title = "Tổng doanh thu theo loại hàng và độ ưu tiên",
x = "Loại hàng",
y = "Tổng doanh thu",
fill = "Độ ưu tiên"
)
>Nhận xét: Biểu đồ cột nhóm cho thấy dữ liệu đã được
phân loại rõ ràng theo từng loại hàng và từng mức độ ưu tiên, giúp dễ
dàng so sánh tổng doanh thu giữa các nhóm. Hầu hết các cột cùng màu
(tương ứng với các mức ưu tiên khác nhau) trong một loại hàng có chiều
cao tương đương, chỉ ra rằng mức độ ưu tiên đơn hàng không ảnh hưởng
nhiều đến biến động tổng doanh thu cho từng sản phẩm. Sự sắp xếp trực
quan này giúp nhận biết nhanh nhóm hàng nào vượt trội và nhóm nào yếu về
doanh thu, cũng như sự đồng đều giữa các ưu tiên. Office Supplies và
Household là hai nhóm tạo nguồn thu lớn nhất, đóng vai trò chủ đạo trong
tổng doanh thu của doanh nghiệp. Các loại sản phẩm như Beverages,
Fruits, Cosmetics lại có doanh thu thấp dù ở bất kỳ mức ưu tiên nào,
phản ánh nhu cầu tiêu thụ thấp hoặc không phải nhóm trọng điểm. Ngoài
ra, sự ổn định doanh thu qua các mức ưu tiên cho thấy yếu tố ưu tiên khi
đặt hàng không có tác động đáng kể lên quyết định chi tiêu của khách
hàng, vì vậy doanh nghiệp nên chú trọng vào phát triển các ngành hàng
chủ lực thay vì chỉ đẩy mạnh chính sách ưu tiên đối với các mặt hàng
tiêu thụ thấp.
Asia = Sales[Sales$Region=="Asia",]
Nhận xét:Khi lọc dữ liệu cho khu vực Asia, ta có thể phân tích sâu hơn theo từng mặt hàng. Việc tính trung bình số lợi nhuận theo từng quốc gia cho phép so sánh hiệu quả kinh doanh giữa các nước trong khu vực
library(dplyr)
Sold_asia <- Asia %>%
group_by(Country, Item.Type) %>%
summarise(
Mean_Profit = mean(Total.Profit, na.rm = TRUE),
Min_Profit = min(Total.Profit, na.rm = TRUE),
Max_Profit = max(Total.Profit, na.rm = TRUE),
Var_Profit = var(Total.Profit, na.rm = TRUE)
)
## `summarise()` has grouped output by 'Country'. You can override using the
## `.groups` argument.
print(head(Sold_asia))
## # A tibble: 6 × 6
## # Groups: Country [1]
## Country Item.Type Mean_Profit Min_Profit Max_Profit Var_Profit
## <chr> <chr> <dbl> <dbl> <dbl> <dbl>
## 1 Bangladesh Baby Food 473907. 8340. 957258. 78307809458.
## 2 Bangladesh Beverages 87226. 2192. 155848. 1599797611.
## 3 Bangladesh Cereal 526303. 48104. 881116. 66811960815.
## 4 Bangladesh Clothes 354344. 4260. 726909. 43067476230.
## 5 Bangladesh Cosmetics 838125. 50075. 1697493. 195751227673.
## 6 Bangladesh Fruits 11835. 67.5 23216. 43933791.
Nhận xét: Lợi nhuận trung bình của mặt hàng Baby Food ở đất nước Bangladesh là 473907.44. Biến mới giúp đánh giá hiệu quả kinh doanh giữa các quốc gia và sản phẩm.
####Tính tứ phân vị dựa trên bộ dữ liệu trên
q_unit <- quantile(Asia$Units.Sold, probs = c(0.25, 0.75))
print(q_unit)
## 25% 75%
## 2518 7494
Nhận xét: Giá trị tứ phân vị thứ nhất (Q1) bằng 2518 và tứ phân vị thứ ba (Q3) bằng 7494 cho thấy phần lớn các đơn hàng ở khu vực châu Á có số lượng bán nằm trong khoảng từ 2518 đến 7494 đơn vị. Đây là mức dao động khá ổn, thể hiện rằng hoạt động bán hàng ở khu vực này phân bố tương đối đều, không có sự chênh lệch quá lớn giữa các đơn hàng nhỏ và lớn. Về mặt kỹ thuật, khoảng giữa hai tứ phân vị (IQR) là 4976, thể hiện mức độ phân tán vừa phải của số lượng hàng bán. Về mặt kinh tế, điều này cho thấy thị trường tiêu thụ ở khu vực này có sức mua ổn định, không quá phụ thuộc vào một vài đơn hàng lớn mà có sự phân bổ đồng đều giữa các khách hàng.
q_profit <- quantile(Asia$Total.Profit, probs = c(0.25, 0.75))
print(q_profit)
## 25% 75%
## 97399.48 566433.75
Nhận xét: Giá trị tứ phân vị thứ nhất (Q1) bằng 97399.48 và tứ phân vị thứ ba (Q3) bằng 566433.75 phản ánh mức lợi nhuận của phần lớn các đơn hàng ở khu vực châu Á nằm trong khoảng khá rộng, từ khoảng 97 nghìn đến hơn 566 nghìn. Khoảng tứ phân vị (IQR) là 469034.27 – một con số lớn cho thấy lợi nhuận có sự phân tán mạnh, nghĩa là có sự khác biệt rõ giữa các đơn hàng có lợi nhuận thấp và cao. Về mặt kỹ thuật, điều này chứng tỏ dữ liệu lợi nhuận bị ảnh hưởng bởi một nhóm nhỏ giao dịch có giá trị cao. Về mặt kinh tế, doanh nghiệp có một cơ cấu sản phẩm đa dạng: một số mặt hàng hoặc hợp đồng đạt mức sinh lời vượt trội, trong khi phần lớn giao dịch mang lại lợi nhuận trung bình. Do đó, doanh nghiệp có thể xem xét tập trung khai thác nhóm sản phẩm có lợi nhuận cao để tăng hiệu quả kinh doanh.
Asia$PhatTrien <- ifelse(
Asia$Units.Sold < q_unit[1] & Asia$Total.Profit < q_profit[1], "Phát triển chậm",
ifelse(
Asia$Units.Sold <= q_unit[2] & Asia$Total.Profit <= q_profit[2], "Phát triển trung bình",
"Phát triển tốt"
)
)
Nhận xét: Kết quả phân loại cho thấy những đơn hàng có số lượng bán ra dưới 2518 và lợi nhuận dưới 97399.48 thuộc nhóm phát triển chậm, phản ánh các sản phẩm bán yếu hoặc mang lại hiệu quả thấp. Nhóm phát triển trung bình gồm những đơn hàng có số lượng bán ra từ 2518 đến 7494 và lợi nhuận trong khoảng 97399.48 đến 566433.75, chiếm phần lớn thị trường, biểu hiện sự ổn định trong hoạt động kinh doanh. Cuối cùng, nhóm phát triển tốt là những đơn hàng vượt trên cả hai ngưỡng này, thể hiện các sản phẩm chủ lực và mang lại lợi nhuận cao. Việc phân nhóm giúp doanh nghiệp dễ dàng nhận biết đâu là mặt hàng cần cải thiện và đâu là nhóm sản phẩm nên đầu tư thêm để gia tăng lợi nhuận.
ggplot(Asia, aes(x = Item.Type, y = Total.Profit, fill = PhatTrien)) +
geom_col(width = 0.6, position = "dodge") +
scale_fill_manual(values = c(
"Phát triển chậm" = "#ff9999", # đỏ nhạt
"Phát triển trung bình" = "#ffd966", # vàng nhạt
"Phát triển tốt" = "#90ee90" # xanh lá nhạt
)) +
theme_minimal() +
labs(
title = "Lợi nhuận trung bình theo loại hàng và mức phát triển",
x = "Loại hàng",
y = "Lợi nhuận trung bình",
fill = "Mức phát triển"
)
>Nhận xét:Biểu đồ thể hiện rõ mức lợi nhuận trung
bình của từng loại hàng tại khu vực Châu Á, xét theo ba nhóm mức độ phát
triển: phát triển chậm, trung bình và tốt. Các sản phẩm như Household,
Office Supplies, và Clothes có mức lợi nhuận trung bình cao nhất trong
nhóm “phát triển tốt” với cột màu xanh lá nổi bật, cho thấy đây là những
mặt hàng chủ lực mang lại nguồn lợi nhuận lớn cho doanh nghiệp. Nhóm
“phát triển trung bình” (vàng) cũng có nhiều loại hàng đạt mức lợi nhuận
ổn, nhưng thấp hơn nhóm “tốt”. Trong khi đó, nhóm “phát triển chậm” (đỏ)
có lợi nhuận thấp nhất ở hầu hết các loại hàng, thể hiện nhóm này chưa
khai thác tốt tiềm năng kinh doanh. Biểu đồ cho thấy sự phân hóa lợi
nhuận rõ rệt giữa các loại mặt hàng và giữa các mức phát triển. Doanh
nghiệp nên tập trung nguồn lực vào các sản phẩm đang mang lại lợi nhuận
cao (thuộc nhóm “phát triển tốt”) để duy trì và mở rộng thị phần, đồng
thời cân nhắc các biện pháp hỗ trợ, quảng bá hoặc điều chỉnh chiến lược
với các sản phẩm đạt hiệu quả thấp để cải thiện hiệu quả kinh doanh toàn
hệ thống.
install.packages(“tinytex”) tinytex::install_tinytex() tinytex::tinytex_root() install.packages(“readr”) Sys.setlocale(“LC_CTYPE”, “Vietnamese_Vietnam.1258”) install.packages(“dplyr”) library(dplyr)