1.NHỮNG THÔNG TIN CƠ BẢN LIÊN QUAN TỚI BỘ DỮ LIỆU:

1.1.Nạp thư viện và dữ liệu

Trong mục này, chúng ta sẽ nạp các thư viện R cần thiết và tải dữ liệu vào môi trường làm việ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
library(ggplot2)
library(lubridate)
## 
## Attaching package: 'lubridate'
## The following objects are masked from 'package:base':
## 
##     date, intersect, setdiff, union
library(stringr)
# Chúng ta nạp bộ dữ liệu
Amazon.Sale.Report <- read.csv("C:/Users/HONG GAM/Desktop/FILE/Amazon Sale Report.csv", header=TRUE)
View(Amazon.Sale.Report)
head(Amazon.Sale.Report)

1.2.Tổng quan dữ liệu

dim(Amazon.Sale.Report) # Xem số quan sát và số biến
## [1] 128975     24
str(Amazon.Sale.Report) # Xem kiểu dữ liệu
## 'data.frame':    128975 obs. of  24 variables:
##  $ index             : int  0 1 2 3 4 5 6 7 8 9 ...
##  $ Order.ID          : chr  "405-8078784-5731545" "171-9198151-1101146" "404-0687676-7273146" "403-9615377-8133951" ...
##  $ Date              : chr  "04-30-22" "04-30-22" "04-30-22" "04-30-22" ...
##  $ Status            : chr  "Cancelled" "Shipped - Delivered to Buyer" "Shipped" "Cancelled" ...
##  $ Fulfilment        : chr  "Merchant" "Merchant" "Amazon" "Merchant" ...
##  $ Sales.Channel     : chr  "Amazon.in" "Amazon.in" "Amazon.in" "Amazon.in" ...
##  $ ship.service.level: chr  "Standard" "Standard" "Expedited" "Standard" ...
##  $ Style             : chr  "SET389" "JNE3781" "JNE3371" "J0341" ...
##  $ SKU               : chr  "SET389-KR-NP-S" "JNE3781-KR-XXXL" "JNE3371-KR-XL" "J0341-DR-L" ...
##  $ Category          : chr  "Set" "kurta" "kurta" "Western Dress" ...
##  $ Size              : chr  "S" "3XL" "XL" "L" ...
##  $ ASIN              : chr  "B09KXVBD7Z" "B09K3WFS32" "B07WV4JV4D" "B099NRCT7B" ...
##  $ Courier.Status    : chr  "" "Shipped" "Shipped" "" ...
##  $ Qty               : int  0 1 1 0 1 1 1 1 0 1 ...
##  $ currency          : chr  "INR" "INR" "INR" "INR" ...
##  $ Amount            : num  648 406 329 753 574 ...
##  $ ship.city         : chr  "MUMBAI" "BENGALURU" "NAVI MUMBAI" "PUDUCHERRY" ...
##  $ ship.state        : chr  "MAHARASHTRA" "KARNATAKA" "MAHARASHTRA" "PUDUCHERRY" ...
##  $ ship.postal.code  : num  400081 560085 410210 605008 600073 ...
##  $ ship.country      : chr  "IN" "IN" "IN" "IN" ...
##  $ promotion.ids     : chr  "" "Amazon PLCC Free-Financing Universal Merchant AAT-WNKTBO3K27EJC,Amazon PLCC Free-Financing Universal Merchant A"| __truncated__ "IN Core Free Shipping 2015/04/08 23-48-5-108" "" ...
##  $ B2B               : chr  "False" "False" "True" "False" ...
##  $ fulfilled.by      : chr  "Easy Ship" "Easy Ship" "" "Easy Ship" ...
##  $ Unnamed..22       : chr  "" "" "" "" ...
Amazon.Sale.Report$`Unnamed: 22` <- NULL
variable_description <- data.frame(
  Variable = c(
    "index", "Order ID", "Date", "Status", "Fulfilment", "Sales Channel",
    "ship-service-level", "Courier Status", "ship-city", "ship-state", "ship-postal-code",
    "ship-country", "Style", "SKU", "Category", "Size", "ASIN", "Qty", "currency",
    "Amount", "promotion-ids", "B2B", "fulfilled-by"
  ),
  Description = c(
    "Số thứ tự của dòng, chỉ mang tính định danh cho mỗi hàng trong tệp dữ liệu.",
    "Mã duy nhất để xác định mỗi đơn hàng.",
    "Ngày diễn ra giao dịch hoặc cập nhật trạng thái đơn hàng.",
    "Tình trạng hiện tại của đơn hàng (Shipped, Cancelled, Returned, Delivered...).",
    "Bên chịu trách nhiệm xử lý và hoàn thành đơn hàng (Amazon hoặc Merchant).",
    "Kênh bán hàng, ví dụ: Amazon.in (Amazon Ấn Độ).",
    "Cấp độ dịch vụ vận chuyển được sử dụng (Standard, Expedited).",
    "Trạng thái từ phía đơn vị vận chuyển (Shipped, Unshipped, Cancelled).",
    "Thành phố giao hàng.",
    "Bang hoặc Tỉnh giao hàng.",
    "Mã bưu điện của địa chỉ giao hàng.",
    "Quốc gia của địa chỉ giao hàng (ví dụ: IN là Ấn Độ).",
    "Mã kiểu dáng hoặc phong cách của sản phẩm.",
    "Mã định danh sản phẩm trong kho (Stock Keeping Unit).",
    "Danh mục sản phẩm (ví dụ: Set, kurta, Western Dress).",
    "Kích cỡ của sản phẩm (S, M, L, XL...).",
    "Mã định danh sản phẩm duy nhất trên hệ thống Amazon (ASIN).",
    "Số lượng sản phẩm trong đơn hàng.",
    "Đơn vị tiền tệ được sử dụng (INR – Rupee Ấn Độ).",
    "Tổng số tiền của giao dịch.",
    "Mã khuyến mãi áp dụng (nếu có).",
    "Cho biết đây có phải giao dịch B2B (doanh nghiệp – doanh nghiệp) hay không.",
    "Bên thực hiện việc giao hàng cuối cùng (ví dụ: Easy Ship của Amazon)."
  )
)

