Bộ dữ liệu “Orders_Sales_Data” được chúng em chọn lựa trên website
Kaggle, bộ dữ liệu thể hiện về mặt thống kê qua hoạt động mua hàng và
được lưu lại dưới dạng dữ liệu của từng đối tượng.Phân tích bộ dữ liệu
trên giúp các
nhà đầu tư lựa chọn danh mục hàng hóa nên đầu tư mạnh và ngược lại, hiểu
được bản chất là hãy để dữ liệu biết nói cho chúng ta hiểu qua các bước
mà nhóm em chuẩn bị phân tích sau .
# Đọc dữ liệu
data <- read.csv("C:/Users/CHI LINH/Downloads/Sales_Orders_Data.csv", sep = ";")
# Kiểm tra cấu trúc cơ bản của dataset
cat("=== THÔNG TIN CƠ BẢN VỀ BỘ DỮ LIỆU ===\n")## === THÔNG TIN CƠ BẢN VỀ BỘ DỮ LIỆU ===
## Số quan sát (dòng): 1048575
## Số biến (cột): 11
## Số quan sát trùng lặp: 0
## DỮ LIỆU THIẾU THEO TỪNG CỘT:
## Order_ID Customer_ID Customer_Type Product Category
## 0 0 0 0 0
## Unit_Price Quantity Discount Total_Price Region
## 0 0 0 0 0
## Order_Date
## 0
# Giải thích ý nghĩa các biến trong dữ liệu
library(knitr)
thong_tin_bien <- data.frame(
"Tên Biến" = c("Order_ID", "Customer_ID", "Customer_Type", "Product",
"Category", "Unit_Price", "Quantity", "Discount",
"Total_Price", "Region", "Order_Date"),
"Mô Tả" = c(
"Mã đơn hàng (định danh duy nhất cho mỗi đơn hàng)",
"Mã khách hàng (định danh khách hàng)",
"Phân loại khách hàng (B2B - Doanh nghiệp/B2C - Cá nhân)",
"Tên sản phẩm",
"Danh mục sản phẩm",
"Đơn giá sản phẩm",
"Số lượng sản phẩm trong đơn hàng",
"Tỷ lệ chiết khấu áp dụng (%)",
"Tổng giá trị đơn hàng (sau chiết khấu)",
"Khu vực địa lý",
"Ngày đặt hàng"
)
)
cat("=== Ý NGHĨA CÁC BIẾN TRONG DATASET ===\n")## === Ý NGHĨA CÁC BIẾN TRONG DATASET ===
| Tên.Biến | Mô.Tả |
|---|---|
| Order_ID | Mã đơn hàng (định danh duy nhất cho mỗi đơn hàng) |
| Customer_ID | Mã khách hàng (định danh khách hàng) |
| Customer_Type | Phân loại khách hàng (B2B - Doanh nghiệp/B2C - Cá nhân) |
| Product | Tên sản phẩm |
| Category | Danh mục sản phẩm |
| Unit_Price | Đơn giá sản phẩm |
| Quantity | Số lượng sản phẩm trong đơn hàng |
| Discount | Tỷ lệ chiết khấu áp dụng (%) |
| Total_Price | Tổng giá trị đơn hàng (sau chiết khấu) |
| Region | Khu vực địa lý |
| Order_Date | Ngày đặt hàng |
## === CẤU TRÚC DỮ LIỆU ===
## 'data.frame': 1048575 obs. of 11 variables:
## $ Order_ID : chr "ORD1" "ORD1" "ORD1" "ORD1" ...
## $ Customer_ID : chr "CUS1496" "CUS1496" "CUS1496" "CUS1496" ...
## $ Customer_Type: chr "B2B" "B2B" "B2B" "B2B" ...
## $ Product : chr "Vio Wasser" "Evian" "Sprite" "Rauch Multivitamin" ...
## $ Category : chr "Water" "Water" "Soft Drinks" "Juices" ...
## $ Unit_Price : num 1.66 1.56 1.17 3.22 0.87 9.09 2.14 0.43 1.21 1.38 ...
## $ Quantity : int 53 90 73 59 35 2 44 13 92 3 ...
## $ Discount : num 0.1 0.1 0.05 0.1 0.1 0 0.1 0.05 0.1 0.05 ...
## $ Total_Price : num 79.2 126.4 81.1 171 27.4 ...
## $ Region : chr "Baden-Württemberg" "Baden-Württemberg" "Baden-Württemberg" "Baden-Württemberg" ...
## $ Order_Date : chr "23/08/2023" "23/08/2023" "23/08/2023" "23/08/2023" ...
## Order_ID Customer_ID Customer_Type Product
## Length:1048575 Length:1048575 Length:1048575 Length:1048575
## Class :character Class :character Class :character Class :character
## Mode :character Mode :character Mode :character Mode :character
##
##
##
## Category Unit_Price Quantity Discount
## Length:1048575 Min. : 0.320 Min. : 1.00 Min. :0.00000
## Class :character 1st Qu.: 1.050 1st Qu.: 6.00 1st Qu.:0.00000
## Mode :character Median : 1.750 Median : 11.00 Median :0.00000
## Mean : 5.847 Mean : 23.14 Mean :0.02973
## 3rd Qu.: 3.210 3rd Qu.: 30.00 3rd Qu.:0.05000
## Max. :160.440 Max. :100.00 Max. :0.15000
## Total_Price Region Order_Date
## Min. : 0.30 Length:1048575 Length:1048575
## 1st Qu.: 8.40 Class :character Class :character
## Median : 21.14 Mode :character Mode :character
## Mean : 130.98
## 3rd Qu.: 69.77
## Max. :12682.78
GIẢI THÍCH PHẦN 2:
Đoạn code R đầu tiên thực hiện các bước kiểm tra cơ bản để đánh giá chất lượng và quy mô của bộ dữ liệu. Kết quả từ các lệnh nrow, ncol, sum(duplicated(data)) và sapply(…) cho thấy:
Bộ dữ liệu rất lớn, bao gồm 1,048,575 giao dịch và 11 đặc điểm (cột).
Dữ liệu hoàn toàn sạch, không có dòng nào bị trùng lặp và không có giá trị nào bị thiếu. Điều này cho thấy dữ liệu đã sẵn sàng cho việc phân tích mà không cần các bước xử lý phức tạp.
# Chuyển đổi kiểu dữ liệu cho các biến phân loại và ngày tháng
data$Order_Date <- as.Date(data$Order_Date, format = "%d/%m/%Y")
data$Customer_Type <- as.factor(data$Customer_Type)
data$Category <- as.factor(data$Category)
data$Region <- as.factor(data$Region)
# Kiểm tra lại cấu trúc sau khi chuyển đổi
cat("=== CẤU TRÚC DỮ LIỆU SAU KHI CHUYỂN ĐỔI ===\n")## === CẤU TRÚC DỮ LIỆU SAU KHI CHUYỂN ĐỔI ===
## 'data.frame': 1048575 obs. of 11 variables:
## $ Order_ID : chr "ORD1" "ORD1" "ORD1" "ORD1" ...
## $ Customer_ID : chr "CUS1496" "CUS1496" "CUS1496" "CUS1496" ...
## $ Customer_Type: Factor w/ 2 levels "B2B","B2C": 1 1 1 1 1 2 1 1 1 1 ...
## $ Product : chr "Vio Wasser" "Evian" "Sprite" "Rauch Multivitamin" ...
## $ Category : Factor w/ 4 levels "Alcoholic Beverages",..: 4 4 3 2 4 1 2 4 4 4 ...
## $ Unit_Price : num 1.66 1.56 1.17 3.22 0.87 9.09 2.14 0.43 1.21 1.38 ...
## $ Quantity : int 53 90 73 59 35 2 44 13 92 3 ...
## $ Discount : num 0.1 0.1 0.05 0.1 0.1 0 0.1 0.05 0.1 0.05 ...
## $ Total_Price : num 79.2 126.4 81.1 171 27.4 ...
## $ Region : Factor w/ 16 levels "Baden-Württemberg",..: 1 1 1 1 1 15 6 6 6 6 ...
## $ Order_Date : Date, format: "2023-08-23" "2023-08-23" ...
# Tạo các biến mới phục vụ phân tích
library(dplyr)
data <- data %>%
mutate(
Month = format(Order_Date, "%Y-%m"),
Year = format(Order_Date, "%Y"),
Quarter = quarters(Order_Date),
Day_of_Week = weekdays(Order_Date),
Revenue_Before_Discount = Unit_Price * Quantity,
Discount_Amount = Revenue_Before_Discount * Discount,
Is_High_Discount = Discount > 0.1,
Discount_Category = case_when(
Discount == 0 ~ "No Discount",
Discount <= 0.05 ~ "Low Discount",
Discount <= 0.1 ~ "Medium Discount",
TRUE ~ "High Discount"
),
Order_Size = case_when(
Total_Price < 100 ~ "Small",
Total_Price < 500 ~ "Medium",
Total_Price < 1000 ~ "Large",
TRUE ~ "Very Large"
)
)
head(data,20)## Order_ID Customer_ID Customer_Type Product Category
## 1 ORD1 CUS1496 B2B Vio Wasser Water
## 2 ORD1 CUS1496 B2B Evian Water
## 3 ORD1 CUS1496 B2B Sprite Soft Drinks
## 4 ORD1 CUS1496 B2B Rauch Multivitamin Juices
## 5 ORD1 CUS1496 B2B Gerolsteiner Water
## 6 ORD2 CUS2847 B2C Sauvignon Blanc Alcoholic Beverages
## 7 ORD3 CUS1806 B2B Tomato Juice Juices
## 8 ORD3 CUS1806 B2B Vittel Water
## 9 ORD3 CUS1806 B2B San Pellegrino Water
## 10 ORD3 CUS1806 B2B Evian Water
## 11 ORD4 CUS2275 B2C Mountain Dew Soft Drinks
## 12 ORD5 CUS7919 B2B Hohes C Orange Juices
## 13 ORD5 CUS7919 B2B Red Bull Soft Drinks
## 14 ORD5 CUS7919 B2B Chardonnay Alcoholic Beverages
## 15 ORD5 CUS7919 B2B Tanqueray Alcoholic Beverages
## 16 ORD6 CUS533 B2B Rotkäppchen Sekt Alcoholic Beverages
## 17 ORD6 CUS533 B2B Mango Juice Juices
## 18 ORD6 CUS533 B2B Apollinaris Water
## 19 ORD6 CUS533 B2B Mountain Dew Soft Drinks
## 20 ORD6 CUS533 B2B Riesling Alcoholic Beverages
## Unit_Price Quantity Discount Total_Price Region Order_Date
## 1 1.66 53 0.10 79.18 Baden-Württemberg 2023-08-23
## 2 1.56 90 0.10 126.36 Baden-Württemberg 2023-08-23
## 3 1.17 73 0.05 81.14 Baden-Württemberg 2023-08-23
## 4 3.22 59 0.10 170.98 Baden-Württemberg 2023-08-23
## 5 0.87 35 0.10 27.40 Baden-Württemberg 2023-08-23
## 6 9.09 2 0.00 18.18 Schleswig-Holstein 2023-03-16
## 7 2.14 44 0.10 84.74 Hamburg 2022-11-20
## 8 0.43 13 0.05 5.31 Hamburg 2022-11-20
## 9 1.21 92 0.10 100.19 Hamburg 2022-11-20
## 10 1.38 3 0.05 3.93 Hamburg 2022-11-20
## 11 0.99 11 0.00 10.89 Bayern 2023-11-05
## 12 1.52 8 0.05 11.55 Bayern 2023-08-05
## 13 2.13 16 0.05 32.38 Bayern 2023-08-05
## 14 6.45 3 0.05 18.38 Bayern 2023-08-05
## 15 33.36 43 0.15 1219.31 Bayern 2023-08-05
## 16 5.89 44 0.05 246.20 Saarland 2023-02-18
## 17 2.50 10 0.05 23.75 Saarland 2023-02-18
## 18 0.82 13 0.05 10.13 Saarland 2023-02-18
## 19 1.87 89 0.15 141.47 Saarland 2023-02-18
## 20 11.48 21 0.05 229.03 Saarland 2023-02-18
## Month Year Quarter Day_of_Week Revenue_Before_Discount Discount_Amount
## 1 2023-08 2023 Q3 Thứ Tư 87.98 8.7980
## 2 2023-08 2023 Q3 Thứ Tư 140.40 14.0400
## 3 2023-08 2023 Q3 Thứ Tư 85.41 4.2705
## 4 2023-08 2023 Q3 Thứ Tư 189.98 18.9980
## 5 2023-08 2023 Q3 Thứ Tư 30.45 3.0450
## 6 2023-03 2023 Q1 Thứ Năm 18.18 0.0000
## 7 2022-11 2022 Q4 Chủ Nhật 94.16 9.4160
## 8 2022-11 2022 Q4 Chủ Nhật 5.59 0.2795
## 9 2022-11 2022 Q4 Chủ Nhật 111.32 11.1320
## 10 2022-11 2022 Q4 Chủ Nhật 4.14 0.2070
## 11 2023-11 2023 Q4 Chủ Nhật 10.89 0.0000
## 12 2023-08 2023 Q3 Thứ Bảy 12.16 0.6080
## 13 2023-08 2023 Q3 Thứ Bảy 34.08 1.7040
## 14 2023-08 2023 Q3 Thứ Bảy 19.35 0.9675
## 15 2023-08 2023 Q3 Thứ Bảy 1434.48 215.1720
## 16 2023-02 2023 Q1 Thứ Bảy 259.16 12.9580
## 17 2023-02 2023 Q1 Thứ Bảy 25.00 1.2500
## 18 2023-02 2023 Q1 Thứ Bảy 10.66 0.5330
## 19 2023-02 2023 Q1 Thứ Bảy 166.43 24.9645
## 20 2023-02 2023 Q1 Thứ Bảy 241.08 12.0540
## Is_High_Discount Discount_Category Order_Size
## 1 FALSE Medium Discount Small
## 2 FALSE Medium Discount Medium
## 3 FALSE Low Discount Small
## 4 FALSE Medium Discount Medium
## 5 FALSE Medium Discount Small
## 6 FALSE No Discount Small
## 7 FALSE Medium Discount Small
## 8 FALSE Low Discount Small
## 9 FALSE Medium Discount Medium
## 10 FALSE Low Discount Small
## 11 FALSE No Discount Small
## 12 FALSE Low Discount Small
## 13 FALSE Low Discount Small
## 14 FALSE Low Discount Small
## 15 TRUE High Discount Very Large
## 16 FALSE Low Discount Medium
## 17 FALSE Low Discount Small
## 18 FALSE Low Discount Small
## 19 TRUE High Discount Medium
## 20 FALSE Low Discount Medium
GIẢI THÍCH PHẦN 3:
Để phục vụ cho việc phân tích, code đã thực hiện các bước chuẩn hóa và tạo thêm dữ liệu mới:
Chuyển đổi kiểu dữ liệu: Sử dụng các lệnh as.Date và as.factor để chuyển đổi các cột Order_Date, Customer_Type, Category, và Region sang đúng định dạng ngày tháng và phân loại, giúp R hiểu và xử lý dữ liệu một cách chính xác.
Tạo biến mới: Dùng lệnh mutate để tạo ra các cột mới như Month, Year, Revenue_Before_Discount (Doanh thu trước giảm giá), và Discount_Category (Phân loại mức giảm giá). Các biến này rất hữu ích để phân tích sâu hơn về xu hướng theo thời gian và hiệu quả của các chương trình khuyến mãi.
library(dplyr)
# Phân tích hiệu suất bán hàng theo loại khách hàng và khu vực
customer_region_summary <- data %>%
group_by(Customer_Type, Region) %>%
summarise(
Total_Orders = n_distinct(Order_ID), # Tổng số đơn hàng
Total_Revenue = sum(Total_Price), # Tổng doanh thu
Avg_Order_Value = mean(Total_Price), # Giá trị đơn hàng trung bình
.groups = 'drop'
)
cat("=== PHÂN TÍCH HIỆU SUẤT THEO LOẠI KHÁCH HÀNG VÀ KHU VỰC ===\n")## === PHÂN TÍCH HIỆU SUẤT THEO LOẠI KHÁCH HÀNG VÀ KHU VỰC ===
## # A tibble: 32 × 5
## Customer_Type Region Total_Orders Total_Revenue Avg_Order_Value
## <fct> <fct> <int> <dbl> <dbl>
## 1 B2B Baden-Württemberg 7399 6296401. 282.
## 2 B2B Bayern 7453 6426283. 286.
## 3 B2B Berlin 7725 6880328. 298.
## 4 B2B Brandenburg 7403 6525847. 292.
## 5 B2B Bremen 7977 5761768. 241.
## 6 B2B Hamburg 8705 7480221. 287.
## 7 B2B Hessen 8337 7249384. 289.
## 8 B2B Mecklenburg-Vorpomm… 8225 7227687. 295.
## 9 B2B Niedersachsen 7248 6109817. 278.
## 10 B2B Nordrhein-Westfalen 7523 6060823. 270.
## # ℹ 22 more rows
GIẢI THÍCH 4.1:
# Phân tích xu hướng bán hàng theo danh mục và thời gian
category_monthly_summary <- data %>%
group_by(Category, Month) %>%
summarise(
Total_Quantity = sum(Quantity), # Tổng số lượng bán ra
Total_Revenue = sum(Total_Price), # Tổng doanh thu
Avg_Unit_Price = mean(Unit_Price), # Giá bán trung bình
.groups = 'drop'
)
cat("=== PHÂN TÍCH THEO DANH MỤC SẢN PHẨM VÀ THÁNG (10 DÒNG ĐẦU) ===\n")## === PHÂN TÍCH THEO DANH MỤC SẢN PHẨM VÀ THÁNG (10 DÒNG ĐẦU) ===
## # A tibble: 10 × 5
## Category Month Total_Quantity Total_Revenue Avg_Unit_Price
## <fct> <chr> <int> <dbl> <dbl>
## 1 Alcoholic Beverages 2021-01 170963 2973048. 17.4
## 2 Alcoholic Beverages 2021-02 156497 2683922. 17.8
## 3 Alcoholic Beverages 2021-03 168305 2812860. 17.7
## 4 Alcoholic Beverages 2021-04 170120 2815952. 17.6
## 5 Alcoholic Beverages 2021-05 167744 2865023. 17.5
## 6 Alcoholic Beverages 2021-06 172310 2910454. 17.4
## 7 Alcoholic Beverages 2021-07 171715 2841055. 17.3
## 8 Alcoholic Beverages 2021-08 170586 2948309. 17.5
## 9 Alcoholic Beverages 2021-09 162690 2784813. 17.3
## 10 Alcoholic Beverages 2021-10 170464 2906880. 17.7
GIẢI THÍCH 4.2:
# Phân tích hiệu quả của các mức chiết khấu khác nhau
discount_analysis <- data %>%
group_by(Discount_Group = cut(Discount,
breaks = c(-0.1, 0, 0.05, 0.1, 0.15, 1),
labels = c("0%", "0-5%", "5-10%", "10-15%", ">15%"))) %>%
summarise(
Number_of_Orders = n(), # Số lượng đơn hàng
Total_Revenue = sum(Total_Price), # Tổng doanh thu
Avg_Order_Value = mean(Total_Price), # Giá trị đơn hàng trung bình
.groups = 'drop'
)
cat("=== PHÂN TÍCH HIỆU QUẢ CHIẾT KHẤU ===\n")## === PHÂN TÍCH HIỆU QUẢ CHIẾT KHẤU ===
## # A tibble: 4 × 4
## Discount_Group Number_of_Orders Total_Revenue Avg_Order_Value
## <fct> <int> <dbl> <dbl>
## 1 0% 674968 32189768. 47.7
## 2 0-5% 168122 28801144. 171.
## 3 5-10% 161028 57373493. 356.
## 4 10-15% 44457 18976217. 427.
GIẢI THÍCH 4.3:
library(ggplot2)
library(scales)
# Bảng tần số và tần suất cho biến Total_Price
price_intervals <- cut(data$Total_Price,
breaks = c(0, 100, 500, 1000, 5000, 10000, Inf),
labels = c("0-100", "100-500", "500-1000", "1000-5000", "5000-10000", ">10000"),
right = FALSE)
frequency_table <- table(price_intervals)
percentage_table <- prop.table(frequency_table) * 100
revenue_distribution <- data.frame(
Khoảng_Doanh_Thu = names(frequency_table),
Tần_Số = as.numeric(frequency_table),
Tần_Suất = as.numeric(percentage_table)
)
cat("=== BẢNG TẦN SỐ VÀ TẦN SUẤT DOANH THU ===\n")## === BẢNG TẦN SỐ VÀ TẦN SUẤT DOANH THU ===
| Khoảng_Doanh_Thu | Tần_Số | Tần_Suất |
|---|---|---|
| 0-100 | 842588 | 80.36 |
| 100-500 | 155141 | 14.80 |
| 500-1000 | 24442 | 2.33 |
| 1000-5000 | 23681 | 2.26 |
| 5000-10000 | 2557 | 0.24 |
| >10000 | 166 | 0.02 |
## === THỐNG KÊ MÔ TẢ BIẾN TOTAL_PRICE ===
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.30 8.40 21.14 130.98 69.77 12682.78
# Phân phối doanh thu
ggplot(data, aes(x = Total_Price)) +
geom_histogram(bins = 50, fill = "steelblue", alpha = 0.7) +
scale_x_continuous(labels = comma) +
labs(title = "PHÂN PHỐI DOANH THU",
subtitle = "Biểu đồ histogram thể hiện phân phối giá trị đơn hàng",
x = "Doanh Thu (Total_Price)",
y = "Số Lượng Đơn Hàng") +
theme_minimal()GIẢI THÍCH 5.1:
# Đếm số lượng B2B và B2C
customer_count <- data %>%
count(Customer_Type) %>%
mutate(Percentage = n / sum(n) * 100)
cat("=== PHÂN BỐ LOẠI KHÁCH HÀNG ===\n")## === PHÂN BỐ LOẠI KHÁCH HÀNG ===
| Customer_Type | n | Percentage |
|---|---|---|
| B2B | 373607 | 35.63 |
| B2C | 674968 | 64.37 |
# So sánh hiệu suất giữa các loại khách hàng
customer_summary <- data %>%
group_by(Customer_Type) %>%
summarise(
Count = n(), # Số lượng giao dịch
Percentage = n()/nrow(data)*100, # Tỷ lệ phần trăm
Total_Revenue = sum(Total_Price), # Tổng doanh thu
Avg_Transaction_Value = mean(Total_Price) # Giá trị giao dịch trung bình
)
cat("=== PHÂN TÍCH THEO LOẠI KHÁCH HÀNG ===\n")## === PHÂN TÍCH THEO LOẠI KHÁCH HÀNG ===
## # A tibble: 2 × 5
## Customer_Type Count Percentage Total_Revenue Avg_Transaction_Value
## <fct> <int> <dbl> <dbl> <dbl>
## 1 B2B 373607 35.6 105150854. 281.
## 2 B2C 674968 64.4 32189768. 47.7
# Biểu đồ so sánh doanh thu
ggplot(customer_summary, aes(x = Customer_Type, y = Total_Revenue, fill = Customer_Type)) +
geom_bar(stat = "identity") +
scale_y_continuous(labels = comma) +
labs(title = "SO SÁNH DOANH THU THEO LOẠI KHÁCH HÀNG",
subtitle = "B2B vs B2C",
x = "Loại Khách Hàng",
y = "Tổng Doanh Thu") +
theme_minimal() +
theme(legend.position = "none")GIẢI THÍCH 5.2:
# Phân tích hiệu suất theo khu vực địa lý
region_summary <- data %>%
group_by(Region) %>%
summarise(
Total_Orders = n_distinct(Order_ID), # Tổng số đơn hàng
Total_Revenue = sum(Total_Price), # Tổng doanh thu
Avg_Order_Value = mean(Total_Price), # Giá trị đơn hàng trung bình
.groups = 'drop'
) %>%
arrange(desc(Total_Revenue)) # Sắp xếp theo doanh thu giảm dần
cat("=== PHÂN TÍCH HIỆU SUẤT THEO KHU VỰC ===\n")## === PHÂN TÍCH HIỆU SUẤT THEO KHU VỰC ===
## # A tibble: 16 × 4
## Region Total_Orders Total_Revenue Avg_Order_Value
## <fct> <int> <dbl> <dbl>
## 1 Hamburg 23426 9619253. 137.
## 2 Hessen 21071 9181452. 145.
## 3 Mecklenburg-Vorpommern 21414 9120188. 142.
## 4 Saarland 22011 9020347. 136.
## 5 Rheinland-Pfalz 22668 9011789. 133.
## 6 Berlin 21284 8879189. 139.
## 7 Thüringen 21830 8734228. 134.
## 8 Bayern 21476 8430479. 130.
## 9 Brandenburg 20570 8402955. 136.
## 10 Niedersachsen 22428 8320694. 123.
## 11 Sachsen-Anhalt 21416 8251296. 128.
## 12 Baden-Württemberg 21317 8237277. 128.
## 13 Sachsen 22213 8213791. 123.
## 14 Schleswig-Holstein 21976 8193415. 124.
## 15 Nordrhein-Westfalen 21978 8139463. 124.
## 16 Bremen 22115 7584805. 114.
# Biểu đồ doanh thu theo khu vực
ggplot(region_summary, aes(x = reorder(Region, Total_Revenue), y = Total_Revenue)) +
geom_bar(stat = "identity", fill = "darkorange", alpha = 0.8) +
coord_flip() +
scale_y_continuous(labels = comma) +
labs(title = "DOANH THU THEO KHU VỰC",
subtitle = "Sắp xếp theo thứ tự doanh thu giảm dần",
x = "Khu Vực",
y = "Tổng Doanh Thu") +
theme_minimal()GIẢI THÍCH 5.3: