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("C:/Users/nguye/Downloads/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.

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)
##     Region            Country           Item.Type         Sales.Channel     
##  Length:100000      Length:100000      Length:100000      Length:100000     
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##                                                                             
##                                                                             
##                                                                             
##  Order.Priority      Order.Date           Order.ID          Ship.Date        
##  Length:100000      Length:100000      Min.   :100008904   Length:100000     
##  Class :character   Class :character   1st Qu.:326046383   Class :character  
##  Mode  :character   Mode  :character   Median :547718512   Mode  :character  
##                                        Mean   :550395554                     
##                                        3rd Qu.:775078534                     
##                                        Max.   :999996459                     
##    Units.Sold      Unit.Price       Unit.Cost      Total.Revenue      
##  Min.   :    1   Min.   :  9.33   Min.   :  6.92   Min.   :     18.7  
##  1st Qu.: 2505   1st Qu.:109.28   1st Qu.: 56.67   1st Qu.: 279753.3  
##  Median : 5007   Median :205.70   Median :117.11   Median : 789891.6  
##  Mean   : 5001   Mean   :266.70   Mean   :188.02   Mean   :1336066.7  
##  3rd Qu.: 7495   3rd Qu.:437.20   3rd Qu.:364.69   3rd Qu.:1836489.6  
##  Max.   :10000   Max.   :668.27   Max.   :524.96   Max.   :6682700.0  
##    Total.Cost         Total.Profit      
##  Min.   :     13.8   Min.   :4.820e+00  
##  1st Qu.: 162928.3   1st Qu.:9.590e+04  
##  Median : 467937.4   Median :2.837e+05  
##  Mean   : 941975.5   Mean   :3.941e+05  
##  3rd Qu.:1209474.7   3rd Qu.:5.684e+05  
##  Max.   :5249075.0   Max.   :1.739e+06

Nhận xét:Các biến đều có độ phân tán khá lớn, thể hiện sự khác biệt giữa các đơn hàng. Trung bình, mỗi đơn hàng bán ra khoảng 5000 sản phẩm, với giá trung bình 266,7 và chi phí 188,02. Giá trị trung bình của doanh thu (1.336.066) cao hơn chi phí (941.975), cho thấy lợi nhuận trung bình của mỗi đơn hàng đạt khoảng 394.100, phản ánh hiệu quả kinh doanh tích cực.

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.Xử lý bản ghi trùng lặp

Sales[duplicated(Sales),]
## # A tibble: 0 × 14
## # ℹ 14 variables: Region <chr>, Country <chr>, Item.Type <chr>,
## #   Sales.Channel <chr>, Order.Priority <chr>, Order.Date <chr>,
## #   Order.ID <dbl>, Ship.Date <chr>, Units.Sold <dbl>, Unit.Price <dbl>,
## #   Unit.Cost <dbl>, Total.Revenue <dbl>, Total.Cost <dbl>, Total.Profit <dbl>

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

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

2.1.Phân tổ ngày đặt hàng theo năm 2014

Vì định dạng đang ở character, nên sẽ có thêm bước chuyển về dữ liệu về đúng định dạng.

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")
Sales_Year_2014 <- Sales[Sales$Year == "2014",]
print(head(Sales_Year_2014))
## # A tibble: 6 × 15
##   Region      Country Item.Type Sales.Channel Order.Priority Order.Date Order.ID
##   <chr>       <chr>   <chr>     <chr>         <chr>          <date>        <dbl>
## 1 Middle Eas… Azerba… Snacks    Online        C              2014-10-08   5.35e8
## 2 Sub-Sahara… Sao To… Personal… Online        M              2014-09-17   8.93e8
## 3 Middle Eas… Jordan  Household Offline       L              2014-07-09   2.23e8
## 4 Sub-Sahara… Comoros Beverages Offline       L              2014-08-10   5.81e8
## 5 Sub-Sahara… Zambia  Cosmetics Offline       M              2014-07-26   9.93e8
## 6 Middle Eas… Egypt   Cereal    Online        C              2014-07-14   8.88e8
## # ℹ 8 more variables: Ship.Date <chr>, Units.Sold <dbl>, Unit.Price <dbl>,
## #   Unit.Cost <dbl>, Total.Revenue <dbl>, Total.Cost <dbl>, Total.Profit <dbl>,
## #   Year <chr>

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

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)
## # A tibble: 6 × 17
##   Region      Country Item.Type Sales.Channel Order.Priority Order.Date Order.ID
##   <chr>       <chr>   <chr>     <chr>         <chr>          <date>        <dbl>
## 1 Sub-Sahara… Sao To… Fruits    Offline       M              2015-12-09   8.54e8
## 2 Europe      Malta   Household Offline       L              2015-03-10   2.44e8
## 3 Sub-Sahara… Camero… Fruits    Online        H              2015-12-18   3.70e8
## 4 Middle Eas… Morocco Vegetabl… Offline       L              2014-05-15   2.29e8
## 5 Europe      Switze… Baby Food Offline       M              2011-03-26   5.40e8
## 6 North Amer… Greenl… Fruits    Online        L              2011-07-30   1.21e8
## # ℹ 10 more variables: Ship.Date <date>, Units.Sold <dbl>, Unit.Price <dbl>,
## #   Unit.Cost <dbl>, Total.Revenue <dbl>, Total.Cost <dbl>, Total.Profit <dbl>,
## #   Year <chr>, delivery_Date <df[,1]>, Sort_Date <chr[,1]>

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:Office Supplies và Household là hai nhóm hàng có doanh thu cao nhất, cho thấy đây là nhóm hàng được tiêu thụ ổn định, có đơn hàng lớn và thường xuyên. Ngược lại, Fruits và Beverages nằm trong nhóm doanh thu thấp nhất, dù có các đơn hàng mang độ ưu tiên “Critical”, cho thấy đây là nhóm sản phẩm ít được đặt hoặc có giá trị đơn hàng thấp hơn.

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