# Hiển thị bảng
knitr::kable(variable_description, caption = "Bảng mô tả ý nghĩa các biến trong bộ dữ liệu Amazon Sales Report")
Bảng mô tả ý nghĩa các biến trong bộ dữ liệu Amazon Sales Report
Variable Description
index Số thứ tự của dòng, chỉ mang tính định danh cho mỗi hàng trong tệp dữ liệu.
Order ID Mã duy nhất để xác định mỗi đơn hàng.
Date Ngày diễn ra giao dịch hoặc cập nhật trạng thái đơn hàng.
Status Tình trạng hiện tại của đơn hàng (Shipped, Cancelled, Returned, Delivered…).
Fulfilment Bên chịu trách nhiệm xử lý và hoàn thành đơn hàng (Amazon hoặc Merchant).
Sales Channel Kênh bán hàng, ví dụ: Amazon.in (Amazon Ấn Độ).
ship-service-level Cấp độ dịch vụ vận chuyển được sử dụng (Standard, Expedited).
Courier Status Trạng thái từ phía đơn vị vận chuyển (Shipped, Unshipped, Cancelled).
ship-city Thành phố giao hàng.
ship-state Bang hoặc Tỉnh giao hàng.
ship-postal-code Mã bưu điện của địa chỉ giao hàng.
ship-country Quốc gia của địa chỉ giao hàng (ví dụ: IN là Ấn Độ).
Style Mã kiểu dáng hoặc phong cách của sản phẩm.
SKU Mã định danh sản phẩm trong kho (Stock Keeping Unit).
Category Danh mục sản phẩm (ví dụ: Set, kurta, Western Dress).
Size Kích cỡ của sản phẩm (S, M, L, XL…).
ASIN Mã định danh sản phẩm duy nhất trên hệ thống Amazon (ASIN).
Qty Số lượng sản phẩm trong đơn hàng.
currency Đơn vị tiền tệ được sử dụng (INR – Rupee Ấn Độ).
Amount Tổng số tiền của giao dịch.
promotion-ids Mã khuyến mãi áp dụng (nếu có).
B2B Cho biết đây có phải giao dịch B2B (doanh nghiệp – doanh nghiệp) hay không.
fulfilled-by Bên thực hiện việc giao hàng cuối cùng (ví dụ: Easy Ship của Amazon).

