Tổng quan nghiên cứu
Tên bộ dữ liệu: Product Sales Dataset
Nguồn bộ dữ liệu: Dữ liệu được tổng hợp từ nguồn Kaggle mô phỏng bán lẻ trực tuyến, bao gồm thông tin giao dịch, khách hàng và sản phẩm tại các khu vực khác nhau.
Thông tin bộ dữ liệu: Bộ dữ liệu này chứa thông tin chi tiết về hoạt động bán hàng của một hệ thống thương mại điện tử, bao gồm cả các đặc điểm định tính (như khu vực, quốc gia, loại sản phẩm) và định lượng (như doanh thu, lợi nhuận, số lượng sản phẩm bán ra).
Mục đích lấy dữ liệu: Bộ dữ liệu này được sử dụng trong tiểu luận nhằm phục vụ cho các mục đích học thuật, bao gồm:
Thực hành phân tích và xử lý dữ liệu thực tế bằng ngôn ngữ lập trình R.
Ứng dụng các kỹ thuật thống kê mô tả, tiền xử lý dữ liệu, và trực quan hóa để hiểu rõ hơn về hoạt động bán hàng.
Rút ra những nhận xét, xu hướng và yếu tố ảnh hưởng đến hiệu suất kinh doanh dựa trên dữ liệu thực nghiệm.
# Đọc dữ liệu
data <- read.csv("C:/Users/ADMIN/Downloads/product_sales_dataset_final.csv")
Giải thích: Hàm read.csv() thực hiện việc tải tập tin dữ liệu thống kê doanh số sản phẩm có định dạng CSV và chuyển đổi thành một khung dữ liệu với tên gọi Product Data Set. Thao tác này đánh dấu bước khởi đầu trong quá trình xử lý thông tin bán hàng, biến nguồn dữ liệu từ tập tin lưu trữ thành đối tượng có thể phân tích và xử lý trực tiếp trong phần mềm R.
dim(data)
## [1] 200000 14
Giải thích: Dùng hàm dim để kiểm tra cấu trúc tập dữ liệu, ta thu được 200.000 quan sát với 14 biến. Việc này giúp xác nhận kích thước dữ liệu đủ lớn để phục vụ các bước phân tích tiếp theo.
names(data)
## [1] "Order_ID" "Order_Date" "Customer_Name" "City"
## [5] "State" "Region" "Country" "Category"
## [9] "Sub_Category" "Product_Name" "Quantity" "Unit_Price"
## [13] "Revenue" "Profit"
Giải thích: Bộ dữ liệu gồm tổng cộng 14 biến, trong đó có 8 biến định tính và 6 biến định lượng.
Các biến định tính (phân loại) bao gồm: Order_ID, Customer_Name, City, State, Region, Country, Category, và Sub_Category. Các biến này mô tả thông tin nhận dạng hoặc phân loại, giúp nhóm và so sánh dữ liệu theo khu vực, loại sản phẩm hoặc khách hàng.
Các biến định lượng gồm: Order_Date, Quantity, Unit_Price, Revenue, và Profit. Đây là các biến mang giá trị số hoặc thời gian, được sử dụng để tính toán, đo lường và phân tích xu hướng kinh doanh.
Giải thích: Hàm head() trong R giúp ta quan sát nhanh vài dòng đầu của một bảng dữ liệu. Theo mặc định, R sẽ hiển thị 6 dòng, nhưng ta có thể chỉ định số dòng khác bằng tham số n, chẳng hạn head(x, n = 10) để xem 10 dòng đầu tiên.
Nhận xét: Bộ dữ liệu hiển thị 10 quan sát đầu tiên, không có giá trị thiếu hay lỗi định dạng. Các cột được sắp xếp logic, thể hiện đầy đủ thông tin về đơn hàng, khách hàng, sản phẩm và doanh thu — minh chứng rằng dữ liệu đã ở trạng thái sẵn sàng cho phân tích.
library(knitr)
loai <- data.frame(
Kieu_du_lieu = sapply(data, class)
)
kable(loai, col.names = c("Tên biến", "Kiểu dữ liệu"))
| Tên biến | Kiểu dữ liệu |
|---|---|
| Order_ID | integer |
| Order_Date | character |
| Customer_Name | character |
| City | character |
| State | character |
| Region | character |
| Country | character |
| Category | character |
| Sub_Category | character |
| Product_Name | character |
| Quantity | integer |
| Unit_Price | numeric |
| Revenue | numeric |
| Profit | numeric |
Giải thích: Giải thích:
sapply() được dùng để áp dụng hàm
class cho toàn bộ các cột trong data, giúp
xác định kiểu dữ liệu của từng biến.data.frame() tạo bảng chứa thông tin kiểu dữ liệu
tương ứng với từng biến trong tập dữ liệu.kable() hiển thị bảng kết quả dưới dạng gọn gàng,
dễ quan sát trong báo cáo hoặc khi xuất ra file PDF/HTML.Nhận xét: Bộ dữ liệu gồm 14 biến, trong đó đa số là
biến định tính (chuỗi ký tự) mô tả thông tin khách hàng và sản phẩm,
cùng một số biến định lượng như Quantity,
Unit_Price, Revenue, Profit. Việc
phân biệt kiểu dữ liệu giúp lựa chọn phương pháp phân tích và xử lý phù
hợp cho từng biến.
unique(data$Category)
## [1] "Accessories" "Clothing & Apparel" "Electronics"
## [4] "Home & Furniture"
Giải thích: Hàm unique() được sử dụng để hiển thị toàn bộ các giá trị khác nhau xuất hiện trong cột Category. Qua đó, ta có thể biết được các nhóm sản phẩm chính trong tập dữ liệu.
Nhận xét: Biến Category bao gồm bốn nhóm sản phẩm: Accessories, Clothing & Apparel, Electronics và Home & Furniture. Điều này cho thấy dữ liệu bao quát nhiều danh mục hàng hóa, giúp thuận tiện cho việc phân tích so sánh theo từng nhóm sản phẩm.
length(unique(data$Region))
## [1] 4
Giải thích: Kết hợp unique() và length() để xác định số lượng khu vực khác nhau xuất hiện trong dữ liệu.
Nhận xét: Biến Region gồm 4 vùng: East, West, South, và Centre, cho thấy dữ liệu bao phủ trên nhiều khu vực địa lý, phù hợp cho việc so sánh doanh thu giữa các vùng.
round(prop.table(table(data$Category)) * 100, 1)
##
## Accessories Clothing & Apparel Electronics Home & Furniture
## 18.0 31.1 25.6 25.3
Giải thích: Hàm table() được sử dụng để đếm số lần xuất hiện của từng nhóm sản phẩm trong biến Category. Sau đó, prop.table() quy đổi các tần suất này thành tỷ lệ phần trăm (%), giúp thể hiện rõ mức độ phân bố của từng nhóm sản phẩm trong toàn bộ dữ liệu.
Nhận xét: Kết quả cho thấy nhóm Clothing & Apparel chiếm tỷ trọng lớn nhất, khoảng 31,1% tổng số giao dịch. Tiếp theo là Electronics (25,6%) và Home & Furniture (25,3%), có tỷ lệ khá tương đồng. Nhóm Accessories chiếm khoảng 18%, thấp hơn so với các nhóm còn lại.
Điều này cho thấy các nhóm sản phẩm trong bộ dữ liệu được phân bố khá đồng đều, tuy nhiên nhóm Clothing & Apparel vẫn nổi bật hơn, phản ánh nhu cầu mua sắm cao hơn trong lĩnh vực thời trang so với các mặt hàng khác.
data %>%
group_by(Region) %>%
summarise(Tong_doanh_thu = sum(Revenue, na.rm = TRUE)) %>%
arrange(desc(Tong_doanh_thu))
Giải thích: Biến Region biểu thị khu vực bán hàng, còn Tong_doanh_thu là tổng doanh thu được tính bằng cách cộng toàn bộ giá trị Revenue theo từng vùng. Lệnh group_by(Region) giúp nhóm dữ liệu theo khu vực, còn summarise(sum(Revenue)) tính tổng doanh thu của mỗi nhóm, cho phép so sánh mức đóng góp giữa các vùng.
Nhận xét: Kết quả cho thấy khu vực East đạt doanh thu cao nhất với khoảng 44,98 triệu, chiếm tỷ trọng lớn nhất trong tổng doanh thu. Hai khu vực West và Centre có doanh thu gần tương đương, lần lượt khoảng 36,2 triệu và 36,08 triệu. Trong khi đó, khu vực South có doanh thu thấp nhất, chỉ khoảng 25,1 triệu.
Điều này phản ánh sự chênh lệch về hiệu quả kinh doanh giữa các vùng, đồng thời cho thấy khu vực East là thị trường tiềm năng và hoạt động mạnh nhất trong bộ dữ liệu.
aggregate(Profit ~ Region, data = data, mean)
Giải thích: aggregate(): dùng để nhóm dữ liệu và tính toán theo nhóm.
Profit ~ Region: nghĩa là lấy cột Profit và nhóm theo Region.
data = data: dữ liệu lấy từ bảng data.
mean: hàm tính trung bình lợi nhuận của từng khu vực
Nhận xét: Khu vực Centre có lợi nhuận trung bình cao nhất (~163.19), cho thấy hoạt động kinh doanh ở đây hiệu quả hơn.
West là khu vực có lợi nhuận trung bình thấp nhất (~149.99), có thể cần xem xét lại chiến lược bán hàng hoặc chi phí. → Nhìn chung, chênh lệch lợi nhuận giữa các vùng không quá lớn, nhưng vẫn cho thấy sự khác biệt về hiệu suất khu vực.
# ---- Tạo bảng mô tả ý nghĩa các biến trong bộ dữ liệu ----
variable_meaning <- data.frame(
variable = c("Order_ID", "Order_Date", "Customer_Name", "City", "State",
"Region", "Country", "Category", "Sub_Category", "Product_Name",
"Quantity", "Unit_Price", "Revenue", "Profit"),
Meaning = c(
"Mã đơn hàng duy nhất cho mỗi giao dịch",
"Ngày khách hàng đặt hàng (định dạng tháng-ngày-năm)",
"Tên khách hàng thực hiện đơn mua",
"Thành phố nơi đơn hàng được giao hoặc mua",
"Bang hoặc tỉnh của khách hàng",
"Vùng miền địa lý (ví dụ: East, West, South, Centre)",
"Quốc gia thực hiện đơn hàng (ở đây là United States)",
"Danh mục sản phẩm chính (ví dụ: Electronics, Accessories, Clothing & Apparel...)",
"Danh mục con cụ thể hơn trong Category (ví dụ: Bags, Sportswear, Furniture...)",
"Tên chi tiết của sản phẩm được bán",
"Số lượng sản phẩm được bán trong đơn hàng",
"Đơn giá của mỗi sản phẩm (USD)",
"Tổng doanh thu từ đơn hàng (Quantity × Unit_Price)",
"Lợi nhuận thu được từ đơn hàng sau khi trừ chi phí (USD)"
),
stringsAsFactors = FALSE
)
# ---- Hiển thị bảng mô tả ----
library(knitr)
kable(variable_meaning, col.names = c("Tên biến", "Ý nghĩa"))
| Tên biến | Ý nghĩa |
|---|---|
| Order_ID | Mã đơn hàng duy nhất cho mỗi giao dịch |
| Order_Date | Ngày khách hàng đặt hàng (định dạng tháng-ngày-năm) |
| Customer_Name | Tên khách hàng thực hiện đơn mua |
| City | Thành phố nơi đơn hàng được giao hoặc mua |
| State | Bang hoặc tỉnh của khách hàng |
| Region | Vùng miền địa lý (ví dụ: East, West, South, Centre) |
| Country | Quốc gia thực hiện đơn hàng (ở đây là United States) |
| Category | Danh mục sản phẩm chính (ví dụ: Electronics, Accessories, Clothing & Apparel…) |
| Sub_Category | Danh mục con cụ thể hơn trong Category (ví dụ: Bags, Sportswear, Furniture…) |
| Product_Name | Tên chi tiết của sản phẩm được bán |
| Quantity | Số lượng sản phẩm được bán trong đơn hàng |
| Unit_Price | Đơn giá của mỗi sản phẩm (USD) |
| Revenue | Tổng doanh thu từ đơn hàng (Quantity × Unit_Price) |
| Profit | Lợi nhuận thu được từ đơn hàng sau khi trừ chi phí (USD) |
sum(duplicated(data))
## [1] 0
Giải thích: Hàm duplicated(dataset) xác
định các dòng trùng lặp, trả về TRUE nếu dòng đó đã xuất
hiện trước đó. Hàm sum() đếm tổng số dòng trùng lặp trong
toàn bộ dữ liệu.
Nhận xét: Kết quả bằng 0 cho thấy dữ liệu không có dòng trùng lặp, đảm bảo tính chính xác và độ tin cậy cho các phân tích sau.
any(is.na(data))
## [1] FALSE
Giải thích: Hàm is.na(dataset) kiểm tra
các ô có giá trị bị thiếu (NA), trả về TRUE/FALSE tương ứng. Hàm
any() xác định xem có ít nhất một giá trị NA nào trong toàn
bộ dữ liệu hay không.
Nhận xét: Kết quả [1] FALSE cho thấy
dữ liệu không có giá trị thiếu, đảm bảo độ đầy đủ và
giúp việc phân tích sau chính xác hơn.
# ---- 2.3 Chuẩn hóa định dạng dữ liệu thời gian cho biến Order_Date ----
# Cài và nạp gói hỗ trợ xử lý ngày tháng
library(lubridate)
# Đọc dữ liệu
data <- read.csv("C:/Users/ADMIN/Downloads/product_sales_dataset_final.csv", stringsAsFactors = FALSE)
# Kiểm tra kiểu dữ liệu ban đầu
str(data$Order_Date)
## chr [1:200000] "08-23-23" "12-20-24" "01-29-24" "11-29-24" "09-21-23" ...
# Chuyển đổi kiểu dữ liệu cột Order_Date sang dạng ngày tháng chuẩn
data$Order_Date <- parse_date_time(data$Order_Date, orders = c("mdy", "dmy", "ymd"))
# Kiểm tra lại kiểu dữ liệu sau chuyển đổi
str(data$Order_Date)
## POSIXct[1:200000], format: "2023-08-23" "2024-12-20" "2024-01-29" "2024-11-29" "2023-09-21" ...
# Hiển thị vài dòng đầu để xem kết quả
head(data$Order_Date)
## [1] "2023-08-23 UTC" "2024-12-20 UTC" "2024-01-29 UTC" "2024-11-29 UTC"
## [5] "2023-09-21 UTC" "2024-10-18 UTC"
Giải thích: Order_Date ban đầu là kiểu
chuỗi, sau khi chuyển đổi thành POSIXct đã được chuẩn
hóa về định dạng ngày "YYYY-MM-DD".
Nhận xét: Dữ liệu thời gian thống nhất, dễ phân tích và xử lý theo ngày, tháng.
# Đọc dữ liệu
data <- read.csv("C:/Users/ADMIN/Downloads/product_sales_dataset_final.csv", stringsAsFactors = FALSE)
# Chuyển đổi Order_Date sang kiểu Date
data$Order_Date <- as.Date(data$Order_Date, format = "%m-%d-%y")
# Kiểm tra kết quả
str(data$Order_Date)
## Date[1:200000], format: "2023-08-23" "2024-12-20" "2024-01-29" "2024-11-29" "2023-09-21" ...
head(data$Order_Date)
## [1] "2023-08-23" "2024-12-20" "2024-01-29" "2024-11-29" "2023-09-21"
## [6] "2024-10-18"
Giải thích: Sau khi dùng as.Date(),
biến Order_Date được chuyển sang kiểu
Date, hiển thị theo định dạng chuẩn
"YYYY-MM-DD".
Nhận xét: Dữ liệu thời gian đã đơn giản, thống nhất và dễ xử lý, thuận tiện cho việc phân tích theo ngày, tháng hoặc năm.
# Đọc dữ liệu
data <- read.csv("C:/Users/ADMIN/Downloads/product_sales_dataset_final.csv", stringsAsFactors = FALSE)
# Tạo biến mới Profit_Rate (tỷ suất lợi nhuận trên doanh thu)
data$Profit_Rate <- data$Profit / data$Revenue * 100
# Làm tròn và thêm ký hiệu %
data$Profit_Rate_Percent <- paste0(round(data$Profit_Rate, 2), "%")
# Xem kết quả
head(data[, c("Revenue", "Profit", "Profit_Rate_Percent")])
Giải thích: Dòng code
paste0(round(Profit_Rate, 2), "%") làm tròn tỷ suất lợi
nhuận hai chữ số và thêm ký hiệu % để hiển thị dạng phần
trăm.
Nhận xét: Tỷ suất lợi nhuận dao động khoảng 12.9%–37.4%, thể hiện mức sinh lời khác nhau giữa các đơn hàng.
library(lubridate)
# Đảm bảo Order_Date là kiểu Date
data$Order_Date <- as.Date(data$Order_Date, format = "%m-%d-%y")
# Tạo biến Month_Year (năm-tháng)
data$Month_Year <- format(data$Order_Date, "%Y-%m")
# Xem kết quả
head(data[, c("Order_Date", "Month_Year")])
Giải thích: Dòng code
format(Order_Date, "%Y-%m") chuyển giá trị ngày trong
Order_Date thành chuỗi thể hiện năm –
tháng (ví dụ: "2023-08").
Nhận xét: Biến Month_Year giúp
phân tích xu hướng doanh thu, lợi nhuận theo từng
tháng, phù hợp với dữ liệu chỉ có hai năm (2023 và 2024).
data$Category <- trimws(tolower(data$Category))
unique(data$Category)
## [1] "accessories" "clothing & apparel" "electronics"
## [4] "home & furniture"
Giải thích: Đoạn code này có tác dụng chuẩn hóa dữ liệu văn bản trong biến Category:
tolower() chuyển tất cả ký tự thành chữ thường, giúp thống nhất cách viết.
trimws() xóa khoảng trắng thừa ở đầu và cuối chuỗi, Kết quả giúp loại bỏ lỗi phân loại sai do khác biệt chữ hoa – chữ thường hoặc có dấu cách thừa.
Nhận xét: Việc chuẩn hóa này giúp tránh trùng lặp danh mục (ví dụ “Electronics” và ” electronics”), đảm bảo dữ liệu sạch và đồng nhất trước khi tổng hợp, thống kê hoặc vẽ biểu đồ.
sum(is.na(data$Revenue))
## [1] 0
Giải thích:
Đoạn code này có tác dụng đếm số lượng giá trị bị thiếu (NA) trong biến Revenue.
is.na(data$Revenue) trả về TRUE tại các dòng có giá trị thiếu.
sum() cộng toàn bộ giá trị TRUE để cho biết tổng số ô bị thiếu dữ liệu doanh thu.
Nhận xét:
Kết quả trả về là 0, cho thấy toàn bộ dữ liệu doanh thu đều đầy đủ — không có giá trị bị thiếu, đảm bảo độ tin cậy khi tính toán và phân tích lợi nhuận, doanh số sau này.
data$thangdu <- data$Revenue - data$Profit
# Kiểm tra kết quả
head(data[, c("Revenue", "Profit", "thangdu")])
Giải thích: Biến thangdu được tạo bằng
công thức Revenue - Profit, thể hiện phần doanh thu
còn lại sau khi trừ lợi nhuận, tức chi phí ước tính
hoặc phần doanh thu không sinh lời của mỗi đơn hàng.
Nhận xét: Giá trị thặng dư dao động từ 42.72
đến 610.52, cho thấy mức chi phí và hiệu quả sinh lợi
khác nhau giữa các đơn hàng — đơn có thangdu cao
thường chi phí lớn, còn thangdu thấp phản ánh hiệu quả kinh
doanh tốt hơn.
data$Sales_Difference <- data$Revenue - data$Profit
# Kiểm tra kết quả
head(data[, c("Revenue", "Profit", "Sales_Difference")])
Giải thích: Biến Sales_Difference được
tính bằng Revenue - Profit, biểu thị khoản chênh
lệch giữa doanh thu và lợi nhuận, hay nói cách khác là
phần doanh thu bị chi phí chiếm dụng trong từng đơn
hàng.
Nhận xét: Giá trị chênh lệch dao động từ
42.72 đến 610.52, cho thấy mức chi phí và hiệu
quả sinh lời khác nhau — đơn hàng có
Sales_Difference thấp phản ánh lợi nhuận
cao, còn giá trị cao thể hiện chi phí lớn hoặc hiệu quả
kinh doanh thấp hơn.
sum(is.na(data$Sales_Difference))
## [1] 0
sum(is.na(data$thangdu))
## [1] 0
Giải thích:
Đoạn code này có tác dụng đếm số lượng giá trị bị thiếu (NA) trong hai biến:
is.na(data$Sales_Difference) xác định các dòng bị thiếu ở biến chênh lệch doanh thu – lợi nhuận.
is.na(data$thangdu) kiểm tra các dòng bị thiếu ở biến thặng dư doanh thu.
sum() cộng toàn bộ giá trị TRUE (tức là số ô bị thiếu).
Nhận xét:
Kết quả trả về 0 cho cả hai biến, cho thấy các cột Sales_Difference và thangdu được tính đầy đủ, không có giá trị bị thiếu. Điều này chứng tỏ dữ liệu sạch và đáng tin cậy, có thể dùng an toàn cho các phân tích tiếp theo như tương quan hoặc thống kê mô tả.
Hàm summary()
Chức năng: Tóm tắt nhanh đặc trưng thống kê của các biến số học như Revenue, Profit, Quantity, Unit_Price.
Kết quả hiển thị:
Min: Giá trị nhỏ nhất
1st Qu.: Phân vị thứ nhất (25%)
Median: Trung vị (giá trị giữa)
Mean: Giá trị trung bình
3rd Qu.: Phân vị thứ ba (75%)
Max: Giá trị lớn nhất
Giúp hiểu rõ mức độ phân bố, xu hướng và độ lệch của từng biến kinh doanh.
Hàm sd()
Chức năng: Tính độ lệch chuẩn (Standard Deviation), đo độ dao động trung bình của các giá trị so với trung bình.
Ý nghĩa: Độ lệch chuẩn lớn → dữ liệu biến động mạnh; nhỏ → dữ liệu ổn định hơn.
Hàm var()
Chức năng: Tính phương sai (Variance), là bình phương của độ lệch chuẩn.
Ý nghĩa: Phản ánh mức độ phân tán tổng thể của dữ liệu doanh thu.
summary(data$Revenue)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 17.03 229.19 464.88 712.04 881.30 9014.25
sd(data$Revenue)
## [1] 742.4716
var(data$Revenue)
## [1] 551264
Giải thích:
Hàm summary(data$Revenue) cung cấp các đặc trưng thống kê của biến doanh thu (Revenue):
Min = 17.03: đơn hàng có doanh thu thấp nhất.
Median = 464.88: 50% đơn hàng có doanh thu ≤ 464.88 USD.
Mean = 712.04: doanh thu trung bình cao hơn trung vị, cho thấy có một số đơn hàng giá trị lớn kéo trung bình lên.
Max = 9014.25: đơn hàng cao nhất đạt hơn 9.000 USD, tạo nên sự chênh lệch lớn.
sd(Revenue) = 742.47 cho biết độ dao động lớn quanh trung bình → doanh thu giữa các đơn hàng không đồng đều.
var(Revenue) = 551,264 là phương sai, xác nhận mức phân tán mạnh trong dữ liệu.
Nhận xét: Doanh thu có sự chênh lệch đáng kể giữa các đơn hàng. Phần lớn giao dịch có doanh thu trung bình hoặc thấp, trong khi một nhóm nhỏ đơn hàng giá trị cao đã kéo trung bình tăng mạnh. Biến Revenue vì thế thể hiện phân bố lệch phải, phù hợp với đặc trưng của dữ liệu kinh doanh thực tế — nơi vài giao dịch lớn chi phối tổng doanh thu.
summary(data$Profit)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 3.92 59.21 109.53 157.74 199.40 2763.72
sd(data$Profit)
## [1] 155.6896
var(data$Profit)
## [1] 24239.25
Giải thích: Hàm summary() mô tả đặc trưng của biến Profit:
Trung vị = 109.53 cho thấy 50% đơn hàng có lợi nhuận dưới mức này.
Trung bình = 157.74 cao hơn trung vị, chứng tỏ có một số đơn hàng lợi nhuận cao kéo trung bình lên.
Độ lệch chuẩn = 155.69 và phương sai = 24,239.25 thể hiện mức dao động lợi nhuận khá lớn giữa các đơn hàng.
Nhận xét: Phần lớn đơn hàng có lợi nhuận thấp – trung bình, trong khi một số đơn hàng cao đột biến làm phân bố lợi nhuận lệch phải. Dữ liệu có độ biến động vừa phải, phản ánh sự khác biệt về giá trị đơn hàng và hiệu quả kinh doanh.
summary(data$Unit_Price)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 17.03 162.76 303.55 382.86 562.25 1432.00
sd(data$Unit_Price)
## [1] 276.8702
var(data$Unit_Price)
## [1] 76657.13
Giải thích: Biến Unit_Price cho biết
giá bán từng sản phẩm.
Nhận xét: Giá bán có sự chênh lệch lớn giữa các sản phẩm, thể hiện phân khúc đa dạng từ giá thấp đến cao cấp. Phân bố giá lệch phải, do một số sản phẩm giá cao nổi bật.
summary(data$Quantity)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 1.000 1.000 1.000 1.854 2.000 11.000
sd(data$Quantity)
## [1] 1.100536
var(data$Quantity)
## [1] 1.21118
Giải thích: Biến Quantity thể hiện số lượng sản phẩm mỗi đơn hàng.
Trung vị = 1 và trung bình = 1.85 → đa số đơn hàng chỉ mua 1 sản phẩm.
Độ lệch chuẩn = 1.10, phương sai = 1.21 → mức dao động thấp, số lượng mua khá ổn định.
Nhận xét: Khách hàng chủ yếu mua lẻ từng sản phẩm, chỉ có một số ít đơn hàng lớn hơn bình thường, cho thấy hành vi mua hàng ổn định và ít biến động.
summary(data$Profit_Rate)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 7.999 17.120 24.992 25.770 33.592 50.000
sd(data$Profit_Rate)
## [1] 10.43519
var(data$Profit_Rate)
## [1] 108.8933
Giải thích: Biến Profit_Rate cho biết tỷ suất lợi nhuận (%).
Trung bình = 25.77, trung vị = 24.99 → lợi nhuận tập trung quanh 25%.
Độ lệch chuẩn = 10.43, phương sai = 108.89 → mức dao động lợi nhuận ở mức vừa phải.
Nhận xét: Tỷ suất lợi nhuận giữa các đơn hàng ổn định, chủ yếu trong khoảng 17–34%, cho thấy hoạt động kinh doanh hiệu quả và ít biến động lớn.
Giải thích: Biến thặng dư thể hiện phần doanh thu còn lại sau khi trừ lợi nhuận.
Trung bình = 554.30, trung vị = 344.79 → có một số đơn hàng chi phí cao kéo trung bình tăng.
Độ lệch chuẩn = 617.25, phương sai = 380,992.5 → mức biến động chi phí khá lớn giữa các đơn hàng.
Nhận xét: Chi phí (thặng dư doanh thu) phân tán mạnh, phần lớn đơn hàng ở mức trung bình, trong khi một số đơn có chi phí rất cao, làm tăng độ dao động chung.
summary(data$Sales_Difference)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 9.68 159.64 344.79 554.30 693.28 7801.99
sd(data$Sales_Difference)
## [1] 617.2459
var(data$Sales_Difference)
## [1] 380992.5
Giải thích: Biến Sales_Difference thể hiện chênh lệch giữa doanh thu và lợi nhuận.
Trung bình = 554.30, trung vị = 344.79 → có vài đơn hàng chênh lệch cao kéo trung bình tăng.
Độ lệch chuẩn = 617.25, phương sai = 380,992.5 → mức biến động khá lớn giữa các đơn hàng.
Nhận xét: Chênh lệch doanh thu – lợi nhuận dao động mạnh, phần lớn đơn hàng ở mức trung bình, nhưng một số ít có chi phí cao vượt trội, làm dữ liệu phân tán và lệch phải.
Giá trị ngoại lai (outlier) là những điểm dữ liệu khác biệt mạnh so với phần còn lại, thường do nhập sai hoặc biến động bất thường.
Hàm boxplot.stats() trong R xác định các giá trị nằm ngoài khoảng: [Q1 - 1.5 * IQR , Q3 + 1.5 * IQR]
Hàm length() dùng để đếm số lượng giá trị ngoại lai của từng biến.
length(boxplot.stats(data$Revenue)$out)
## [1] 15068
Giải thích: Lệnh này đếm số đơn hàng có doanh thu bất thường (ngoại lai) trong dữ liệu. Kết quả [1] 15068 nghĩa là có 15.068 giá trị doanh thu nằm ngoài khoảng bình thường.
Nhận xét: Có khá nhiều đơn hàng doanh thu cao hoặc thấp bất thường. Điều này cho thấy sự chênh lệch rõ giữa các đơn hàng, một số có thể là giao dịch lớn hoặc nhỏ đặc biệt trong dữ liệu.
length(boxplot.stats(data$Profit)$out)
## [1] 13174
Giải thích: Lệnhlength(boxplot.stats(data\(Profit)\)out) đếm số đơn hàng có lợi nhuận ngoại lai. Kết quả [1] 13174 nghĩa là có 13.174 giá trị lợi nhuận bất thường, cao hoặc thấp hơn mức bình thường. Nhận xét: Lợi nhuận giữa các đơn hàng chênh lệch khá lớn — có nhiều đơn hàng lãi cao hoặc thấp bất thường, thể hiện sự đa dạng rõ rệt trong hiệu quả kinh doanh.
length(boxplot.stats(data$Unit_Price)$out)
## [1] 1635
Giải thích: Lệnh length(boxplot.stats(data\(Unit_Price)\)out) đếm số đơn giá ngoại lai trong dữ liệu. Kết quả [1] 1635 nghĩa là có 1.635 sản phẩm có giá bất thường, cao hoặc thấp hơn mức bình thường.
Nhận xét: Số lượng ngoại lai không quá lớn, cho thấy một số sản phẩm giá cao hoặc thấp đặc biệt, phản ánh sự đa dạng về phân khúc giá trong danh mục hàng hóa.
length(boxplot.stats(data$Quantity)$out)
## [1] 17746
Giải thích: Lệnh length(boxplot.stats(data\(Quantity)\)out) dùng để đếm số lượng đơn hàng có số lượng sản phẩm bất thường (ngoại lai). Kết quả [1] 17746 nghĩa là có 17.746 đơn hàng có số lượng mua vượt quá hoặc thấp hơn mức bình thường.
Nhận xét: Số lượng ngoại lai khá nhiều, cho thấy có nhiều đơn hàng đặc biệt — có thể là đơn lớn của khách sỉ hoặc đơn nhỏ lẻ cá nhân. Điều này phản ánh sự đa dạng rõ rệt trong hành vi mua hàng của khách.
length(boxplot.stats(data$Profit_Rate)$out)
## [1] 0
Giải thích: Lệnh length(boxplot.stats(data\(Profit_Rate)\)out) dùng để đếm số lượng giá trị ngoại lai trong biến Profit_Rate. Kết quả [1] 0 nghĩa là không có giá trị nào bất thường vượt ngoài khoảng xác định bởi boxplot.
Nhận xét: Biến Profit_Rate ổn định và đồng đều, không xuất hiện tỷ suất lợi nhuận quá cao hay quá thấp. Điều này cho thấy hiệu quả kinh doanh nhất quán, không bị ảnh hưởng bởi các giao dịch ngoại lệ.
length(boxplot.stats(data$thangdu)$out)
## [1] 15622
Giải thích: Lệnh length(boxplot.stats(data\(thangdu)\)out) dùng để đếm số giá trị ngoại lai trong biến thangdu. Kết quả [1] 15622 nghĩa là có 15.622 giá trị thặng dư bất thường, cao hoặc thấp hơn mức bình thường.
Nhận xét: Số lượng ngoại lai khá lớn, cho thấy mức chênh lệch doanh thu – lợi nhuận giữa các đơn hàng rất khác nhau. Một số đơn hàng có chi phí hoặc doanh thu đặc biệt cao đã làm dữ liệu phân tán mạnh và lệch phải.
length(boxplot.stats(data$Sales_Difference)$out)
## [1] 15622
Giải thích: Lệnh length(boxplot.stats(data\(Sales_Difference)\)out) dùng để đếm số lượng giá trị ngoại lai trong biến Sales_Difference. Kết quả [1] 15622 nghĩa là có 15.622 giá trị chênh lệch doanh thu – lợi nhuận bất thường, vượt ngoài mức bình thường theo quy tắc boxplot.
Nhận xét: Số lượng ngoại lai lớn cho thấy sự khác biệt đáng kể giữa doanh thu và lợi nhuận của các đơn hàng. Một số đơn hàng có chênh lệch cực cao hoặc cực thấp, làm dữ liệu phân tán mạnh và lệch phải, cần xem xét riêng khi phân tích hiệu quả kinh doanh.
# Xây dựng mô hình hồi quy tuyến tính
model <- lm(Profit ~ Revenue, data = data)
# Hiển thị kết quả chi tiết
summary(model)
##
## Call:
## lm(formula = Profit ~ Revenue, data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -762.54 -34.97 -11.61 27.04 1268.17
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 3.212e+01 2.607e-01 123.2 <2e-16 ***
## Revenue 1.764e-01 2.534e-04 696.1 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 84.15 on 199998 degrees of freedom
## Multiple R-squared: 0.7079, Adjusted R-squared: 0.7079
## F-statistic: 4.846e+05 on 1 and 199998 DF, p-value: < 2.2e-16
Giải thích:
Intercept = 32.12 (USD): Khi doanh thu bằng 0, lợi nhuận ước tính trung bình khoảng 32,12 USD.
Revenue = 0.1764: Khi doanh thu tăng 1 USD, lợi nhuận trung bình tăng thêm 0.1764 USD.
R² = 0.7079: Khoảng 70,79% sự biến động lợi nhuận được giải thích bởi doanh thu.
p-value < 0.05: Mối quan hệ giữa doanh thu và lợi nhuận có ý nghĩa thống kê rất cao.
Nhận xét:
Mô hình cho thấy doanh thu có ảnh hưởng tích cực và mạnh đến lợi nhuận, nghĩa là doanh thu càng cao thì lợi nhuận càng tăng.
Với R² ≈ 0.71, mô hình giải thích tốt mối quan hệ tuyến tính giữa hai biến.
Sai số chuẩn nhỏ và p-value rất thấp chứng minh mô hình đáng tin cậy về mặt thống kê.
# Tạo hàm tính CV (hệ số biến thiên)
cv <- function(x) {
return(sd(x, na.rm = TRUE) / mean(x, na.rm = TRUE) * 100)
}
# Tính CV cho các biến chính trong dữ liệu
cv_revenue <- cv(data$Revenue)
cv_profit <- cv(data$Profit)
cv_unit_price <- cv(data$Unit_Price)
cv_quantity <- cv(data$Quantity)
cv_profit_rate <- cv(data$Profit_Rate)
# In kết quả ra màn hình
cat("Hệ số biến thiên (CV) của các biến:\n")
## Hệ số biến thiên (CV) của các biến:
cat("Revenue: ", round(cv_revenue, 2), "%\n")
## Revenue: 104.27 %
cat("Profit: ", round(cv_profit, 2), "%\n")
## Profit: 98.7 %
cat("Unit_Price: ", round(cv_unit_price, 2), "%\n")
## Unit_Price: 72.32 %
cat("Quantity: ", round(cv_quantity, 2), "%\n")
## Quantity: 59.36 %
cat("Profit_Rate: ", round(cv_profit_rate, 2), "%\n")
## Profit_Rate: 40.49 %
Giải thích: Đoạn code sử dụng hàm cv() để tính hệ số biến thiên (Coefficient of Variation – CV) cho các biến trong bộ dữ liệu: cv <- function(x) { sd(x, na.rm = TRUE) / mean(x, na.rm = TRUE) * 100 }
Hệ số CV cho biết mức độ dao động của dữ liệu so với giá trị trung bình, tính theo phần trăm (%):
CV cao → dữ liệu phân tán mạnh, biến động lớn giữa các đơn hàng.
CV thấp → dữ liệu ổn định, các giá trị tập trung quanh trung bình.
Nhận xét:
Revenue (104.27%) và Profit (98.7%) có CV cao → doanh thu và lợi nhuận dao động mạnh, phản ánh sự khác biệt lớn giữa các đơn hàng.
Unit_Price (72.32%) và Quantity (59.36%) có mức biến thiên vừa phải → giá và số lượng thay đổi đáng kể nhưng vẫn trong phạm vi hợp lý.
Profit_Rate (40.49%) thấp nhất → tỷ suất lợi nhuận ổn định, thể hiện quản lý giá và chi phí hiệu quả.
Nhìn chung, doanh thu và lợi nhuận biến động mạnh nhất, còn tỷ suất lợi nhuận giữ ổn định, chứng tỏ doanh nghiệp có chính sách giá vững và kiểm soát chi phí tốt.
# Tính ma trận tương quan giữa các biến định lượng
cor_matrix <- cor(data[, c("Revenue", "Profit", "Unit_Price", "Quantity", "Profit_Rate")])
# Hiển thị kết quả
round(cor_matrix, 2)
## Revenue Profit Unit_Price Quantity Profit_Rate
## Revenue 1.00 0.84 0.71 0.58 -0.33
## Profit 0.84 1.00 0.53 0.60 0.06
## Unit_Price 0.71 0.53 1.00 0.01 -0.47
## Quantity 0.58 0.60 0.01 1.00 0.00
## Profit_Rate -0.33 0.06 -0.47 0.00 1.00
Giải thích:
Đoạn code sử dụng hàm cor() để tính hệ số tương quan Pearson giữa các biến định lượng (Revenue, Profit, Unit_Price, Quantity, Profit_Rate). Giá trị tương quan nằm trong khoảng [-1, 1]:
Gần 1 → tương quan dương mạnh (hai biến tăng cùng nhau).
Gần -1 → tương quan âm mạnh (một tăng, một giảm).
Gần 0 → tương quan yếu hoặc không đáng kể.
Nhận xét:
Revenue – Profit (0.84): Mối tương quan dương rất mạnh → doanh thu tăng kéo lợi nhuận tăng rõ rệt.
Revenue – Unit_Price (0.71): Giá sản phẩm cao thường đi cùng với doanh thu lớn.
Profit – Quantity (0.60): Bán được nhiều sản phẩm thường giúp lợi nhuận tăng.
Unit_Price – Profit_Rate (-0.47): Tương quan âm → sản phẩm giá cao có thể đi kèm biên lợi nhuận thấp hơn do chi phí cao.
Profit_Rate gần như không tương quan với Quantity và Profit → tỷ suất lợi nhuận tương đối ổn định, ít phụ thuộc vào số lượng bán hoặc tổng lợi nhuận.
# Kiểm định tương quan tuyến tính giữa doanh thu và lợi nhuận
cor.test(data$Revenue, data$Profit, method = "pearson")
##
## Pearson's product-moment correlation
##
## data: data$Revenue and data$Profit
## t = 696.13, df = 199998, p-value < 2.2e-16
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.8400601 0.8426208
## sample estimates:
## cor
## 0.8413452
Giải thích:
Lệnh cor.test(data\(Revenue, data\)Profit, method = “pearson”) được dùng để kiểm định ý nghĩa thống kê của mối tương quan tuyến tính giữa doanh thu và lợi nhuận.
Hệ số tương quan r = 0.8413 → mối tương quan dương rất mạnh giữa hai biến.
p-value < 0.05 → bác bỏ giả thuyết H₀ (“không có tương quan”), nghĩa là mối quan hệ giữa Revenue và Profit là có thật, không ngẫu nhiên.
Khoảng tin cậy 95%: [0.8401 ; 0.8426] cho thấy giá trị tương quan thực tế nằm ổn định quanh 0.84.
Nhận xét:
Doanh thu và lợi nhuận tăng cùng chiều rõ rệt, và mối quan hệ này có ý nghĩa thống kê rất cao.
Kết quả này củng cố cho mô hình hồi quy tuyến tính trước đó, chứng minh doanh thu là yếu tố giải thích chính cho lợi nhuận.
Mức tương quan 0.84 cho thấy hiệu quả kinh doanh có tính nhất quán – khi doanh số tăng, lợi nhuận gần như chắc chắn tăng theo.
# Tính độ lệch chuẩn (sd) và phương sai (var) cho các biến chính
sd(data$Revenue)
## [1] 742.4716
var(data$Revenue)
## [1] 551264
sd(data$Profit)
## [1] 155.6896
var(data$Profit)
## [1] 24239.25
sd(data$Profit_Rate)
## [1] 10.43519
var(data$Profit_Rate)
## [1] 108.8933
Giải thích:
cor.test() kiểm định ý nghĩa mối tương quan giữa doanh thu và lợi nhuận. → p-value nhỏ hơn 0.05 cho thấy mối quan hệ tuyến tính dương có ý nghĩa thống kê.
sd() đo mức độ dao động quanh trung bình, còn var() là phương sai (bình phương của sd), phản ánh độ phân tán tổng thể của dữ liệu.
Nhận xét:
Doanh thu và lợi nhuận có mối quan hệ tuyến tính rất mạnh (r = 0.84) → khi doanh thu tăng, lợi nhuận tăng rõ rệt.
Revenue có độ lệch chuẩn cao nhất (742.47) → biến động mạnh giữa các đơn hàng.
Profit_Rate có sd thấp (10.43) → tỷ suất lợi nhuận tương đối ổn định, ít bị ảnh hưởng bởi quy mô bán hàng.
Như vậy, lợi nhuận chủ yếu phụ thuộc vào doanh thu, còn tỷ suất sinh lời duy trì ổn định, thể hiện quản lý giá và chi phí hiệu quả.
# Tính giá trị trung bình của các biến chính
mean(data$Revenue)
## [1] 712.0387
mean(data$Profit)
## [1] 157.743
mean(data$Profit_Rate)
## [1] 25.76979
Giải thích:
Hàm mean() được sử dụng để tính giá trị trung bình cộng của từng biến định lượng.
Việc tính trung bình giúp xác định xu hướng trung tâm của dữ liệu — thể hiện mức doanh thu, lợi nhuận và tỷ suất lợi nhuận bình quân của toàn bộ tập dữ liệu.
Nhận xét:
Doanh thu trung bình (≈ 712) cho thấy quy mô bán hàng bình quân ở mức cao.
Lợi nhuận trung bình (≈ 158) phản ánh hiệu suất sinh lời ổn định.
Tỷ suất lợi nhuận trung bình (≈ 25.77%) là mức khá tốt, thể hiện khả năng kiểm soát chi phí hiệu quả.
# Tạo nhóm doanh thu không dùng ký tự có dấu
data$Revenue_Group <- cut(data$Revenue,
breaks = c(0, 200, 500, 1000, Inf),
labels = c("Low", "Medium", "High", "Very High"))
# Tính lợi nhuận trung bình theo nhóm doanh thu
library(knitr)
kable(aggregate(Profit ~ Revenue_Group, data = data, FUN = mean),
col.names = c("Revenue Group", "Average Profit"))
| Revenue Group | Average Profit |
|---|---|
| Low | 38.19198 |
| Medium | 93.82258 |
| High | 166.51981 |
| Very High | 365.49781 |
Giải thích:
Đoạn code sử dụng cut() để chia biến doanh thu (Revenue) thành 4 nhóm: Low, Medium, High, Very High.
Sau đó dùng aggregate() để tính lợi nhuận trung bình (Average Profit) cho từng nhóm doanh thu.
Bảng kết quả thể hiện mức lợi nhuận bình quân tương ứng với từng phân khúc doanh thu.
Nhận xét:
Lợi nhuận trung bình tăng dần theo mức doanh thu, cho thấy mối quan hệ thuận chiều rõ ràng giữa hai biến.
Nhóm Very High có lợi nhuận vượt trội (≈ 365.5), phản ánh hiệu suất kinh doanh cao nhất.
Nhóm Low có lợi nhuận thấp (≈ 38.2), chứng tỏ quy mô nhỏ kém hiệu quả hơn.
Kết quả này minh chứng rằng doanh thu càng lớn, lợi nhuận càng cao, phù hợp với xu hướng tài chính thông thường.
library(knitr)
# Tính tỷ suất lợi nhuận trung bình theo khu vực
region_profit_rate <- aggregate(Profit_Rate ~ Region, data = data, FUN = mean)
# Hiển thị kết quả
kable(region_profit_rate, col.names = c("Khu vực", "Tỷ suất lợi nhuận trung bình"))
| Khu vực | Tỷ suất lợi nhuận trung bình |
|---|---|
| Centre | 25.70086 |
| East | 23.80834 |
| South | 27.10104 |
| West | 26.93864 |
Giải thích:
Sử dụng aggregate() để tính trung bình tỷ suất lợi nhuận (Profit_Rate) cho từng khu vực (Region).
Cú pháp Profit_Rate ~ Region cho phép nhóm dữ liệu theo khu vực và tính trung bình trong từng nhóm.
kable() giúp trình bày kết quả dưới dạng bảng dễ đọc, phù hợp khi in ra báo cáo.
Nhận xét:
South có tỷ suất lợi nhuận trung bình cao nhất (≈ 27.10%), phản ánh hiệu quả sinh lời tốt hơn các khu vực khác.
East thấp nhất (≈ 23.81%) → có thể do giá bán thấp hơn hoặc chi phí cao hơn.
Centre và West có mức lợi nhuận khá ổn định, xấp xỉ 26–27%, thể hiện sự đồng đều về hiệu quả kinh doanh.
library(knitr)
# Tạo nhóm số lượng bán dựa trên Quantity
data$Quantity_Group <- cut(data$Quantity,
breaks = c(0, 2, 5, 10, Inf),
labels = c("Low", "Medium", "High", "Very High"))
# Tính doanh thu trung bình theo nhóm số lượng bán
revenue_by_qty <- aggregate(Revenue ~ Quantity_Group, data = data, FUN = mean)
# Hiển thị kết quả
kable(revenue_by_qty, col.names = c("Quantity Group", "Average Revenue"))
| Quantity Group | Average Revenue |
|---|---|
| Low | 511.088 |
| Medium | 1333.771 |
| High | 2488.094 |
| Very High | 478.060 |
Giải thích:
Đoạn code sử dụng cut() để chia biến Quantity thành 4 nhóm mức bán khác nhau: Low, Medium, High, Very High.
Sau đó dùng aggregate() để tính doanh thu trung bình (Average Revenue) cho từng nhóm.
Kết quả thể hiện mối quan hệ giữa quy mô số lượng bán và doanh thu trung bình.
Nhận xét: Nhóm Low có doanh thu trung bình ≈ 511,09 USD, thể hiện quy mô bán hàng nhỏ, doanh thu thấp.
Nhóm Medium đạt ≈ 1.333,77 USD, cho thấy khi số lượng bán tăng, doanh thu tăng rõ rệt.
Nhóm High có doanh thu trung bình cao nhất ≈ 2.488,09 USD, phản ánh hiệu quả bán hàng tối ưu.
Riêng nhóm Very High giảm xuống còn ≈ 478,06 USD, cho thấy các đơn hàng quá lớn có thể phải giảm giá hoặc chiết khấu, làm giảm doanh thu bình quân.
library(knitr)
# Tạo nhóm tỷ suất lợi nhuận (Profit_Rate)
data$Profit_Rate_Group <- cut(data$Profit_Rate,
breaks = c(0, 15, 30, 45, Inf),
labels = c("Low", "Medium", "High", "Very High"))
# Tính lợi nhuận trung bình theo nhóm tỷ suất lợi nhuận
profit_by_rate <- aggregate(Profit ~ Profit_Rate_Group, data = data, FUN = mean)
# Hiển thị kết quả
kable(profit_by_rate, col.names = c("Profit Rate Group", "Average Profit (USD)"))
| Profit Rate Group | Average Profit (USD) |
|---|---|
| Low | 128.5528 |
| Medium | 160.1290 |
| High | 172.8583 |
| Very High | 132.7822 |
Giải thích:
Đoạn code sử dụng cut() để chia biến Profit_Rate thành 4 nhóm: Low, Medium, High, Very High.
Sau đó, aggregate() tính lợi nhuận trung bình (Profit) tương ứng với từng nhóm tỷ suất lợi nhuận.
Bảng kết quả cho thấy sự khác biệt về mức lợi nhuận trung bình (USD) giữa các nhóm hiệu suất sinh lời.
Nhận xét:
Nhóm Low (≤15%) đạt 128,55 USD, thể hiện mức sinh lời thấp.
Nhóm Medium (15–30%) có 160,13 USD, cho thấy hiệu quả cải thiện rõ rệt.
Nhóm High (30–45%) đạt mức cao nhất 172,86 USD, phản ánh ngưỡng sinh lời tối ưu.
Tuy nhiên, nhóm Very High (>45%) giảm xuống 132,78 USD, có thể do biên lợi nhuận cao nhưng doanh số nhỏ.
library(knitr)
# Tạo nhóm lợi nhuận (Profit)
data$Profit_Group <- cut(data$Profit,
breaks = c(0, 100, 200, 400, Inf),
labels = c("Low", "Medium", "High", "Very High"))
# Tính doanh thu trung bình (Revenue) theo nhóm lợi nhuận
revenue_by_profit <- aggregate(Revenue ~ Profit_Group, data = data, FUN = mean)
# Hiển thị kết quả
kable(revenue_by_profit, col.names = c("Profit Group", "Average Revenue (USD)"))
| Profit Group | Average Revenue (USD) |
|---|---|
| Low | 271.3115 |
| Medium | 661.3517 |
| High | 1261.9564 |
| Very High | 2409.1000 |
Giải thích:
Hàm cut() chia biến Profit thành 4 nhóm theo giá trị lợi nhuận: Low, Medium, High, Very High.
Hàm aggregate() tính doanh thu trung bình (Revenue) cho từng nhóm.
Kết quả giúp mô tả mối quan hệ giữa lợi nhuận và doanh thu trong dữ liệu.
Nhận xét:
Nhóm Low có doanh thu trung bình ≈ 271,31 USD, phản ánh hiệu quả thấp.
Nhóm Medium đạt ≈ 661,35 USD, tăng gần gấp 2,5 lần so với nhóm thấp.
Nhóm High đạt ≈ 1.261,96 USD, thể hiện mối quan hệ thuận chiều rõ rệt giữa lợi nhuận và doanh thu.
Nhóm Very High có doanh thu trung bình cao nhất ≈ 2.409,10 USD, chứng tỏ các đơn hàng có lợi nhuận cao thường gắn liền với doanh thu lớn.
Doanh thu trung bình tăng ổn định theo mức lợi nhuận, khẳng định rằng lợi nhuận và doanh thu có mối quan hệ đồng biến mạnh. Điều này cho thấy doanh nghiệp cần tập trung vào nhóm sản phẩm sinh lợi cao, vì đây là nhóm đóng góp chính vào tổng doanh thu.
library(knitr)
# Tạo nhóm doanh thu (Revenue)
data$Revenue_Group <- cut(data$Revenue,
breaks = c(0, 500, 1000, 2000, Inf),
labels = c("Low", "Medium", "High", "Very High"))
# Tính tỷ suất lợi nhuận trung bình theo nhóm doanh thu
profit_rate_by_revenue <- aggregate(Profit_Rate ~ Revenue_Group, data = data, FUN = mean)
# Hiển thị kết quả
kable(profit_rate_by_revenue, col.names = c("Revenue Group", "Average Profit Rate (%)"))
| Revenue Group | Average Profit Rate (%) |
|---|---|
| Low | 29.30069 |
| Medium | 23.11317 |
| High | 21.04381 |
| Very High | 18.39410 |
Giải thích:
Sử dụng cut() để chia biến Revenue thành 4 nhóm: Low, Medium, High, Very High.
Dùng aggregate() tính tỷ suất lợi nhuận trung bình (Profit_Rate) của từng nhóm.
kable() được dùng để hiển thị bảng kết quả rõ ràng trong báo cáo.
Nhận xét:
Nhóm Low có tỷ suất lợi nhuận trung bình cao nhất (≈ 29.30%), phản ánh khả năng sinh lời tốt ở quy mô nhỏ.
Nhóm Medium giảm xuống ≈ 23.11%, và High còn ≈ 21.04%, cho thấy biên lợi nhuận giảm khi doanh thu tăng.
Nhóm Very High thấp nhất (≈ 18.39%), chứng tỏ doanh nghiệp có doanh thu lớn thường phải giảm lợi nhuận biên để cạnh tranh.
Kết luận: Tỷ suất lợi nhuận giảm dần theo quy mô doanh thu, thể hiện mối quan hệ nghịch chiều giữa doanh thu và biên lợi nhuận. Điều này gợi ý rằng quy mô lớn không luôn đồng nghĩa với hiệu quả cao, và doanh nghiệp cần tối ưu chi phí để duy trì lợi nhuận khi mở rộng hoạt động
Sys.setlocale("LC_CTYPE", "en_US.UTF-8")
## [1] "en_US.UTF-8"
library(ggplot2)
library(showtext)
# Bật font Unicode
showtext_auto()
font_add_google("Roboto", "roboto")
ggplot(data, aes(x = Category, fill = Category)) +
geom_bar() +
labs(
title = "Phân bố số lượng sản phẩm theo từng loại",
x = "Loại sản phẩm",
y = "Số lượng bán"
) +
geom_text(
stat = "count",
aes(label = format(after_stat(count), big.mark = ".", decimal.mark = ",")), # ← Dòng chỉnh định dạng
vjust = -0.5,
size = 3.5,
color = "black"
) +
scale_fill_manual(values = c(
"accessories" = "#00BFFF",
"clothing & apparel" = "#FF7F50",
"electronics" = "#9370DB",
"home & furniture" = "#3CB371"
)) +
theme_minimal(base_family = "roboto") +
theme(
plot.title = element_text(face = "bold", hjust = 0.5, size = 16, color = "#2F4F4F")
)
Giải thích: Biểu đồ thể hiện số lượng sản phẩm bán được theo từng loại sản phẩm (Category) trong toàn bộ tập dữ liệu. Trục X là loại sản phẩm (Category), trục Y là số lượng bán (Quantity). Mỗi cột biểu thị tổng số sản phẩm bán được trong từng nhóm hàng. Nhận xét: Nhóm “Clothing & Apparel” (quần áo và phụ kiện) có số lượng bán cao nhất, với 62.298 sản phẩm — vượt trội rõ rệt so với các nhóm khác.
“Electronics” (điện tử) và “Home & Furniture” (đồ gia dụng & nội thất) xếp kế tiếp, ở mức tương đương khoảng 50.000–51.000 sản phẩm.
“Accessories” (phụ kiện nhỏ) có số lượng bán thấp nhất, 35.908 sản phẩm, chỉ bằng khoảng 57% so với nhóm dẫn đầu.
library(ggplot2)
library(showtext)
showtext_auto()
font_add_google("Roboto", "roboto")
# Tính tổng lợi nhuận theo từng vùng
profit_region <- data %>%
group_by(Region) %>%
summarise(Total_Profit = sum(Profit))
ggplot(profit_region, aes(x = Region, y = Total_Profit, fill = Region)) +
geom_col() +
geom_text(aes(label = format(round(Total_Profit, 0), big.mark = ".", decimal.mark = ",")), # ✅ Dấu phân tách chuẩn VN
vjust = -0.5, size = 3.5, color = "black") +
labs(
title = "Tổng lợi nhuận (Profit) theo từng vùng",
x = "Vùng",
y = "Tổng lợi nhuận (USD)"
) +
scale_fill_manual(values = c(
"Centre" = "#9370DB",
"East" = "#00BFFF",
"South" = "#FF7F50",
"West" = "#3CB371"
)) +
theme_minimal(base_family = "roboto") +
theme(
plot.title = element_text(face = "bold", hjust = 0.5, size = 16, color = "#2F4F4F"),
axis.title = element_text(face = "bold")
)
Giải thích: Biểu đồ cột biểu diễn tổng lợi nhuận thu
được từ từng vùng kinh doanh trong dữ liệu bán hàng.
Trục X: tên vùng (Region)
Trục Y: tổng lợi nhuận (USD)
Mỗi cột: tổng lợi nhuận cộng gộp của tất cả sản phẩm bán ra trong vùng đó.
Nhận xét: Vùng East đạt lợi nhuận cao nhất — khoảng 9.221.327 USD, cho thấy đây là thị trường chủ lực.
Vùng West đứng thứ hai với khoảng 8.319.663 USD, chỉ kém vùng East một chút.
Vùng Centre đạt lợi nhuận khoảng 8.094.864 USD, khá tốt, không quá chênh lệch với hai vùng dẫn đầu.
Vùng South có lợi nhuận thấp nhất, 5.918.454 USD, chỉ bằng khoảng 64% so với vùng East.
library(ggplot2)
library(dplyr)
library(showtext)
showtext_auto()
font_add_google("Roboto", "roboto")
# Tính tổng doanh thu theo vùng
revenue_region <- data %>%
group_by(Region) %>%
summarise(Total_Revenue = sum(Revenue))
ggplot(revenue_region, aes(x = Region, y = Total_Revenue, fill = Region)) +
geom_col() +
geom_text(
aes(label = format(round(Total_Revenue, 0), big.mark = ".", decimal.mark = ",")), # ✅ Định dạng kế toán Việt Nam
vjust = -0.5,
size = 3.5,
color = "black"
) +
labs(
title = "Tổng doanh thu (Revenue) theo từng vùng (Region)",
x = "Vùng địa lý",
y = "Tổng doanh thu (USD)"
) +
scale_fill_manual(values = c(
"Centre" = "#9370DB",
"East" = "#00BFFF",
"South" = "#FFA500",
"West" = "#2E8B57"
)) +
theme_minimal(base_family = "roboto") +
theme(
plot.title = element_text(face = "bold", hjust = 0.5, size = 16, color = "#2F4F4F"),
axis.title = element_text(face = "bold")
)
Giải thích: Biểu đồ cột biểu diễn tổng doanh thu
(Revenue) thu được từ các vùng kinh doanh khác nhau trong tập dữ liệu
bán hàng.
Trục X: Tên các vùng (Region) gồm Centre, East, South, West.
Trục Y: Tổng doanh thu, đơn vị tính là USD.
Mỗi cột: Biểu diễn tổng doanh thu cộng gộp của tất cả sản phẩm bán ra trong từng vùng.
Nhận xét: Biểu đồ cho thấy vùng East đạt tổng doanh thu cao nhất, khoảng 44,98 triệu USD, tiếp theo là West với 36,24 triệu USD và Centre với 36,08 triệu USD. Ngược lại, vùng South có doanh thu thấp nhất, chỉ đạt 25,10 triệu USD, thấp hơn gần 20 triệu USD so với vùng dẫn đầu. Điều này cho thấy doanh thu giữa các vùng có sự chênh lệch đáng kể, trong đó East là khu vực kinh doanh hiệu quả nhất.
# --- Biểu đồ boxplot: Phân bố lợi nhuận (Profit) theo vùng ---
ggplot(data, aes(x = Region, y = Profit, fill = Region)) +
# Layer 1: Vẽ boxplot
geom_boxplot(alpha = 0.8, outlier.color = "red", outlier.size = 1.5) +
# Layer 2: Thêm tiêu đề, trục
labs(
title = "Phân bố lợi nhuận (Profit) theo từng vùng (Region)",
x = "Vùng địa lý",
y = "Lợi nhuận (USD)",
fill = "Vùng"
) +
# Layer 3: Tô màu thủ công
scale_fill_manual(values = c("#00BFFF", "#2E8B57", "#FFA500", "#9370DB")) +
# Layer 4: Đường trung bình
stat_summary(fun = mean, geom = "point", shape = 21, fill = "white", size = 2.5, color = "black") +
# Layer 5: Giao diện
theme_minimal(base_family = "roboto") +
theme(
plot.title = element_text(face = "bold", size = 14, hjust = 0.5, color = "#264653"),
axis.title.x = element_text(face = "bold"),
axis.title.y = element_text(face = "bold")
)
Giải thích:
Biểu đồ hộp thể hiện phân bố lợi nhuận (Profit) của các đơn hàng theo từng vùng kinh doanh (Region) trong tập dữ liệu bán hàng.
Trục X: Các vùng kinh doanh gồm Centre, East, South, West.
Trục Y: Giá trị lợi nhuận (USD).
Mỗi hộp (box): Biểu diễn phạm vi biến động của lợi nhuận trong từng vùng — từ giá trị thấp nhất đến cao nhất (không tính ngoại lai).
Dấu chấm trắng bên trong hộp: Thể hiện giá trị trung bình lợi nhuận.
Các điểm đỏ phía trên hộp: Là các giá trị ngoại lai (outliers) — những đơn hàng có lợi nhuận bất thường cao hơn phần lớn dữ liệu.
Nhận xét: Biểu đồ hộp cho thấy lợi nhuận trung bình giữa các vùng khá tương đồng, chủ yếu dao động quanh 100–200 USD. Tuy nhiên, các điểm ngoại lai xuất hiện nhiều ở cả bốn vùng, đặc biệt là vùng East và South, thể hiện sự chênh lệch lớn giữa các đơn hàng về khả năng sinh lợi.
library(ggplot2)
library(dplyr)
library(showtext)
# Bật font tiếng Việt và hiển thị Unicode
showtext_auto()
font_add_google("Roboto", "roboto")
# --- HÀM ĐỊNH DẠNG SỐ CHUẨN VIỆT NAM ---
format_vn <- function(x, digits = 0) {
format(round(x, digits),
big.mark = ".", decimal.mark = ",", scientific = FALSE)
}
# --- TÍNH TOÁN DỮ LIỆU ---
profit_cat <- data %>%
group_by(Category) %>%
summarise(Total_Profit = sum(Profit))
# --- VẼ BIỂU ĐỒ ---
ggplot(profit_cat, aes(x = Category, y = Total_Profit, fill = Category)) +
geom_col() + # Layer 1: Biểu đồ cột
geom_text( # Layer 2: Hiển thị nhãn giá trị
aes(label = format_vn(Total_Profit)),
vjust = -0.5, color = "black", size = 3.5
) +
labs( # Layer 3: Tiêu đề và nhãn trục
title = "Tổng lợi nhuận (Profit) theo loại sản phẩm",
x = "Loại sản phẩm",
y = "Tổng lợi nhuận (USD)"
) +
scale_fill_manual( # Layer 4: Bảng màu tùy chỉnh
values = c(
"accessories" = "#00BFFF",
"clothing & apparel" = "#FF7F50",
"electronics" = "#9370DB",
"home & furniture" = "#3CB371"
)
) +
theme_minimal(base_family = "roboto") + # Layer 5: Giao diện tối giản
theme(
plot.title = element_text(face = "bold", hjust = 0.5, size = 16, color = "#2F4F4F"),
axis.title = element_text(face = "bold")
)
Giải thích:
Biểu đồ cột trên biểu diễn tổng lợi nhuận (Profit) thu được từ từng loại sản phẩm (Category) trong tập dữ liệu bán hàng.
Trục X: thể hiện các nhóm sản phẩm bao gồm accessories, clothing & apparel, electronics và home & furniture.
Trục Y: biểu diễn tổng giá trị lợi nhuận (USD) đạt được từ mỗi nhóm hàng.
Mỗi cột: thể hiện tổng lợi nhuận cộng gộp của toàn bộ sản phẩm thuộc nhóm tương ứng.
Nhãn số trên đầu cột: được định dạng theo chuẩn kế toán Việt Nam (dấu chấm ngăn cách hàng nghìn), giúp người đọc dễ dàng so sánh giá trị giữa các nhóm.
Nhận xét: Nhóm Home & Furniture đạt lợi nhuận cao nhất, khoảng 11.218.596 USD, cho thấy đây là mảng kinh doanh hiệu quả nhất.
Tiếp theo là nhóm Clothing & Apparel với 8.826.851 USD, và Electronics với 8.065.114 USD – hai nhóm này cũng đóng góp đáng kể vào tổng lợi nhuận.
Ngược lại, nhóm Accessories có lợi nhuận thấp nhất, chỉ 3.438.046 USD, thể hiện biên lợi nhuận thấp hoặc sức tiêu thụ yếu so với các nhóm còn lại.
Nhìn chung, lợi nhuận phân bổ không đồng đều giữa các loại sản phẩm, trong đó nhóm đồ nội thất (Home & Furniture) có thể được xem là trụ cột lợi nhuận chính của doanh nghiệp.
# --- CÀI ĐẶT THƯ VIỆN ---
library(ggplot2)
library(dplyr)
library(showtext)
# Bật font tiếng Việt và hỗ trợ Unicode
showtext_auto()
font_add_google("Roboto", "roboto")
# --- HÀM ĐỊNH DẠNG SỐ CHUẨN KẾ TOÁN VIỆT NAM ---
format_vn <- function(x, digits = 0) {
format(round(x, digits),
big.mark = ".", decimal.mark = ",", scientific = FALSE)
}
# --- TÍNH TỔNG DOANH THU THEO LOẠI SẢN PHẨM ---
revenue_cat <- data %>%
group_by(Category) %>%
summarise(Total_Revenue = sum(Revenue))
# --- VẼ BIỂU ĐỒ ---
ggplot(revenue_cat, aes(x = Category, y = Total_Revenue, fill = Category)) +
geom_col() + # Layer 1: Biểu đồ cột
geom_text( # Layer 2: Hiển thị nhãn giá trị
aes(label = format_vn(Total_Revenue)),
vjust = -0.5, color = "black", size = 3.5
) +
labs( # Layer 3: Tiêu đề và trục
title = "Tổng doanh thu (Revenue) theo loại sản phẩm",
x = "Loại sản phẩm",
y = "Tổng doanh thu (USD)"
) +
scale_fill_manual( # Layer 4: Màu sắc tuỳ chỉnh cho từng nhóm sản phẩm
values = c(
"accessories" = "#00BFFF",
"clothing & apparel" = "#FF7F50",
"electronics" = "#9370DB",
"home & furniture" = "#3CB371"
)
) +
theme_minimal(base_family = "roboto") + # Layer 5: Giao diện tối giản
theme(
plot.title = element_text(face = "bold", hjust = 0.5, size = 16, color = "#2F4F4F"),
axis.title = element_text(face = "bold")
)
Giải thích:
Biểu đồ cột thể hiện tổng doanh thu (Revenue) thu được từ từng loại sản phẩm (Category) trong dữ liệu bán hàng.
Trục X: Các loại sản phẩm (accessories, clothing & apparel, electronics, home & furniture).
Trục Y: Tổng doanh thu tính bằng USD.
Mỗi cột: Đại diện cho tổng doanh thu cộng gộp của nhóm sản phẩm tương ứng.
Nhãn trên cột: Hiển thị số liệu được định dạng theo chuẩn kế toán Việt Nam, giúp người đọc dễ theo dõi.
Nhận xét:
Nhóm Electronics đạt doanh thu cao nhất (57.485.698 USD), cho thấy đây là mặt hàng chủ lực của doanh nghiệp.
Theo sau là Home & Furniture với 47.674.427 USD, cũng đóng góp lớn vào tổng doanh thu.
Clothing & Apparel đạt mức trung bình (27.134.365 USD).
Accessories có doanh thu thấp nhất (10.113.255 USD), thể hiện sức tiêu thụ yếu hơn so với các nhóm khác.
# --- CÀI ĐẶT THƯ VIỆN ---
library(ggplot2)
library(showtext)
library(scales)
# Bật font Unicode
showtext_auto()
font_add_google("Roboto", "roboto")
# --- VẼ BIỂU ĐỒ HỘP ---
ggplot(data, aes(x = Category, y = Profit, fill = Category)) +
geom_boxplot(alpha = 0.7, outlier.colour = "red", outlier.size = 1.8) + # Layer 1: Boxplot
geom_jitter(width = 0.2, alpha = 0.2, color = "gray40") + # Layer 2: Điểm phân tán nhẹ
labs( # Layer 3: Tiêu đề & nhãn
title = "Phân bố lợi nhuận (Profit) theo loại sản phẩm (Category)",
x = "Loại sản phẩm",
y = "Lợi nhuận (USD)"
) +
scale_y_continuous(labels = label_number(big.mark = ".", decimal.mark = ",")) + # Layer 4: Format kế toán Việt Nam
scale_fill_manual( # Layer 5: Màu sắc từng nhóm
values = c(
"accessories" = "#00BFFF",
"clothing & apparel" = "#FF7F50",
"electronics" = "#9370DB",
"home & furniture" = "#3CB371"
)
) +
theme_minimal(base_family = "roboto") +
theme(
plot.title = element_text(face = "bold", hjust = 0.5, size = 16, color = "#2F4F4F"),
axis.title = element_text(face = "bold"),
legend.position = "none"
)
Giải thích:Giải thích biểu đồ
Biểu đồ hộp (Boxplot) thể hiện phân bố lợi nhuận (Profit) của các nhóm sản phẩm (Category) trong dữ liệu bán hàng.
Trục hoành (X): Các nhóm sản phẩm (Category)
Trục tung (Y): Giá trị lợi nhuận (USD)
Hộp: Thể hiện phạm vi phân bố của dữ liệu (từ tứ phân vị Q1 đến Q3) và giá trị trung vị (Median)
Dấu chấm đỏ: Biểu diễn các giá trị ngoại lai (Outliers) – những giao dịch có lợi nhuận cao bất thường
Màu sắc: Giúp phân biệt các nhóm sản phẩm khác nhau
Nhận xét: Nhận xét
Biểu đồ cho thấy sự khác biệt đáng kể về phân bố lợi nhuận giữa các nhóm sản phẩm.
Nhóm Home & Furniture có lợi nhuận trung vị cao nhất và nhiều giá trị ngoại lai, chứng tỏ tiềm năng sinh lời cao nhưng biến động lớn.
Nhóm Clothing & Apparel và Electronics có mức lợi nhuận ổn định hơn, phân bố tập trung quanh trung vị.
Nhóm Accessories có lợi nhuận thấp nhất và ít biến động, phản ánh biên lợi nhuận nhỏ và ổn định.
# Cài và gọi thư viện cần thiết
library(ggplot2)
library(scales)
library(showtext)
# Bật hỗ trợ tiếng Việt và font Unicode
font_add_google("Roboto", "roboto")
showtext_auto()
# Vẽ biểu đồ
ggplot(data, aes(x = Quantity, y = Revenue)) +
# 1️⃣ LAYER 1: Điểm dữ liệu
geom_point(aes(color = Category), alpha = 0.6, size = 2) +
# 2️⃣ LAYER 2: Đường xu hướng hồi quy tuyến tính
geom_smooth(method = "lm", se = FALSE, color = "black", linetype = "dashed", linewidth = 1) +
# 3️⃣ LAYER 3: Tiêu đề, nhãn trục
labs(
title = "Mối quan hệ giữa Số lượng bán (Quantity) và Doanh thu (Revenue)",
subtitle = "Phân tích theo từng loại sản phẩm (Category)",
x = "Số lượng bán (Quantity)",
y = "Doanh thu (Revenue - USD)",
color = "Loại sản phẩm"
) +
# 4️⃣ LAYER 4: Định dạng kế toán Việt Nam (phân tách nghìn)
scale_y_continuous(labels = label_number(big.mark = ".", decimal.mark = ",")) +
scale_x_continuous(labels = label_number(big.mark = ".", decimal.mark = ",")) +
# 5️⃣ LAYER 5: Giao diện và font
theme_minimal(base_family = "roboto") +
theme(
plot.title = element_text(face = "bold", hjust = 0.5, size = 15, color = "#2F4F4F"),
plot.subtitle = element_text(hjust = 0.5, size = 12, color = "#555555"),
axis.title = element_text(face = "bold"),
legend.position = "right",
legend.title = element_text(face = "bold")
)
Giải thích:
Biểu đồ trên là biểu đồ phân tán (Scatter Plot) thể hiện mối quan hệ giữa Số lượng bán (Quantity) và Doanh thu (Revenue) trong tập dữ liệu bán hàng.
Trục X: Biểu diễn số lượng sản phẩm được bán ra (Quantity).
Trục Y: Biểu diễn tổng doanh thu (Revenue) tính bằng USD.
Mỗi điểm dữ liệu: Đại diện cho một giao dịch bán hàng.
Màu sắc của điểm: Phân loại theo Category (Loại sản phẩm) để dễ phân biệt nhóm sản phẩm khác nhau.
Đường nét đứt màu đen: Là đường hồi quy tuyến tính (Linear Regression) — cho thấy xu hướng tổng thể giữa hai biến.
Nhận xét:
Biểu đồ cho thấy mối quan hệ tuyến tính dương rõ ràng: khi số lượng sản phẩm bán ra tăng, doanh thu cũng tăng tương ứng.
Đường hồi quy có độ dốc dương → chứng tỏ xu hướng tăng ổn định, thể hiện rằng doanh thu phụ thuộc chặt chẽ vào số lượng bán.
Một số nhóm sản phẩm như electronics và home & furniture có các điểm dữ liệu nằm xa hơn về phía trên → điều này chứng tỏ giá trị mỗi sản phẩm cao hơn, giúp tạo ra doanh thu lớn hơn dù số lượng bán ra có thể ít hơn.
Sự phân tán dọc trục Y cho cùng một giá trị Quantity thể hiện sự khác biệt về giá bán giữa các sản phẩm trong cùng nhóm.
# Cài và nạp thư viện cần thiết
library(ggplot2)
library(dplyr)
library(lubridate)
library(scales)
library(showtext)
# Kích hoạt font tiếng Việt
font_add_google("Roboto", "roboto")
showtext_auto()
# Tạo biến tháng từ Order_Date
data <- data %>%
mutate(Month = floor_date(as.Date(Order_Date), "month")) %>%
group_by(Month) %>%
summarise(Total_Revenue = sum(Revenue, na.rm = TRUE))
# Vẽ biểu đồ
ggplot(data, aes(x = Month, y = Total_Revenue)) +
# 1️⃣ LAYER 1: Đường xu hướng doanh thu
geom_line(color = "#0073C2FF", linewidth = 1.2) +
# 2️⃣ LAYER 2: Thêm điểm dữ liệu
geom_point(color = "#FF7F0E", size = 2) +
# 3️⃣ LAYER 3: Nhãn trục và tiêu đề
labs(
title = "Xu hướng Doanh thu (Revenue) theo Tháng",
subtitle = "Quan sát biến động doanh thu theo thời gian",
x = "Tháng (Month)",
y = "Tổng doanh thu (USD)"
) +
# 4️⃣ LAYER 4: Định dạng số theo chuẩn kế toán Việt Nam
scale_y_continuous(labels = label_number(big.mark = ".", decimal.mark = ",")) +
scale_x_date(date_labels = "%m/%Y", date_breaks = "1 month") +
# 5️⃣ LAYER 5: Giao diện và font
theme_minimal(base_family = "roboto") +
theme(
plot.title = element_text(face = "bold", hjust = 0.5, size = 16, color = "#2F4F4F"),
plot.subtitle = element_text(hjust = 0.5, size = 12, color = "#555555"),
axis.text.x = element_text(angle = 45, hjust = 1, size = 9),
axis.title = element_text(face = "bold"),
panel.grid.minor = element_blank()
)
Giải thích
Biểu đồ trên là biểu đồ đường (Line Chart) thể hiện xu hướng biến động doanh thu (Revenue) theo tháng (Month) trong giai đoạn quan sát của bộ dữ liệu bán hàng.
Trục X: Biểu diễn các tháng (từ cuối năm 2022 đến đầu năm 2025).
Trục Y: Biểu diễn tổng doanh thu (USD) theo chuẩn kế toán Việt Nam (có dấu chấm phân tách nghìn).
Đường màu xanh: Thể hiện sự thay đổi doanh thu qua từng tháng.
Các điểm màu cam: Biểu diễn giá trị doanh thu thực tế của từng tháng.
Nhận xét
Xu hướng chung: Doanh thu có sự dao động rõ rệt theo thời gian, thể hiện mùa vụ kinh doanh đặc trưng.
Đỉnh cao doanh thu:
Tháng 11/2023 và 12/2024 ghi nhận mức doanh thu cao nhất, vượt ngưỡng 10.000.000 USD, có thể do giai đoạn khuyến mãi cuối năm hoặc lễ hội mua sắm (Black Friday, Giáng sinh).
Thời điểm thấp nhất:
Tháng 02/2023 và 01/2024 doanh thu giảm mạnh, chỉ còn khoảng 2.000.000 USD, có khả năng liên quan đến dịp nghỉ lễ Tết làm giảm hoạt động mua sắm.
Giai đoạn ổn định:
Từ tháng 3 đến tháng 9 mỗi năm, doanh thu duy trì ở mức trung bình, dao động quanh 4–5 triệu USD/tháng.
Giải thích
Biểu đồ trên là biểu đồ cột ngang (Horizontal Bar Chart) thể hiện sự so sánh tổng doanh thu (Revenue) và tổng lợi nhuận (Profit) giữa các vùng địa lý (Region) trong bộ dữ liệu bán hàng.
Trục Y: Biểu diễn các vùng địa lý, bao gồm East, West, Centre, và South.
Trục X: Thể hiện giá trị doanh thu và lợi nhuận (USD), được định dạng theo chuẩn kế toán Việt Nam (dấu chấm phân tách nghìn).
Cột màu xanh: Đại diện cho tổng doanh thu (Revenue) của từng vùng.
Cột màu cam: Thể hiện tổng lợi nhuận (Profit) tương ứng của vùng đó.
Biểu đồ được sắp xếp theo thứ tự giảm dần doanh thu, giúp dễ dàng nhận biết khu vực kinh doanh hiệu quả nhất.
Nhận xét
Xu hướng chung: Doanh thu và lợi nhuận giữa các vùng có sự chênh lệch đáng kể, thể hiện sự phân bố không đồng đều về hiệu quả kinh doanh.
Vùng dẫn đầu:
East là vùng có doanh thu và lợi nhuận cao nhất, thể hiện khả năng tiêu thụ hàng hóa mạnh và biên lợi nhuận ổn định.
Đây có thể là thị trường trọng điểm hoặc khu vực có nhu cầu tiêu dùng cao, chi phí thấp.
Vùng trung bình:
West và Centre đạt mức doanh thu tương đối cao nhưng lợi nhuận vẫn thấp hơn đáng kể so với East, cho thấy có thể chi phí hoạt động cao hơn hoặc tỷ lệ chiết khấu lớn.
Cần xem xét cấu trúc sản phẩm hoặc chiến lược giá tại hai vùng này.
Vùng thấp nhất:
South ghi nhận doanh thu và lợi nhuận thấp nhất, chứng tỏ đây là khu vực thị phần nhỏ hoặc hiệu quả bán hàng chưa cao.
Có thể do mạng lưới phân phối hạn chế hoặc nhu cầu thị trường thấp.
Tổng kết:
East là vùng kinh doanh hiệu quả nhất, đóng vai trò đầu tàu doanh thu.
West và Centre có tiềm năng mở rộng nếu tối ưu chi phí.
South cần chiến lược cải thiện như đẩy mạnh quảng bá, hỗ trợ đại lý, hoặc giảm giá vận chuyển.
library(ggplot2)
library(dplyr)
library(scales)
library(showtext)
font_add_google("Roboto", "roboto")
showtext_auto()
# --- 1️⃣ LAYER 1: Mục tiêu ---
data <- read.csv("C:/Users/ADMIN/Downloads/product_sales_dataset_final.csv")
# --- 2️⃣ LAYER 2: Chuẩn bị dữ liệu ---
top10_revenue <- data %>%
group_by(Product_Name) %>%
summarise(Total_Revenue = sum(Revenue, na.rm = TRUE)) %>%
arrange(desc(Total_Revenue)) %>%
slice_head(n = 10)
# --- 3️⃣ LAYER 3: Biểu đồ ---
ggplot(top10_revenue, aes(x = reorder(Product_Name, Total_Revenue),
y = Total_Revenue,
fill = Total_Revenue)) +
geom_col(width = 0.7) +
coord_flip() +
# --- Định dạng nhãn theo chuẩn kế toán VN ---
geom_text(aes(label = paste0(format(round(Total_Revenue, 0),
big.mark = ".",
decimal.mark = ","),
" USD")),
hjust = -0.1, color = "black", size = 3.5) +
# --- 4️⃣ LAYER 4: Tiêu đề và trục ---
labs(
title = "Top 10 Sản Phẩm Có Doanh Thu Cao Nhất",
subtitle = "Phân tích nhóm sản phẩm chủ lực trong danh mục bán hàng",
x = "Tên sản phẩm",
y = "Tổng doanh thu (USD)"
) +
scale_y_continuous(labels = label_number(big.mark = ".", decimal.mark = ",")) +
# --- 5️⃣ LAYER 5: Giao diện ---
theme_minimal(base_family = "roboto") +
theme(
plot.title = element_text(face = "bold", hjust = 0.5, size = 16, color = "#2F4F4F"),
plot.subtitle = element_text(hjust = 0.5, size = 12, color = "#555555"),
axis.title = element_text(face = "bold"),
axis.text.y = element_text(size = 9),
panel.grid.minor = element_blank()
) +
scale_fill_gradient(low = "#a6cee3", high = "#1f78b4")
Giải thích
Biểu đồ trên là biểu đồ cột ngang (Horizontal Bar Chart) thể hiện 10 sản phẩm có doanh thu cao nhất trong bộ dữ liệu bán hàng.
Trục X: Biểu diễn tổng doanh thu (USD). Trục Y: Hiển thị tên các sản phẩm.
Màu cột: Càng đậm thể hiện doanh thu càng cao.
Các giá trị được sắp xếp giảm dần giúp nhận diện nhanh sản phẩm chủ lực.
Nhận xét Tempur-Pedic Mattress đứng đầu với doanh thu 9.061.000 USD, vượt nhẹ Instant Pot (8.903.000 USD) và MacBook Air (7.362.000 USD).
Nhóm Apple Watch, iPhone 14 và iPad Pro cũng đạt doanh thu cao, từ 5.5 – 6.8 triệu USD, khẳng định sức mạnh thương hiệu Apple.
Các sản phẩm ở cuối top như Brooklinen Sheets (3.981.000 USD) và Samsung Galaxy S23 (3.851.000 USD) vẫn duy trì mức doanh thu ổn định.
Chênh lệch giữa sản phẩm đầu bảng và cuối bảng gần 2,3 lần, cho thấy mức tập trung doanh thu cao ở nhóm hàng đầu.
library(ggplot2)
library(dplyr)
library(lubridate)
library(scales)
library(showtext)
font_add_google("Roboto", "roboto")
showtext_auto()
# --- 1️⃣ LAYER 1: Mục tiêu ---
# Phân tích xu hướng biến động lợi nhuận hàng tháng trong giai đoạn quan sát.
# --- 2️⃣ LAYER 2: Chuẩn bị dữ liệu ---
data <- read.csv("C:/Users/ADMIN/Downloads/product_sales_dataset_final.csv")
data_monthly_profit <- data %>%
mutate(Month = floor_date(as.Date(Order_Date, format = "%m-%d-%y"), "month")) %>%
group_by(Month) %>%
summarise(Total_Profit = sum(Profit, na.rm = TRUE))
# --- 3️⃣ LAYER 3: Biểu đồ ---
ggplot(data_monthly_profit, aes(x = Month, y = Total_Profit)) +
geom_line(color = "#FF7F0E", linewidth = 1.2) +
geom_point(color = "#2F4F4F", size = 2.5) +
# --- 4️⃣ LAYER 4: Nhãn và định dạng ---
labs(
title = "Xu Hướng Lợi Nhuận (Profit) Theo Tháng",
subtitle = "Theo dõi biến động lợi nhuận trong giai đoạn 2022–2025",
x = "Tháng (Month)",
y = "Tổng lợi nhuận (USD)"
) +
scale_y_continuous(labels = label_number(big.mark = ".", decimal.mark = ",")) +
scale_x_date(date_labels = "%m/%Y", date_breaks = "2 month") +
# --- 5️⃣ LAYER 5: Giao diện ---
theme_minimal(base_family = "roboto") +
theme(
plot.title = element_text(face = "bold", hjust = 0.5, size = 16, color = "#2F4F4F"),
plot.subtitle = element_text(hjust = 0.5, size = 12, color = "#555555"),
axis.title = element_text(face = "bold"),
axis.text.x = element_text(angle = 45, hjust = 1, size = 9),
panel.grid.minor = element_blank()
)
Giải thích
Biểu đồ trên là biểu đồ đường (Line Chart) thể hiện xu hướng biến động lợi nhuận (Profit) theo tháng (Month) trong giai đoạn từ đầu năm 2023 đến đầu năm 2025.
Trục X: Biểu diễn thời gian (tháng/năm).
Trục Y: Thể hiện tổng lợi nhuận (USD) theo chuẩn kế toán Việt Nam (dấu chấm phân cách hàng nghìn).
Đường màu cam: Thể hiện sự thay đổi của tổng lợi nhuận qua các tháng.
Các điểm màu đen: Biểu diễn giá trị lợi nhuận thực tế từng tháng.
Nhận xét
Xu hướng chung: Lợi nhuận có sự dao động rõ rệt theo mùa vụ, với các đỉnh lợi nhuận cao vào cuối năm và mức thấp nhất vào đầu năm.
Đỉnh cao lợi nhuận:
Tháng 11/2023 đạt mức gần 3.000.000 USD,
Tháng 12/2024 đạt hơn 3.100.000 USD – cao nhất toàn kỳ, trùng với mùa lễ hội cuối năm (Black Friday, Giáng sinh).
Thời điểm thấp nhất:
Tháng 2/2023 và tháng 1/2024, lợi nhuận giảm xuống còn khoảng 500.000 – 700.000 USD, khả năng do ảnh hưởng kỳ nghỉ Tết.
Giai đoạn ổn định:
Từ tháng 4 đến tháng 9 hằng năm, lợi nhuận duy trì quanh mức 1.000.000 USD/tháng, thể hiện hoạt động ổn định không biến động mạnh.
library(ggplot2)
library(dplyr)
library(scales)
library(showtext)
# Kích hoạt font tiếng Việt
font_add_google("Roboto", "roboto")
showtext_auto()
# --- 1️⃣ LAYER 1: Mục tiêu ---
# Trực quan hóa tỷ trọng doanh thu theo loại sản phẩm
# --- 2️⃣ LAYER 2: Chuẩn bị dữ liệu ---
data <- read.csv("C:/Users/ADMIN/Downloads/product_sales_dataset_final.csv")
category_revenue <- data %>%
group_by(Category) %>%
summarise(Total_Revenue = sum(Revenue, na.rm = TRUE)) %>%
mutate(Share = Total_Revenue / sum(Total_Revenue) * 100)
# --- 3️⃣ LAYER 3: Biểu đồ Donut ---
ggplot(category_revenue, aes(x = 2, y = Share, fill = Category)) +
geom_col(width = 1, color = "white") +
coord_polar(theta = "y") +
xlim(0.5, 2.5) + # tạo vòng rỗng ở giữa
# --- 4️⃣ LAYER 4: Nhãn & định dạng ---
geom_text(aes(label = paste0(round(Share, 1), "%")),
position = position_stack(vjust = 0.5),
size = 4, color = "white", fontface = "bold") +
labs(
title = "Phân Bố Doanh Thu Theo Loại Sản Phẩm (Category)",
subtitle = "Tỷ trọng doanh thu của từng nhóm sản phẩm trong tổng doanh thu",
fill = "Loại sản phẩm"
) +
scale_fill_brewer(palette = "Set2") +
# --- 5️⃣ LAYER 5: Giao diện & font ---
theme_void(base_family = "roboto") +
theme(
plot.title = element_text(face = "bold", hjust = 0.5, size = 16, color = "#2F4F4F"),
plot.subtitle = element_text(hjust = 0.5, size = 12, color = "#555555"),
legend.position = "right"
)
Giải thích: Biểu đồ vòng tròn thể hiện tỷ trọng doanh
thu (%) theo từng loại sản phẩm (Category). Mỗi phần hình quạt tương ứng
với một nhóm sản phẩm, kích thước thể hiện mức đóng góp doanh thu.
Nhận xét:
Electronics chiếm tỷ trọng lớn nhất (40,4%) – là nhóm sản phẩm chủ lực.
Home & Furniture chiếm 33,5%, tiếp theo là Clothing & Apparel (19,1%).
Accessories chỉ đóng góp 7%, cho thấy dư địa phát triển còn cao.
library(ggplot2)
library(dplyr)
library(scales)
library(showtext)
font_add_google("Roboto", "roboto")
showtext_auto()
# --- 1️⃣ LAYER 1: Mục tiêu ---
# Phân tích mối tương quan giữa số lượng bán và doanh thu theo từng loại sản phẩm
# --- 2️⃣ LAYER 2: Chuẩn bị dữ liệu ---
data <- read.csv("C:/Users/ADMIN/Downloads/product_sales_dataset_final.csv")
category_compare <- data %>%
group_by(Category) %>%
summarise(
Total_Quantity = sum(Quantity, na.rm = TRUE),
Total_Revenue = sum(Revenue, na.rm = TRUE)
)
# Chuyển dữ liệu về dạng "long" để dễ vẽ cột so sánh
category_long <- category_compare %>%
tidyr::pivot_longer(cols = c("Total_Quantity", "Total_Revenue"),
names_to = "Metric", values_to = "Value")
# --- 3️⃣ LAYER 3: Biểu đồ ---
ggplot(category_long, aes(x = Category, y = Value, fill = Metric)) +
geom_col(position = "dodge", width = 0.7) +
geom_text(aes(label = ifelse(Metric == "Total_Revenue",
paste0(format(round(Value, 0), big.mark = ".", decimal.mark = ","), " USD"),
format(round(Value, 0), big.mark = ".", decimal.mark = ","))),
position = position_dodge(width = 0.7),
vjust = -0.3, size = 3.5, color = "black") +
# --- 4️⃣ LAYER 4: Tiêu đề & nhãn ---
labs(
title = "So Sánh Số Lượng Bán và Doanh Thu Theo Loại Sản Phẩm",
subtitle = "Giúp xác định sản phẩm bán chạy và sản phẩm có giá trị cao",
x = "Loại sản phẩm",
y = "Giá trị",
fill = "Chỉ tiêu"
) +
scale_y_continuous(labels = label_number(big.mark = ".", decimal.mark = ",")) +
scale_fill_manual(values = c("Total_Quantity" = "#1f78b4", "Total_Revenue" = "#ff7f0e"),
labels = c("Total_Quantity" = "Số lượng bán", "Total_Revenue" = "Doanh thu")) +
# --- 5️⃣ LAYER 5: Giao diện ---
theme_minimal(base_family = "roboto") +
theme(
plot.title = element_text(face = "bold", hjust = 0.5, size = 16, color = "#2F4F4F"),
plot.subtitle = element_text(hjust = 0.5, size = 12, color = "#555555"),
axis.title = element_text(face = "bold"),
panel.grid.minor = element_blank()
)
Giải thích
Biểu đồ trên là biểu đồ cột nhóm (Grouped Bar Chart) thể hiện sự so sánh giữa Số lượng bán (Quantity) và Doanh thu (Revenue) của từng loại sản phẩm (Category).
Trục X: Thể hiện các loại sản phẩm (Accessories, Clothing & Apparel, Electronics, Home & Furniture).
Trục Y: Biểu diễn giá trị tương ứng (số lượng hoặc doanh thu).
Cột màu xanh: Thể hiện tổng số lượng sản phẩm bán ra.
Cột màu cam: Thể hiện tổng doanh thu (USD) theo chuẩn kế toán Việt Nam (dấu chấm phân tách nghìn).
Biểu đồ giúp xác định nhóm sản phẩm bán chạy nhất và nhóm sản phẩm có doanh thu cao nhất.
Nhận xét
Electronics là nhóm mang lại doanh thu cao nhất, đạt khoảng 57.485.698 USD, dù số lượng bán chỉ ở mức 97.115 đơn vị → nhóm hàng giá trị cao.
Home & Furniture đứng thứ hai với 47.674.427 USD, cho thấy đây là nhóm ổn định và sinh lợi tốt, dù không có số lượng bán cao.
Clothing & Apparel bán ra nhiều nhất (115.523 sản phẩm) nhưng chỉ đạt doanh thu 27.134.365 USD, → phản ánh giá bán trung bình thấp, biên lợi nhuận nhỏ.
Accessories có doanh thu thấp nhất (10.113.255 USD) và số lượng bán thấp (67.759 sản phẩm).
library(ggplot2)
library(dplyr)
library(lubridate)
library(scales)
library(showtext)
# Kích hoạt font tiếng Việt
font_add_google("Roboto", "roboto")
showtext_auto()
# --- 1️⃣ LAYER 1: Mục tiêu ---
# Phân tích doanh thu theo thứ trong tuần (Monday - Sunday)
# --- 2️⃣ LAYER 2: Chuẩn bị dữ liệu ---
data <- read.csv("C:/Users/ADMIN/Downloads/product_sales_dataset_final.csv")
# Chuyển ngày & trích xuất thứ trong tuần
data_weekday <- data %>%
mutate(
Order_Date = as.Date(Order_Date, format = "%m-%d-%y"),
Weekday = wday(Order_Date, label = TRUE, abbr = FALSE, week_start = 1)
) %>%
group_by(Weekday) %>%
summarise(Total_Revenue = sum(Revenue, na.rm = TRUE)) %>%
mutate(Weekday = factor(Weekday,
levels = c("Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday")))
# --- 3️⃣ LAYER 3: Biểu đồ ---
ggplot(data_weekday, aes(x = Weekday, y = Total_Revenue, fill = Weekday)) +
geom_col(width = 0.7) +
geom_text(aes(label = paste0(format(round(Total_Revenue, 0), big.mark = ".", decimal.mark = ","), " USD")),
vjust = -0.3, size = 3.5, color = "black") +
# --- 4️⃣ LAYER 4: Tiêu đề & định dạng ---
labs(
title = "Phân Tích Doanh Thu Theo Ngày Trong Tuần",
subtitle = "Xác định ngày có doanh thu cao nhất để tối ưu chiến lược bán hàng",
x = "Ngày trong tuần",
y = "Tổng doanh thu (USD)"
) +
scale_y_continuous(labels = label_number(big.mark = ".", decimal.mark = ",")) +
scale_fill_brewer(palette = "Set3") +
# --- 5️⃣ LAYER 5: Giao diện ---
theme_minimal(base_family = "roboto") +
theme(
plot.title = element_text(face = "bold", hjust = 0.5, size = 16, color = "#2F4F4F"),
plot.subtitle = element_text(hjust = 0.5, size = 12, color = "#555555"),
axis.title = element_text(face = "bold"),
axis.text.x = element_text(size = 10, face = "bold"),
panel.grid.minor = element_blank(),
legend.position = "none"
)
Giải thích
Biểu đồ trên là biểu đồ cột (Bar Chart) thể hiện tổng doanh thu (Revenue) theo từng ngày trong tuần (Weekday).
Trục X: Các ngày trong tuần (từ Monday đến Sunday).
Trục Y: Tổng doanh thu (USD) được định dạng theo chuẩn Việt Nam (dấu chấm phân cách hàng nghìn).
Mỗi cột biểu diễn tổng doanh thu bán hàng của ngày tương ứng trong toàn bộ giai đoạn quan sát.
Nhận xét
Thứ Sáu (Friday) là ngày có doanh thu cao nhất, đạt khoảng 23.257.335 USD, cho thấy đây là cao điểm mua sắm trước cuối tuần.
Chủ Nhật (Sunday) và Thứ Bảy (Saturday) cũng duy trì doanh thu cao, lần lượt 22.234.744 USD và 21.446.039 USD.
Trong khi đó, Thứ Ba (Tuesday) và Thứ Tư (Wednesday) là hai ngày có doanh thu thấp nhất, chỉ khoảng 18 triệu USD — thấp hơn trung bình tuần gần 5 triệu USD.
Tổng kết:
Doanh thu tăng mạnh từ cuối tuần, đạt đỉnh vào Thứ Sáu – Chủ Nhật.
Doanh nghiệp nên tập trung quảng cáo, khuyến mãi hoặc ra mắt sản phẩm mới vào cuối tuần để tối đa hóa hiệu quả bán hàng.
library(ggplot2)
library(dplyr)
library(scales)
library(showtext)
# Font tiếng Việt
font_add_google("Roboto", "roboto")
showtext_auto()
# --- 1️⃣ LAYER 1: Mục tiêu ---
# Làm nổi bật 10 bang có doanh thu cao nhất với màu sắc sinh động
# --- 2️⃣ LAYER 2: Chuẩn bị dữ liệu ---
data <- read.csv("C:/Users/ADMIN/Downloads/product_sales_dataset_final.csv")
top_state_revenue <- data %>%
group_by(State) %>%
summarise(Total_Revenue = sum(Revenue, na.rm = TRUE)) %>%
arrange(desc(Total_Revenue)) %>%
head(10)
# --- 3️⃣ LAYER 3: Biểu đồ ---
ggplot(top_state_revenue, aes(x = reorder(State, Total_Revenue), y = Total_Revenue, fill = State)) +
geom_col(width = 0.7) +
geom_text(aes(label = paste0(format(round(Total_Revenue, 0), big.mark = ".", decimal.mark = ","), " USD")),
hjust = -0.1, size = 3.5, color = "black") +
coord_flip() +
# --- 4️⃣ LAYER 4: Tiêu đề & màu sắc ---
labs(
title = "Top 10 Bang Có Doanh Thu Cao Nhất",
subtitle = "Phân tích doanh thu theo khu vực địa lý nội địa Hoa Kỳ",
x = "Bang (State)",
y = "Tổng doanh thu (USD)",
fill = "Bang"
) +
scale_y_continuous(labels = label_number(big.mark = ".", decimal.mark = ",")) +
# Bảng màu rực rỡ
scale_fill_brewer(palette = "Set3") +
# Hoặc thử: "Paired", "Dark2", "Pastel1", "Accent", "Set1", "Spectral"
# --- 5️⃣ LAYER 5: Giao diện ---
theme_minimal(base_family = "roboto") +
theme(
plot.title = element_text(face = "bold", hjust = 0.5, size = 16, color = "#2F4F4F"),
plot.subtitle = element_text(hjust = 0.5, size = 12, color = "#555555"),
axis.title = element_text(face = "bold"),
axis.text = element_text(size = 9),
panel.grid.minor = element_blank(),
legend.position = "none"
)
Giải thích
Biểu đồ trên là biểu đồ cột ngang (Horizontal Bar Chart) thể hiện Top 10 bang (State) có tổng doanh thu (Revenue) cao nhất tại Hoa Kỳ.
Trục Y: Danh sách 10 bang dẫn đầu về doanh thu.
Trục X: Tổng doanh thu (USD).
Màu sắc: Mỗi bang được thể hiện bằng một màu riêng biệt để dễ phân biệt.
Biểu đồ giúp nhận diện khu vực trọng điểm mang lại doanh thu cao nhất trong toàn hệ thống.
Nhận xét
California dẫn đầu với 6.766.000 USD, là thị trường lớn nhất toàn quốc.
Arizona theo sát ở vị trí thứ hai với 6.668.000 USD, cho thấy hiệu suất kinh doanh cao và ổn định.
Các bang như New Jersey, Vermont, New York, Connecticut có doanh thu tương đương nhau, khoảng 4,5 triệu USD, phản ánh mức độ cạnh tranh cân bằng giữa các khu vực Đông Bắc Hoa Kỳ.
Các bang còn lại (Delaware, Pennsylvania, New Hampshire, Massachusetts) duy trì doanh thu ổn định quanh 4,4–4,5 triệu USD.
Tổng kết:
Hai bang dẫn đầu (California & Arizona) chiếm gần 30% tổng doanh thu Top 10.
Doanh nghiệp nên ưu tiên duy trì chính sách bán hàng, marketing và phân phối mạnh tại khu vực phía Tây Hoa Kỳ, đồng thời khai thác thêm tiềm năng ở các bang có mức doanh thu trung bình cao như New York và Connecticut.
library(ggplot2)
library(dplyr)
library(scales)
library(showtext)
font_add_google("Roboto", "roboto")
showtext_auto()
# --- 1️⃣ LAYER 1: Mục tiêu ---
# Đánh giá hiệu quả sinh lợi của từng nhóm sản phẩm
# --- 2️⃣ LAYER 2: Chuẩn bị dữ liệu ---
data <- read.csv("C:/Users/ADMIN/Downloads/product_sales_dataset_final.csv")
category_margin <- data %>%
group_by(Category) %>%
summarise(
Total_Profit = sum(Profit, na.rm = TRUE),
Total_Revenue = sum(Revenue, na.rm = TRUE)
) %>%
mutate(Profit_Margin = Total_Profit / Total_Revenue * 100) %>%
arrange(desc(Profit_Margin))
# --- 3️⃣ LAYER 3: Biểu đồ ---
ggplot(category_margin, aes(x = reorder(Category, Profit_Margin), y = Profit_Margin, fill = Category)) +
geom_col(width = 0.7) +
geom_text(aes(label = paste0(round(Profit_Margin, 1), "%")),
vjust = -0.3, size = 4, color = "black") +
# --- 4️⃣ LAYER 4: Tiêu đề & định dạng ---
labs(
title = "Phân Tích Biên Lợi Nhuận (Profit Margin) Theo Loại Sản Phẩm",
subtitle = "So sánh hiệu quả sinh lời của từng nhóm sản phẩm",
x = "Loại sản phẩm (Category)",
y = "Biên lợi nhuận (%)"
) +
scale_y_continuous(labels = label_percent(scale = 1, decimal.mark = ",")) +
scale_fill_brewer(palette = "Set2") +
# --- 5️⃣ LAYER 5: Giao diện ---
theme_minimal(base_family = "roboto") +
theme(
plot.title = element_text(face = "bold", hjust = 0.5, size = 16, color = "#2F4F4F"),
plot.subtitle = element_text(hjust = 0.5, size = 12, color = "#555555"),
axis.title = element_text(face = "bold"),
axis.text = element_text(size = 10),
panel.grid.minor = element_blank(),
legend.position = "none"
)
Giải thích
Biểu đồ trên là biểu đồ cột (Bar Chart) thể hiện biên lợi nhuận (Profit Margin) của từng loại sản phẩm (Category).
Trục X: Các nhóm sản phẩm chính trong danh mục bán hàng.
Trục Y: Tỷ lệ biên lợi nhuận (%), được tính bằng công thức: Biên lợi nhuận = (Lợi nhuận / Doanh thu) × 100%.
Mỗi cột biểu diễn mức sinh lời trung bình của một nhóm sản phẩm.
Biểu đồ giúp đánh giá hiệu quả lợi nhuận thực tế thay vì chỉ nhìn vào tổng doanh thu.
Nhận xét
Accessories có biên lợi nhuận cao nhất (34%), cho thấy hiệu quả sinh lời vượt trội, là nhóm sản phẩm chủ lực về lợi nhuận.
Clothing & Apparel đứng thứ hai với 32,5%, cũng là nhóm có khả năng tăng trưởng lợi nhuận ổn định.
Home & Furniture đạt 23,5%, nằm ở mức trung bình khá, thể hiện hiệu quả kinh doanh ổn định.
Electronics có biên lợi nhuận thấp nhất (14%), dù thường mang doanh thu cao, nhưng giá vốn lớn và biên lợi nhuận mỏng.
Tổng kết:
Các nhóm Accessories và Clothing & Apparel mang lại lợi nhuận tốt nhất, → doanh nghiệp nên ưu tiên đầu tư và mở rộng danh mục sản phẩm trong hai nhóm này.
Ngược lại, nhóm Electronics cần kiểm soát chi phí và tối ưu giá bán để cải thiện hiệu quả sinh lời.
library(ggplot2)
library(dplyr)
library(scales)
library(showtext)
# Kích hoạt font tiếng Việt
font_add_google("Roboto", "roboto")
showtext_auto()
# Đọc dữ liệu
data <- read.csv("C:/Users/ADMIN/Downloads/product_sales_dataset_final.csv")
# Tính lợi nhuận trung bình
avg_profit_product <- data %>%
group_by(Product_Name) %>%
summarise(
Avg_Profit = mean(Profit, na.rm = TRUE),
Total_Profit = sum(Profit, na.rm = TRUE)
) %>%
arrange(desc(Avg_Profit)) %>%
head(10)
# Vẽ biểu đồ
ggplot(avg_profit_product, aes(x = reorder(Product_Name, Avg_Profit), y = Avg_Profit, fill = Product_Name)) +
# 1️⃣ LAYER 1: Cột biểu diễn giá trị
geom_col(width = 0.7) +
# 2️⃣ LAYER 2: Thêm nhãn giá trị
geom_text(aes(label = paste0(format(round(Avg_Profit, 0), big.mark = ".", decimal.mark = ","), " USD")),
hjust = -0.1, size = 3.5, color = "black") +
coord_flip() +
# 3️⃣ LAYER 3: Tiêu đề và trục
labs(
title = "Top 10 Sản Phẩm Có Lợi Nhuận Trung Bình Cao Nhất",
subtitle = "Phân tích các sản phẩm có biên lợi nhuận trung bình lớn nhất",
x = "Tên sản phẩm",
y = "Lợi nhuận trung bình (USD)"
) +
scale_y_continuous(labels = label_number(big.mark = ".", decimal.mark = ",")) +
# 4️⃣ LAYER 4: Bảng màu tùy chỉnh 🌈
scale_fill_manual(values = c(
"#F94144", "#F3722C", "#F9C74F", "#90BE6D", "#43AA8B",
"#577590", "#9B5DE5", "#F15BB5", "#00B4D8", "#FF8C00"
)) +
# 5️⃣ LAYER 5: Giao diện hiển thị
theme_minimal(base_family = "roboto") +
theme(
plot.title = element_text(face = "bold", hjust = 0.5, size = 16, color = "#2F4F4F"),
plot.subtitle = element_text(hjust = 0.5, size = 12, color = "#555555"),
axis.title = element_text(face = "bold"),
axis.text = element_text(size = 9),
panel.grid.minor = element_blank(),
legend.position = "none"
)
Giải thích
Biểu đồ trên là biểu đồ cột ngang (Horizontal Bar Chart) thể hiện Top 10 sản phẩm có lợi nhuận trung bình (Average Profit) cao nhất.
Trục Y: Danh sách 10 sản phẩm dẫn đầu.
Trục X: Giá trị lợi nhuận trung bình (tính theo USD).
Màu sắc: Mỗi sản phẩm được biểu diễn bằng một màu riêng biệt để dễ phân biệt.
Số liệu trên cột: Biểu thị mức lợi nhuận trung bình của từng sản phẩm.
Mục tiêu của biểu đồ là xác định những sản phẩm sinh lời tốt nhất, qua đó hỗ trợ doanh nghiệp trong việc tập trung nguồn lực và chiến lược kinh doanh.
Nhận xét
Tempur-Pedic Mattress đứng đầu danh sách với 386 USD/sản phẩm, thể hiện hiệu quả sinh lời vượt trội.
Theo sau là IKEA Sofa (269 USD) và MacBook Air (262 USD) – hai sản phẩm thuộc nhóm giá trị cao, mang lại lợi nhuận lớn dù số lượng bán có thể không nhiều.
Nhóm tầm trung gồm Apple iPhone 14 (222 USD), Office Chair (218 USD) và Ashley Recliner (205 USD) có biên lợi nhuận ổn định.
Các sản phẩm còn lại như Brooklinen Sheets, Instant Pot, Dining Table Set, Throw Pillows dao động quanh 195–201 USD, cho thấy lợi nhuận trung bình thấp hơn nhưng ổn định.
Tổng kết:
Nhóm đồ nội thất cao cấp và thiết bị điện tử đang chiếm ưu thế trong biên lợi nhuận trung bình.
Doanh nghiệp nên ưu tiên mở rộng danh mục sản phẩm cao cấp (Tempur, IKEA, Apple) và duy trì nhóm trung bình ổn định để tối ưu hóa cơ cấu lợi nhuận.
# Cài và nạp thư viện
library(ggplot2)
library(dplyr)
library(showtext)
library(scales)
# Bật font tiếng Việt
font_add_google("Roboto", "roboto")
showtext_auto()
# -----------------------------
# 1️⃣ Chuẩn bị dữ liệu
# -----------------------------
# Loại bỏ giá âm hoặc NA nếu có
price_data <- data %>%
filter(Unit_Price > 0)
# -----------------------------
# 2️⃣ Vẽ biểu đồ phân bố giá bán (Histogram)
# -----------------------------
ggplot(price_data, aes(x = Unit_Price)) +
# LAYER 1: Cột histogram
geom_histogram(
binwidth = 50,
fill = "#2E86AB",
color = "white",
alpha = 0.8
) +
# LAYER 2: Đường mật độ (Density line)
geom_density(
aes(y = ..count.. * 50), # Điều chỉnh tỷ lệ cho khớp với histogram
color = "#E67E22",
size = 1.1,
alpha = 0.5
) +
# LAYER 3: Nhãn và tiêu đề
labs(
title = "Phân Tích Độ Phân Tán Giá Bán (Unit Price Distribution)",
subtitle = "Biểu đồ thể hiện sự phân bố giá bán của các sản phẩm trong tập dữ liệu",
x = "Giá bán sản phẩm (USD)",
y = "Số lượng sản phẩm"
) +
# LAYER 4: Định dạng trục & giới hạn hiển thị
scale_x_continuous(
labels = label_number(big.mark = ".", decimal.mark = ","),
limits = c(0, quantile(price_data$Unit_Price, 0.99)) # loại bỏ outlier 1%
) +
# LAYER 5: Giao diện và font chữ
theme_minimal(base_family = "roboto") +
theme(
plot.title = element_text(face = "bold", hjust = 0.5, size = 15, color = "#2F4F4F"),
plot.subtitle = element_text(hjust = 0.5, size = 11, color = "#555555"),
axis.title = element_text(face = "bold"),
panel.grid.minor = element_blank()
)
Giải thích
Biểu đồ trên là biểu đồ tần suất giá bán (Histogram) kết hợp với đường mật độ (Density Line), thể hiện sự phân bố giá bán sản phẩm (Unit Price) trong toàn bộ tập dữ liệu.
Trục X (Giá bán sản phẩm – USD): Biểu diễn các khoảng giá sản phẩm, từ mức thấp đến cao.
Trục Y (Số lượng sản phẩm): Thể hiện số lượng sản phẩm thuộc từng khoảng giá.
Các cột màu xanh lam: Cho biết tần suất xuất hiện của sản phẩm trong từng mức giá.
Đường cong màu cam: Mô tả xu hướng phân bố — giúp nhận diện xem giá bán tập trung ở đâu và có lệch về phía nào hay không.
Mục tiêu của biểu đồ là giúp đánh giá chiến lược định giá sản phẩm và mức độ đa dạng giá bán của doanh nghiệp.
Nhận xét
Phần lớn sản phẩm có giá bán dưới 300 USD, tập trung dày đặc ở vùng giá 100–250 USD, cho thấy doanh nghiệp hướng tới phân khúc tầm trung – phổ thông.
Tần suất giảm mạnh sau mốc 400 USD, thể hiện số lượng sản phẩm cao cấp (giá trên 500 USD) khá ít trong danh mục.
Đường mật độ cho thấy phân phối lệch phải (Right-skewed distribution): phần lớn sản phẩm có giá thấp, chỉ một số ít nằm ở phân khúc cao.
Dạng phân bố này là đặc trưng của các công ty bán lẻ, trong đó doanh thu chủ yếu đến từ sản phẩm giá trung bình nhưng bán số lượng lớn.
Tổng kết:
Doanh nghiệp có cơ cấu giá tập trung ở phân khúc bình dân và trung cấp, phù hợp chiến lược mở rộng thị trường và tiếp cận khách hàng đại chúng. Tuy nhiên, có thể xem xét đa dạng hóa thêm nhóm sản phẩm cao cấp, nhằm nâng biên lợi nhuận và tăng hình ảnh thương hiệu.
# Thư viện
library(ggplot2)
library(dplyr)
library(scales)
library(showtext)
# Kích hoạt font tiếng Việt
font_add_google("Roboto", "roboto")
showtext_auto()
# Đọc dữ liệu
data <- read.csv("C:/Users/ADMIN/Downloads/product_sales_dataset_final.csv")
# Chuẩn hóa và tính trung bình lợi nhuận theo mức giá
data_summary <- data %>%
filter(!is.na(Unit_Price), !is.na(Profit), Unit_Price > 0, Profit >= 0) %>%
mutate(Price_Group = cut(Unit_Price, breaks = seq(0, max(Unit_Price), by = 50))) %>%
group_by(Price_Group) %>%
summarise(Avg_Profit = mean(Profit, na.rm = TRUE),
Avg_Price = mean(Unit_Price, na.rm = TRUE)) %>%
ungroup()
# Vẽ biểu đồ đường
ggplot(data_summary, aes(x = Avg_Price, y = Avg_Profit)) +
# 1️⃣ LAYER 1: Đường biểu diễn
geom_line(color = "#0073C2FF", linewidth = 1.2) +
# 2️⃣ LAYER 2: Điểm dữ liệu
geom_point(color = "#FF7F0E", size = 2) +
# 3️⃣ LAYER 3: Nhãn và tiêu đề
labs(
title = "Xu Hướng Lợi Nhuận (Profit) Theo Giá Bán Sản Phẩm (Unit Price)",
subtitle = "Trung bình lợi nhuận tăng dần theo mức giá bán",
x = "Giá bán trung bình (USD)",
y = "Lợi nhuận trung bình (USD)"
) +
# 4️⃣ LAYER 4: Định dạng trục
scale_x_continuous(labels = label_number(big.mark = ".", decimal.mark = ",")) +
scale_y_continuous(labels = label_number(big.mark = ".", decimal.mark = ",")) +
# 5️⃣ LAYER 5: Giao diện hiển thị
theme_minimal(base_family = "roboto") +
theme(
plot.title = element_text(face = "bold", hjust = 0.5, size = 16, color = "#2F4F4F"),
plot.subtitle = element_text(hjust = 0.5, size = 12, color = "#555555"),
axis.title = element_text(face = "bold", size = 11),
panel.grid.minor = element_blank()
)
Giải thích
Biểu đồ trên là biểu đồ đường (Line Chart) thể hiện mối quan hệ giữa Giá bán trung bình (Unit Price) và Lợi nhuận trung bình (Profit) của các sản phẩm trong bộ dữ liệu.
Trục X: Biểu diễn giá bán trung bình (USD) được chia theo từng nhóm mức giá.
Trục Y: Biểu diễn lợi nhuận trung bình (USD) tương ứng với từng nhóm giá bán.
Đường màu xanh: Thể hiện xu hướng biến động lợi nhuận theo giá bán.
Các điểm màu cam: Minh họa giá trị trung bình cụ thể của mỗi nhóm.
Nhận xét
Xu hướng chung: Lợi nhuận tăng dần theo giá bán, thể hiện mối quan hệ tỷ lệ thuận giữa giá và lợi nhuận.
Khoảng giá 500–1000 USD: Lợi nhuận tăng đều, phản ánh nhóm sản phẩm trung – cao cấp có biên lợi nhuận ổn định.
Trên 1000 USD: Lợi nhuận tăng mạnh, nhưng có dao động nhẹ ở mức giá cao nhất, cho thấy sự khác biệt giữa các sản phẩm cao cấp.
Kết luận: Sản phẩm có giá bán cao thường mang lại lợi nhuận trung bình lớn hơn, phù hợp với chiến lược định giá cao cấp của doanh nghiệp.
Tên bộ dữ liệu: Báo cáo tài chính Ngân hàng Thương mại Cổ phần Việt Nam Thịnh Vượng.
Nguồn bộ dữ liệu: Dữ liệu được tổng hợp từ Báo cáo tài chính các năm của Ngân hàng TMCP Việt Nam Thịnh Vượng (VPBank), được công bố trên trang thông tin điện tử chính thức của ngân hàng.
Thông tin bộ dữ liệu: Bộ dữ liệu này bao gồm các chỉ tiêu tài chính chủ yếu được trích xuất từ bảng cân đối kế toán của Ngân hàng TMCP Việt Nam Thịnh Vượng (VPBank). Các chỉ tiêu phản ánh tình hình tài sản, nguồn vốn, nợ phải trả và vốn chủ sở hữu của ngân hàng qua nhiều năm, giúp đánh giá quy mô, cơ cấu tài chính và khả năng tăng trưởng của VPBank trong từng giai đoạn. Dữ liệu được thu thập và tổng hợp theo năm, thể hiện xu hướng biến động của các yếu tố tài chính chủ đạo trong giai đoạn nghiên cứu.
Mục đích lấy dữ liệu: Phân tích dữ liệu tài chính VPBank nhằm đánh giá tình hình và hiệu quả hoạt động của doanh nghiệp qua các năm. Kết quả giúp nhận diện xu hướng phát triển, khả năng thanh toán và mức độ ổn định tài chính. Mục tiêu là hỗ trợ đưa ra cái nhìn tổng quan và cơ sở cho các quyết định quản trị phù hợp.
library(readxl)
ck <- read_xlsx("C:/Users/ADMIN/Downloads/du lieu vp bank.xlsx")
dim(ck)
## [1] 249 11
Giải thích: Hàm dim() trong R dùng để xem kích thước của dữ liệu, trả về số dòng và số cột của một đối tượng. Nhận xét: Bộ dữ liệu data VP Bank gồm 249 quan sát và 11 biến, phù hợp để thực hiện phân tích, xử lý và đánh giá tài chính của doanh nghiệp VPBank.
library(knitr)
kable(head(ck[, c("CHỈ TIÊU", "2015":"2024")], 10))
| CHỈ TIÊU | 2015 | 2016 | 2017 | 2018 | 2019 | 2020 | 2021 | 2022 | 2023 | 2024 |
|---|---|---|---|---|---|---|---|---|---|---|
| A. TỔNG TÀI SẢN | 193876428 | 228770918 | 277752314 | 323291119 | 377204126 | 419026527 | 547409439 | 631012886 | 817566922 | 923847637 |
| I. Tiền mặt, vàng bạc, đá quý | 1632425 | 1727361 | 2574284 | 1855473 | 2459321 | 3282556 | 2345733 | 2658493 | 2284990 | 2148289 |
| II. Tiền gửi tại Ngân hàng nhà nước | 2261499 | 2982589 | 6460795 | 10828571 | 3454138 | 5779610 | 10860730 | 9935379 | 8422511 | 14327215 |
| III. Tiền gửi và cho vay các TCTD khác | 14599675 | 9388905 | 17520025 | 16571491 | 20097553 | 19554808 | 57104628 | 47965493 | 106888483 | 134643662 |
| 1. Tiền gửi tại các TCTD khác | 8729745 | 4089175 | 15218720 | 15337628 | 15482986 | 13829025 | 40329730 | 40771879 | 94093778 | 126527280 |
| 2. Cho vay các TCTD khác | 5870661 | 5300460 | 2302036 | 1233863 | 4614567 | 5725783 | 16858044 | 7193614 | 12794705 | 8116382 |
| 3. Dự phòng rủi ro cho vay TCTD khác | -731 | -731 | -731 | 0 | 0 | 0 | -83146 | 0 | 0 | 0 |
| IV. Chứng khoán kinh doanh ròng | 2043647 | 2952206 | 1424854 | 4202413 | 1566592 | 493214 | 6970941 | 7793447 | 12325809 | 13110971 |
| 1. Chứng khoán kinh doanh | 2046735 | 2953769 | 1424854 | 4240742 | 1571141 | 493214 | 7005061 | 7850639 | 12406274 | 13180721 |
| 2. Dự phòng rủi ro chứng khoán kinh doanh | -3088 | -1563 | 0 | -38329 | -4549 | 0 | -34120 | -57192 | -80465 | -69750 |
Giải thích: Lệnh head() dùng để hiển thị 10
dòng đầu tiên của bộ dữ liệu VP Bank nhằm quan sát
nhanh cấu trúc và giá trị ban đầu của các biến. Kết quả cho thấy dữ liệu
có các cột từ 2015 đến 2024 và cột “CHỈ TIÊU” mô tả các
hạng mục tài chính.
Nhận xét chung: Bộ dữ liệu chứa các chỉ tiêu tài chính của VPBank qua nhiều năm, với giá trị được ghi nhận theo từng năm. Số liệu thể hiện quy mô tài sản, tiền gửi, cho vay và các khoản mục khác tăng dần qua thời gian, phản ánh sự mở rộng hoạt động và tăng trưởng ổn định của ngân hàng.
str(ck)
## tibble [249 × 11] (S3: tbl_df/tbl/data.frame)
## $ CHỈ TIÊU: chr [1:249] "A. TỔNG TÀI SẢN" "I. Tiền mặt, vàng bạc, đá quý" "II. Tiền gửi tại Ngân hàng nhà nước" "III. Tiền gửi và cho vay các TCTD khác" ...
## $ 2015 : num [1:249] 1.94e+08 1.63e+06 2.26e+06 1.46e+07 8.73e+06 ...
## $ 2016 : num [1:249] 2.29e+08 1.73e+06 2.98e+06 9.39e+06 4.09e+06 ...
## $ 2017 : num [1:249] 2.78e+08 2.57e+06 6.46e+06 1.75e+07 1.52e+07 ...
## $ 2018 : num [1:249] 3.23e+08 1.86e+06 1.08e+07 1.66e+07 1.53e+07 ...
## $ 2019 : num [1:249] 3.77e+08 2.46e+06 3.45e+06 2.01e+07 1.55e+07 ...
## $ 2020 : num [1:249] 4.19e+08 3.28e+06 5.78e+06 1.96e+07 1.38e+07 ...
## $ 2021 : num [1:249] 5.47e+08 2.35e+06 1.09e+07 5.71e+07 4.03e+07 ...
## $ 2022 : num [1:249] 6.31e+08 2.66e+06 9.94e+06 4.80e+07 4.08e+07 ...
## $ 2023 : num [1:249] 8.18e+08 2.28e+06 8.42e+06 1.07e+08 9.41e+07 ...
## $ 2024 : num [1:249] 9.24e+08 2.15e+06 1.43e+07 1.35e+08 1.27e+08 ...
Giải thích Hàm str() dùng để xem cấu trúc của dữ liệu — hiển thị số dòng, số cột, tên biến, kiểu dữ liệu và vài giá trị đầu tiên trong mỗi cột.
Nhận xét: Bộ dữ liệu VP Banklà một tibble (data frame) gồm 249 dòng × 11 cột. Cột “CHỈ TIÊU” → kiểu character (chuỗi ký tự). Các cột từ 2015 đến 2024 → kiểu numeric (số thực).
unique(ck$`CHỈ TIÊU`)
## [1] "A. TỔNG TÀI SẢN"
## [2] "I. Tiền mặt, vàng bạc, đá quý"
## [3] "II. Tiền gửi tại Ngân hàng nhà nước"
## [4] "III. Tiền gửi và cho vay các TCTD khác"
## [5] "1. Tiền gửi tại các TCTD khác"
## [6] "2. Cho vay các TCTD khác"
## [7] "3. Dự phòng rủi ro cho vay TCTD khác"
## [8] "IV. Chứng khoán kinh doanh ròng"
## [9] "1. Chứng khoán kinh doanh"
## [10] "2. Dự phòng rủi ro chứng khoán kinh doanh"
## [11] "V. Cho vay khách hàng ròng"
## [12] "1. Cho vay khách hàng"
## [13] "2. Dự phòng rủi ro cho vay khách hàng"
## [14] "VI. Chứng khoán đầu tư"
## [15] "1. Chứng khoán đầu tư sẵn sàng để bán"
## [16] "2. Chứng khoán đầu tư giữ đến ngày đáo hạn"
## [17] "3. Dự phòng rủi ro chứng khoán đầu tư"
## [18] "VII. Góp vốn, đầu tư dài hạn"
## [19] "1. Đầu tư dài hạn khác"
## [20] "2. Dự phòng giảm giá đầu tư dài hạn"
## [21] "VII. Tài sản cố định"
## [22] "1. Tài sản cố định hữu hình"
## [23] "a. Nguyên giá"
## [24] "b. Giá trị hao mòn luỹ kế"
## [25] "3. Tài sản cố định vô hình"
## [26] "IX. Bất động sản đầu tư"
## [27] "1. Nguyên giá"
## [28] "2. Giá trị hao mòn luỹ kế"
## [29] "X. Tài sản Có khác"
## [30] "1. Các khoản phải thu"
## [31] "2. Các khoản lãi, phí phải thu"
## [32] "3. Tài sản khác"
## [33] "4. DPRR cho các tài sản Có nội bảng khác"
## [34] "B. TỔNG NỢ PHẢI TRẢ"
## [35] "I. Các khoản nợ Chính phủ và NHNN"
## [36] "II. Tiền gửi và vay các TCTD khác"
## [37] "1. Tiền gửi của các TCTD khác"
## [38] "2. Vay các TCTD khác"
## [39] "III. Tiền gửi của khách hàng"
## [40] "IV. Các CCTC phái sinh và nợ tài chính khác"
## [41] "V. Vốn tài trợ, uỷ thác của CP và TCTD khác"
## [42] "VI. Phát hành giấy tờ có giá"
## [43] "VII. Các khoản nợ khác"
## [44] "1. Các khoản lãi, phí phải trả"
## [45] "2. Các khoản phải trả và công nợ khác"
## [46] "5. Thuế TNDN hoãn lại phải trả"
## [47] "C. Vốn chủ sở hữu"
## [48] "1. Vốn điều lệ"
## [49] "2. Thặng dư vốn cổ phần"
## [50] "I. Quỹ của tổ chức tín dụng"
## [51] "II. Lợi nhuận chưa phân phối lũy kế"
## [52] "CHỈ TIÊU"
## [53] "Thu nhập lãi"
## [54] "2. Chi phí lãi và các chi phí tương tự"
## [55] "I. Thu nhập lãi thuần"
## [56] "3. Thu nhập từ hoạt động dịch vụ"
## [57] "4. Chi phí hoạt động dịch vụ"
## [58] "II. Lãi thuần từ hoạt động dịch vụ"
## [59] "III. Lãi/(lỗ) thuần từ ngoại hối và vàng"
## [60] "IV. Lãi/(lỗ) thuần từ mua bán CKKD"
## [61] "V. Lãi/(lỗ) thuần từ mua bán CKĐT"
## [62] "5. Thu nhập từ hoạt động khác"
## [63] "6. Chi phí hoạt động khác"
## [64] "VI. Lãi/(lỗ) thuần từ hoạt động khác"
## [65] "VII. Thu nhập từ góp vốn, mua cổ phần"
## [66] "VIII. Tổng thu nhập hoạt động"
## [67] "IX. Chi phí hoạt động"
## [68] "X. Lợi nhuận thuần HDKD trước DPRRTD"
## [69] "XI. Chi phí dự phòng rủi ro tín dụng"
## [70] "XII. Tổng lợi nhuận trước thuế"
## [71] "7. Chi phí thuế TNDN hiện hành"
## [72] "8. Chi phí thuế TNDN hoãn lại"
## [73] "XIII. Chi phí thuế thu nhập doanh nghiệp"
## [74] "Lợi Nhuận Sau Thuế"
## [75] "XVI. Lợi nhuận sau thuế Ngân hàng mẹ"
## [76] "Lãi cơ bản trên cổ phiếu"
## [77] "I. Chứng khoán kinh doanh"
## [78] "1. Chứng khoán nợ"
## [79] "Chứng khoán Chính phủ"
## [80] "Chứng khoán do các TCTD khác trong nước phát hành"
## [81] "2. Chứng khoán vốn"
## [82] "Chứng khoán vốn do các TCTD khác trong nước phát hành"
## [83] "Chứng khoán vốn do các TCKT khác trong nước phát hành"
## [84] "3. Dự phòng rủi ro chứng khoán kinh doanh"
## [85] "II. Dư nợ theo đối tượng cho vay"
## [86] "1. Cho vay các tổ chức kinh tế, cá nhân trong nước"
## [87] "2. Cho vay chiết khấu công cụ chuyển nhượng và các giấy tờ có giá"
## [88] "3. Các khoản trả thay khách hàng"
## [89] "4. Cho vay bằng vốn tài trợ, ủy thác đầu tư"
## [90] "III. Dư nợ theo chất lượng nợ cho vay"
## [91] "1. Nợ đủ tiêu chuẩn"
## [92] "2. Nợ cần chú ý"
## [93] "3. Nợ dưới tiêu chuẩn"
## [94] "4. Nợ nghi ngờ"
## [95] "5. Nợ xấu có khả năng mất vốn"
## [96] "IV. Dư nợ theo thời hạn cho vay"
## [97] "1. Cho vay ngắn hạn"
## [98] "2. Cho vay trung hạn"
## [99] "3. Cho vay dài hạn"
## [100] "V. Dư nợ theo loại hình doanh nghiệp"
## [101] "1. Doanh nghiệp nhà nước"
## [102] "2. CTCP khác, Công ty TNHH khác, Doanh nghiệp tư nhân, Công ty hợp danh"
## [103] "3. Doanh nghiệp có vốn đầu tư nước ngoài"
## [104] "4. Cá nhân, hộ kinh doanh"
## [105] "5. Hợp tác xã và liên hiệp hợp tác xã"
## [106] "9. Thành phần kinh tế khác"
## [107] "VI. Dư nợ phân theo ngành"
## [108] "1. Công nghiệp chế biến, chế tạo"
## [109] "2. Xây dựng"
## [110] "3. Vận tải kho bãi và thông tin liên lạc"
## [111] "4. Nông, lâm, thủy hải sản"
## [112] "5. Nhà hàng, khách sạn"
## [113] "8. Hoạt động tài chính, ngân hàng và bảo hiểm"
## [114] "12. Hoạt động kinh doanh bất động sản"
## [115] "15. Giáo dục đào tạo"
## [116] "16. Hoạt động dịch vụ khác/ Thương mại dịch vụ"
## [117] "22. Cho vay cá nhân"
## [118] "23. Dư nợ khác"
## [119] "Dự phòng rủi ro cho vay khách hàng"
## [120] "1. Dự phòng chung"
## [121] "2. Dự phòng cụ thể"
## [122] "VIII. Chứng khoán đầu tư sẵn sàng để bán"
## [123] "Chứng khoán do các TCKT trong nước phát hành"
## [124] "3. Dự phòng rủi chứng khoán đầu tư sẵn sàng để bán"
## [125] "IX. Chứng khoán đầu tư giữ đến ngày đáo hạn"
## [126] "2. Dự phòng rủi chứng khoán đầu tư giữ đến ngày đáo hạn"
## [127] "3. Trái phiếu đặc biệt do VAMC phát hành"
## [128] "Mệnh giá trái phiếu đặc biệt"
## [129] "Dự phòng trái phiếu đặc biệt"
## [130] "Tổng tiền gửi"
## [131] "1. Tiền gửi không kỳ hạn"
## [132] "2. Tiền gửi tiết kiệm và có kỳ hạn"
## [133] "3. Tiền gửi vốn chuyên dùng"
## [134] "4. Tiền gửi ký quỹ"
## [135] "XI. Tiền gửi theo đối tượng"
## [136] "1. Các tổ chức kinh tế"
## [137] "2. Cá nhân"
## [138] "XII. Phát hành giấy tờ có giá theo loại hình"
## [139] "XIII. Phát hành giấy tờ có giá theo kỳ hạn"
## [140] "1. Dưới 12 tháng"
## [141] "2. 12 tháng đến 5 năm"
## [142] "3. Trên 5 năm"
## [143] "XIV. Thu nhập lãi và các khoản tương tự"
## [144] "1. Thu nhập lãi cho vay"
## [145] "2. Thu nhập lãi tiền gửi"
## [146] "3. Thu nhập lãi từ chứng khoán"
## [147] "4. Thu từ nghiệp vụ bảo lãnh"
## [148] "5. Thu khác từ hoạt động tín dụng"
## [149] "XV. Chi phí lãi và các khoản chi phí tương tự"
## [150] "1. Trả lãi tiền gửi"
## [151] "2. Trả lãi tiền vay"
## [152] "3. Trả lãi phát hành giấy tờ có giá"
## [153] "4. Chi phí khác cho hoạt động tín dụng"
## [154] "XVI. Thu nhập từ hoạt động dịch vụ"
## [155] "1. Thu từ dịch vụ thanh toán"
## [156] "2. Thu phí khác"
## [157] "XVII. Chi phí cho hoạt động dịch vụ"
## [158] "1. Chi cho dịch vụ thanh toán"
## [159] "2. Chi cho dịch vụ môi giới kinh doanh"
## [160] "3. Chi khác"
## [161] "XVIII. Thu nhập từ hoạt động kinh doanh vàng và ngoại hối"
## [162] "1. Thu từ kinh doanh vàng và ngoại tệ giao ngay"
## [163] "2. Thu từ các công cụ tài chính phái sinh tiền tệ"
## [164] "XIX. Chi phí hoạt động kinh doanh vàng và ngoại hối"
## [165] "1. Chi cho kinh doanh vàng và ngoại tệ giao ngay"
## [166] "2. Chi cho các công cụ tài chính phái sinh tiền tệ"
## [167] "XX. Lãi/lỗ thuần từ mua bán chứng khoán kinh doanh"
## [168] "1. Thu nhập từ mua bán chứng khoán kinh doanh"
## [169] "2. Chi phí về mua bán chứng khoán kinh doanh"
## [170] "3. Trích lập dự phòng giảm giá chứng khoán kinh doanh"
## [171] "1. Thu nhập từ mua bán chứng khoán đầu tư"
## [172] "2. Chi phí về mua bán chứng khoán đầu tư"
## [173] "3. Trích lập dự phòng giảm giá chứng khoán đầu tư"
## [174] "XXII. Thu nhập từ hoạt động khác"
## [175] "1. Thu từ các công cụ tài chính phái sinh khác"
## [176] "2. Thu từ nghiệp vụ xử lý nợ"
## [177] "3. Thu nhập khác"
## [178] "XXIII. Chi phí hoạt động khác"
## [179] "1. Chi từ các công cụ tài chính phái sinh khác"
## [180] "5. Chi phí khác"
## [181] "XXIV. Thu nhập từ vốn góp, mua cổ phần"
## [182] "1. Cổ tức nhận được trong kỳ từ góp vốn, mua cổ phần"
## [183] "XXV. Chi phí hoạt động"
## [184] "1. Chi nộp thuế và các khoản phí, lệ phí"
## [185] "2. Chi phí cho nhân viên"
## [186] "Chi lương và các khoản chi đóng góp theo lương"
## [187] "3. Chi về tài sản"
## [188] "Khấu hao tài sản cố định"
## [189] "4. Chi cho hoạt động quản lý công vụ"
## [190] "5. Chi nộp phí bảo hiểm, bảo toàn tiền gửi của khách hàng"
## [191] "6. Chi phí dự phòng"
## [192] "Nợ đủ tiêu chuẩn - N1"
## [193] "Nợ cần chú ý - N2"
## [194] "Nợ dưới tiêu chuẩn - N3"
## [195] "Nợ nghi ngờ - N4"
## [196] "Nợ có khả năng mất vốn - N5"
## [197] "Tổng dư nợ cho vay"
## [198] "Thời gian dư nợ"
## [199] "Nợ ngắn hạn"
## [200] "Nợ Trung hạn"
## [201] "Nợ dài hạn"
## [202] "Tỉ lệ nợ ngắn hạn"
## [203] "Tỉ lệ nợ Trung hạn"
## [204] "Tỉ lệ nợ dài hạn"
## [205] "LDR = Cho vay/tổng huy động"
## [206] "Tỷ lệ nợ xấu (NPL)"
## [207] "Chỉ số ROE"
## [208] "Chỉ số CIR = CP hoạt động/ thu nhập HĐ"
## [209] "Bao phủ nợ xấu: Trích lập/nợ xấu"
## [210] "Casa"
## [211] "Net Interest Margin (NIM)"
## [212] "Chi phí lãi và các chi phí tương tự"
## [213] "Tăng trưởng tổng Chi phí trả lãi"
## [214] "Trả lãi tiền gửi"
## [215] "Trả lãi tiền vay"
## [216] "Trả lãi phát hành giấy tờ có giá"
## [217] "Chi phí khác cho hoạt động tín dụng"
## [218] "Tăng trưởng các nhóm nợ xấu (3-5)"
## [219] "Tăng trưởng nợ nhóm 1"
## [220] "Tăng trưởng nợ nhóm 2"
## [221] "Tăng trưởng nợ nhóm 3"
## [222] "Tăng trưởng nợ nhóm 4"
## [223] "Tăng trưởng nợ nhóm 5"
## [224] "Tăng trưởng Thu nhập lãi (YoY)"
## [225] "Tăng trưởng Thu nhập lãi HĐKD"
## [226] "Tăng trưởng Dự phòng rủi ro"
## [227] "Tăng trưởng LNST (YoY)"
## [228] "Tăng trưởng tiền gửi"
## [229] "Tăng trưởng cho vay"
## [230] "Nợ xấu/ tổng dư nợ"
## [231] "Cơ cấu cho vay theo Ngành nghề"
Giải thích: Lệnh unique() dùng để liệt kê toàn bộ các giá trị khác nhau trong cột CHỈ TIÊU — tức là danh sách tất cả các khoản mục tài chính xuất hiện trong bộ dữ liệu của VPBank.
Nhận xét: Kết quả cho thấy dữ liệu chứa rất nhiều chỉ tiêu chi tiết, được chia theo các nhóm lớn như Tài sản, Nợ phải trả, Vốn chủ sở hữu, Kết quả kinh doanh, Chỉ số tài chính, và các tỷ lệ tăng trưởng. Điều này thể hiện độ phong phú và chi tiết cao** của bộ dữ liệu, giúp việc phân tích tài chính có thể thực hiện ở nhiều cấp độ: từ tổng quan đến chuyên sâu cho từng chỉ tiêu.
length(unique(gsub("\\..*", "", ck$`CHỈ TIÊU`)))
## [1] 98
Giải thích: Giá trị [1] 98 xuất hiện khi dùng lệnh:
length(unique(ck$CHỈ TIÊU))
Lệnh này dùng để đếm số lượng chỉ tiêu tài chính khác nhau trong cột CHỈ TIÊU của dữ liệu.
Nhận xét: Kết quả cho biết bộ dữ liệu hiện có 98 chỉ tiêu tài chính được ghi nhận. Điều này cho thấy dữ liệu khá đa dạng và chi tiết, bao phủ nhiều khía cạnh của báo cáo tài chính VPBank, tạo điều kiện thuận lợi cho việc phân tích tổng hợp và đánh giá tình hình hoạt động của ngân hàng qua các năm.
# Lọc dòng có tổng tài sản
ck_tongtai <- ck[ck$`CHỈ TIÊU` == "A. TỔNG TÀI SẢN", ]
# Lấy tên các cột năm (2015–2024)
nam_cols <- names(ck)[2:11]
# Chuyển giá trị sang numeric và tìm năm có giá trị cao nhất
values <- as.numeric(ck_tongtai[, nam_cols])
nam_max <- nam_cols[which.max(values)]
nam_max
## [1] "2024"
Giải thích: Đoạn code lọc dòng có chỉ tiêu “A. TỔNG TÀI SẢN”, sau đó tìm năm có giá trị lớn nhất trong các cột từ 2015–2024.
Nhận xét: Kết quả cho thấy năm 2024 có tổng tài sản cao nhất, phản ánh sự tăng trưởng mạnh mẽ và mở rộng quy mô tài chính của VPBank.
# Tính giá trị trung bình theo từng năm
colMeans(ck[, 2:11], na.rm = TRUE)
## 2015 2016 2017 2018 2019 2020 2021 2022
## 14167774 16698873 19978562 23796177 27890581 31101485 37999825 46265568
## 2023 2024
## 54143292 71319644
Giải thích code Đoạn lệnh tính trung bình giá trị các chỉ tiêu theo từng năm từ 2015 đến 2024. Kết quả cho biết mức trung bình của toàn bộ các chỉ tiêu tài chính trong mỗi năm.
Nhận xét * Năm 2015: 14.167.774 * Năm 2016: 16.698.873 * Năm 2017: 19.978.562 * Năm 2018: 23.796.177 * Năm 2019: 27.890.581 * Năm 2020: 31.101.485 * Năm 2021: 37.999.825 * Năm 2022: 46.265.568 * Năm 2023: 54.143.292 * Năm 2024: 71.319.644 Giá trị trung bình các chỉ tiêu tài chính của VPBank tăng liên tục qua các năm, đặc biệt năm 2024 đạt 71.319.644, cao gần gấp 5 lần so với năm 2015. Điều này thể hiện quy mô tài chính mở rộng và tốc độ tăng trưởng bền vững của ngân hàng trong giai đoạn 2015–2024.
# Tính trung bình giá trị các chỉ tiêu theo năm
tb_nam <- colMeans(ck[, 2:11], na.rm = TRUE)
# Tính tốc độ tăng trưởng trung bình năm sau so với năm trước
tangtruong_tb <- diff(tb_nam) / tb_nam[-length(tb_nam)] * 100
# Hiển thị kết quả
tb_nam
## 2015 2016 2017 2018 2019 2020 2021 2022
## 14167774 16698873 19978562 23796177 27890581 31101485 37999825 46265568
## 2023 2024
## 54143292 71319644
tangtruong_tb
## 2016 2017 2018 2019 2020 2021 2022 2023
## 17.86519 19.64018 19.10856 17.20614 11.51250 22.18010 21.75206 17.02718
## 2024
## 31.72388
Giải thích Đoạn code tính giá trị trung bình các chỉ
tiêu theo từng năm (tb_nam) và tốc độ tăng trưởng trung
bình năm sau so với năm trước (tangtruong_tb).
Nhận xét Giá trị trung bình tăng đều từ 14.167.774 (2015) lên 71.319.644 (2024). Tốc độ tăng trưởng dao động 11%–32%, cao nhất năm 2024 (31,7%), cho thấy quy mô tài chính của VPBank mở rộng ổn định và tăng mạnh giai đoạn cuối.
apply(ck[, 2:11], 2, sd, na.rm = TRUE)
## 2015 2016 2017 2018 2019 2020 2021 2022
## 33578529 39452587 47742316 57689021 67771344 75531348 90967487 110067473
## 2023 2024
## 128571104 169968106
Giải thích: Đoạn mã tính tổng giá trị các chỉ tiêu tài chính theo từng năm trong giai đoạn 2015–2024. Mỗi con số thể hiện tổng quy mô tài chính (tổng cộng của tất cả các chỉ tiêu) trong năm tương ứng.
Nhận xét: Tổng giá trị tăng liên tục từ 33.578.529 (năm 2015) lên 169.968.106 (năm 2024). Điều này cho thấy quy mô hoạt động và tổng tài sản của VPBank tăng trưởng mạnh, ổn định qua các năm, phản ánh xu hướng mở rộng và phát triển bền vững của ngân hàng.
# Tính tổng giá trị các chỉ tiêu theo từng năm
tong_nam <- colSums(ck[, 2:11], na.rm = TRUE)
# Tính tốc độ tăng trưởng (%) qua các năm
tangtruong_tong <- diff(tong_nam) / tong_nam[-length(tong_nam)] * 100
# Hiển thị kết quả
tong_nam
## 2015 2016 2017 2018 2019 2020
## 3471104554 4074525037 4894747627 5830063467 6833192362 7619863727
## 2021 2022 2023 2024
## 9309957147 11335064237 13265106426 17473312798
tangtruong_tong
## 2016 2017 2018 2019 2020 2021 2022 2023
## 17.38411 20.13051 19.10856 17.20614 11.51250 22.18010 21.75206 17.02718
## 2024
## 31.72388
Giải thích: Đoạn mã tính tổng giá trị các chỉ tiêu tài chính theo từng năm (tong_nam) và tốc độ tăng trưởng (%) giữa các năm (tangtruong_tong). Kết quả cho thấy quy mô tài chính của VPBank được tổng hợp cho giai đoạn 2015–2024.
Nhận xét: Tổng giá trị tăng từ 3.471.104.554 (2015) lên 17.473.312.798 (2024). Tốc độ tăng trưởng dao động từ 11,51% đến 31,72%, cao nhất ở năm 2024, thể hiện xu hướng mở rộng mạnh mẽ và tăng trưởng ổn định của VPBank trong 10 năm.