1.Những thông tin cơ bản liên quan đến bộ dữ liệu:

1.1.Đọc dữ liệu

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.

1.2.Định nghĩa biến

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

1.3. Mô tả bộ dữ liệu

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.

1.4.Kiểm tra NA

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.

1.5.Boxplot: thể hiện sự phân bố dữ liệu

1.5.1.Units.Sold – Số lượng sản phẩm bán

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ý.

1.5.2.Unit.Price – Giá bán mỗi sản phẩm

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.

1.5.3.Unit.Cost – Chi phí sản xuất mỗi sản phẩm

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.

1.5.4.Total.Revenue – Tổng doanh thu

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.

1.5.5.Total.Cost – Tổng chi phí

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.

1.5.6.Total.Profit – Tổng lợi nhuận

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.

1.6.Xử lý bản ghi trùng lặp

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ế

1.7.Chuẩn hóa số liệu

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).

1.8.Lập bảng so sánh tổng lợi nhuận theo năm

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.

1.9.Vẽ biểu đồ

1.9.1. Biểu đồ đường so sánh tăng trưởng trung bình của các năm

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.

1.9.2. Vẽ biểu đồ lợi nhuận với chi phí sản xuất

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.

1.9.3. Vẽ biểu đồ so sánh cách chỉ tiêu lợi nhuận

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"
  )

Vẽ biểu đồ nhiều đường: lợi nhuận theo năm và chỉ tiêu

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ả.

2.Phân tổ dữ liệu

2.1.Phân tổ tổng lợi nhuân theo năm

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.

2.2.Phân tổ theo thời gian giao hàng

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.

3.Phân tích các biến

3.1.Phân tích tổng Doanh thu theo loại hàng và độ ưu tiê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.

3.1.1. Vẽ biểu đồ

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.

3.2.Phân tích khu vực Châu Á

3.2.1. Phân tích trung bình lợi nhuận được bán theo Châu á và item

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.

3.2.2. Phân tích theo mức phát triển

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.

vẽ biểu đồ lợi nhuận trung bình theo từng loại hàng và mức độ phát triể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)