1.3.Kiểm tra NA

Đoạn mã này chuẩn hóa dữ liệu chữ, biến các ô trống (““) thành NA để thống nhất biểu diễn giá trị thiếu.Hàm colSums(is.na()) dùng để đếm số lượng giá trị NA trong từng biến, hỗ trợ cho bước đánh giá chất lượng dữ liệu.

Amazon.Sale.Report <- Amazon.Sale.Report %>% mutate(across(where(is.character), ~na_if(., "")))
colSums(is.na(Amazon.Sale.Report))
##              index           Order.ID               Date             Status 
##                  0                  0                  0                  0 
##         Fulfilment      Sales.Channel ship.service.level              Style 
##                  0                  0                  0                  0 
##                SKU           Category               Size               ASIN 
##                  0                  0                  0                  0 
##     Courier.Status                Qty           currency             Amount 
##               6872                  0               7795               7795 
##          ship.city         ship.state   ship.postal.code       ship.country 
##                 33                 33                 33                 33 
##      promotion.ids                B2B       fulfilled.by        Unnamed..22 
##              49153                  0              89698              49050
mean_amount <- mean(Amazon.Sale.Report$Amount, na.rm = TRUE)
Amazon.Sale.Report$Amount[is.na(Amazon.Sale.Report$Amount)] <- mean_amount

Sau khi kiểm tra NA thay thế tất cả các giá trị NA trong cột ‘Amount’ bằng giá trị trung bình vừa tính

1.4.Kiểm tra giá trị lặp lại

sum(duplicated(Amazon.Sale.Report))
## [1] 0

2.PHÂN TỔ CÁC BIẾN

#Phân tổ theo tháng
amazon_sales_processed <- Amazon.Sale.Report %>% mutate(Date = mdy(Date), Month = month(Date))
monthly_revenue <- amazon_sales_processed %>% group_by(Month) %>% 
summarise(Total_Revenue = sum(Amount, na.rm = TRUE), N_Orders = n(), 
Avg_Amount = mean(Amount, na.rm = TRUE),.groups = 'drop' ) %>% arrange(Month)
print(monthly_revenue)
## # A tibble: 4 × 4
##   Month Total_Revenue N_Orders Avg_Amount
##   <dbl>         <dbl>    <int>      <dbl>
## 1     3       107521.      171       629.
## 2     4     30783744.    49067       627.
## 3     5     27850475.    42040       662.
## 4     6     24906475.    37697       661.
#Phân tổ theo danh mục và kích cỡ
product_performance <- Amazon.Sale.Report %>%group_by(Category, Size) %>% 
summarise( TotalQuantitySold = sum(Qty, na.rm = TRUE), 
TotalRevenue = sum(Amount, na.rm = TRUE)) %>%
arrange(desc(TotalQuantitySold)) 
## `summarise()` has grouped output by 'Category'. You can override using the
## `.groups` argument.
print(head(product_performance, 10))
## # A tibble: 10 × 4
## # Groups:   Category [2]
##    Category Size  TotalQuantitySold TotalRevenue
##    <chr>    <chr>             <int>        <dbl>
##  1 Set      M                  8357     7697186.
##  2 kurta    L                  8043     4106038.
##  3 kurta    XL                 7838     3964306.
##  4 kurta    M                  7713     3935559.
##  5 Set      L                  7399     6680292.
##  6 kurta    XXL                6952     3526534.
##  7 Set      XL                 6873     6204830.
##  8 Set      S                  6708     6200377.
##  9 Set      XXL                5608     5017806.
## 10 Set      3XL                5287     4725477.
#Phân tổ theo bang và theo doanh thu
state_sales <- Amazon.Sale.Report %>%group_by(ship.state) %>% 
summarise(TotalRevenue = sum(Amount, na.rm = TRUE), TotalQuantity = sum(Qty, na.rm = TRUE), 
OrderCount = n()) %>% arrange(desc(TotalRevenue))
print(head(state_sales, 10))
## # A tibble: 10 × 4
##    ship.state     TotalRevenue TotalQuantity OrderCount
##    <chr>                 <dbl>         <int>      <int>
##  1 MAHARASHTRA       14105377.         20328      22260
##  2 KARNATAKA         11085574.         15901      17326
##  3 TELANGANA          7366069.         10253      11330
##  4 UTTAR PRADESH      7264798.          9499      10638
##  5 TAMIL NADU         6952781.         10412      11483
##  6 DELHI              4487506.          6156       6782
##  7 KERALA             4111703.          5813       6585
##  8 WEST BENGAL        3777682.          5318       5963
##  9 ANDHRA PRADESH     3463042.          4819       5430
## 10 HARYANA            3029316.          4066       4415
#Phân tổ theo trạng thái và doanh thu.
summary_by_status <- Amazon.Sale.Report %>% group_by(Status) %>% 
summarise(Total_Amount = sum(Amount, na.rm = TRUE), N_Orders = n(), 
Avg_Amount = mean(Amount, na.rm = TRUE),.groups = 'drop' ) %>% 
arrange(desc(N_Orders))
print(summary_by_status)
## # A tibble: 13 × 4
##    Status                        Total_Amount N_Orders Avg_Amount
##    <chr>                                <dbl>    <int>      <dbl>
##  1 Shipped                          50459156.    77804       649.
##  2 Shipped - Delivered to Buyer     18656003.    28769       648.
##  3 Cancelled                        11826300.    18332       645.
##  4 Shipped - Returned to Seller      1271590.     1953       651.
##  5 Shipped - Picked Up                661252       973       680.
##  6 Pending                            431568.      658       656.
##  7 Pending - Waiting for Pick Up      192138       281       684.
##  8 Shipped - Returning to Seller      107620       145       742.
##  9 Shipped - Out for Delivery          26971        35       771.
## 10 Shipped - Rejected by Buyer          7295        11       663.
## 11 Shipping                             5188.        8       649.
## 12 Shipped - Lost in Transit            1997         5       399.
## 13 Shipped - Damaged                    1136         1      1136
#Phân tổ theo trạng thái và theo tháng
amazon_sales_processed <- Amazon.Sale.Report %>%mutate(Date = mdy(Date), 
Month = month(Date))
summary_status_by_month <- amazon_sales_processed %>% group_by(Month, Status) %>% 
summarise(N_Orders = n(), Total_Amount = sum(Amount, na.rm = TRUE),
.groups = 'drop' ) %>% arrange(Month, desc(N_Orders))
print(summary_status_by_month)
## # A tibble: 35 × 4
##    Month Status                       N_Orders Total_Amount
##    <dbl> <chr>                           <int>        <dbl>
##  1     3 Shipped                           136       84662.
##  2     3 Cancelled                          18       12062.
##  3     3 Shipped - Delivered to Buyer       16       10170 
##  4     3 Shipped - Returned to Seller        1         627 
##  5     4 Shipped                         28941    18267282.
##  6     4 Shipped - Delivered to Buyer    12080     7456672.
##  7     4 Cancelled                        7137     4490205.
##  8     4 Shipped - Returned to Seller      893      559636 
##  9     4 Shipped - Rejected by Buyer         6        3396 
## 10     4 Shipped - Picked Up                 4        2798 
## # ℹ 25 more rows

3.PHÂN TÍCH CÁC BIẾN

3.1.Biến Amount

summary(Amazon.Sale.Report$Amount)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##     0.0   459.0   635.0   648.6   771.0  5584.0
mean(Amazon.Sale.Report$Amount, na.rm = TRUE)
## [1] 648.5615
median(Amazon.Sale.Report$Amount, na.rm = TRUE)
## [1] 635
sd(Amazon.Sale.Report$Amount, na.rm = TRUE)
## [1] 272.5812
min(Amazon.Sale.Report$Amount)
## [1] 0
max(Amazon.Sale.Report$Amount)
## [1] 5584
#Kiểm tra tổng số giá trị NA trong biến
sum(is.na(Amazon.Sale.Report$Amount))
## [1] 0
#Lọc các đơn hàng có giá trị (Amount) LỚN HƠN giá trị trung bình vừa tính
avg_amount_overall <- mean(Amazon.Sale.Report$Amount, na.rm = TRUE)
high_value_orders <- Amazon.Sale.Report %>% filter(Amount > avg_amount_overall) %>% group_by(Status) %>% summarise(N_HighValue = n()) %>% arrange(desc(N_HighValue))
print(high_value_orders)
## # A tibble: 12 × 2
##    Status                        N_HighValue
##    <chr>                               <int>
##  1 Shipped                             33394
##  2 Shipped - Delivered to Buyer        13638
##  3 Cancelled                            4729
##  4 Shipped - Returned to Seller          927
##  5 Shipped - Picked Up                   540
##  6 Pending                               309
##  7 Pending - Waiting for Pick Up         167
##  8 Shipped - Returning to Seller          94
##  9 Shipped - Out for Delivery             25
## 10 Shipped - Rejected by Buyer             6
## 11 Shipped - Damaged                       1
## 12 Shipped - Lost in Transit               1

3.2.Biến Status

# Kiểm tra kiểu dữ liệu
str(Amazon.Sale.Report$Status)
##  chr [1:128975] "Cancelled" "Shipped - Delivered to Buyer" "Shipped" ...
# Kiểm tra giá trị khác nhau trong biến
unique(Amazon.Sale.Report$Status)
##  [1] "Cancelled"                     "Shipped - Delivered to Buyer" 
##  [3] "Shipped"                       "Shipped - Returned to Seller" 
##  [5] "Shipped - Rejected by Buyer"   "Shipped - Lost in Transit"    
##  [7] "Shipped - Out for Delivery"    "Shipped - Returning to Seller"
##  [9] "Shipped - Picked Up"           "Pending"                      
## [11] "Pending - Waiting for Pick Up" "Shipped - Damaged"            
## [13] "Shipping"
length(unique(Amazon.Sale.Report$Status))
## [1] 13
table(Amazon.Sale.Report$Status)
## 
##                     Cancelled                       Pending 
##                         18332                           658 
## Pending - Waiting for Pick Up                       Shipped 
##                           281                         77804 
##             Shipped - Damaged  Shipped - Delivered to Buyer 
##                             1                         28769 
##     Shipped - Lost in Transit    Shipped - Out for Delivery 
##                             5                            35 
##           Shipped - Picked Up   Shipped - Rejected by Buyer 
##                           973                            11 
##  Shipped - Returned to Seller Shipped - Returning to Seller 
##                          1953                           145 
##                      Shipping 
##                             8
# Chuẩn hóa lại viết hoa chữ cái đầu cho đẹp
Amazon.Sale.Report <- Amazon.Sale.Report %>%
  mutate(Status = tools::toTitleCase(Status))
# Kiểm tra lại các giá trị khác nhau
unique(Amazon.Sale.Report$Status)
##  [1] "Cancelled"                     "Shipped - Delivered to Buyer" 
##  [3] "Shipped"                       "Shipped - Returned to Seller" 
##  [5] "Shipped - Rejected by Buyer"   "Shipped - Lost in Transit"    
##  [7] "Shipped - Out for Delivery"    "Shipped - Returning to Seller"
##  [9] "Shipped - Picked Up"           "Pending"                      
## [11] "Pending - Waiting for Pick Up" "Shipped - Damaged"            
## [13] "Shipping"
sum(is.na(Amazon.Sale.Report$Status) | Amazon.Sale.Report$Status == "")
## [1] 0
Amazon.Sale.Report$Status[is.na(Amazon.Sale.Report$Status) | Amazon.Sale.Report$Status == ""] <- "Unknown"

3.3.BIẾN Fulfilment

str(Amazon.Sale.Report$Fulfilment)
##  chr [1:128975] "Merchant" "Merchant" "Amazon" "Merchant" "Amazon" "Amazon" ...
unique(Amazon.Sale.Report$Fulfilment)
## [1] "Merchant" "Amazon"
length(unique(Amazon.Sale.Report$Fulfilment))
## [1] 2
table(Amazon.Sale.Report$Fulfilment)
## 
##   Amazon Merchant 
##    89698    39277
sum(is.na(Amazon.Sale.Report$Fulfilment) | Amazon.Sale.Report$Fulfilment == "")
## [1] 0
orders <- Amazon.Sale.Report %>% filter(Fulfilment == "Amazon")
print(head(orders, 10))
##    index            Order.ID     Date    Status Fulfilment Sales.Channel
## 1      2 404-0687676-7273146 04-30-22   Shipped     Amazon     Amazon.in
## 2      4 407-1069790-7240320 04-30-22   Shipped     Amazon     Amazon.in
## 3      5 404-1490984-4578765 04-30-22   Shipped     Amazon     Amazon.in
## 4      6 408-5748499-6859555 04-30-22   Shipped     Amazon     Amazon.in
## 5      8 407-5443024-5233168 04-30-22 Cancelled     Amazon     Amazon.in
## 6      9 402-4393761-0311520 04-30-22   Shipped     Amazon     Amazon.in
## 7     10 407-5633625-6970741 04-30-22   Shipped     Amazon     Amazon.in
## 8     11 171-4638481-6326716 04-30-22   Shipped     Amazon     Amazon.in
## 9     13 408-7955685-3083534 04-30-22   Shipped     Amazon     Amazon.in
## 10    16 406-9379318-6555504 04-30-22   Shipped     Amazon     Amazon.in
##    ship.service.level   Style                 SKU Category Size       ASIN
## 1           Expedited JNE3371       JNE3371-KR-XL    kurta   XL B07WV4JV4D
## 2           Expedited JNE3671     JNE3671-TU-XXXL      Top  3XL B098714BZP
## 3           Expedited  SET264     SET264-KR-NP-XL      Set   XL B08YN7XDSG
## 4           Expedited   J0095         J0095-SET-L      Set    L B08CMHNWBN
## 5           Expedited  SET200 SET200-KR-NP-A-XXXL      Set  3XL B08L91ZZXN
## 6           Expedited JNE3461      JNE3461-KR-XXL    kurta  XXL B08B3XF5MH
## 7           Expedited JNE3160      JNE3160-KR-G-S    kurta    S B07K3YQLF1
## 8           Expedited JNE3500       JNE3500-KR-XS    kurta   XS B098117DJ3
## 9           Expedited  SET182     SET182-KR-DH-XS      Set   XS B085HS947T
## 10          Expedited JNE3721      JNE3721-KR-XXL    kurta  XXL B099FCT65D
##    Courier.Status Qty currency   Amount   ship.city    ship.state
## 1         Shipped   1      INR 329.0000 NAVI MUMBAI   MAHARASHTRA
## 2         Shipped   1      INR 574.0000     CHENNAI    TAMIL NADU
## 3         Shipped   1      INR 824.0000   GHAZIABAD UTTAR PRADESH
## 4         Shipped   1      INR 653.0000  CHANDIGARH    CHANDIGARH
## 5       Cancelled   0     <NA> 648.5615   HYDERABAD     TELANGANA
## 6         Shipped   1      INR 363.0000     Chennai    TAMIL NADU
## 7         Shipped   1      INR 685.0000     CHENNAI    TAMIL NADU
## 8         Shipped   1      INR 364.0000       NOIDA UTTAR PRADESH
## 9         Shipped   1      INR 657.0000      MUMBAI   MAHARASHTRA
## 10        Shipped   1      INR 329.0000      JAIPUR     RAJASTHAN
##    ship.postal.code ship.country                                promotion.ids
## 1            410210           IN IN Core Free Shipping 2015/04/08 23-48-5-108
## 2            600073           IN                                         <NA>
## 3            201102           IN IN Core Free Shipping 2015/04/08 23-48-5-108
## 4            160036           IN IN Core Free Shipping 2015/04/08 23-48-5-108
## 5            500008           IN IN Core Free Shipping 2015/04/08 23-48-5-108
## 6            600041           IN                                         <NA>
## 7            600073           IN                                         <NA>
## 8            201303           IN                                         <NA>
## 9            400053           IN                                         <NA>
## 10           302020           IN IN Core Free Shipping 2015/04/08 23-48-5-108
##      B2B fulfilled.by Unnamed..22
## 1   True         <NA>        <NA>
## 2  False         <NA>        <NA>
## 3  False         <NA>        <NA>
## 4  False         <NA>        <NA>
## 5  False         <NA>        <NA>
## 6  False         <NA>        <NA>
## 7  False         <NA>        <NA>
## 8  False         <NA>        <NA>
## 9  False         <NA>        <NA>
## 10 False         <NA>        <NA>
#Thống kê tần suất và tỷ lệ phần trăm 
fulfilment_summary <- Amazon.Sale.Report %>%
  count(Fulfilment, sort = TRUE) %>%
  mutate(Percent = round(100 * n / sum(n), 2))
library(dplyr)