Gói readxl: Đọc dữ liệu từ các tệp Excel (.xls, .xlsx) vào R một cách
nhanh chóng.
Gói dplyr: cú pháp rõ ràng, dễ đọc các thao tác xử lý dữ liệu như lọc,
nhóm, sắp xếp, tạo biến mới và tổng hợp.
Gói tidyr: Hỗ trợ tái cấu trúc dữ liệu từ dạng rộng sang dạng dài và
ngược lại, giúp dữ liệu “gọn gàng” hơn.
Gói ggplot2: Dùng để trực quan hóa dữ liệu, tạo các biểu đồ cột, đường,
tròn,… theo nguyên tắc Grammar of Graphics.
Gói scales: Giúp định dạng trục và nhãn biểu đồ, hiển thị phần trăm, đơn
vị tiền, hay chuẩn hóa tỉ lệ dễ đọc hơn.
Gói kableExtra: Dùng để tạo-định dạng bảng dữ liệu, hữu ích khi xuất báo
cáo R Markdown sang HTML hoặc PDF.
Gói janitor: Làm sạch dữ liệu, ví dụ đổi tên biến về dạng chuẩn
(clean_names()), loại bỏ cột trống.
Gói reshape2: Chuyển đổi cấu trúc dữ liệu bằng các hàm melt() và
dcast(), tiện cho việc tổng hợp hoặc trực quan hóa.
Gói knitr: Là công cụ giúp biên dịch và tạo báo cáo động trong R
Markdown (xuất ra HTML, PDF, Word,…).
Gói gridExtra: Cho phép ghép nhiều biểu đồ ggplot2 lên cùng một trang
bằng hàm grid.arrange().
dataset <- read_excel(file.choose())
Dùng read_excel() đọc file Excel, file.choose() mở hộp thoại chọn file
head(dataset)
## # A tibble: 6 × 13
## MalID Username Gender DaysWatched MeanScore Watching Completed OnHold Dropped
## <dbl> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 1 Xinil Male 142. 7.37 1 233 8 93
## 2 3 Aokaado Male 68.6 7.34 23 137 99 44
## 3 4 Crystal Female 213. 6.68 16 636 303 0
## 4 20 vondur Male 73.1 8.06 11 94 11 2
## 5 36 Baman Male 272. 5.9 27 1144 11 55
## 6 44 beddan Male 18.6 7.6 0 37 0 0
## # ℹ 4 more variables: PlantoWatch <dbl>, TotalEntries <dbl>, Rewatched <dbl>,
## # EpisodesWatched <dbl>
dim(dataset)
## [1] 224383 13
Dim(dataset) được dùng để kiểm tra kích thước của một đối tượng dữ
liệu
Kết quả: 224.383 quan sát và 13 biến
names(dataset)
## [1] "MalID" "Username" "Gender" "DaysWatched"
## [5] "MeanScore" "Watching" "Completed" "OnHold"
## [9] "Dropped" "PlantoWatch" "TotalEntries" "Rewatched"
## [13] "EpisodesWatched"
names(dataset) được dùng để xem hoặc đặt tên các cột (columns) của
data frame hoặc list.
Kết quả: 13 biến bao gồm MalID, Username, Gender, DaysMatched,
MeanScore, Watching, Completed, OnHold, Dropped, PlantoWatch,
TotalEntries, Rewatched, EpisodesMatched
sum(duplicated(dataset))
## [1] 0
dataset <- dataset[!duplicated(dataset), ]
sum(duplicated(dataset)) sẽ đếm tổng số dòng trùng lặp
Kết quả: Không có dòng trùng lặp, không cần xử lý trùng lặp
colSums(is.na(dataset))
## MalID Username Gender DaysWatched MeanScore
## 0 203 0 8 8
## Watching Completed OnHold Dropped PlantoWatch
## 8 8 8 8 8
## TotalEntries Rewatched EpisodesWatched
## 8 8 8
dataset <- na.omit(dataset)
colSums(is.na(dataset)) → đếm số giá trị NA cho từng cột
Username: 203 giá trị thiếu
Các biến khác: 8 giá trị thiếu
dataset <- na.omit(dataset) → loại bỏ tất cả các dòng có ít nhất một
NA, dữ liệu còn lại sạch
variable_meaning <- data.frame(
Variable = names(dataset),
Meaning = c("ID tài khoản", "Tên người dùng", "Giới tính", "Tổng ngày xem",
"Điểm trung bình", "Đang xem", "Đã hoàn thành", "Tạm dừng",
"Đã bỏ", "Dự định xem", "Tổng mục", "Xem lại", "Tập đã xem"),
stringsAsFactors = FALSE
)
kable(variable_meaning, booktabs = TRUE)
| Variable | Meaning |
|---|---|
| MalID | ID tài khoản |
| Username | Tên người dùng |
| Gender | Giới tính |
| DaysWatched | Tổng ngày xem |
| MeanScore | Điểm trung bình |
| Watching | Đang xem |
| Completed | Đã hoàn thành |
| OnHold | Tạm dừng |
| Dropped | Đã bỏ |
| PlantoWatch | Dự định xem |
| TotalEntries | Tổng mục |
| Rewatched | Xem lại |
| EpisodesWatched | Tập đã xem |
cat("Số biến định lượng:", sum(sapply(dataset, is.numeric)), "\n")
## Số biến định lượng: 11
cat("Số biến định tính:", sum(sapply(dataset, is.character)), "\n")
## Số biến định tính: 2
cat("Biến định lượng:", names(dataset)[sapply(dataset, is.numeric)], "\n")
## Biến định lượng: MalID DaysWatched MeanScore Watching Completed OnHold Dropped PlantoWatch TotalEntries Rewatched EpisodesWatched
cat("Biến định tính:", names(dataset)[sapply(dataset, is.character)], "\n")
## Biến định tính: Username Gender
sapply(dataset, is.numeric) → kiểm tra cột nào là numeric (định
lượng)
sapply(dataset, is.character) → kiểm tra cột nào là character (định
tính)
sum(…) → đếm tổng số biến theo loại
names(dataset)[…] → lấy tên các biến theo loại
Kết quả: 11 biến định lượng, 2 biến định tính (Username, Gender)
summary(dataset)
## MalID Username Gender DaysWatched
## Min. : 1 Length:224172 Length:224172 Min. : 0.00
## 1st Qu.: 131416 Class :character Class :character 1st Qu.: 6.30
## Median : 317844 Mode :character Mode :character Median : 29.20
## Mean : 384603 Mean : 53.98
## 3rd Qu.: 481682 3rd Qu.: 72.60
## Max. :1291097 Max. :105338.60
## MeanScore Watching Completed OnHold
## Min. : 0.000 Min. : 0.00 Min. : 0.0 Min. : 0.00
## 1st Qu.: 7.000 1st Qu.: 1.00 1st Qu.: 9.0 1st Qu.: 0.00
## Median : 7.800 Median : 4.00 Median : 59.0 Median : 1.00
## Mean : 6.808 Mean : 10.18 Mean : 151.8 Mean : 7.98
## 3rd Qu.: 8.470 3rd Qu.: 10.00 3rd Qu.: 183.0 3rd Qu.: 7.00
## Max. :10.000 Max. :2934.00 Max. :13226.0 Max. :5167.00
## Dropped PlantoWatch TotalEntries Rewatched
## Min. : 0.00 Min. : 0.00 Min. : 0.0 Min. : 0.00
## 1st Qu.: 0.00 1st Qu.: 0.00 1st Qu.: 16.0 1st Qu.: 0.00
## Median : 1.00 Median : 7.00 Median : 94.0 Median : 0.00
## Mean : 10.39 Mean : 42.11 Mean : 222.5 Mean : 10.45
## 3rd Qu.: 8.00 3rd Qu.: 37.00 3rd Qu.: 279.0 3rd Qu.: 5.00
## Max. :14341.00 Max. :21804.00 Max. :24817.0 Max. :13215.00
## EpisodesWatched
## Min. : 0
## 1st Qu.: 377
## Median : 1748
## Mean : 3440
## 3rd Qu.: 4386
## Max. :5433345
Ý nghĩa kỹ thuật:
summary() là hàm thống kê mô tả cơ bản cho từng cột trong dataset.
Với biến numeric: trả về Min, 1st Qu., Median, Mean, 3rd Qu., Max
Với biến character hoặc factor: trả về Length, Class, Mode
Ý nghĩa từ biến MeanScore
Min = 0 → một số người chưa đánh giá
Median = 7.8 → điểm trung vị đánh giá gần 8
Mean = 6.808 → trung bình thấp hơn median → có người đánh giá thấp kéo
mean xuống
Max = 10 → đánh giá cao nhất là 10
str(dataset)
## tibble [224,172 × 13] (S3: tbl_df/tbl/data.frame)
## $ MalID : num [1:224172] 1 3 4 20 36 44 47 66 70 77 ...
## $ Username : chr [1:224172] "Xinil" "Aokaado" "Crystal" "vondur" ...
## $ Gender : chr [1:224172] "Male" "Male" "Female" "Male" ...
## $ DaysWatched : num [1:224172] 142.3 68.6 212.8 73.1 272.1 ...
## $ MeanScore : num [1:224172] 7.37 7.34 6.68 8.06 5.9 7.6 6.84 7.53 7.18 6.38 ...
## $ Watching : num [1:224172] 1 23 16 11 27 0 15 34 30 13 ...
## $ Completed : num [1:224172] 233 137 636 94 1144 ...
## $ OnHold : num [1:224172] 8 99 303 11 11 0 22 13 9 0 ...
## $ Dropped : num [1:224172] 93 44 0 2 55 0 3 6 8 0 ...
## $ PlantoWatch : num [1:224172] 64 40 45 20 338 0 19 10 22 2 ...
## $ TotalEntries : num [1:224172] 399 343 1000 138 1575 ...
## $ Rewatched : num [1:224172] 60 15 10 7 36 0 1 50 15 0 ...
## $ EpisodesWatched: num [1:224172] 8458 4072 12781 4374 16309 ...
## - attr(*, "na.action")= 'omit' Named int [1:211] 331 3840 8611 10498 12569 13020 16752 17187 18828 19263 ...
## ..- attr(*, "names")= chr [1:211] "331" "3840" "8611" "10498" ...
Câu lệnh str() (structure) là hàm base R dùng để hiển thị cấu trúc
của một đối tượng R
DaysWatched numeric: số ngày xem — có giá trị thực (decimal).
MeanScore numeric: điểm trung bình — thường từ 0–10
dataset$Gender <- as.factor(dataset$Gender)
Lệnh chuyển cột Gender từ kiểu ký tự (character) sang kiểu nhân tố (factor) trong R.
dataset <- dataset %>%
mutate(Gender_Code = case_when(
Gender == "Male" ~ 1,
Gender == "Female" ~ 2,
Gender == "Non-Binary" ~ 3,
TRUE ~ NA_real_
))
Tạo thêm một biến mới tên là Gender_Code, trong đó mã hóa biến giới
tính
Nam (“Male”) được gán giá trị 1,nữ là 2 và Non-Binary là 3
dataset$DaysWatched_Z <- scale(dataset$DaysWatched)
scale() là chuẩn hóa theo Z-score, sau khi chuẩn hóa, biến mới DaysWatched_Z sẽ phản ánh mức độ chênh lệch của từng giá trị so với trung bình, được tính bằng đơn vị độ lệch chuẩn.
dataset$Completion_Rate <- dataset$Completed / dataset$TotalEntries
Lệnh này tạo biến mới Completion_Rate, biểu thị tỷ lệ hoàn thành của
mỗi người dùng hoặc mỗi đối tượng quan sát.
Ý nghĩa: Giúp đo lường mức độ tương tác hoặc cam kết của người dùng đối
với nội dung họ theo dõi.
Q1 <- quantile(dataset$DaysWatched, 0.25)
Q3 <- quantile(dataset$DaysWatched, 0.75)
IQR <- Q3 - Q1
dataset <- dataset[dataset$DaysWatched >= (Q1 - 1.5*IQR) &
dataset$DaysWatched <= (Q3 + 1.5*IQR), ]
quantile() tính phân vị (quartile) của biến DaysWatched:
Q1: phân vị thứ 25%
Q3: phân vị thứ 75%
IQR = Q3 - Q1 là khoảng tứ phân vị, thể hiện độ phân tán trung
tâm.
Quy tắc 1.5*IQR được dùng để loại bỏ ngoại lai (outlier):
Giữ lại các giá trị trong khoảng [Q1 - 1.5IQR, Q3 +
1.5IQR].
Loại bỏ các điểm nằm quá xa trung tâm
🔹 Ý nghĩa: Giúp dữ liệu sạch hơn, tránh sai lệch thống kê do những cá
nhân có giá trị quá cực đoan
dataset$MalID <- as.character(dataset$MalID)
MalID là kiểu số (numeric), nhưng ID → không mang ý nghĩa tính
toán.
as.character() chuyển cột này thành kiểu chuỗi (character).
dataset$MeanScore[is.na(dataset$MeanScore)] <- mean(dataset$MeanScore, na.rm = TRUE)
is.na(dataset$MeanScore) → xác định các giá trị bị thiếu (NA).
mean(…, na.rm = TRUE) → tính trung bình của cột, bỏ qua các giá trị
NA.
Gán giá trị trung bình vào chỗ trống, giúp dữ liệu hoàn chỉnh hơn.
dataset$Watch_Group <- cut(dataset$DaysWatched, breaks = 3,
labels = c("Ít", "Trung bình", "Nhiều"))
cut chia biến liên tục (DaysWatched) thành 3 khoảng đều (breaks =
3).
labels = … gán tên cho từng khoảng.
Kết quả: biến phân loại (factor) có 3 nhóm: “Ít”, “Trung bình”,
“Nhiều”.
### 2.9 Sắp xếp dữ liệu
dataset <- dataset[order(dataset$DaysWatched, decreasing = TRUE), ]
order() sắp xếp các hàng theo giá trị của biến DaysWatched.
decreasing = TRUE → sắp xếp giảm dần (người xem nhiều nhất lên
đầu).
Gán lại toàn bộ dataset theo thứ tự mới.
dataset$Productivity <- dataset$EpisodesWatched / dataset$DaysWatched
Tạo biến mới Productivity = số tập xem được / số ngày xem.
Thể hiện hiệu suất xem trung bình mỗi ngày.
Ý nghĩa: Phản ánh tần suất xem, giúp nhận biết người xem ít hay
nhiều.
dataset$Total_Watch_Time <- dataset$DaysWatched * 24
Kết quả biểu thị tổng số giờ xem, giúp biểu diễn dữ liệu trên thang đo thời gian (hours)
dataset$Score_Group <- ifelse(dataset$MeanScore > 7, "Cao", "Thấp")
ifelse() tạo biến phân loại nhị phân dựa trên điều kiện:
Nếu MeanScore > 7 → nhóm “Cao”.
Ngược lại → nhóm “Thấp”.
Giúp phân loại người dùng hoặc sản phẩm theo mức đánh giá trung
bình.
female_data <- dataset %>% filter(Gender == "Female")
head(female_data)
## # A tibble: 6 × 20
## MalID Username Gender DaysWatched MeanScore Watching Completed OnHold Dropped
## <chr> <chr> <fct> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 33039 stickys… Female 172 7.99 95 249 61 0
## 2 69194 Faun Female 172. 6.65 31 577 9 29
## 3 356891 Caffein… Female 172. 7.6 6 821 2 0
## 4 736587 Ginnung… Female 172. 7.38 12 511 20 8
## 5 10866… bicchi Female 172. 6.91 5 445 2 3
## 6 12015… Parumon Female 172. 7.34 90 786 25 49
## # ℹ 11 more variables: PlantoWatch <dbl>, TotalEntries <dbl>, Rewatched <dbl>,
## # EpisodesWatched <dbl>, Gender_Code <dbl>, DaysWatched_Z <dbl[,1]>,
## # Completion_Rate <dbl>, Watch_Group <fct>, Productivity <dbl>,
## # Total_Watch_Time <dbl>, Score_Group <chr>
%>% — giúp viết code gọn, đọc theo thứ tự tự nhiên.
filter(Gender == “Female”): giữ lại chỉ những dòng có giá trị “Female”
trong cột Gender.
head(female_data): hiển thị 6 dòng đầu tiên của dữ liệu nữ để kiểm
tra.
male_data <- dataset %>% filter(Gender == "Male")
head(male_data)
## # A tibble: 6 × 20
## MalID Username Gender DaysWatched MeanScore Watching Completed OnHold Dropped
## <chr> <chr> <fct> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 34782 Sinmore Male 172 0 59 439 60 7
## 2 74068 Arekou Male 172 7.91 3 493 15 86
## 3 276237 Marow Male 172 5.99 8 1227 4 37
## 4 359225 wotakut… Male 172 5.69 0 511 0 115
## 5 382277 JinKaza… Male 172 8.3 5 274 2 14
## 6 497771 FaLLeN_… Male 172 6.85 41 696 1 62
## # ℹ 11 more variables: PlantoWatch <dbl>, TotalEntries <dbl>, Rewatched <dbl>,
## # EpisodesWatched <dbl>, Gender_Code <dbl>, DaysWatched_Z <dbl[,1]>,
## # Completion_Rate <dbl>, Watch_Group <fct>, Productivity <dbl>,
## # Total_Watch_Time <dbl>, Score_Group <chr>
Tương tự như trên, nhưng lọc ra những dòng có Gender == “Male”.
male_data bây giờ chỉ chứa người dùng nam.
head() giúp xem nhanh cấu trúc để xác nhận thao tác lọc chính xác.
stats_days_female <- with(female_data, c(
Min = min(DaysWatched), Max = max(DaysWatched), Mean = mean(DaysWatched),
Median = median(DaysWatched), SD = sd(DaysWatched), Var = var(DaysWatched)
))
stats_days_female
## Min Max Mean Median SD Var
## 0.00000 172.00000 31.15593 17.60000 36.64637 1342.95657
with(female_data, …): Giúp thực hiện các phép tính bên trong khung dữ
liệu female_data mà không cần phải viết female_data$DaysWatched nhiều
lần.
c(…): Gom tất cả các kết quả thống kê lại thành một vector có tên (tên
các chỉ số như Min, Max, Mean…).
Các hàm thống kê cơ bản:
min() – giá trị nhỏ nhất
max() – giá trị lớn nhất
mean() – giá trị trung bình
median() – trung vị (giá trị giữa khi sắp xếp dữ liệu)
sd() – độ lệch chuẩn (mức độ phân tán dữ liệu quanh trung bình)
var() – phương sai (bình phương của SD)
Ý NGHĨA
Dữ liệu cho thấy số ngày xem của nhóm Female dao động mạnh từ 0 đến 172
ngày, với trung bình 31.16 ngày và trung vị 17.6 ngày.
Phân phối có xu hướng lệch phải, cho thấy phần lớn người dùng nữ có mức
độ xem thấp, chỉ một nhóm nhỏ rất tích cực.
Độ lệch chuẩn cao (36.65) phản ánh sự chênh lệch đáng kể trong hành vi
xem giữa các thành viên nữ.
stats_days_male <- with(male_data, c(
Min = min(DaysWatched), Max = max(DaysWatched), Mean = mean(DaysWatched),
Median = median(DaysWatched), SD = sd(DaysWatched), Var = var(DaysWatched)
))
stats_days_male
## Min Max Mean Median SD Var
## 0.00000 172.00000 46.36810 33.80000 44.11528 1946.15785
Min = 0: Có người dùng nam chưa xem ngày nào.
Max = 172: Người dùng tích cực nhất xem đủ 172 ngày
Mean = 46.37: Trung bình mỗi người nam xem khoảng 46 ngày.
Median = 33.8: Một nửa số người xem dưới ~34 ngày → phân phối có thể
lệch phải (nhiều người xem ít, ít người xem nhiều).
SD = 44.1: Độ lệch chuẩn cao → mức độ xem phim giữa các nam giới rất
khác nhau (một số xem nhiều, một số xem ít).
Var = 1946.16: Phương sai lớn củng cố rằng dữ liệu phân tán mạnh.
stats_score_female <- with(female_data, c(
Min = min(MeanScore), Max = max(MeanScore), Mean = mean(MeanScore),
Median = median(MeanScore), SD = sd(MeanScore)
))
stats_score_female
## Min Max Mean Median SD
## 0.000000 10.000000 6.689808 7.890000 3.240595
Mean = 6.69 và Median = 7.89 → trung vị cao hơn trung bình → phân
phối lệch trái (đa số nữ chấm điểm cao, nhưng có vài người chấm rất thấp
kéo trung bình xuống).
SD = 3.24 → độ lệch chuẩn khá lớn, thể hiện mức độ khác biệt trong cách
đánh giá của nữ giới.
Min = 0 cho thấy có người không chấm điểm hoặc chấm cực thấp; Max = 10
là điểm cao nhất có thể.
stats_score_male <- with(male_data, c(
Min = min(MeanScore), Max = max(MeanScore), Mean = mean(MeanScore),
Median = median(MeanScore), SD = sd(MeanScore)
))
stats_score_male
## Min Max Mean Median SD
## 0.000000 10.000000 6.853234 7.790000 2.908539
Mean = 6.85 và Median = 7.79 → tương tự nữ, điểm trung vị cao hơn
trung bình → phân phối hơi lệch trái.
SD = 2.91 thấp hơn nữ → nam chấm điểm ổn định hơn, ít dao động
hơn.
So với nữ, nam có trung bình cao hơn một chút (6.85 vs 6.69) → nhìn
chung, hai giới có cách đánh giá khá tương đồng.
stats_episodes_female <- with(female_data, c(
Min = min(EpisodesWatched), Max = max(EpisodesWatched), Mean = mean(EpisodesWatched),
Median = median(EpisodesWatched), SD = sd(EpisodesWatched)
))
stats_episodes_female
## Min Max Mean Median SD
## 0.000 230425.000 1993.355 1058.000 3590.432
stats_episodes_male <- with(male_data, c(
Min = min(EpisodesWatched), Max = max(EpisodesWatched), Mean = mean(EpisodesWatched),
Median = median(EpisodesWatched), SD = sd(EpisodesWatched)
))
stats_episodes_male
## Min Max Mean Median SD
## 0.000 715703.000 2943.234 2018.000 5547.167
Min = 0: có người chưa xem tập nào.
Max = 715,703 tập: một người xem cực nhiều (outlier).
Mean = 2,943 và Median = 2,018 → trung vị nhỏ hơn trung bình → phân phối
lệch phải, nghĩa là phần lớn người xem ít, nhưng có một số ít người xem
cực kỳ nhiều kéo trung bình lên cao.
SD = 5547 → độ lệch chuẩn rất lớn, chứng tỏ mức độ chênh lệch trong hành
vi xem giữa người dùng rất cao.
Kết luận:
Có sự phân hóa mạnh trong cường độ xem phim, một số người cực kỳ tích
cực (xem hàng trăm nghìn tập), còn đa số xem ít hơn nhiều.
stats_watching_female <- with(female_data, c(
Min = min(Watching), Max = max(Watching), Mean = mean(Watching),
Median = median(Watching), SD = sd(Watching)
))
stats_watching_female
## Min Max Mean Median SD
## 0.000000 1187.000000 7.604905 3.000000 16.461041
Min = 0 → Có người không có anime đang xem.
Max = 1187 → Có người đang theo dõi tới hơn 1000 anime cùng lúc
(outlier).
Mean = 7.6, Median = 3 → trung vị thấp hơn nhiều so với trung bình →
phân phối lệch phải, hầu hết người dùng nữ chỉ đang xem vài bộ
phim.
SD = 16.46 → chênh lệch lớn, phản ánh hành vi xem hiện tại rất khác nhau
giữa các cá nhân.
➡️ Kết luận:
Phần lớn người dùng nữ đang theo dõi số lượng nhỏ anime cùng lúc, nhưng
có một số ít người “nghiện anime” xem cực nhiều
### 3.9 Thống kê Watching theo giới MALE
stats_watching_male <- with(male_data, c(
Min = min(Watching), Max = max(Watching), Mean = mean(Watching),
Median = median(Watching), SD = sd(Watching)
))
stats_watching_male
## Min Max Mean Median SD
## 0.000000 2579.000000 9.647564 4.000000 26.352849
Max = 2579 → người xem “đỉnh cao”, theo dõi hơn 2.500 anime cùng lúc
(cực hiếm).
Mean = 9.65, Median = 4 → trung bình cao hơn nữ một chút → nam giới
thường xem song song nhiều anime hơn nữ.
SD = 26.35 → độ lệch chuẩn cao hơn nữ → sự khác biệt giữa các nam giới
càng lớn hơn nữa.
➡️ Kết luận:
Nam giới có xu hướng xem nhiều anime cùng lúc hơn, và nhóm người cực kỳ
hoạt động (super viewers) nhiều hơn nữ.
Cả hai giới đều có phân phối lệch phải, nhưng ở nam giới độ phân tán cao
hơn rõ rệt.
stats_completed_female <- with(female_data, c(
Min = min(Completed), Max = max(Completed), Mean = mean(Completed),
Median = median(Completed), SD = sd(Completed)
))
stats_completed_female
## Min Max Mean Median SD
## 0.00000 4299.00000 80.87837 34.00000 118.82165
Min = 0 → có người chưa hoàn thành anime nào.
Max = 4299 → có người đã hoàn tất hơn 4000 anime (rất hiếm,
outlier).
Mean = 80.9, Median = 34 → trung bình cao hơn trung vị → phân phối lệch
phải, phần lớn người xem hoàn thành ít, nhưng có một nhóm nhỏ hoàn thành
rất nhiều.
SD = 118.8 → chênh lệch lớn, thể hiện sự khác biệt rõ rệt về mức độ “xem
hết” giữa người dùng nữ.
➡️ Kết luận:
Người dùng nữ nhìn chung có mức độ hoàn thành thấp (chủ yếu chỉ hoàn
thành vài chục anime), nhưng có một số ít “fan cứng” hoàn thành hàng
nghìn bộ phim.
### 3.11 Thống kê Completed theo MALE
stats_completed_male <- with(male_data, c(
Min = min(Completed), Max = max(Completed), Mean = mean(Completed),
Median = median(Completed), SD = sd(Completed)
))
stats_completed_male
## Min Max Mean Median SD
## 0.0000 2821.0000 124.3644 69.0000 149.4438
Mean (124) và Median (69) đều cao hơn nữ → nam giới có xu hướng hoàn
thành nhiều anime hơn.
SD = 149.4 cũng cao hơn → mức độ chênh lệch giữa người xem ít và người
xem nhiều lớn hơn nữa.
Phân phối lệch phải tương tự nữ: phần lớn người chỉ hoàn thành ít phim,
nhưng có một số hoàn thành cực nhiều.
➡️ Kết luận:
Nam giới xem và hoàn thành nhiều hơn so với nữ, đồng thời có sự phân hóa
mạnh trong hành vi xem.
### 3.12 Tương quan DaysWatched và EpisodesWatched
correlation <- cor(dataset$DaysWatched, dataset$EpisodesWatched)
correlation
## [1] 0.5397925
Hàm cor() tính hệ số tương quan Pearson (r) giữa hai biến liên
tục:
DaysWatched: tổng số ngày người dùng đã dành ra để xem anime.
EpisodesWatched: tổng số tập đã xem.
Giá trị r nằm trong [-1, 1]:
r > 0 → tương quan thuận (biến này tăng → biến kia tăng).
r < 0 → tương quan nghịch.
|r| gần 1 → tương quan mạnh; |r| gần 0 → yếu.
r = 0.54 → tương quan thuận mức trung bình giữa hai biến
→ Người xem càng nhiều ngày thì thường cũng xem càng nhiều tập.
dataset_sub <- dataset %>% filter(Gender %in% c("Male", "Female"))
t_test_result <- t.test(MeanScore ~ Gender, data = dataset_sub)
t_test_result
##
## Welch Two Sample t-test
##
## data: MeanScore by Gender
## t = -12.007, df = 189558, p-value < 2.2e-16
## alternative hypothesis: true difference in means between group Female and group Male is not equal to 0
## 95 percent confidence interval:
## -0.1901019 -0.1367491
## sample estimates:
## mean in group Female mean in group Male
## 6.689808 6.853234
Hàm t.test() được dùng để so sánh trung bình của hai nhóm độc lập
(Independent Samples t-test).
Biến phụ thuộc: MeanScore (điểm trung bình người dùng chấm anime).
Biến độc lập: Gender (Male / Female).
anova_result <- aov(DaysWatched ~ Gender, data = dataset)
summary(anova_result)
## Df Sum Sq Mean Sq F value Pr(>F)
## Gender 2 12362797 6181399 3684 <2e-16 ***
## Residuals 210425 353109386 1678
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Giả thuyết kiểm định:
H₀: Không có sự khác biệt về MeanScore giữa nam và nữ.
H₁: Có sự khác biệt về MeanScore giữa nam và nữ.
Dựa trên kết quả:
p-value < 2.2e-16 → rất nhỏ hơn 0.05, bác bỏ giả thuyết H0.
Nghĩa là có sự khác biệt có ý nghĩa thống kê giữa điểm trung bình của
hai giới.
So sánh trung bình:
Nữ: 6.6898
Nam: 6.8532
→ Trung bình điểm của nam cao hơn nữ khoảng 0.16 điểm (khoảng tin cậy
không chứa 0, củng cố kết luận có khác biệt).
total_stats <- dataset %>%
group_by(Gender) %>%
summarise(
Total_Days = sum(DaysWatched), Total_Episodes = sum(EpisodesWatched),
Total_Entries = sum(TotalEntries), Avg_Score = mean(MeanScore)
)
total_stats
## # A tibble: 3 × 5
## Gender Total_Days Total_Episodes Total_Entries Avg_Score
## <fct> <dbl> <dbl> <dbl> <dbl>
## 1 Female 2909185. 186129568 12580712 6.69
## 2 Male 5389411. 342095084 21523165 6.85
## 3 Non-Binary 50270. 3117380 309808 7.23
group_by(Gender): chia dữ liệu theo từng nhóm giới tính (Female,
Male, Non-Binary).
summarise(): tính toán các thống kê tổng hợp cho từng nhóm:
Total_Days: tổng số ngày xem của từng nhóm giới tính.
Total_Episodes: tổng số tập phim đã xem.
Total_Entries: tổng số mục (entries) mà nhóm đó có.
Avg_Score: điểm trung bình (mean) mà nhóm đó đánh giá.
Nhận xét
Nam (Male) chiếm tỷ trọng hoạt động cao nhất: có tổng số ngày, số tập và
số lượt xem cao hơn hẳn hai nhóm còn lại.
→ nam có xu hướng hoạt động tích cực hơn trong dữ liệu (xem nhiều hơn,
đánh giá nhiều hơn).
Nữ (Female) xếp thứ hai, chiếm khoảng 35–40% tổng hoạt động.
Non-Binary tuy có quy mô mẫu nhỏ (rất thấp so với 2 nhóm còn lại), nhưng
Avg_Score (7.23) lại cao nhất, nghĩa là họ đánh giá nội dung cao hơn
trung bình so với các giới tính khác.
gender_dist <- prop.table(table(dataset$Gender)) * 100
gender_dist
##
## Female Male Non-Binary
## 44.3738476 55.2355200 0.3906324
table(dataset$Gender): đếm số lượng người thuộc từng giới tính.
prop.table(…): chuyển đổi thành tỷ lệ phần trăm (%).
Nhân với 100 để hiển thị phần trăm.
Ý nghĩa:
Dữ liệu cho thấy nam giới chiếm hơn nửa tổng mẫu (≈55%), trong khi nữ
giới chiếm khoảng 44%.
Non-Binary chỉ chiếm 0.39%, tức là gần như không đáng kể về mặt số lượng
thống kê.
stats_rewatch_female <- with(female_data, c(
Min = min(Rewatched), Max = max(Rewatched), Mean = mean(Rewatched),
Median = median(Rewatched), SD = sd(Rewatched)
))
stats_rewatch_female
## Min Max Mean Median SD
## 0.000000 555.000000 6.585114 0.000000 19.962080
stats_rewatch_male <- with(male_data, c(
Min = min(Rewatched), Max = max(Rewatched), Mean = mean(Rewatched),
Median = median(Rewatched), SD = sd(Rewatched)
))
stats_rewatch_male
## Min Max Mean Median SD
## 0.00000 625.00000 8.02132 0.00000 23.10559
Cả hai nhóm đều có Median = 0, nghĩa là phần lớn người dùng không xem
lại (rewatch) phim.
Tuy nhiên, Mean của nhóm nam (≈8.02) cao hơn nữ (≈6.59) → nhóm nam có xu
hướng xem lại nhiều hơn trung bình.
Độ lệch chuẩn (SD) của nam (23.11) cũng cao hơn → hành vi xem lại của
nam phân tán hơn, tức là có những người xem lại rất nhiều lần, trong khi
phần lớn ít hoặc không xem lại.
cor_matrix <- cor(dataset[, c("DaysWatched", "MeanScore", "EpisodesWatched", "Watching")])
cor_matrix
## DaysWatched MeanScore EpisodesWatched Watching
## DaysWatched 1.0000000 0.2346507 0.5397925 0.2913603
## MeanScore 0.2346507 1.0000000 0.1387855 0.1096703
## EpisodesWatched 0.5397925 0.1387855 1.0000000 0.1532229
## Watching 0.2913603 0.1096703 0.1532229 1.0000000
Hàm cor() tính hệ số tương quan giữa các biến định lượng.
Kết quả là một ma trận vuông, trong đó:
Mỗi giá trị nằm giữa -1 và 1
Gần 1 → tương quan thuận mạnh
Gần -1 → tương quan nghịch mạnh
Gần 0 → không có mối liên hệ tuyến tính đáng kể.
Diễn giải: DaysWatched ↔︎ EpisodesWatched (r = 0.54)
→ Có tương quan thuận vừa phải, hợp lý: người xem nhiều ngày thì cũng
xem nhiều tập phim.
DaysWatched ↔︎ MeanScore (r = 0.23)
→ Mối quan hệ yếu nhưng dương: người xem nhiều ngày có xu hướng đánh giá
cao hơn.
MeanScore ↔︎ EpisodesWatched (r = 0.14)
→ Tương quan yếu, cho thấy việc xem nhiều chưa chắc dẫn đến điểm đánh
giá cao.
Watching ↔︎ các biến khác (r ≈ 0.15–0.29)
→ Mối quan hệ yếu → biến “watching” có thể đại diện trạng thái hoặc thói
quen, không hoàn toàn song hành với mức độ xem hoặc đánh giá.
watch_group_stats <- dataset %>%
group_by(Watch_Group) %>%
summarise(Count = n(), Avg_Days = mean(DaysWatched), Avg_Score = mean(MeanScore))
watch_group_stats
## # A tibble: 3 × 4
## Watch_Group Count Avg_Days Avg_Score
## <fct> <int> <dbl> <dbl>
## 1 Ít 153280 17.9 6.52
## 2 Trung bình 40799 81.5 7.51
## 3 Nhiều 16349 139. 7.41
group_by(Watch_Group): chia dữ liệu thành 3 nhóm người xem:
“Ít”
“Trung bình”
“Nhiều”
summarise():
Count: số lượng người trong mỗi nhóm.
Avg_Days: số ngày xem trung bình của nhóm đó (được tính từ biến
DaysWatched).
Avg_Score: điểm trung bình đánh giá của nhóm (biến MeanScore).
Ý nghĩa
Phân bố số lượng (Count):
Nhóm “Ít” chiếm đa số (~70% tổng mẫu, 153k người).
Nhóm “Trung bình” chiếm khoảng 20%,
Nhóm “Nhiều” chỉ khoảng 7–8%, tức là số người xem cực nhiều khá
hiếm.
→ Phân bố này cho thấy hành vi xem có xu hướng nghiêng mạnh về nhóm ít
xem (phân bố lệch phải).
dataset <- dataset %>%
mutate(
Gender = as.factor(Gender),
Watch_Group = as.factor(Watch_Group)
)
mutate() dùng để tạo hoặc thay đổi biến trong bộ dữ liệu.
as.factor() chuyển biến từ dạng character hoặc numeric → factor
safe_mean <- function(x) mean(x, na.rm = TRUE)
safe_max <- function(x) max(x, na.rm = TRUE)
safe_min <- function(x) min(x, na.rm = TRUE)
Hàm tự định nghĩa (custom functions) nhằm tránh lỗi khi trong dữ liệu có giá trị NA (missing value).
p1 <- ggplot(dataset, aes(x = Gender, fill = Gender)) +
geom_bar(alpha = 0.85, width = 0.7) +
geom_text(stat = 'count', aes(label = after_stat(count)), vjust = -0.5, size = 4) +
geom_hline(yintercept = nrow(dataset) / 2, linetype = "dashed", color = "red", size = 0.6) +
labs(title = "PHÂN BỐ GIỚI TÍNH", x = "Giới tính", y = "Số lượng") +
theme_minimal()
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
print(p1)
Biểu đồ được tạo bằng ggplot2 với 6 lớp (layer):
geom_bar() vẽ cột thể hiện số lượng từng giới tính.
geom_text() hiển thị số liệu đếm trên mỗi cột.
geom_hline() thêm đường ngang đỏ dạng nét đứt ở vị trí nửa tổng mẫu để
so sánh mức phân bố.
labs() đặt tiêu đề và nhãn trục.
theme_minimal() giúp biểu đồ rõ ràng, tối giản.
Ý nghĩa thống kê:
Nhóm “Male” chiếm tỷ lệ cao nhất (118,231 người).
Nhóm “Female” đứng thứ hai (93,375 người).
Nhóm “Non-Binary” rất ít (822 người), thể hiện rõ tính mất cân bằng giới
tính trong mẫu khảo sát.
Đường đỏ đứt nét cho thấy không nhóm nào đạt đến mức một nửa tổng mẫu
(≈106,214 người).
→ Cả hai giới chính đều chiếm dưới 50%, nhưng tổng hai nhóm chính vượt
xa nhóm Non-Binary.
p2 <- dataset %>%
group_by(Gender) %>%
summarise(Avg_Days = safe_mean(DaysWatched), n = n()) %>%
ggplot(aes(x = Gender, y = Avg_Days, fill = Gender)) +
geom_col(alpha = 0.85, width = 0.6) +
geom_text(aes(label = round(Avg_Days, 1)), vjust = -0.6, size = 4, fontface = "bold") +
geom_hline(yintercept = safe_mean(dataset$DaysWatched), linetype = "dashed", color = "red", size = 0.8) +
geom_errorbar(aes(ymin = Avg_Days - sd(dataset$DaysWatched, na.rm = TRUE)/10,
ymax = Avg_Days + sd(dataset$DaysWatched, na.rm = TRUE)/10),
width = 0.2, size = 0.6) +
labs(title = "SỐ NGÀY XEM TRUNG BÌNH", y = "Số ngày") +
theme_bw()
print(p2)
Biểu đồ được xây dựng bằng ggplot2 gồm nhiều lớp:
geom_col() vẽ các cột thể hiện số ngày xem trung bình (Avg_Days) theo
giới tính.
geom_text() hiển thị nhãn số liệu trên mỗi cột.
geom_hline() thêm đường trung bình toàn bộ mẫu (màu đỏ, nét đứt) để dễ
so sánh.
geom_errorbar() thể hiện độ lệch chuẩn (SD), giúp thấy mức dao động của
dữ liệu trong từng nhóm.
labs() và theme_bw() định dạng tiêu đề, nhãn trục và bố cục trực
quan.
Về kết quả thống kê, biểu đồ cho thấy:
Non-Binary có số ngày xem trung bình cao nhất (≈ 61.2 ngày), vượt đáng
kể mức trung bình chung, cho thấy nhóm này xem nội dung nhiều và thường
xuyên hơn.
Nam giới (≈ 46.4 ngày) cũng cao hơn trung bình, phản ánh mức độ xem tích
cực hơn nữ.
Nữ giới (≈ 31.2 ngày) thấp hơn trung bình, thể hiện thời gian xem ít
hơn.
Thanh sai số (SD) cho thấy Non-Binary có mức phân tán lớn nhất, nghĩa là
hành vi xem trong nhóm này đa dạng hơn giữa các cá nhân.
p3 <- dataset %>%
group_by(Watch_Group, Gender) %>%
summarise(Avg_Score = safe_mean(MeanScore), .groups = "drop") %>%
ggplot(aes(x = Watch_Group, y = Avg_Score, color = Gender, group = Gender)) +
geom_line(size = 1.2, alpha = 0.9) +
geom_point(size = 3, shape = 21, fill = "white", stroke = 1) +
geom_text(aes(label = round(Avg_Score, 2)), vjust = -1, size = 3.2) +
geom_ribbon(aes(ymin = Avg_Score - 0.1, ymax = Avg_Score + 0.1, fill = Gender), alpha = 0.08, color = NA) +
labs(title = "XU HƯỚNG ĐIỂM SỐ THEO NHÓM XEM", x = "Nhóm xem", y = "Điểm TB") +
theme_minimal()
print(p3)
Về mặt kỹ thuật:
Biểu đồ đường (line chart) thể hiện mối quan hệ giữa mức độ xem (ít –
trung bình – nhiều) và điểm trung bình (Avg_Score) cho từng giới
tính.
Mỗi đường màu biểu diễn một giới, với vùng bóng mờ (ribbon) thể hiện
khoảng dao động sai số ±0.1 điểm quanh trung bình – giúp minh họa độ ổn
định của dữ liệu.
Về mặt thống kê:
Xu hướng chung: Điểm trung bình tăng mạnh từ nhóm xem “ít” → “trung
bình”, cho thấy tần suất xem cao hơn gắn với đánh giá tốt hơn.
Theo giới tính:
Nữ (đỏ): Điểm tăng rõ nhất, từ 6.57 → 7.58, rồi ổn định ở 7.48 → cho
thấy nhóm nữ phản ứng tích cực nhất khi tần suất xem tăng.
Nam (xanh lá): Cũng tăng tương tự nhưng thấp hơn nhẹ (6.59 → 7.48 →
7.38).
Non-binary (xanh dương): Điểm khá ổn định (khoảng 7.2–7.38), ít biến
động → xu hướng đánh giá nhất quán hơn
Kết luận thống kê: Có mối quan hệ dương giữa tần suất xem và điểm trung
bình, nhưng mức độ tăng khác nhau giữa các giới.
p4 <- dataset %>%
count(Gender) %>%
mutate(Percentage = n / sum(n) * 100) %>%
ggplot(aes(x = "", y = Percentage, fill = Gender)) +
geom_col(width = 1, color = "white") +
coord_polar("y", start = 0) +
geom_text(aes(label = paste0(round(Percentage, 1), "%")),
position = position_stack(vjust = 0.5), size = 4, color = "white", fontface = "bold") +
labs(title = "PHÂN BỐ PHẦN TRĂM GIỚI TÍNH") +
theme_void()
print(p4)
count(Gender) → Đếm số lượng mẫu theo từng giới tính.
mutate(Percentage = n / sum(n) * 100) → Tính phần trăm giới tính trong
tổng mẫu.
geom_col() → Vẽ các cột biểu thị tỷ lệ; color=“white” tạo viền ngăn
cách.
coord_polar(“y”) → Chuyển biểu đồ cột sang dạng tròn (pie chart).
geom_text() → Hiển thị nhãn phần trăm trên từng lát cắt, căn giữa và in
đậm.
labs() → Đặt tiêu đề biểu đồ.
theme_void() → Loại bỏ trục, nhãn, lưới để biểu đồ nổi bật hơn.
Ý NGHĨA
Nam giới chiếm tỷ lệ cao nhất (55,2%).
Nữ giới chiếm 44,4%.
Non-Binary chỉ chiếm 0,4%, gần như không đáng kể.
if (!"OnHold" %in% names(dataset)) dataset$OnHold <- 0
p5 <- dataset %>%
group_by(Gender) %>%
summarise(Watching = sum(Watching, na.rm = TRUE),
Completed = sum(Completed, na.rm = TRUE),
OnHold = sum(OnHold, na.rm = TRUE),
.groups = "drop") %>%
pivot_longer(cols = c(Watching, Completed, OnHold), names_to = "Status", values_to = "Count") %>%
ggplot(aes(x = Gender, y = Count, fill = Status)) +
geom_col(position = "stack", alpha = 0.85, color = "black", size = 0.2) +
geom_text(aes(label = Count), position = position_stack(vjust = 0.5), color = "white", size = 3) +
geom_hline(yintercept = seq(0, safe_max(dataset$Watching + dataset$Completed), by = 50),
linetype = "dotted", alpha = 0.3) +
labs(title = "TRẠNG THÁI XEM THEO GIỚI TÍNH", y = "Số lượng") +
theme_minimal()
## Warning in geom_col(position = "stack", alpha = 0.85, color = "black", size =
## 0.2): Ignoring unknown parameters: `size`
print(p5)
group_by(Gender) → Gom nhóm theo giới tính. summarise() → Tính tổng số
lượng từng trạng thái xem (Watching, Completed, OnHold). pivot_longer()
→ Chuyển dữ liệu từ dạng rộng sang dài để vẽ cột chồng.
geom_col(position=“stack”) → Vẽ biểu đồ cột chồng thể hiện tổng số lượt
xem theo trạng thái.
geom_text() → Hiển thị số lượng ngay trên cột.
geom_hline() → Thêm đường ngang chấm để định hướng tỷ lệ.
theme_minimal() → Tạo giao diện đơn giản, dễ đọc.
Ý nghĩa
Nam giới có số lượng xem cao nhất, đặc biệt ở trạng thái “Completed” (≈
14,45 triệu lượt).
Nữ giới thấp hơn, với khoảng 7,55 triệu lượt Completed.
Non-Binary hầu như không đáng kể trong tổng thể dữ liệu.
Trạng thái “Watching” và “OnHold” chỉ chiếm phần nhỏ, cho thấy đa số
người dùng có xu hướng xem trọn vẹn hơn là bỏ dở.
p6 <- dataset %>%
group_by(Gender) %>%
summarise(Avg_Days = safe_mean(DaysWatched),
Avg_Episodes = safe_mean(EpisodesWatched),
Avg_Score = safe_mean(MeanScore),
.groups = "drop") %>%
pivot_longer(cols = c(Avg_Days, Avg_Episodes, Avg_Score), names_to = "Metric", values_to = "Value") %>%
ggplot(aes(x = Metric, y = Value, fill = Gender)) +
geom_col(position = position_dodge(width = 0.7), alpha = 0.85, width = 0.7) +
geom_text(aes(label = round(Value, 1)), position = position_dodge(width = 0.7), vjust = -0.5, size = 3) +
geom_errorbar(aes(ymin = Value - Value*0.05, ymax = Value + Value*0.05),
position = position_dodge(width = 0.7), width = 0.2, size = 0.4) +
labs(title = "SO SÁNH CHỈ SỐ THEO GIỚI TÍNH", y = "Giá trị trung bình") +
theme_classic()
print(p6)
group_by() + summarise() → gom nhóm và tính trung bình.
pivot_longer() → biến các cột trung bình thành một cột “Metric” để dễ
vẽ.
geom_col() → biểu đồ cột.
geom_errorbar() → thêm thanh sai số ±5% mô phỏng khoảng tin cậy.
geom_text() → ghi giá trị trung bình lên mỗi cột.
theme_classic() → hiển thị đồ thị đẹp, dễ đọc.
Ý NGHĨA
Biểu đồ cho thấy sự khác biệt rõ rệt giữa các giới tính ở ba chỉ
số:
Avg_Days:
Nam (46.4 ngày) cao hơn Nữ (31.2 ngày), cho thấy nam giới có xu hướng
duy trì hoạt động xem lâu hơn.
Non-Binary cao nhất (61.2 ngày), thể hiện mức độ gắn bó cao nhất.
Avg_Episodes:
Nữ xem trung bình 1.993 tập, thấp hơn nhiều so với Nam (2.973 tập) và
Non-Binary (3.762 tập).
Điều này phản ánh khả năng “cày phim” cao hơn ở hai nhóm sau.
Avg_Score:
Các nhóm có mức điểm trung bình khá tương đồng (6.7–7.2), chứng tỏ đánh
giá chất lượng không khác biệt lớn giữa các giới.
Thanh sai số (error bar) nhỏ → mức dao động thấp, các giá trị trung bình
đáng tin cậy.
p7 <- dataset %>%
mutate(Above_Avg = DaysWatched > safe_mean(DaysWatched)) %>%
ggplot(aes(x = Gender, fill = Above_Avg)) +
geom_bar(position = "fill", alpha = 0.85, width = 0.6, color = "black", size = 0.2) +
geom_text(stat = 'count', aes(label = after_stat(count), group = Above_Avg),
position = position_fill(vjust = 0.5), color = "white", size = 4) +
geom_hline(yintercept = 0.5, linetype = "dashed", color = "yellow", size = 0.8) +
labs(title = "TỶ LỆ NGƯỜI DÙNG CÓ SỐ NGÀY XEM TRÊN TRUNG BÌNH", y = "Tỷ lệ") +
theme_bw()
## Warning in geom_bar(position = "fill", alpha = 0.85, width = 0.6, color =
## "black", : Ignoring unknown parameters: `size`
print(p7)
Trục Y = tỷ lệ (%) đã được chuẩn hóa về tổng 1.0 (100%) cho từng giới
tính thông qua position = “fill”.
Dòng kẻ ngang màu vàng tại 0.5 (50%) được thêm bằng geom_hline() để làm
mức tham chiếu trung bình.
Các con số bên trong cột là số lượng người thực tế (geom_text()).
Màu đỏ = Không đạt trên mức trung bình (FALSE), màu xanh = Đạt trên mức
trung bình (TRUE).
Biểu đồ đang so sánh tỷ lệ người dùng có số ngày xem video cao hơn trung
bình giữa 3 giới: Female, Male, Non-Binary.
Giới Non-Binary có tỷ lệ người dùng xem nhiều ngày cao nhất (61%), vượt
mức 50% → nhóm có mức độ tương tác tốt nhất.
Nam giới có tỷ lệ tương đối cân bằng (45%), nhưng vẫn thấp hơn mức trung
bình.
Nữ giới có tỷ lệ thấp nhất (29%), cho thấy mức độ sử dụng kém hơn đáng
kể so với hai nhóm còn lại.
Dòng ngang 50% giúp nhận biết nhanh nhóm nào vượt ngưỡng và nhóm nào
dưới ngưỡng → hỗ trợ ra quyết định marketing phân khúc.
p8 <- dataset %>%
mutate(Percentile = ntile(DaysWatched, 4)) %>%
group_by(Percentile, Gender) %>%
summarise(Avg_Score = safe_mean(MeanScore), .groups = "drop") %>%
ggplot(aes(x = Percentile, y = Avg_Score, color = Gender)) +
geom_line(size = 1.2, alpha = 0.9) +
geom_point(size = 3) +
geom_text(aes(label = round(Avg_Score, 2)), vjust = -0.9, size = 3) +
geom_smooth(method = "lm", se = FALSE, linetype = "dashed", alpha = 0.5) +
geom_ribbon(aes(ymin = Avg_Score - 0.05, ymax = Avg_Score + 0.05, fill = Gender), alpha = 0.08, color = NA) +
labs(title = "XU HƯỚNG ĐIỂM SỐ THEO PHÂN VỊ", x = "Phân vị", y = "Điểm TB") +
theme_minimal()
print(p8)
## `geom_smooth()` using formula = 'y ~ x'
Phân vị (Percentile) được tạo bằng ntile(DaysWatched, 4) → chia người
dùng thành 4 nhóm theo số ngày xem video (từ thấp → cao).
Dữ liệu được gom theo 2 biến: Percentile và Gender, sau đó tính
Avg_Score = điểm trung bình xem video của từng nhóm bằng
safe_mean.
Biểu đồ sử dụng line chart (đường nối) để thể hiện xu hướng điểm theo
phân vị giữa các giới tính.
geom_text() được dùng để hiển thị giá trị điểm trung bình trên từng điểm
dữ liệu.
geom_smooth(method = “lm”) thêm đường xu hướng hồi quy tuyến tính
(dashed) → giúp nhận biết độ dốc tăng/giảm.
geom_ribbon() tạo lớp mờ xung quanh đường nhằm nhấn mạnh sự ổn định biến
động (±0.05).
Trục X: Phân vị (1 = nhóm xem ít nhất, 4 = nhóm xem nhiều nhất).
Trục Y: Điểm trung bình (MeanScore).
Ý NGHĨA
Điểm trung bình tăng mạnh từ phân vị 1 → 2, sau đó có xu hướng giảm nhẹ
ở các phân vị cao hơn (3 → 4).
Điều này cho thấy: những người xem rất ít video có điểm thấp, nhưng
người xem nhiều nhất chưa chắc có điểm cao nhất → có dấu hiệu hiệu ứng
“bão hòa”.
p9 <- dataset %>%
group_by(Gender) %>%
summarise(Mean_Days = safe_mean(DaysWatched), SE = sd(DaysWatched, na.rm = TRUE)/sqrt(n()), .groups = "drop") %>%
ggplot(aes(x = Gender, y = Mean_Days, fill = Gender)) +
geom_col(alpha = 0.75, width = 0.6) +
geom_errorbar(aes(ymin = Mean_Days - SE, ymax = Mean_Days + SE), width = 0.2, color = "black", size = 0.6) +
geom_text(aes(label = round(Mean_Days, 1)), vjust = -0.5, size = 4, fontface = "bold") +
geom_hline(yintercept = safe_mean(dataset$DaysWatched), linetype = "dotted", color = "red", size = 0.8) +
labs(title = "SỐ NGÀY XEM TRUNG BÌNH VỚI SAI SỐ", y = "Số ngày") +
theme_light()
print(p9)
p10 <- dataset %>%
filter(Watch_Group == "Nhiều") %>%
count(Gender) %>%
mutate(Percentage = n / sum(n) * 100) %>%
ggplot(aes(x = "", y = Percentage, fill = Gender)) +
geom_col(width = 1, color = "white") +
coord_polar("y", start = 0) +
geom_text(aes(label = paste0(round(Percentage, 1), "%")), position = position_stack(vjust = 0.5), size = 4) +
labs(title = "GIỚI TÍNH TRONG NHÓM XEM NHIỀU") +
theme_void()
print(p10)
Biểu đồ được tạo sau khi lọc nhóm người dùng có mức xem cao
(Watch_Group == “Nhiều”), tức nhóm top viewers.
Dữ liệu được đếm theo giới tính và quy đổi sang tỷ lệ phần trăm (n /
sum(n) * 100).
Biểu đồ sử dụng geom_col + coord_polar() để chuyển cột thành biểu đồ
tròn (pie chart).
Tổng thể nhóm xem nhiều gồm 3 giới tính, trong đó Male chiếm áp đảo
72.5%.
Nữ giới chiếm 26.8%, tức chỉ bằng khoảng 1/3 số nam, cho thấy mức độ xem
thấp hơn đáng kể.
Non-Binary chỉ chiếm 0.7%, gần như không đáng kể trong nhóm xem
nhiều.
Kết luận: Nam là nhóm có xu hướng binge–watch cao nhất, đóng vai trò
chính trong nhóm người xem nhiều tập.
Tỷ lệ này phù hợp với kết quả từ các biểu đồ trước (nam có DaysWatched
& EpisodesWatched trung bình cao nhất).
p11 <- ggplot(dataset, aes(x = DaysWatched, fill = Gender)) +
geom_histogram(bins = 15, alpha = 0.7, position = "identity", color = "black", size = 0.2) +
geom_density(aes(y = after_stat(count)), color = "black", size = 0.7, alpha = 0.4) +
geom_vline(xintercept = safe_mean(dataset$DaysWatched), linetype = "dashed", color = "red", size = 0.8) +
facet_wrap(~Gender, ncol = 1) +
labs(title = "PHÂN BỐ SỐ NGÀY XEM THEO GIỚI TÍNH", x = "Số ngày xem", y = "Tần số") +
theme_classic()
## Warning in geom_histogram(bins = 15, alpha = 0.7, position = "identity", :
## Ignoring unknown parameters: `size`
print(p11)
Biểu đồ sử dụng histogram để thể hiện tần suất số ngày xem
(DaysWatched) theo từng giới tính, chia thành 15 bins.
Lớp density curve (đường đen) được thêm để mô tả hình dạng phân phối,
giúp nhận diện độ lệch (skewness).
Biểu đồ được tách thành 3 panel bằng facet_wrap(), cho phép so sánh trực
quan mà không bị chồng dữ liệu.
Đường gạch đỏ là giá trị trung bình toàn bộ mẫu (~45 ngày), dùng làm
chuẩn so sánh giữa các nhóm.
Nhóm Female có phân bố lệch phải rõ rệt, đa số người xem dưới 30 ngày,
rất ít người vượt 120 ngày.
Trung bình nhóm Female thấp hơn mức chung, khoảng 38 ngày, cho thấy mức
độ xem không cao.
Nhóm Male có phân bố rộng hơn, xuất hiện nhiều người xem 60–120 ngày,
trung bình gần 50 ngày, cao hơn Female.
Male cũng có đuôi phải dài hơn → nhiều người xem cực nhiều, thể hiện
hành vi binge-watching mạnh hơn.
Nhóm Non-Binary có số lượng nhỏ, phân bố tập trung dưới 20 ngày, trung
bình chỉ ~25 ngày, thấp nhất trong ba nhóm.
Kết luận: Nam xem nhiều ngày hơn và phân bố trải rộng nhất, nữ ở mức
trung bình, non-binary thấp và ổn định hơn.
p12 <- ggplot(dataset, aes(x = Gender, y = EpisodesWatched, fill = Gender)) +
geom_boxplot(alpha = 0.75, outlier.color = "red", outlier.shape = 16) +
geom_jitter(width = 0.2, alpha = 0.4, size = 1, color = "gray30") +
stat_summary(fun = mean, geom = "point", shape = 18, size = 3, color = "red") +
geom_hline(yintercept = safe_mean(dataset$EpisodesWatched), linetype = "dashed", color = "blue", size = 0.8) +
labs(title = "PHÂN BỐ SỐ TẬP THEO GIỚI TÍNH", y = "Số tập") +
theme_bw()
print(p12)
Biểu đồ sử dụng boxplot để thể hiện phân bố số tập đã xem theo giới
tính, kết hợp thêm jitter để hiển thị từng cá nhân.
Điểm màu đỏ hình thoi là giá trị trung bình (mean) của mỗi nhóm giới,
được thêm bằng stat_summary().
Đường gạch xanh là mức trung bình toàn bộ mẫu, giúp so sánh phương sai
giữa các nhóm.
Nhóm Male có trung bình số tập cao nhất, khoảng ~45.000 tập, vượt mức
trung bình chung (~28.000 tập).
Nhóm Female có trung bình thấp hơn, khoảng ~22.000 tập, nằm dưới mức
chung.
Nhóm Non-Binary có số người ít nhất và trung bình chỉ khoảng ~8.000 tập,
thấp hơn đáng kể so với hai nhóm còn lại.
Boxplot của Male rộng hơn ⇒ độ biến động lớn, cho thấy sự chênh lệch
mạnh giữa người xem ít và người xem cực nhiều.
Có nhiều outliers (điểm đỏ) trong nhóm Male, đặc biệt có người xem hơn
600.000 tập, chứng tỏ hành vi binge-watching cực đoan.
Nhóm Female có ít outlier hơn và phân bố tập trung, thể hiện mức độ xem
ổn định hơn.
Kết luận: Giới tính có ảnh hưởng rõ rệt đến mức độ xem, trong đó nam
giới là nhóm xem nhiều tập nhất và có độ phân tán lớn nhất.
top_thresh <- quantile(dataset$DaysWatched, 0.9, na.rm = TRUE)
p13 <- ggplot(dataset, aes(x = DaysWatched, y = EpisodesWatched, color = Gender, size = MeanScore)) +
geom_point(alpha = 0.7) +
geom_smooth(method = "lm", se = TRUE, alpha = 0.2, size = 0.8) +
geom_rug(alpha = 0.5) +
labs(title = "MỐI QUAN HỆ NGÀY XEM VÀ SỐ TẬP", x = "Số ngày xem", y = "Số tập") +
theme_light()
if ("Username" %in% names(dataset)) {
p13 <- p13 +
geom_text(data = dataset %>% filter(DaysWatched > top_thresh),
aes(label = Username), vjust = -0.5, size = 2.5, check_overlap = TRUE)
}
print(p13)
## `geom_smooth()` using formula = 'y ~ x'
Biểu đồ sử dụng geom_point() để thể hiện mối quan hệ giữa DaysWatched
(trục X) và EpisodesWatched (trục Y) dưới dạng scatter plot.
Mỗi điểm dữ liệu được tô màu theo Gender và kích thước điểm phản ánh
MeanScore → điểm càng to nghĩa là đánh giá càng cao.
geom_smooth(method = “lm”) được thêm vào để fit đường hồi quy tuyến
tính, giúp nhận diện xu hướng tổng quát giữa hai biến.
Kết quả đường hồi quy cho thấy xu hướng dương rõ rệt: người xem càng
nhiều ngày thì số tập xem càng tăng theo.
Các giá trị tập trung dày ở khu vực 0–60 ngày xem và dưới 200.000 tập,
thể hiện hành vi xem trung bình của đa số người dùng.
Điểm ngoại lệ (outlier) xuất hiện ở nhóm nam, có user xem >150 ngày
và >600.000 tập, chứng tỏ nhóm này có mức độ binge-watching cao
nhất.
Nhóm Female có phân bố thấp hơn, chủ yếu rơi vào vùng <100 ngày và
<200k tập → tần suất xem thấp hơn nam.
Nhóm Non-Binary xuất hiện ít hơn và tập trung quanh mức xem trung bình,
không tạo ra outlier lớn.
Tổng quan: có mối quan hệ tuyến tính tích cực giữa số ngày xem và số
tập, với nam giới là nhóm hoạt động cao nhất, đồng thời những người có
điểm đánh giá cao (MeanScore lớn) thường thuộc nhóm xem nhiều tập.
p14 <- ggplot(dataset, aes(x = MeanScore, fill = Gender)) +
geom_density(alpha = 0.5, color = "black", size = 0.5) +
geom_vline(xintercept = safe_mean(dataset$MeanScore), linetype = "dashed", color = "red", size = 0.8) +
geom_rug(aes(color = Gender), sides = "b", alpha = 0.5) +
facet_grid(Gender ~ .) +
labs(title = "MẬT ĐỘ PHÂN PHỐI ĐIỂM SỐ", x = "Điểm trung bình") +
theme_minimal()
print(p14)
Biểu đồ density thể hiện phân phối điểm trung bình (MeanScore) theo
giới tính, được vẽ bằng geom_density().
Đường đỏ dọc đánh dấu điểm trung bình toàn bộ mẫu (~7.1) dùng làm mốc so
sánh giữa các nhóm.
Biểu đồ được tách theo panel (facet_grid) giúp quan sát từng giới rõ
ràng, không chồng dữ liệu.
Nhóm Male có đỉnh phân phối cao nhất (~7.6–7.8), phần lớn điểm nằm trên
mức trung bình chung.
Điều này cho thấy nam đạt điểm tốt nhất trong ba nhóm cả về trung bình
lẫn mật độ điểm cao.
Nhóm Female phân bố lệch phải, tập trung quanh 6.5–7.5 và xuất hiện
nhiều trường hợp điểm < 6.
Kết quả cho thấy điểm nữ vừa thấp hơn nam vừa biến động lớn hơn (độ lệch
chuẩn cao hơn).
Nhóm Non-Binary có phân phối gần chuẩn, tập trung mạnh ở mức 7.4–8.0 và
ít điểm thấp.
Đây là nhóm ổn định nhất: ít outlier, ít điểm quá thấp, nhưng trung bình
vẫn thấp hơn Male một chút.
Thứ tự xếp hạng theo phân phối điểm: Male cao nhất → Non-Binary ổn định
→ Female thấp nhất.
p15 <- dataset %>%
group_by(Gender) %>%
summarise(Total_Days = sum(DaysWatched, na.rm = TRUE),
Total_Episodes = sum(EpisodesWatched, na.rm = TRUE),
.groups = "drop") %>%
pivot_longer(cols = c(Total_Days, Total_Episodes), names_to = "Type", values_to = "Total") %>%
ggplot(aes(x = Gender, y = Total, fill = Type)) +
geom_col(position = position_dodge(width = 0.7), alpha = 0.85, width = 0.7) +
geom_text(aes(label = Total), position = position_dodge(width = 0.7), vjust = -0.5, size = 3.5) +
labs(title = "TỔNG SỐ NGÀY VÀ TẬP THEO GIỚI TÍNH", y = "Tổng số") +
theme_light()
print(p15)
group_by(Gender) → gom dữ liệu theo giới tính để tính tổng từng
nhóm.
summarise(Total_Days = sum(DaysWatched), Total_Episodes =
sum(EpisodesWatched))
→ tạo 2 biến mới chứa tổng số ngày xem và tập đã xem theo từng giới
tính.
pivot_longer() → chuyển dữ liệu từ dạng rộng sang dài (phục vụ vẽ cột
song song).
geom_col(position = position_dodge()) → vẽ biểu đồ cột so sánh song song
giữa Total_Days và Total_Episodes.
geom_text(label = Total) → in số liệu trực tiếp lên cột để dễ đọc.
alpha = 0.85 + width = 0.7 → tăng độ trong suốt và kích thước cột để
nhìn rõ.
Nam giới xem nhiều hơn rõ rệt:
Số tập xem của nam (342 triệu) gấp gần 1.8 lần so với nữ (186
triệu).
Số ngày xem của nam (5.38 triệu) gần 2 lần nữ (2.9 triệu).
Nhóm Non-Binary rất nhỏ (chỉ chiếm <1% tổng lượng xem) → cỡ mẫu thấp,
cần cẩn trọng khi suy luận thống kê.
Tỷ lệ giữa Total_Days và Total_Episodes cho thấy tần suất xem tập/ngày
của nam cao hơn nữ, tức là nam xem dồn tập nhiều hơn.
p16 <- dataset %>%
group_by(Gender, Watch_Group) %>%
summarise(Avg_Score = safe_mean(MeanScore), Avg_Episodes = safe_mean(EpisodesWatched), .groups = "drop") %>%
pivot_longer(cols = c(Avg_Score, Avg_Episodes), names_to = "Metric", values_to = "Value") %>%
ggplot(aes(x = Watch_Group, y = Value, color = Metric, group = Metric)) +
geom_line(size = 1.1, alpha = 0.85) +
geom_point(size = 3) +
geom_ribbon(aes(ymin = Value - 0.5, ymax = Value + 0.5, fill = Metric), alpha = 0.08, color = NA) +
facet_wrap(~Gender, nrow = 1) +
labs(title = "SO SÁNH CHỈ SỐ THEO NHÓM XEM", x = "Nhóm xem", y = "Giá trị") +
theme_minimal()
print(p16)
Số tập xem trung bình (Avg_Episodes) tăng rõ rệt từ nhóm “Ít” →
“Nhiều” ở cả ba giới tính, chứng minh phân nhóm mức độ xem là hợp
lý.
Điểm số trung bình (Avg_Score) hầu như không thay đổi giữa các nhóm, cho
thấy tần suất xem không ảnh hưởng đến mức độ đánh giá phim.
Không có sự khác biệt lớn về Avg_Score giữa Male, Female và Non-Binary,
tức hành vi chấm điểm là thống nhất giữa các giới tính.
Nhóm “Nhiều” có số tập xem cao gấp nhiều lần nhóm “Ít” (khoảng 5–7 lần),
phản ánh mức độ tiêu thụ nội dung tăng tuyến tính theo thói quen
xem.
Dữ liệu Non-Binary có xu hướng dao động hơn do số lượng mẫu nhỏ, nên cần
thận trọng khi diễn giải kết luận cho nhóm này.
p17 <- dataset %>%
mutate(Score_Range = cut(MeanScore, breaks = 4)) %>%
group_by(Gender, Score_Range) %>%
summarise(Count = n(), .groups = "drop") %>%
ggplot(aes(x = Score_Range, y = Count, fill = Gender)) +
geom_area(position = "identity", alpha = 0.5) +
geom_line(aes(group = Gender), size = 0.9) +
geom_point(size = 2) +
geom_text(aes(label = Count), vjust = -0.5, size = 3) +
labs(title = "PHÂN BỐ ĐIỂM SỐ THEO GIỚI TÍNH", x = "Khoảng điểm", y = "Số lượng") +
theme_minimal()
print(p17)
Hàm cut() chia giá trị MeanScore thành 4 khoảng điểm (ví dụ:
(-0.01,2.5], (2.5,5], (5,7.5], (7.5,10]).
Count = n() đếm số lượng cá nhân thuộc mỗi nhóm này.
geom_area(): Tạo vùng diện tích tô màu mờ (alpha = 0.5) cho từng giới
tính.
geom_line(): Nối các điểm bằng đường để thấy xu hướng thay đổi số lượng
giữa các khoảng điểm.
geom_point(): Đánh dấu từng giá trị.
geom_text(): Hiển thị số lượng cụ thể tại mỗi điểm.
Ý NGHĨA:
Phân phối lệch phải (right-skewed)
→ Hầu hết người học đạt điểm cao (7.5–10), rất ít điểm thấp.
→ Điều này có thể do đề thi dễ hoặc năng lực học viên đồng đều
cao.
Khác biệt giới tính rõ rệt
Nữ (Female) có xu hướng điểm cao hơn nam.
Nam (Male) có số lượng điểm thấp hơn ở nhóm 7.5–10.
Non-Binary chỉ có vài người (470), không đủ để kết luận thống kê
mạnh.
Phân bố không đều giữa các nhóm điểm
→ Có thể xem xét chuẩn hóa hoặc dùng các thước đo khác (trung bình, độ
lệch chuẩn, median) để phân tích sâu hơn.
p18 <- ggplot(dataset, aes(x = Gender, y = DaysWatched, fill = Gender)) +
geom_violin(alpha = 0.75, trim = FALSE) +
geom_boxplot(width = 0.1, fill = "white", alpha = 0.9, outlier.shape = NA) +
geom_jitter(width = 0.05, alpha = 0.3, size = 1, color = "gray30") +
stat_summary(fun = mean, geom = "point", shape = 18, size = 3, color = "red") +
geom_hline(yintercept = median(dataset$DaysWatched, na.rm = TRUE), linetype = "dashed", color = "blue", size = 0.7) +
labs(title = "PHÂN BỐ SỐ NGÀY XEM - VIOLIN PLOT", y = "Số ngày xem") +
theme_classic()
print(p18)
geom_violin(alpha = 0.75, trim = FALSE)
→ Vẽ biểu đồ violin thể hiện phân bố mật độ xác suất của biến
DaysWatched cho từng nhóm Gender.
geom_boxplot(width = 0.1, fill = “white”, alpha = 0.9, outlier.shape =
NA)
→ Lồng boxplot vào trong violin để thể hiện trung vị, tứ phân vị và độ
phân tán của dữ liệu.
geom_jitter(width = 0.05, alpha = 0.3, size = 1, color = “gray30”)
→ Thêm các điểm dữ liệu riêng lẻ được rải ngẫu nhiên, giúp thấy rõ sự
phân tán thực tế của người xem.
stat_summary(fun = mean, geom = “point”, shape = 18, size = 3, color =
“red”)
→ Đánh dấu giá trị trung bình (mean) của mỗi giới tính bằng hình thoi
đỏ.
geom_hline(yintercept = median(dataset$DaysWatched, na.rm = TRUE),
linetype = “dashed”, color = “blue”, size = 0.7)
Vẽ đường ngang màu xanh nét đứt thể hiện trung vị (median) của toàn bộ
dữ liệu, để so sánh các nhóm.
theme_classic() làm gọn nền, loại bỏ chi tiết thừa, giúp nổi bật phân bố
và đường thống kê.
📊 Ý NGHĨA THỐNG KÊ CỦA BIỂU ĐỒ
Phân bố lệch phải (Right-skewed)
→ Cả ba nhóm giới tính đều có phân bố nghiêng về bên phải, tức đa số
người xem ít ngày, chỉ một số ít xem rất nhiều ngày.
→ Điều này phản ánh xu hướng xem tập trung ở mức thấp — có thể do phần
lớn người chỉ tham gia ngắn hạn.
Trung bình và trung vị khác biệt
→ Các điểm đỏ (mean) nằm cao hơn trung vị (đường xanh) → dữ liệu bị kéo
lệch bởi một số người xem cực nhiều.
→ Trung bình vì thế không đại diện tốt cho xu hướng trung tâm, median
phản ánh chính xác hơn hành vi phổ biến.
So sánh giữa các giới tính
→ Female và Male có phân bố tương tự nhau: mật độ tập trung nhiều ở mức
thấp (ít ngày xem).
→ Non-Binary có phạm vi trải rộng hơn, trung bình (điểm đỏ) cao hơn →
xem nhiều hơn trung bình so với hai giới còn lại.
→ Tuy nhiên, số lượng Non-Binary ít nên chưa đủ mạnh để kết luận thống
kê chắc chắn.
p19 <- dataset %>%
group_by(Gender, Watch_Group) %>%
summarise(Avg_Score = safe_mean(MeanScore), Avg_Days = safe_mean(DaysWatched), Count = n(), .groups = "drop") %>%
ggplot(aes(x = Avg_Days, y = Avg_Score, color = Gender, size = Count)) +
geom_point(alpha = 0.8) +
geom_text(aes(label = Watch_Group), vjust = -1, size = 3, fontface = "bold", check_overlap = TRUE) +
geom_smooth(method = "lm", se = FALSE, linetype = "dashed", alpha = 0.5) +
geom_hline(yintercept = safe_mean(dataset$MeanScore), linetype = "dotted", color = "gray50") +
geom_vline(xintercept = safe_mean(dataset$DaysWatched), linetype = "dotted", color = "gray50") +
labs(title = "MỐI QUAN HỆ TRUNG BÌNH NGÀY XEM VÀ ĐIỂM SỐ", x = "Số ngày trung bình", y = "Điểm trung bình") +
theme_light()
print(p19)
## `geom_smooth()` using formula = 'y ~ x'
## Warning: The following aesthetics were dropped during statistical transformation: size.
## ℹ This can happen when ggplot fails to infer the correct grouping structure in
## the data.
## ℹ Did you forget to specify a `group` aesthetic or to convert a numerical
## variable into a factor?
Biểu đồ cho thấy mối quan hệ thuận giữa tổng thời gian xem
(DaysWatched) và điểm đánh giá trung bình (MeanScore) — người xem nhiều
hơn có xu hướng đánh giá cao hơn.
Female và Male có xu hướng tăng điểm khi thời gian xem tăng, thể hiện
rằng khi họ đầu tư nhiều thời gian hơn, sự hài lòng hoặc cảm nhận chất
lượng phim cũng cao hơn.
Non-Binary có đường xu hướng gần như phẳng → điểm đánh giá ổn định, ít
phụ thuộc vào thời gian xem, cho thấy nhóm này có cách đánh giá nhất
quán hơn.
Các điểm “ít” nằm dưới trung bình chung (xem ít – chấm điểm thấp), trong
khi nhóm “nhiều” nằm phía trên (xem nhiều – chấm điểm cao).
Kích thước điểm lớn nhất ở nhóm “trung bình”, chứng tỏ phần lớn người
dùng hoạt động ở mức xem vừa phải, còn nhóm “xem nhiều” tuy ít hơn nhưng
đánh giá cao hơn rõ rệt.
p20 <- dataset %>%
select(Gender, DaysWatched, EpisodesWatched, MeanScore, Watching) %>%
pivot_longer(cols = -Gender, names_to = "Variable", values_to = "Value") %>%
ggplot(aes(x = Gender, y = Value, fill = Gender)) +
geom_boxplot(alpha = 0.75, outlier.color = "red", outlier.shape = 16) +
geom_jitter(width = 0.15, alpha = 0.3, size = 0.6, color = "gray30") +
stat_summary(fun = mean, geom = "point", shape = 18, size = 2, color = "red") +
facet_wrap(~Variable, scales = "free_y", ncol = 2) +
labs(title = "PHÂN TÍCH ĐA BIẾN THEO GIỚI TÍNH", y = "Giá trị") +
theme_minimal()
print(p20)
Dữ liệu được chuyển sang dạng dài (pivot_longer) để biểu diễn nhiều
biến cùng lúc.
geom_boxplot() hiển thị phân bố từng biến theo giới tính, giúp so sánh
trung vị và độ phân tán.
geom_jitter() thêm các điểm dữ liệu thực, giúp quan sát mật độ và ngoại
lệ (outliers).
stat_summary(fun = mean) đánh dấu giá trị trung bình (chấm đỏ) của từng
nhóm.
facet_wrap() chia thành 4 ô: DaysWatched, EpisodesWatched, MeanScore, và
Watching — mỗi ô có trục tung riêng.
DaysWatched & EpisodesWatched:
Phân bố lệch phải, cho thấy đa số người dùng xem ít nhưng có một số ít
cá nhân xem rất nhiều (outliers).
Nhóm Non-Binary có trung vị cao hơn nhẹ → xu hướng xem đều hơn, ít ngoại
lệ cực trị.
MeanScore:
Điểm trung bình của cả ba giới tương đối cao (≈7–8), chênh lệch
nhỏ.
Male có độ phân tán lớn hơn → nhóm nam đa dạng hơn trong cách đánh giá
anime.
Watching (đang xem):
Phần lớn người dùng đang theo dõi ít anime cùng lúc, chỉ một số rất nhỏ
(outlier) xem hàng nghìn tập.
Nhóm Male có số lượng người đang xem cao nhất, thể hiện mức độ hoạt động
mạnh hơn.
data_full <- read_excel(file.choose())
## New names:
## • `` -> `...1`
## • `Tài sản lưu động khác` -> `Tài sản lưu động khác...23`
## • `Giao dịch mua bán lại trái phiếu chính phủ` -> `Giao dịch mua bán lại trái
## phiếu chính phủ...27`
## • `Tài sản lưu động khác` -> `Tài sản lưu động khác...28`
## • `Giao dịch mua bán lại trái phiếu chính phủ` -> `Giao dịch mua bán lại trái
## phiếu chính phủ...81`
## • `Cổ phiếu ưu đãi` -> `Cổ phiếu ưu đãi...92`
## • `Cổ phiếu ưu đãi` -> `Cổ phiếu ưu đãi...101`
## • `Lợi ích của cổ đông thiểu số` -> `Lợi ích của cổ đông thiểu số...120`
## • `Lợi ích của cổ đông thiểu số` -> `Lợi ích của cổ đông thiểu số...143`
head(data_full)
## # A tibble: 6 × 189
## ...1 `TỔNG TÀI SẢN` `TÀI SẢN NGẮN HẠN` `Tiền và tương đương tiền` Tiền
## <chr> <dbl> <dbl> <dbl> <dbl>
## 1 2015 5.09e12 3211018731920 64549207165 4.36e10
## 2 2016 5.88e12 4182170299524 179462187815 1.79e11
## 3 2017 6.08e12 4809788192964 202909697337 1.24e11
## 4 2018 6.83e12 5633632858566 734834226232 4.00e11
## 5 2019 8.20e12 7130818433089 593928466557 4.75e11
## 6 2020 1.18e13 7299152349851 402938011038 2.89e11
## # ℹ 184 more variables: `Các khoản tương đương tiền` <dbl>,
## # `Giá trị thuần đầu tư ngắn hạn` <dbl>, `Đầu tư ngắn hạn` <dbl>,
## # `Dự phòng đầu tư ngắn hạn` <dbl>,
## # `Chứng khoán đầu tư giữ đến ngày đáo hạn` <dbl>,
## # `Các khoản phải thu` <dbl>, `Phải thu khách hàng` <dbl>,
## # `Trả trước người bán` <dbl>, `Phải thu nội bộ` <dbl>,
## # `Phải thu về XDCB` <dbl>, `Phải thu về cho vay ngắn hạn` <dbl>, …
data_full <- janitor::clean_names(data_full)
Hàm clean_names() chuẩn hóa tên cột: chuyển về chữ thường, bỏ dấu, thay khoảng trắng bằng dấu gạch dưới.
names(data_full)
## [1] "x1"
## [2] "tong_tai_san"
## [3] "tai_san_ngan_han"
## [4] "tien_va_tuong_duong_tien"
## [5] "tien"
## [6] "cac_khoan_tuong_duong_tien"
## [7] "gia_tri_thuan_dau_tu_ngan_han"
## [8] "dau_tu_ngan_han"
## [9] "du_phong_dau_tu_ngan_han"
## [10] "chung_khoan_dau_tu_giu_den_ngay_dao_han"
## [11] "cac_khoan_phai_thu"
## [12] "phai_thu_khach_hang"
## [13] "tra_truoc_nguoi_ban"
## [14] "phai_thu_noi_bo"
## [15] "phai_thu_ve_xdcb"
## [16] "phai_thu_ve_cho_vay_ngan_han"
## [17] "phai_thu_khac"
## [18] "du_phong_no_kho_doi"
## [19] "tai_san_thieu_cho_xu_ly"
## [20] "hang_ton_kho_rong"
## [21] "hang_ton_kho"
## [22] "du_phong_giam_gia_htk"
## [23] "tai_san_luu_dong_khac_23"
## [24] "tra_truoc_ngan_han"
## [25] "thue_vat_phai_thu"
## [26] "phai_thu_thue_khac"
## [27] "giao_dich_mua_ban_lai_trai_phieu_chinh_phu_27"
## [28] "tai_san_luu_dong_khac_28"
## [29] "tai_san_dai_han"
## [30] "phai_thu_dai_han"
## [31] "phai_thu_khach_hang_dai_han"
## [32] "tra_truoc_nguoi_ban_dai_han"
## [33] "von_kinh_doanh_o_cac_don_vi_truc_thuoc"
## [34] "phai_thu_noi_bo_dai_han"
## [35] "phai_thu_ve_cho_vay_dai_han"
## [36] "phai_thu_dai_han_khac"
## [37] "du_phong_phai_thu_dai_han"
## [38] "tai_san_co_dinh"
## [39] "gtcl_tscd_huu_hinh"
## [40] "nguyen_gia_tscd_huu_hinh"
## [41] "khau_hao_luy_ke_tscd_huu_hinh"
## [42] "gtcl_tai_san_thue_tai_chinh"
## [43] "nguyen_gia_tai_san_thue_tai_chinh"
## [44] "khau_hao_luy_ke_tai_san_thue_tai_chinh"
## [45] "gtcl_tai_san_co_dinh_vo_hinh"
## [46] "nguyen_gia_tscd_vo_hinh"
## [47] "khau_hao_luy_ke_tscd_vo_hinh"
## [48] "bat_dong_san_dau_tu"
## [49] "nguyen_gia_tai_san_dau_tu"
## [50] "khau_hao_luy_ke_tai_san_dau_tu"
## [51] "tai_san_do_dang_dai_han"
## [52] "chi_phi_san_xuat_kinh_doanh_do_dang_dai_han"
## [53] "xay_dung_co_ban_do_dang"
## [54] "dau_tu_dai_han"
## [55] "dau_tu_vao_cac_cong_ty_con"
## [56] "dau_tu_vao_cong_ty_lien_doanh"
## [57] "dau_tu_dai_han_khac"
## [58] "du_phong_giam_gia_dau_tu_dai_han"
## [59] "dau_tu_nam_giu_den_ngay_dao_han"
## [60] "tai_san_dai_han_khac"
## [61] "tra_truoc_dai_han"
## [62] "thue_thu_nhap_hoan_lai_phai_thu"
## [63] "thiet_bi_vat_tu_phu_tung_thay_the_dai_han"
## [64] "cac_tai_san_dai_han_khac"
## [65] "loi_the_thuong_mai"
## [66] "no_phai_tra"
## [67] "no_ngan_han"
## [68] "phai_tra_nguoi_ban"
## [69] "nguoi_mua_tra_tien_truoc"
## [70] "thue_va_cac_khoan_phai_tra_nha_nuoc"
## [71] "phai_tra_nguoi_lao_dong"
## [72] "chi_phi_phai_tra"
## [73] "phai_tra_noi_bo"
## [74] "phai_tra_ve_xay_dung_co_ban"
## [75] "doanh_thu_chua_thuc_hien_ngan_han"
## [76] "phai_tra_khac"
## [77] "vay_ngan_han"
## [78] "du_phong_cac_khoan_phai_tra_ngan_han"
## [79] "quy_khen_thuong_phuc_loi"
## [80] "quy_binh_on_gia"
## [81] "giao_dich_mua_ban_lai_trai_phieu_chinh_phu_81"
## [82] "no_dai_han"
## [83] "phai_tra_nha_cung_cap_dai_han"
## [84] "nguoi_mua_tra_tien_truoc_dai_han"
## [85] "chi_phi_phai_tra_dai_han"
## [86] "phai_tra_noi_bo_ve_von_kinh_doanh"
## [87] "phai_tra_noi_bo_dai_han"
## [88] "doanh_thu_chua_thuc_hien"
## [89] "phai_tra_dai_han_khac"
## [90] "vay_dai_han"
## [91] "trai_phieu_chuyen_doi"
## [92] "co_phieu_uu_dai_92"
## [93] "thue_thu_nhap_hoan_lai_phai_tra"
## [94] "du_phong_tro_cap_thoi_viec"
## [95] "du_phong_cac_khoan_cong_no_dai_han"
## [96] "quy_phat_trien_khoa_hoc_cong_nghe"
## [97] "von_chu_so_huu"
## [98] "von_va_cac_quy"
## [99] "von_gop"
## [100] "co_phieu_pho_thong"
## [101] "co_phieu_uu_dai_101"
## [102] "thang_du_von_co_phan"
## [103] "quyen_chon_chuyen_doi_trai_phieu"
## [104] "von_khac"
## [105] "co_phieu_quy"
## [106] "chenh_lech_danh_gia_lai_tai_san"
## [107] "chenh_lech_ty_gia"
## [108] "quy_dau_tu_va_phat_trien"
## [109] "quy_ho_tro_sap_xep_doanh_nghiep"
## [110] "quy_du_phong_tai_chinh"
## [111] "quy_khac"
## [112] "lai_chua_phan_phoi"
## [113] "lnst_chua_phan_phoi_luy_ke_den_cuoi_ky_truoc"
## [114] "lnst_chua_phan_phoi_ky_nay"
## [115] "loi_ich_co_dong_khong_kiem_soat"
## [116] "von_ngan_sach_nha_nuoc_va_quy_khac"
## [117] "quy_khen_thuong_phuc_loi_truoc_2010"
## [118] "von_ngan_sach_nha_nuoc"
## [119] "nguon_kinh_phi_da_hinh_thanh_tscd"
## [120] "loi_ich_cua_co_dong_thieu_so_120"
## [121] "tong_cong_nguon_von"
## [122] "doanh_so"
## [123] "cac_khoan_giam_tru"
## [124] "doanh_so_thuan"
## [125] "gia_von_hang_ban"
## [126] "lai_gop"
## [127] "thu_nhap_tai_chinh"
## [128] "chi_phi_tai_chinh"
## [129] "trong_do_chi_phi_lai_vay"
## [130] "lai_lo_tu_cong_ty_lien_doanh"
## [131] "chi_phi_ban_hang"
## [132] "chi_phi_quan_ly_doanh_nghiep"
## [133] "lai_lo_tu_hoat_dong_kinh_doanh"
## [134] "thu_nhap_khac"
## [135] "chi_phi_khac"
## [136] "thu_nhap_khac_rong"
## [137] "lai_lo_tu_cong_ty_lien_doanh_tu_nam_2015"
## [138] "lai_lo_rong_truoc_thue"
## [139] "thue_thu_nhap_doanh_nghiep_hien_thoi"
## [140] "thue_thu_nhap_doanh_nghiep_hoan_lai"
## [141] "chi_phi_thue_thu_nhap_doanh_nghiep"
## [142] "lai_lo_thuan_sau_thue"
## [143] "loi_ich_cua_co_dong_thieu_so_143"
## [144] "loi_nhuan_cua_co_dong_cua_cong_ty_me"
## [145] "lai_co_ban_tren_co_phieu"
## [146] "lai_tren_co_phieu_pha_loang"
## [147] "ebit"
## [148] "ebitda"
## [149] "luu_chuyen_tien_thuan_tu_cac_hoat_dong_san_xuat_kinh_doanh"
## [150] "lai_lo_truoc_nhung_thay_doi_von_luu_dong"
## [151] "lai_truoc_thue"
## [152] "khau_hao_tscd"
## [153] "phan_bo_loi_the_thuong_mai"
## [154] "chi_phi_du_phong"
## [155] "lai_lo_chenh_lech_ty_gia_chua_thuc_hien"
## [156] "lai_lo_tu_thanh_ly_tai_san_co_dinh"
## [157] "lai_lo_tu_hoat_dong_dau_tu"
## [158] "chi_phi_lai_vay"
## [159] "thu_lai_va_co_tuc"
## [160] "cac_khoan_dieu_chinh_khac"
## [161] "tang_giam_cac_khoan_phai_thu"
## [162] "tang_giam_hang_ton_kho"
## [163] "tang_giam_cac_khoan_phai_tra"
## [164] "tang_giam_chi_phi_tra_truoc"
## [165] "tang_giam_chung_khoan_kinh_doanh"
## [166] "chi_phi_lai_vay_da_tra"
## [167] "thue_thu_nhap_doanh_nghiep_da_tra"
## [168] "tien_thu_khac_tu_cac_hoat_dong_kinh_doanh"
## [169] "tien_chi_khac_tu_cac_hoat_dong_kinh_doanh"
## [170] "luu_chuyen_tien_te_rong_tu_hoat_dong_dau_tu"
## [171] "tien_mua_tai_san_co_dinh_va_cac_tai_san_dai_han_khac"
## [172] "tien_thu_duoc_tu_thanh_ly_tai_san_co_dinh"
## [173] "tien_cho_vay_hoac_mua_cong_cu_no"
## [174] "tien_thu_tu_cho_vay_hoac_thu_tu_phat_hanh_cong_cu_no"
## [175] "dau_tu_vao_cac_doanh_nghiep_khac"
## [176] "tien_thu_tu_viec_ban_cac_khoan_dau_tu_vao_cac_doanh_nghiep_khac"
## [177] "co_tuc_va_tien_lai_nhan_duoc"
## [178] "luu_chuyen_tien_te_tu_hoat_dong_tai_chinh"
## [179] "tien_thu_tu_phat_hanh_co_phieu_va_von_gop"
## [180] "chi_tra_cho_viec_mua_lai_tra_lai_co_phieu"
## [181] "tien_thu_duoc_cac_khoan_di_vay"
## [182] "tien_tra_cac_khoan_di_vay"
## [183] "tien_thanh_toan_von_goc_di_thue_tai_chinh"
## [184] "co_tuc_da_tra"
## [185] "tien_lai_da_nhan"
## [186] "luu_chuyen_tien_thuan_trong_ky"
## [187] "tien_va_tuong_duong_tien_dau_ky"
## [188] "anh_huong_cua_chenh_lech_ty_gia"
## [189] "tien_va_tuong_duong_tien_cuoi_ky"
Hàm names() liệt kê toàn bộ tên biến (cột) hiện có. ### 1.5 In kích thước dữ liệu
dim(data_full)
## [1] 10 189
Dim kiểm tra kích thước dữ liệu, có 10 hàng (quan sát) và 189 cột (biến).
str(data_full)
## tibble [10 × 189] (S3: tbl_df/tbl/data.frame)
## $ x1 : chr [1:10] "2015" "2016" "2017" "2018" ...
## $ tong_tai_san : num [1:10] 5.09e+12 5.88e+12 6.08e+12 6.83e+12 8.20e+12 ...
## $ tai_san_ngan_han : num [1:10] 3.21e+12 4.18e+12 4.81e+12 5.63e+12 7.13e+12 ...
## $ tien_va_tuong_duong_tien : num [1:10] 6.45e+10 1.79e+11 2.03e+11 7.35e+11 5.94e+11 ...
## $ tien : num [1:10] 4.36e+10 1.79e+11 1.24e+11 4.00e+11 4.75e+11 ...
## $ cac_khoan_tuong_duong_tien : num [1:10] 2.10e+10 5.00e+07 7.87e+10 3.35e+11 1.19e+11 ...
## $ gia_tri_thuan_dau_tu_ngan_han : num [1:10] 0.00 4.00e+10 4.07e+10 8.00e+08 2.25e+11 ...
## $ dau_tu_ngan_han : num [1:10] 0 0 0 0 0 0 0 0 0 0
## $ du_phong_dau_tu_ngan_han : num [1:10] 0 0 0 0 0 0 0 0 0 0
## $ chung_khoan_dau_tu_giu_den_ngay_dao_han : num [1:10] 0.00 4.00e+10 4.07e+10 8.00e+08 2.25e+11 ...
## $ cac_khoan_phai_thu : num [1:10] 6.76e+11 1.05e+12 9.76e+11 1.70e+12 1.96e+12 ...
## $ phai_thu_khach_hang : num [1:10] 4.96e+11 7.14e+11 7.03e+11 1.02e+12 9.41e+11 ...
## $ tra_truoc_nguoi_ban : num [1:10] 7.14e+10 2.04e+11 4.86e+10 2.80e+11 2.46e+11 ...
## $ phai_thu_noi_bo : num [1:10] 0 0 0 0 0 0 0 0 0 0
## $ phai_thu_ve_xdcb : num [1:10] 0 0 0 0 0 0 0 0 0 0
## $ phai_thu_ve_cho_vay_ngan_han : num [1:10] 4.00e+09 3.07e+10 3.75e+10 1.00e+10 7.67e+10 ...
## $ phai_thu_khac : num [1:10] 1.31e+11 1.28e+11 2.07e+11 4.10e+11 7.07e+11 ...
## $ du_phong_no_kho_doi : num [1:10] -2.63e+10 -2.92e+10 -2.00e+10 -2.28e+10 -1.51e+10 ...
## $ tai_san_thieu_cho_xu_ly : num [1:10] 30846447 34403830 53098990 59203748 10783893 ...
## $ hang_ton_kho_rong : num [1:10] 2.44e+12 2.86e+12 3.54e+12 3.13e+12 4.19e+12 ...
## $ hang_ton_kho : num [1:10] 2.44e+12 2.86e+12 3.54e+12 3.15e+12 4.20e+12 ...
## $ du_phong_giam_gia_htk : num [1:10] -4.50e+08 -5.99e+08 0.00 -1.47e+10 -9.68e+09 ...
## $ tai_san_luu_dong_khac_23 : num [1:10] 3.35e+10 5.76e+10 5.18e+10 6.65e+10 1.63e+11 ...
## $ tra_truoc_ngan_han : num [1:10] 8.75e+09 4.24e+10 4.73e+10 6.20e+10 1.42e+11 ...
## $ thue_vat_phai_thu : num [1:10] 1.82e+10 5.24e+09 1.32e+09 1.88e+09 3.49e+09 ...
## $ phai_thu_thue_khac : num [1:10] 6.61e+09 9.92e+09 3.16e+09 2.61e+09 1.76e+10 ...
## $ giao_dich_mua_ban_lai_trai_phieu_chinh_phu_27 : num [1:10] 0 0 0 0 0 0 0 0 0 0
## $ tai_san_luu_dong_khac_28 : num [1:10] 0 0 0 0 0 0 0 0 0 0
## $ tai_san_dai_han : num [1:10] 1.88e+12 1.69e+12 1.27e+12 1.20e+12 1.07e+12 ...
## $ phai_thu_dai_han : num [1:10] 3.18e+11 2.98e+11 2.92e+11 9.90e+10 8.46e+10 ...
## $ phai_thu_khach_hang_dai_han : num [1:10] 1.67e+11 1.69e+11 1.69e+11 8.32e+09 8.32e+09 ...
## $ tra_truoc_nguoi_ban_dai_han : num [1:10] 0 0 0 0 0 0 0 0 0 0
## $ von_kinh_doanh_o_cac_don_vi_truc_thuoc : num [1:10] 0 0 0 0 0 0 0 0 0 0
## $ phai_thu_noi_bo_dai_han : num [1:10] 0 0 0 0 0 0 0 0 0 0
## $ phai_thu_ve_cho_vay_dai_han : num [1:10] 6.21e+10 4.07e+10 3.43e+10 3.54e+09 0.00 ...
## $ phai_thu_dai_han_khac : num [1:10] 8.87e+10 8.88e+10 8.89e+10 8.71e+10 8.46e+10 ...
## $ du_phong_phai_thu_dai_han : num [1:10] 0.00 0.00 0.00 0.00 -8.32e+09 ...
## $ tai_san_co_dinh : num [1:10] 2.46e+11 2.59e+11 2.32e+11 3.60e+11 3.34e+11 ...
## $ gtcl_tscd_huu_hinh : num [1:10] 2.35e+11 2.47e+11 2.14e+11 3.40e+11 3.14e+11 ...
## $ nguyen_gia_tscd_huu_hinh : num [1:10] 4.23e+11 4.83e+11 4.51e+11 6.86e+11 6.11e+11 ...
## $ khau_hao_luy_ke_tscd_huu_hinh : num [1:10] -1.88e+11 -2.36e+11 -2.37e+11 -3.46e+11 -2.97e+11 ...
## $ gtcl_tai_san_thue_tai_chinh : num [1:10] 0 0 0 0 0 0 0 0 0 0
## $ nguyen_gia_tai_san_thue_tai_chinh : num [1:10] 0 0 0 0 0 0 0 0 0 0
## $ khau_hao_luy_ke_tai_san_thue_tai_chinh : num [1:10] 0 0 0 0 0 0 0 0 0 0
## $ gtcl_tai_san_co_dinh_vo_hinh : num [1:10] 1.07e+10 1.18e+10 1.73e+10 2.00e+10 1.97e+10 ...
## $ nguyen_gia_tscd_vo_hinh : num [1:10] 1.14e+10 1.26e+10 1.82e+10 2.11e+10 2.02e+10 ...
## $ khau_hao_luy_ke_tscd_vo_hinh : num [1:10] -7.44e+08 -8.01e+08 -8.57e+08 -1.11e+09 -5.40e+08 ...
## $ bat_dong_san_dau_tu : num [1:10] 1.24e+11 1.21e+11 1.18e+11 1.60e+11 1.56e+11 ...
## $ nguyen_gia_tai_san_dau_tu : num [1:10] 1.44e+11 1.44e+11 1.44e+11 1.90e+11 1.89e+11 ...
## $ khau_hao_luy_ke_tai_san_dau_tu : num [1:10] -2.05e+10 -2.34e+10 -2.62e+10 -2.96e+10 -3.34e+10 ...
## $ tai_san_do_dang_dai_han : num [1:10] 7.80e+10 6.88e+10 6.80e+10 9.09e+10 8.94e+10 ...
## $ chi_phi_san_xuat_kinh_doanh_do_dang_dai_han : num [1:10] 0 0 0 0 0 ...
## $ xay_dung_co_ban_do_dang : num [1:10] 0 0 0 0 0 0 0 0 0 0
## $ dau_tu_dai_han : num [1:10] 1.07e+12 8.95e+11 5.34e+11 4.03e+11 3.19e+11 ...
## $ dau_tu_vao_cac_cong_ty_con : num [1:10] 0 0 0 0 0 0 0 0 0 0
## $ dau_tu_vao_cong_ty_lien_doanh : num [1:10] 8.09e+11 7.51e+11 2.45e+11 1.72e+11 1.93e+11 ...
## $ dau_tu_dai_han_khac : num [1:10] 2.22e+11 1.51e+11 3.01e+11 2.48e+11 1.19e+11 ...
## $ du_phong_giam_gia_dau_tu_dai_han : num [1:10] -7.85e+09 -7.00e+09 -2.84e+10 -2.88e+10 -2.03e+10 ...
## $ dau_tu_nam_giu_den_ngay_dao_han : num [1:10] 4.20e+10 0.00 1.60e+10 1.22e+10 2.72e+10 ...
## $ tai_san_dai_han_khac : num [1:10] 4.70e+10 5.19e+10 3.00e+10 8.54e+10 8.37e+10 ...
## $ tra_truoc_dai_han : num [1:10] 2.54e+10 3.09e+10 2.55e+10 3.18e+10 2.39e+10 ...
## $ thue_thu_nhap_hoan_lai_phai_thu : num [1:10] 2.16e+10 2.10e+10 4.45e+09 4.36e+09 1.55e+10 ...
## $ thiet_bi_vat_tu_phu_tung_thay_the_dai_han : num [1:10] 0 0 0 0 0 0 0 0 0 0
## $ cac_tai_san_dai_han_khac : num [1:10] 0 0 0 0 0 0 0 0 0 0
## $ loi_the_thuong_mai : num [1:10] 0 0 0 0 0 0 0 0 0 0
## $ no_phai_tra : num [1:10] 2.43e+12 3.08e+12 3.19e+12 3.61e+12 4.19e+12 ...
## $ no_ngan_han : num [1:10] 9.96e+11 1.30e+12 1.61e+12 3.00e+12 3.27e+12 ...
## $ phai_tra_nguoi_ban : num [1:10] 1.14e+11 1.60e+11 2.14e+11 2.70e+11 3.26e+11 ...
## $ nguoi_mua_tra_tien_truoc : num [1:10] 2.86e+11 5.14e+11 7.60e+11 1.02e+12 1.73e+12 ...
## $ thue_va_cac_khoan_phai_tra_nha_nuoc : num [1:10] 9.62e+09 3.62e+10 4.20e+10 8.88e+10 2.14e+11 ...
## $ phai_tra_nguoi_lao_dong : num [1:10] 1.90e+10 2.12e+10 2.31e+10 2.64e+10 2.15e+10 ...
## $ chi_phi_phai_tra : num [1:10] 7.81e+10 9.57e+10 9.56e+10 8.19e+10 1.71e+10 ...
## $ phai_tra_noi_bo : num [1:10] 0 0 0 0 0 0 0 0 0 0
## $ phai_tra_ve_xay_dung_co_ban : num [1:10] 0 0 0 0 0 0 0 0 0 0
## $ doanh_thu_chua_thuc_hien_ngan_han : num [1:10] 3.49e+09 5.46e+09 3.37e+09 3.54e+09 4.83e+10 ...
## $ phai_tra_khac : num [1:10] 1.75e+11 1.63e+11 1.07e+11 3.11e+11 3.49e+11 ...
## $ vay_ngan_han : num [1:10] 3.10e+11 3.07e+11 3.64e+11 1.19e+12 5.48e+11 ...
## $ du_phong_cac_khoan_phai_tra_ngan_han : num [1:10] 2e+08 0e+00 0e+00 0e+00 0e+00 ...
## $ quy_khen_thuong_phuc_loi : num [1:10] 7.26e+06 -3.02e+09 -1.97e+09 3.26e+09 1.38e+10 ...
## $ quy_binh_on_gia : num [1:10] 0 0 0 0 0 0 0 0 0 0
## $ giao_dich_mua_ban_lai_trai_phieu_chinh_phu_81 : num [1:10] 0 0 0 0 0 0 0 0 0 0
## $ no_dai_han : num [1:10] 1.44e+12 1.78e+12 1.58e+12 6.15e+11 9.18e+11 ...
## $ phai_tra_nha_cung_cap_dai_han : num [1:10] 0 0 0 0 0 0 0 0 0 0
## $ nguoi_mua_tra_tien_truoc_dai_han : num [1:10] 0 0 0 0 0 0 0 0 0 0
## $ chi_phi_phai_tra_dai_han : num [1:10] 0 0 0 0 0 0 0 0 0 0
## $ phai_tra_noi_bo_ve_von_kinh_doanh : num [1:10] 0 0 0 0 0 0 0 0 0 0
## $ phai_tra_noi_bo_dai_han : num [1:10] 0 0 0 0 0 0 0 0 0 0
## $ doanh_thu_chua_thuc_hien : num [1:10] 3.13e+11 3.10e+11 1.57e+11 1.54e+11 1.50e+11 ...
## $ phai_tra_dai_han_khac : num [1:10] 2.16e+09 1.41e+09 1.09e+09 1.44e+09 2.04e+10 ...
## $ vay_dai_han : num [1:10] 1.08e+12 1.43e+12 1.40e+12 4.24e+11 7.30e+11 ...
## $ trai_phieu_chuyen_doi : num [1:10] 0.00 0.00 0.00 0.00 0.00 9.75e+09 0.00 0.00 0.00 0.00
## $ co_phieu_uu_dai_92 : logi [1:10] NA NA NA NA NA NA ...
## $ thue_thu_nhap_hoan_lai_phai_tra : num [1:10] 4.21e+10 3.67e+10 2.97e+10 3.52e+10 1.74e+10 ...
## $ du_phong_tro_cap_thoi_viec : num [1:10] 0 0 0 0 0 0 0 0 0 0
## $ du_phong_cac_khoan_cong_no_dai_han : num [1:10] 5.67e+08 6.45e+08 1.75e+09 1.19e+09 6.32e+08 ...
## $ quy_phat_trien_khoa_hoc_cong_nghe : num [1:10] 0 0 0 0 0 0 0 0 0 0
## $ von_chu_so_huu : num [1:10] 2.66e+12 2.80e+12 2.89e+12 3.22e+12 4.01e+12 ...
## $ von_va_cac_quy : num [1:10] 2.66e+12 2.80e+12 2.89e+12 3.22e+12 4.01e+12 ...
## $ von_gop : num [1:10] 2.15e+12 2.38e+12 2.38e+12 2.52e+12 3.15e+12 ...
## [list output truncated]
Hàm str() trong R có nghĩa là “structure” (cấu trúc), dùng để hiển
thị cấu trúc tổng quát của một đối tượng dữ liệu (numeric, character,
factor, date…)
### 1.7 Kiểm tra số dòng trùng lặp
sum(duplicated(data_full))
## [1] 0
Hàm duplicated() phát hiện các dòng trùng lặp hoàn toàn.
sum() đếm số dòng bị trùng.
colSums(is.na(data_full))
## x1
## 0
## tong_tai_san
## 0
## tai_san_ngan_han
## 0
## tien_va_tuong_duong_tien
## 0
## tien
## 0
## cac_khoan_tuong_duong_tien
## 0
## gia_tri_thuan_dau_tu_ngan_han
## 0
## dau_tu_ngan_han
## 0
## du_phong_dau_tu_ngan_han
## 0
## chung_khoan_dau_tu_giu_den_ngay_dao_han
## 0
## cac_khoan_phai_thu
## 0
## phai_thu_khach_hang
## 0
## tra_truoc_nguoi_ban
## 0
## phai_thu_noi_bo
## 0
## phai_thu_ve_xdcb
## 0
## phai_thu_ve_cho_vay_ngan_han
## 0
## phai_thu_khac
## 0
## du_phong_no_kho_doi
## 0
## tai_san_thieu_cho_xu_ly
## 0
## hang_ton_kho_rong
## 0
## hang_ton_kho
## 0
## du_phong_giam_gia_htk
## 0
## tai_san_luu_dong_khac_23
## 0
## tra_truoc_ngan_han
## 0
## thue_vat_phai_thu
## 0
## phai_thu_thue_khac
## 0
## giao_dich_mua_ban_lai_trai_phieu_chinh_phu_27
## 0
## tai_san_luu_dong_khac_28
## 0
## tai_san_dai_han
## 0
## phai_thu_dai_han
## 0
## phai_thu_khach_hang_dai_han
## 0
## tra_truoc_nguoi_ban_dai_han
## 0
## von_kinh_doanh_o_cac_don_vi_truc_thuoc
## 0
## phai_thu_noi_bo_dai_han
## 0
## phai_thu_ve_cho_vay_dai_han
## 0
## phai_thu_dai_han_khac
## 0
## du_phong_phai_thu_dai_han
## 0
## tai_san_co_dinh
## 0
## gtcl_tscd_huu_hinh
## 0
## nguyen_gia_tscd_huu_hinh
## 0
## khau_hao_luy_ke_tscd_huu_hinh
## 0
## gtcl_tai_san_thue_tai_chinh
## 0
## nguyen_gia_tai_san_thue_tai_chinh
## 0
## khau_hao_luy_ke_tai_san_thue_tai_chinh
## 0
## gtcl_tai_san_co_dinh_vo_hinh
## 0
## nguyen_gia_tscd_vo_hinh
## 0
## khau_hao_luy_ke_tscd_vo_hinh
## 0
## bat_dong_san_dau_tu
## 0
## nguyen_gia_tai_san_dau_tu
## 0
## khau_hao_luy_ke_tai_san_dau_tu
## 0
## tai_san_do_dang_dai_han
## 0
## chi_phi_san_xuat_kinh_doanh_do_dang_dai_han
## 0
## xay_dung_co_ban_do_dang
## 0
## dau_tu_dai_han
## 0
## dau_tu_vao_cac_cong_ty_con
## 0
## dau_tu_vao_cong_ty_lien_doanh
## 0
## dau_tu_dai_han_khac
## 0
## du_phong_giam_gia_dau_tu_dai_han
## 0
## dau_tu_nam_giu_den_ngay_dao_han
## 0
## tai_san_dai_han_khac
## 0
## tra_truoc_dai_han
## 0
## thue_thu_nhap_hoan_lai_phai_thu
## 0
## thiet_bi_vat_tu_phu_tung_thay_the_dai_han
## 0
## cac_tai_san_dai_han_khac
## 0
## loi_the_thuong_mai
## 0
## no_phai_tra
## 0
## no_ngan_han
## 0
## phai_tra_nguoi_ban
## 0
## nguoi_mua_tra_tien_truoc
## 0
## thue_va_cac_khoan_phai_tra_nha_nuoc
## 0
## phai_tra_nguoi_lao_dong
## 0
## chi_phi_phai_tra
## 0
## phai_tra_noi_bo
## 0
## phai_tra_ve_xay_dung_co_ban
## 0
## doanh_thu_chua_thuc_hien_ngan_han
## 0
## phai_tra_khac
## 0
## vay_ngan_han
## 0
## du_phong_cac_khoan_phai_tra_ngan_han
## 0
## quy_khen_thuong_phuc_loi
## 0
## quy_binh_on_gia
## 0
## giao_dich_mua_ban_lai_trai_phieu_chinh_phu_81
## 0
## no_dai_han
## 0
## phai_tra_nha_cung_cap_dai_han
## 0
## nguoi_mua_tra_tien_truoc_dai_han
## 0
## chi_phi_phai_tra_dai_han
## 0
## phai_tra_noi_bo_ve_von_kinh_doanh
## 0
## phai_tra_noi_bo_dai_han
## 0
## doanh_thu_chua_thuc_hien
## 0
## phai_tra_dai_han_khac
## 0
## vay_dai_han
## 0
## trai_phieu_chuyen_doi
## 0
## co_phieu_uu_dai_92
## 10
## thue_thu_nhap_hoan_lai_phai_tra
## 0
## du_phong_tro_cap_thoi_viec
## 0
## du_phong_cac_khoan_cong_no_dai_han
## 0
## quy_phat_trien_khoa_hoc_cong_nghe
## 0
## von_chu_so_huu
## 0
## von_va_cac_quy
## 0
## von_gop
## 0
## co_phieu_pho_thong
## 0
## co_phieu_uu_dai_101
## 0
## thang_du_von_co_phan
## 0
## quyen_chon_chuyen_doi_trai_phieu
## 0
## von_khac
## 0
## co_phieu_quy
## 0
## chenh_lech_danh_gia_lai_tai_san
## 0
## chenh_lech_ty_gia
## 0
## quy_dau_tu_va_phat_trien
## 0
## quy_ho_tro_sap_xep_doanh_nghiep
## 0
## quy_du_phong_tai_chinh
## 0
## quy_khac
## 0
## lai_chua_phan_phoi
## 0
## lnst_chua_phan_phoi_luy_ke_den_cuoi_ky_truoc
## 0
## lnst_chua_phan_phoi_ky_nay
## 0
## loi_ich_co_dong_khong_kiem_soat
## 0
## von_ngan_sach_nha_nuoc_va_quy_khac
## 0
## quy_khen_thuong_phuc_loi_truoc_2010
## 0
## von_ngan_sach_nha_nuoc
## 0
## nguon_kinh_phi_da_hinh_thanh_tscd
## 0
## loi_ich_cua_co_dong_thieu_so_120
## 0
## tong_cong_nguon_von
## 0
## doanh_so
## 0
## cac_khoan_giam_tru
## 0
## doanh_so_thuan
## 0
## gia_von_hang_ban
## 0
## lai_gop
## 0
## thu_nhap_tai_chinh
## 0
## chi_phi_tai_chinh
## 0
## trong_do_chi_phi_lai_vay
## 0
## lai_lo_tu_cong_ty_lien_doanh
## 0
## chi_phi_ban_hang
## 0
## chi_phi_quan_ly_doanh_nghiep
## 0
## lai_lo_tu_hoat_dong_kinh_doanh
## 0
## thu_nhap_khac
## 0
## chi_phi_khac
## 0
## thu_nhap_khac_rong
## 0
## lai_lo_tu_cong_ty_lien_doanh_tu_nam_2015
## 0
## lai_lo_rong_truoc_thue
## 0
## thue_thu_nhap_doanh_nghiep_hien_thoi
## 0
## thue_thu_nhap_doanh_nghiep_hoan_lai
## 0
## chi_phi_thue_thu_nhap_doanh_nghiep
## 0
## lai_lo_thuan_sau_thue
## 0
## loi_ich_cua_co_dong_thieu_so_143
## 0
## loi_nhuan_cua_co_dong_cua_cong_ty_me
## 0
## lai_co_ban_tren_co_phieu
## 0
## lai_tren_co_phieu_pha_loang
## 0
## ebit
## 0
## ebitda
## 0
## luu_chuyen_tien_thuan_tu_cac_hoat_dong_san_xuat_kinh_doanh
## 0
## lai_lo_truoc_nhung_thay_doi_von_luu_dong
## 0
## lai_truoc_thue
## 0
## khau_hao_tscd
## 0
## phan_bo_loi_the_thuong_mai
## 0
## chi_phi_du_phong
## 0
## lai_lo_chenh_lech_ty_gia_chua_thuc_hien
## 0
## lai_lo_tu_thanh_ly_tai_san_co_dinh
## 0
## lai_lo_tu_hoat_dong_dau_tu
## 0
## chi_phi_lai_vay
## 0
## thu_lai_va_co_tuc
## 0
## cac_khoan_dieu_chinh_khac
## 0
## tang_giam_cac_khoan_phai_thu
## 0
## tang_giam_hang_ton_kho
## 0
## tang_giam_cac_khoan_phai_tra
## 0
## tang_giam_chi_phi_tra_truoc
## 0
## tang_giam_chung_khoan_kinh_doanh
## 0
## chi_phi_lai_vay_da_tra
## 0
## thue_thu_nhap_doanh_nghiep_da_tra
## 0
## tien_thu_khac_tu_cac_hoat_dong_kinh_doanh
## 0
## tien_chi_khac_tu_cac_hoat_dong_kinh_doanh
## 0
## luu_chuyen_tien_te_rong_tu_hoat_dong_dau_tu
## 0
## tien_mua_tai_san_co_dinh_va_cac_tai_san_dai_han_khac
## 0
## tien_thu_duoc_tu_thanh_ly_tai_san_co_dinh
## 0
## tien_cho_vay_hoac_mua_cong_cu_no
## 0
## tien_thu_tu_cho_vay_hoac_thu_tu_phat_hanh_cong_cu_no
## 0
## dau_tu_vao_cac_doanh_nghiep_khac
## 0
## tien_thu_tu_viec_ban_cac_khoan_dau_tu_vao_cac_doanh_nghiep_khac
## 0
## co_tuc_va_tien_lai_nhan_duoc
## 0
## luu_chuyen_tien_te_tu_hoat_dong_tai_chinh
## 0
## tien_thu_tu_phat_hanh_co_phieu_va_von_gop
## 0
## chi_tra_cho_viec_mua_lai_tra_lai_co_phieu
## 0
## tien_thu_duoc_cac_khoan_di_vay
## 0
## tien_tra_cac_khoan_di_vay
## 0
## tien_thanh_toan_von_goc_di_thue_tai_chinh
## 0
## co_tuc_da_tra
## 0
## tien_lai_da_nhan
## 0
## luu_chuyen_tien_thuan_trong_ky
## 0
## tien_va_tuong_duong_tien_dau_ky
## 0
## anh_huong_cua_chenh_lech_ty_gia
## 0
## tien_va_tuong_duong_tien_cuoi_ky
## 0
is.na() kiểm tra từng ô có bị thiếu dữ liệu không.
colSums() cộng theo cột, cho biết số lượng NA của từng biến.
summary(data_full)
## x1 tong_tai_san tai_san_ngan_han
## Length:10 Min. :5.089e+12 Min. :3.211e+12
## Class :character 1st Qu.:6.270e+12 1st Qu.:5.016e+12
## Mode :character Median :1.001e+13 Median :7.215e+12
## Mean :1.109e+13 Mean :8.432e+12
## 3rd Qu.:1.631e+13 3rd Qu.:1.113e+13
## Max. :1.854e+13 Max. :1.599e+13
## tien_va_tuong_duong_tien tien cac_khoan_tuong_duong_tien
## Min. :6.455e+10 Min. :4.356e+10 Min. :5.000e+07
## 1st Qu.:2.137e+11 1st Qu.:1.937e+11 1st Qu.:1.302e+10
## Median :4.984e+11 Median :3.349e+11 Median :9.630e+10
## Mean :6.517e+11 Mean :4.817e+11 Mean :1.700e+11
## 3rd Qu.:7.726e+11 3rd Qu.:3.977e+11 3rd Qu.:2.810e+11
## Max. :2.307e+12 Max. :2.297e+12 Max. :6.195e+11
## gia_tri_thuan_dau_tu_ngan_han dau_tu_ngan_han du_phong_dau_tu_ngan_han
## Min. :0.000e+00 Min. :0 Min. :0
## 1st Qu.:4.017e+10 1st Qu.:0 1st Qu.:0
## Median :1.569e+11 Median :0 Median :0
## Mean :4.451e+11 Mean :0 Mean :0
## 3rd Qu.:2.179e+11 3rd Qu.:0 3rd Qu.:0
## Max. :2.738e+12 Max. :0 Max. :0
## chung_khoan_dau_tu_giu_den_ngay_dao_han cac_khoan_phai_thu
## Min. :0.000e+00 Min. :6.762e+11
## 1st Qu.:4.017e+10 1st Qu.:1.210e+12
## Median :1.569e+11 Median :2.105e+12
## Mean :4.451e+11 Mean :2.703e+12
## 3rd Qu.:2.179e+11 3rd Qu.:4.111e+12
## Max. :2.738e+12 Max. :5.944e+12
## phai_thu_khach_hang tra_truoc_nguoi_ban phai_thu_noi_bo phai_thu_ve_xdcb
## Min. :4.964e+11 Min. :2.939e+10 Min. :0 Min. :0
## 1st Qu.:7.708e+11 1st Qu.:1.044e+11 1st Qu.:0 1st Qu.:0
## Median :1.029e+12 Median :2.105e+11 Median :0 Median :0
## Mean :9.578e+11 Mean :1.740e+11 Mean :0 Mean :0
## 3rd Qu.:1.153e+12 3rd Qu.:2.216e+11 3rd Qu.:0 3rd Qu.:0
## Max. :1.219e+12 Max. :2.802e+11 Max. :0 Max. :0
## phai_thu_ve_cho_vay_ngan_han phai_thu_khac du_phong_no_kho_doi
## Min. :4.000e+09 Min. :1.278e+11 Min. :-2.922e+10
## 1st Qu.:3.239e+10 1st Qu.:2.576e+11 1st Qu.:-2.349e+10
## Median :7.670e+10 Median :7.979e+11 Median :-2.285e+10
## Mean :1.226e+11 Mean :1.469e+12 Mean :-2.072e+10
## 3rd Qu.:2.415e+11 3rd Qu.:2.451e+12 3rd Qu.:-1.629e+10
## Max. :2.774e+11 Max. :4.548e+12 Max. :-9.744e+09
## tai_san_thieu_cho_xu_ly hang_ton_kho_rong hang_ton_kho
## Min. : 0 Min. :2.437e+12 Min. :2.437e+12
## 1st Qu.: 1320000 1st Qu.:3.234e+12 1st Qu.:3.245e+12
## Median : 6464870 Median :4.019e+12 Median :4.026e+12
## Mean :19444275 Mean :4.503e+12 Mean :4.507e+12
## 3rd Qu.:33514484 3rd Qu.:5.541e+12 3rd Qu.:5.545e+12
## Max. :59203748 Max. :8.155e+12 Max. :8.157e+12
## du_phong_giam_gia_htk tai_san_luu_dong_khac_23 tra_truoc_ngan_han
## Min. :-1.467e+10 Min. :3.355e+10 Min. :8.746e+09
## 1st Qu.:-5.543e+09 1st Qu.:5.980e+10 1st Qu.:5.098e+10
## Median :-2.434e+09 Median :1.358e+11 Median :1.181e+11
## Mean :-4.269e+09 Mean :1.298e+11 Mean :1.090e+11
## 3rd Qu.:-1.058e+09 3rd Qu.:1.972e+11 3rd Qu.:1.667e+11
## Max. : 0.000e+00 Max. :2.183e+11 Max. :1.862e+11
## thue_vat_phai_thu phai_thu_thue_khac
## Min. :1.320e+09 Min. :2.611e+09
## 1st Qu.:2.766e+09 1st Qu.:7.438e+09
## Median :4.362e+09 Median :1.243e+10
## Mean :8.499e+09 Mean :1.234e+10
## 3rd Qu.:1.399e+10 3rd Qu.:1.714e+10
## Max. :2.238e+10 Max. :2.506e+10
## giao_dich_mua_ban_lai_trai_phieu_chinh_phu_27 tai_san_luu_dong_khac_28
## Min. :0 Min. :0
## 1st Qu.:0 1st Qu.:0
## Median :0 Median :0
## Mean :0 Mean :0
## 3rd Qu.:0 3rd Qu.:0
## Max. :0 Max. :0
## tai_san_dai_han phai_thu_dai_han phai_thu_khach_hang_dai_han
## Min. :1.066e+12 Min. :8.461e+10 Min. :0.000e+00
## 1st Qu.:1.378e+12 1st Qu.:2.934e+11 1st Qu.:0.000e+00
## Median :2.216e+12 Median :6.340e+11 Median :8.318e+09
## Mean :2.654e+12 Mean :1.303e+12 Mean :5.296e+10
## 3rd Qu.:3.615e+12 3rd Qu.:2.132e+12 3rd Qu.:1.275e+11
## Max. :5.632e+12 Max. :4.110e+12 Max. :1.687e+11
## tra_truoc_nguoi_ban_dai_han von_kinh_doanh_o_cac_don_vi_truc_thuoc
## Min. :0 Min. :0
## 1st Qu.:0 1st Qu.:0
## Median :0 Median :0
## Mean :0 Mean :0
## 3rd Qu.:0 3rd Qu.:0
## Max. :0 Max. :0
## phai_thu_noi_bo_dai_han phai_thu_ve_cho_vay_dai_han phai_thu_dai_han_khac
## Min. :0 Min. :0.000e+00 Min. :8.461e+10
## 1st Qu.:0 1st Qu.:0.000e+00 1st Qu.:8.875e+10
## Median :0 Median :1.769e+09 Median :4.338e+11
## Mean :0 Mean :3.119e+10 Mean :1.220e+12
## 3rd Qu.:0 3rd Qu.:3.910e+10 3rd Qu.:2.132e+12
## Max. :0 Max. :1.712e+11 Max. :4.110e+12
## du_phong_phai_thu_dai_han tai_san_co_dinh gtcl_tscd_huu_hinh
## Min. :-8.318e+09 Min. :2.315e+11 Min. :2.142e+11
## 1st Qu.: 0.000e+00 1st Qu.:2.776e+11 1st Qu.:2.638e+11
## Median : 0.000e+00 Median :5.389e+11 Median :5.073e+11
## Mean :-1.664e+09 Mean :5.240e+11 Mean :4.954e+11
## 3rd Qu.: 0.000e+00 3rd Qu.:7.521e+11 3rd Qu.:7.199e+11
## Max. : 0.000e+00 Max. :8.421e+11 Max. :7.558e+11
## nguyen_gia_tscd_huu_hinh khau_hao_luy_ke_tscd_huu_hinh
## Min. :4.226e+11 Min. :-4.040e+11
## 1st Qu.:5.150e+11 1st Qu.:-3.499e+11
## Median :8.513e+11 Median :-3.146e+11
## Mean :8.009e+11 Mean :-3.054e+11
## 3rd Qu.:1.052e+12 3rd Qu.:-2.519e+11
## Max. :1.160e+12 Max. :-1.876e+11
## gtcl_tai_san_thue_tai_chinh nguyen_gia_tai_san_thue_tai_chinh
## Min. :0 Min. :0
## 1st Qu.:0 1st Qu.:0
## Median :0 Median :0
## Mean :0 Mean :0
## 3rd Qu.:0 3rd Qu.:0
## Max. :0 Max. :0
## khau_hao_luy_ke_tai_san_thue_tai_chinh gtcl_tai_san_co_dinh_vo_hinh
## Min. :0 Min. :1.066e+10
## 1st Qu.:0 1st Qu.:1.764e+10
## Median :0 Median :1.983e+10
## Mean :0 Mean :2.858e+10
## 3rd Qu.:0 3rd Qu.:3.224e+10
## Max. :0 Max. :8.629e+10
## nguyen_gia_tscd_vo_hinh khau_hao_luy_ke_tscd_vo_hinh bat_dong_san_dau_tu
## Min. :1.141e+10 Min. :-3.483e+09 Min. :1.038e+11
## 1st Qu.:1.847e+10 1st Qu.:-2.251e+09 1st Qu.:1.144e+11
## Median :2.066e+10 Median :-9.835e+08 Median :1.225e+11
## Mean :3.012e+10 Mean :-1.538e+09 Mean :1.314e+11
## 3rd Qu.:3.480e+10 3rd Qu.:-7.584e+08 3rd Qu.:1.549e+11
## Max. :8.978e+10 Max. :-5.399e+08 Max. :1.603e+11
## nguyen_gia_tai_san_dau_tu khau_hao_luy_ke_tai_san_dau_tu
## Min. :1.445e+11 Min. :-4.988e+10
## 1st Qu.:1.445e+11 1st Qu.:-3.997e+10
## Median :1.506e+11 Median :-3.525e+10
## Mean :1.656e+11 Mean :-3.421e+10
## 3rd Qu.:1.892e+11 3rd Qu.:-2.708e+10
## Max. :2.085e+11 Max. :-2.046e+10
## tai_san_do_dang_dai_han chi_phi_san_xuat_kinh_doanh_do_dang_dai_han
## Min. :6.800e+10 Min. :0.00e+00
## 1st Qu.:8.048e+10 1st Qu.:0.00e+00
## Median :9.019e+10 Median :0.00e+00
## Mean :9.235e+10 Mean :1.49e+08
## 3rd Qu.:1.006e+11 3rd Qu.:0.00e+00
## Max. :1.267e+11 Max. :1.49e+09
## xay_dung_co_ban_do_dang dau_tu_dai_han dau_tu_vao_cac_cong_ty_con
## Min. :0 Min. :2.993e+11 Min. :0
## 1st Qu.:0 1st Qu.:3.304e+11 1st Qu.:0
## Median :0 Median :3.515e+11 Median :0
## Mean :0 Mean :4.882e+11 Mean :0
## 3rd Qu.:0 3rd Qu.:5.010e+11 3rd Qu.:0
## Max. :0 Max. :1.066e+12 Max. :0
## dau_tu_vao_cong_ty_lien_doanh dau_tu_dai_han_khac
## Min. :1.716e+11 Min. :2.344e+09
## 1st Qu.:2.060e+11 1st Qu.:6.345e+10
## Median :2.975e+11 Median :1.191e+11
## Mean :3.562e+11 Mean :1.312e+11
## 3rd Qu.:3.125e+11 3rd Qu.:2.045e+11
## Max. :8.091e+11 Max. :3.012e+11
## du_phong_giam_gia_dau_tu_dai_han dau_tu_nam_giu_den_ngay_dao_han
## Min. :-5.579e+10 Min. :0.000e+00
## 1st Qu.:-3.676e+10 1st Qu.:1.880e+10
## Median :-2.435e+10 Median :2.950e+10
## Mean :-2.535e+10 Mean :2.614e+10
## 3rd Qu.:-1.091e+10 3rd Qu.:3.375e+10
## Max. :-6.496e+07 Max. :4.200e+10
## tai_san_dai_han_khac tra_truoc_dai_han thue_thu_nhap_hoan_lai_phai_thu
## Min. :2.998e+10 Min. :1.668e+10 Min. :4.361e+09
## 1st Qu.:5.987e+10 1st Qu.:2.546e+10 1st Qu.:1.345e+10
## Median :9.875e+10 Median :2.890e+10 Median :1.583e+10
## Mean :1.158e+11 Mean :3.195e+10 Mean :1.573e+10
## 3rd Qu.:1.723e+11 3rd Qu.:3.531e+10 3rd Qu.:2.017e+10
## Max. :2.260e+11 Max. :5.506e+10 Max. :2.827e+10
## thiet_bi_vat_tu_phu_tung_thay_the_dai_han cac_tai_san_dai_han_khac
## Min. :0 Min. :0
## 1st Qu.:0 1st Qu.:0
## Median :0 Median :0
## Mean :0 Mean :0
## 3rd Qu.:0 3rd Qu.:0
## Max. :0 Max. :0
## loi_the_thuong_mai no_phai_tra no_ngan_han phai_tra_nguoi_ban
## Min. :0 Min. :2.433e+12 Min. :9.958e+11 Min. :1.140e+11
## 1st Qu.:0 1st Qu.:3.298e+12 1st Qu.:1.955e+12 1st Qu.:2.280e+11
## Median :0 Median :5.570e+12 Median :3.608e+12 Median :3.068e+11
## Mean :0 Mean :5.910e+12 Mean :4.054e+12 Mean :3.214e+11
## 3rd Qu.:0 3rd Qu.:8.460e+12 3rd Qu.:5.658e+12 3rd Qu.:4.066e+11
## Max. :0 Max. :1.050e+13 Max. :7.962e+12 Max. :5.449e+11
## nguoi_mua_tra_tien_truoc thue_va_cac_khoan_phai_tra_nha_nuoc
## Min. :2.857e+11 Min. :9.618e+09
## 1st Qu.:8.248e+11 1st Qu.:5.369e+10
## Median :1.599e+12 Median :9.035e+10
## Mean :1.371e+12 Mean :1.219e+11
## 3rd Qu.:1.759e+12 3rd Qu.:1.810e+11
## Max. :2.426e+12 Max. :3.414e+11
## phai_tra_nguoi_lao_dong chi_phi_phai_tra phai_tra_noi_bo
## Min. :1.895e+10 Min. :1.714e+10 Min. :0
## 1st Qu.:2.193e+10 1st Qu.:7.908e+10 1st Qu.:0
## Median :2.849e+10 Median :9.567e+10 Median :0
## Mean :2.836e+10 Mean :1.415e+11 Mean :0
## 3rd Qu.:3.324e+10 3rd Qu.:1.992e+11 3rd Qu.:0
## Max. :3.967e+10 Max. :3.467e+11 Max. :0
## phai_tra_ve_xay_dung_co_ban doanh_thu_chua_thuc_hien_ngan_han
## Min. :0 Min. :3.374e+09
## 1st Qu.:0 1st Qu.:4.020e+09
## Median :0 Median :5.220e+10
## Mean :0 Mean :3.521e+10
## 3rd Qu.:0 3rd Qu.:5.663e+10
## Max. :0 Max. :6.154e+10
## phai_tra_khac vay_ngan_han du_phong_cac_khoan_phai_tra_ngan_han
## Min. :1.069e+11 Min. :3.065e+11 Min. :0.000e+00
## 1st Qu.:2.093e+11 1st Qu.:4.101e+11 1st Qu.:0.000e+00
## Median :4.661e+11 Median :6.504e+11 Median :0.000e+00
## Mean :1.136e+12 Mean :8.754e+11 Mean :5.937e+08
## 3rd Qu.:2.283e+12 3rd Qu.:1.147e+12 3rd Qu.:4.521e+08
## Max. :2.865e+12 Max. :2.150e+12 Max. :3.708e+09
## quy_khen_thuong_phuc_loi quy_binh_on_gia
## Min. :-3.023e+09 Min. :0
## 1st Qu.: 8.199e+08 1st Qu.:0
## Median : 1.578e+10 Median :0
## Mean : 2.256e+10 Mean :0
## 3rd Qu.: 4.356e+10 3rd Qu.:0
## Max. : 6.642e+10 Max. :0
## giao_dich_mua_ban_lai_trai_phieu_chinh_phu_81 no_dai_han
## Min. :0 Min. :6.154e+11
## 1st Qu.:0 1st Qu.:1.069e+12
## Median :0 Median :1.511e+12
## Mean :0 Mean :1.856e+12
## 3rd Qu.:0 3rd Qu.:2.347e+12
## Max. :0 Max. :4.505e+12
## phai_tra_nha_cung_cap_dai_han nguoi_mua_tra_tien_truoc_dai_han
## Min. :0 Min. :0
## 1st Qu.:0 1st Qu.:0
## Median :0 Median :0
## Mean :0 Mean :0
## 3rd Qu.:0 3rd Qu.:0
## Max. :0 Max. :0
## chi_phi_phai_tra_dai_han phai_tra_noi_bo_ve_von_kinh_doanh
## Min. :0 Min. :0
## 1st Qu.:0 1st Qu.:0
## Median :0 Median :0
## Mean :0 Mean :0
## 3rd Qu.:0 3rd Qu.:0
## Max. :0 Max. :0
## phai_tra_noi_bo_dai_han doanh_thu_chua_thuc_hien phai_tra_dai_han_khac
## Min. :0 Min. :1.144e+11 Min. :1.093e+09
## 1st Qu.:0 1st Qu.:1.220e+11 1st Qu.:1.622e+09
## Median :0 Median :1.519e+11 Median :1.987e+10
## Mean :0 Mean :1.743e+11 Mean :1.583e+10
## 3rd Qu.:0 3rd Qu.:1.753e+11 3rd Qu.:2.009e+10
## Max. :0 Max. :3.130e+11 Max. :5.184e+10
## vay_dai_han trai_phieu_chuyen_doi co_phieu_uu_dai_92
## Min. :4.240e+11 Min. :0.00e+00 Mode:logical
## 1st Qu.:8.591e+11 1st Qu.:0.00e+00 NA's:10
## Median :1.237e+12 Median :0.00e+00
## Mean :1.626e+12 Mean :9.75e+08
## 3rd Qu.:2.065e+12 3rd Qu.:0.00e+00
## Max. :4.295e+12 Max. :9.75e+09
## thue_thu_nhap_hoan_lai_phai_tra du_phong_tro_cap_thoi_viec
## Min. :1.741e+10 Min. :0
## 1st Qu.:2.784e+10 1st Qu.:0
## Median :3.245e+10 Median :0
## Mean :3.682e+10 Mean :0
## 3rd Qu.:4.078e+10 3rd Qu.:0
## Max. :6.436e+10 Max. :0
## du_phong_cac_khoan_cong_no_dai_han quy_phat_trien_khoa_hoc_cong_nghe
## Min. :5.666e+08 Min. :0
## 1st Qu.:7.809e+08 1st Qu.:0
## Median :2.117e+09 Median :0
## Mean :2.374e+09 Mean :0
## 3rd Qu.:2.933e+09 3rd Qu.:0
## Max. :5.692e+09 Max. :0
## von_chu_so_huu von_va_cac_quy von_gop
## Min. :2.656e+12 Min. :2.656e+12 Min. :2.145e+12
## 1st Qu.:2.973e+12 1st Qu.:2.973e+12 1st Qu.:2.418e+12
## Median :4.400e+12 Median :4.400e+12 Median :3.167e+12
## Mean :5.176e+12 Mean :5.176e+12 Mean :3.906e+12
## 3rd Qu.:7.764e+12 3rd Qu.:7.764e+12 3rd Qu.:5.824e+12
## Max. :8.041e+12 Max. :8.041e+12 Max. :6.099e+12
## co_phieu_pho_thong co_phieu_uu_dai_101 thang_du_von_co_phan
## Min. :2.145e+12 Min. :0 Min. :6.611e+10
## 1st Qu.:2.418e+12 1st Qu.:0 1st Qu.:1.016e+11
## Median :3.167e+12 Median :0 Median :2.672e+11
## Mean :3.906e+12 Mean :0 Mean :5.201e+11
## 3rd Qu.:5.824e+12 3rd Qu.:0 3rd Qu.:1.046e+12
## Max. :6.099e+12 Max. :0 Max. :1.121e+12
## quyen_chon_chuyen_doi_trai_phieu von_khac co_phieu_quy
## Min. :0 Min. :0.000e+00 Min. :0
## 1st Qu.:0 1st Qu.:0.000e+00 1st Qu.:0
## Median :0 Median :1.163e+09 Median :0
## Mean :0 Mean :4.590e+09 Mean :0
## 3rd Qu.:0 3rd Qu.:8.934e+09 3rd Qu.:0
## Max. :0 Max. :1.490e+10 Max. :0
## chenh_lech_danh_gia_lai_tai_san chenh_lech_ty_gia quy_dau_tu_va_phat_trien
## Min. :0 Min. :0 Min. :8.469e+10
## 1st Qu.:0 1st Qu.:0 1st Qu.:1.041e+11
## Median :0 Median :0 Median :1.666e+11
## Mean :0 Mean :0 Mean :1.568e+11
## 3rd Qu.:0 3rd Qu.:0 3rd Qu.:1.913e+11
## Max. :0 Max. :0 Max. :2.300e+11
## quy_ho_tro_sap_xep_doanh_nghiep quy_du_phong_tai_chinh quy_khac
## Min. :0 Min. :0 Min. :0
## 1st Qu.:0 1st Qu.:0 1st Qu.:0
## Median :0 Median :0 Median :0
## Mean :0 Mean :0 Mean :0
## 3rd Qu.:0 3rd Qu.:0 3rd Qu.:0
## Max. :0 Max. :0 Max. :0
## lai_chua_phan_phoi lnst_chua_phan_phoi_luy_ke_den_cuoi_ky_truoc
## Min. :6.607e+10 Min. :-2.719e+08
## 1st Qu.:2.244e+11 1st Qu.: 4.315e+10
## Median :3.769e+11 Median : 9.318e+10
## Mean :4.539e+11 Mean : 1.484e+11
## 3rd Qu.:5.149e+11 3rd Qu.: 2.532e+11
## Max. :1.111e+12 Max. : 4.369e+11
## lnst_chua_phan_phoi_ky_nay loi_ich_co_dong_khong_kiem_soat
## Min. :1.046e+10 Min. :4.523e+10
## 1st Qu.:1.156e+11 1st Qu.:6.525e+10
## Median :1.702e+11 Median :8.005e+10
## Mean :3.055e+11 Mean :1.348e+11
## 3rd Qu.:3.742e+11 3rd Qu.:2.347e+11
## Max. :9.862e+11 Max. :2.567e+11
## von_ngan_sach_nha_nuoc_va_quy_khac quy_khen_thuong_phuc_loi_truoc_2010
## Min. :0 Min. :0
## 1st Qu.:0 1st Qu.:0
## Median :0 Median :0
## Mean :0 Mean :0
## 3rd Qu.:0 3rd Qu.:0
## Max. :0 Max. :0
## von_ngan_sach_nha_nuoc nguon_kinh_phi_da_hinh_thanh_tscd
## Min. :0 Min. :0
## 1st Qu.:0 1st Qu.:0
## Median :0 Median :0
## Mean :0 Mean :0
## 3rd Qu.:0 3rd Qu.:0
## Max. :0 Max. :0
## loi_ich_cua_co_dong_thieu_so_120 tong_cong_nguon_von doanh_so
## Min. :0 Min. :5.089e+12 Min. :6.920e+11
## 1st Qu.:0 1st Qu.:6.270e+12 1st Qu.:1.369e+12
## Median :0 Median :1.001e+13 Median :1.817e+12
## Mean :0 Mean :1.109e+13 Mean :1.790e+12
## 3rd Qu.:0 3rd Qu.:1.631e+13 3rd Qu.:2.379e+12
## Max. :0 Max. :1.854e+13 Max. :2.586e+12
## cac_khoan_giam_tru doanh_so_thuan gia_von_hang_ban
## Min. :-2.305e+11 Min. :6.552e+11 Min. :-1.847e+12
## 1st Qu.:-1.132e+11 1st Qu.:1.189e+12 1st Qu.:-1.666e+12
## Median :-3.517e+10 Median :1.745e+12 Median :-1.233e+12
## Mean :-7.588e+10 Mean :1.714e+12 Mean :-1.241e+12
## 3rd Qu.:-1.872e+10 3rd Qu.:2.288e+12 3rd Qu.:-8.757e+11
## Max. :-1.335e+10 Max. :2.569e+12 Max. :-4.912e+11
## lai_gop thu_nhap_tai_chinh chi_phi_tai_chinh
## Min. :1.640e+11 Min. :2.370e+10 Min. :-2.649e+11
## 1st Qu.:3.033e+11 1st Qu.:4.308e+10 1st Qu.:-9.541e+10
## Median :4.782e+11 Median :8.858e+10 Median :-5.420e+10
## Mean :4.734e+11 Mean :1.024e+11 Mean :-7.490e+10
## 3rd Qu.:6.384e+11 3rd Qu.:1.455e+11 3rd Qu.:-2.849e+10
## Max. :8.395e+11 Max. :2.276e+11 Max. :-6.154e+09
## trong_do_chi_phi_lai_vay lai_lo_tu_cong_ty_lien_doanh chi_phi_ban_hang
## Min. :-2.432e+11 Min. :-6.918e+10 Min. :-1.971e+11
## 1st Qu.:-8.388e+10 1st Qu.:-3.948e+10 1st Qu.:-1.126e+11
## Median :-3.733e+10 Median :-1.594e+10 Median :-9.636e+10
## Mean :-6.210e+10 Mean :-1.702e+10 Mean :-9.990e+10
## 3rd Qu.:-1.816e+10 3rd Qu.:-2.026e+09 3rd Qu.:-7.649e+10
## Max. :-7.713e+09 Max. : 6.671e+10 Max. :-4.232e+10
## chi_phi_quan_ly_doanh_nghiep lai_lo_tu_hoat_dong_kinh_doanh
## Min. :-1.803e+11 Min. :4.480e+10
## 1st Qu.:-1.543e+11 1st Qu.:1.448e+11
## Median :-1.503e+11 Median :1.955e+11
## Mean :-1.368e+11 Mean :2.472e+11
## 3rd Qu.:-1.059e+11 3rd Qu.:3.264e+11
## Max. :-8.242e+10 Max. :5.331e+11
## thu_nhap_khac chi_phi_khac thu_nhap_khac_rong
## Min. :6.777e+09 Min. :-1.117e+11 Min. :-6.187e+10
## 1st Qu.:2.281e+10 1st Qu.:-4.867e+10 1st Qu.:-3.048e+09
## Median :5.137e+10 Median :-2.407e+10 Median : 2.082e+10
## Mean :1.880e+11 Mean :-3.693e+10 Mean : 1.511e+11
## 3rd Qu.:1.050e+11 3rd Qu.:-1.410e+10 3rd Qu.: 7.880e+10
## Max. :8.867e+11 Max. :-4.370e+09 Max. : 7.975e+11
## lai_lo_tu_cong_ty_lien_doanh_tu_nam_2015 lai_lo_rong_truoc_thue
## Min. :0 Min. :3.213e+10
## 1st Qu.:0 1st Qu.:1.600e+11
## Median :0 Median :2.271e+11
## Mean :0 Mean :3.983e+11
## 3rd Qu.:0 3rd Qu.:4.605e+11
## Max. :0 Max. :1.282e+12
## thue_thu_nhap_doanh_nghiep_hien_thoi thue_thu_nhap_doanh_nghiep_hoan_lai
## Min. :-2.911e+11 Min. :-4.477e+10
## 1st Qu.:-1.187e+11 1st Qu.:-7.335e+09
## Median :-6.431e+10 Median :-1.085e+09
## Mean :-8.937e+10 Mean : 1.399e+09
## 3rd Qu.:-3.975e+10 3rd Qu.: 1.623e+10
## Max. :-1.038e+10 Max. : 3.401e+10
## chi_phi_thue_thu_nhap_doanh_nghiep lai_lo_thuan_sau_thue
## Min. :-2.916e+11 Min. :1.381e+10
## 1st Qu.:-9.843e+10 1st Qu.:1.043e+11
## Median :-5.522e+10 Median :1.969e+11
## Mean :-8.797e+10 Mean :3.103e+11
## 3rd Qu.:-3.287e+10 3rd Qu.:3.621e+11
## Max. :-7.421e+09 Max. :9.899e+11
## loi_ich_cua_co_dong_thieu_so_143 loi_nhuan_cua_co_dong_cua_cong_ty_me
## Min. :-1.917e+10 Min. :1.046e+10
## 1st Qu.:-4.491e+09 1st Qu.:1.156e+11
## Median : 4.971e+09 Median :1.702e+11
## Mean : 4.841e+09 Mean :3.055e+11
## 3rd Qu.: 8.498e+09 3rd Qu.:3.742e+11
## Max. : 4.724e+10 Max. :9.862e+11
## lai_co_ban_tren_co_phieu lai_tren_co_phieu_pha_loang ebit
## Min. : 44.0 Min. : 0.0 Min. :-4.931e+09
## 1st Qu.: 202.5 1st Qu.: 0.0 1st Qu.: 9.613e+10
## Median : 516.5 Median : 0.0 Median : 2.608e+11
## Mean : 805.0 Mean : 467.6 Mean : 2.367e+11
## 3rd Qu.:1272.8 3rd Qu.: 924.8 3rd Qu.: 3.539e+11
## Max. :2157.0 Max. :2157.0 Max. : 4.878e+11
## ebitda luu_chuyen_tien_thuan_tu_cac_hoat_dong_san_xuat_kinh_doanh
## Min. :1.997e+10 Min. :-2.206e+12
## 1st Qu.:1.530e+11 1st Qu.:-5.235e+11
## Median :2.818e+11 Median :-3.677e+11
## Mean :2.789e+11 Mean :-3.161e+11
## 3rd Qu.:4.080e+11 3rd Qu.:-2.498e+11
## Max. :5.390e+11 Max. : 2.859e+12
## lai_lo_truoc_nhung_thay_doi_von_luu_dong lai_truoc_thue
## Min. :0.000e+00 Min. :0.000e+00
## 1st Qu.:1.496e+11 1st Qu.:1.600e+11
## Median :3.333e+11 Median :2.271e+11
## Mean :2.831e+11 Mean :3.951e+11
## 3rd Qu.:3.729e+11 3rd Qu.:4.605e+11
## Max. :5.333e+11 Max. :1.282e+12
## khau_hao_tscd phan_bo_loi_the_thuong_mai chi_phi_du_phong
## Min. :1.923e+10 Min. :0 Min. :-3.606e+10
## 1st Qu.:2.333e+10 1st Qu.:0 1st Qu.:-7.565e+09
## Median :4.116e+10 Median :0 Median :-2.200e+09
## Mean :4.218e+10 Mean :0 Mean :-5.366e+09
## 3rd Qu.:6.140e+10 3rd Qu.:0 3rd Qu.: 3.232e+09
## Max. :6.833e+10 Max. :0 Max. : 1.786e+10
## lai_lo_chenh_lech_ty_gia_chua_thuc_hien lai_lo_tu_thanh_ly_tai_san_co_dinh
## Min. :-2.621e+07 Min. :0
## 1st Qu.:-4.788e+06 1st Qu.:0
## Median :-8.632e+05 Median :0
## Mean : 2.104e+09 Mean :0
## 3rd Qu.:-7.742e+03 3rd Qu.:0
## Max. : 2.106e+10 Max. :0
## lai_lo_tu_hoat_dong_dau_tu chi_phi_lai_vay thu_lai_va_co_tuc
## Min. :-9.027e+11 Min. :0.000e+00 Min. :0
## 1st Qu.:-1.742e+11 1st Qu.:1.816e+10 1st Qu.:0
## Median :-1.029e+11 Median :3.733e+10 Median :0
## Mean :-2.131e+11 Mean :6.474e+10 Mean :0
## 3rd Qu.:-3.494e+10 3rd Qu.:8.638e+10 3rd Qu.:0
## Max. : 1.775e+10 Max. :2.545e+11 Max. :0
## cac_khoan_dieu_chinh_khac tang_giam_cac_khoan_phai_thu tang_giam_hang_ton_kho
## Min. :0 Min. :-2.154e+12 Min. :-2.078e+12
## 1st Qu.:0 1st Qu.:-4.455e+11 1st Qu.:-8.392e+11
## Median :0 Median :-2.055e+11 Median :-6.274e+11
## Mean :0 Mean :-2.213e+11 Mean :-5.559e+11
## 3rd Qu.:0 3rd Qu.: 8.118e+10 3rd Qu.:-1.055e+11
## Max. :0 Max. : 1.054e+12 Max. : 5.591e+11
## tang_giam_cac_khoan_phai_tra tang_giam_chi_phi_tra_truoc
## Min. :-1.112e+12 Min. :-7.963e+10
## 1st Qu.: 3.899e+10 1st Qu.:-3.462e+10
## Median : 4.354e+11 Median :-1.011e+10
## Mean : 4.629e+11 Mean :-1.794e+10
## 3rd Qu.: 7.942e+11 3rd Qu.: 3.868e+08
## Max. : 2.929e+12 Max. : 3.979e+10
## tang_giam_chung_khoan_kinh_doanh chi_phi_lai_vay_da_tra
## Min. :0 Min. :-2.609e+11
## 1st Qu.:0 1st Qu.:-1.864e+11
## Median :0 Median :-1.405e+11
## Mean :0 Mean :-1.288e+11
## 3rd Qu.:0 3rd Qu.:-5.974e+10
## Max. :0 Max. : 0.000e+00
## thue_thu_nhap_doanh_nghiep_da_tra tien_thu_khac_tu_cac_hoat_dong_kinh_doanh
## Min. :-2.571e+11 Min. :0.000e+00
## 1st Qu.:-1.245e+11 1st Qu.:0.000e+00
## Median :-6.086e+10 Median :0.000e+00
## Mean :-8.953e+10 Mean :1.373e+09
## 3rd Qu.:-4.036e+10 3rd Qu.:0.000e+00
## Max. : 0.000e+00 Max. :1.373e+10
## tien_chi_khac_tu_cac_hoat_dong_kinh_doanh
## Min. :-3.128e+10
## 1st Qu.:-2.078e+10
## Median :-1.093e+10
## Mean :-1.294e+10
## 3rd Qu.:-2.463e+09
## Max. : 0.000e+00
## luu_chuyen_tien_te_rong_tu_hoat_dong_dau_tu
## Min. :-2.768e+12
## 1st Qu.:-3.863e+10
## Median :-1.415e+10
## Mean :-1.410e+11
## 3rd Qu.: 1.952e+11
## Max. : 2.585e+12
## tien_mua_tai_san_co_dinh_va_cac_tai_san_dai_han_khac
## Min. :-6.077e+10
## 1st Qu.:-4.736e+10
## Median :-2.493e+10
## Mean :-3.254e+10
## 3rd Qu.:-1.942e+10
## Max. :-1.158e+10
## tien_thu_duoc_tu_thanh_ly_tai_san_co_dinh tien_cho_vay_hoac_mua_cong_cu_no
## Min. :2.243e+08 Min. :-3.212e+12
## 1st Qu.:1.309e+09 1st Qu.:-3.430e+11
## Median :2.822e+09 Median :-2.559e+11
## Mean :6.105e+09 Mean :-6.005e+11
## 3rd Qu.:8.582e+09 3rd Qu.:-9.257e+10
## Max. :2.339e+10 Max. :-1.270e+10
## tien_thu_tu_cho_vay_hoac_thu_tu_phat_hanh_cong_cu_no
## Min. :1.720e+09
## 1st Qu.:8.435e+10
## Median :2.757e+11
## Mean :4.693e+11
## 3rd Qu.:4.043e+11
## Max. :2.617e+12
## dau_tu_vao_cac_doanh_nghiep_khac
## Min. :-3.061e+12
## 1st Qu.:-1.252e+11
## Median :-5.096e+10
## Mean :-4.574e+11
## 3rd Qu.:-1.462e+10
## Max. : 0.000e+00
## tien_thu_tu_viec_ban_cac_khoan_dau_tu_vao_cac_doanh_nghiep_khac
## Min. :6.532e+09
## 1st Qu.:2.324e+10
## Median :1.348e+11
## Mean :4.242e+11
## 3rd Qu.:3.210e+11
## Max. :2.932e+12
## co_tuc_va_tien_lai_nhan_duoc luu_chuyen_tien_te_tu_hoat_dong_tai_chinh
## Min. :1.712e+10 Min. :-1.133e+12
## 1st Qu.:2.288e+10 1st Qu.:-1.024e+11
## Median :3.531e+10 Median : 5.777e+10
## Mean :4.987e+10 Mean : 4.883e+11
## 3rd Qu.:6.450e+10 3rd Qu.: 3.903e+11
## Max. :1.292e+11 Max. : 5.331e+12
## tien_thu_tu_phat_hanh_co_phieu_va_von_gop
## Min. :2.500e+08
## 1st Qu.:1.247e+10
## Median :7.326e+10
## Mean :3.041e+11
## 3rd Qu.:1.789e+11
## Max. :1.949e+12
## chi_tra_cho_viec_mua_lai_tra_lai_co_phieu tien_thu_duoc_cac_khoan_di_vay
## Min. :-126500000 Min. :2.784e+11
## 1st Qu.: 0 1st Qu.:8.791e+11
## Median : 0 Median :1.453e+12
## Mean : -12650000 Mean :1.708e+12
## 3rd Qu.: 0 3rd Qu.:1.922e+12
## Max. : 0 Max. :4.660e+12
## tien_tra_cac_khoan_di_vay tien_thanh_toan_von_goc_di_thue_tai_chinh
## Min. :-2.994e+12 Min. :0
## 1st Qu.:-2.165e+12 1st Qu.:0
## Median :-1.136e+12 Median :0
## Mean :-1.486e+12 Mean :0
## 3rd Qu.:-8.228e+11 3rd Qu.:0
## Max. :-4.103e+11 Max. :0
## co_tuc_da_tra tien_lai_da_nhan luu_chuyen_tien_thuan_trong_ky
## Min. :-1.789e+11 Min. :0 Min. :-1.522e+12
## 1st Qu.:-5.727e+10 1st Qu.:0 1st Qu.:-3.542e+11
## Median :-1.473e+09 Median :0 Median :-5.873e+10
## Mean :-3.750e+10 Mean :0 Mean : 3.121e+10
## 3rd Qu.:-2.964e+08 3rd Qu.:0 3rd Qu.: 4.277e+11
## Max. : 0.000e+00 Max. :0 Max. : 2.061e+12
## tien_va_tuong_duong_tien_dau_ky anh_huong_cua_chenh_lech_ty_gia
## Min. :6.455e+10 Min. :-29769499
## 1st Qu.:2.137e+11 1st Qu.: 79797
## Median :4.380e+11 Median : 1860835
## Mean :6.205e+11 Mean : 1585358
## 3rd Qu.:6.996e+11 3rd Qu.: 4788018
## Max. :2.307e+12 Max. : 26206966
## tien_va_tuong_duong_tien_cuoi_ky
## Min. :6.455e+10
## 1st Qu.:2.137e+11
## Median :4.984e+11
## Mean :6.517e+11
## 3rd Qu.:7.726e+11
## Max. :2.307e+12
Hàm summary() trong R được dùng để tạo bản tóm tắt thống kê nhanh cho
toàn bộ bộ dữ liệu.
Biến
tien_thu_tu_viec_ban_cac_khoan_dau_tu_vao_cac_doanh_nghiep_khac
Min (6.532e+09): DIG thu thấp nhất 6,53 tỷ đồng, phản ánh giai đoạn ít
thoái vốn.
1st Qu. (2.324e+10): 25% năm có thu ≤ 23,24 tỷ đồng, cho thấy hoạt động
đầu tư tài chính kém sôi động.
Median (1.348e+11): Mức thu điển hình khoảng 134,8 tỷ đồng mỗi
năm.
Mean (4.242e+11): Trung bình 424,2 tỷ đồng, cao hơn trung vị → có năm
đột biến do bán vốn lớn.
3rd Qu. (3.210e+11): 75% năm thu dưới 321 tỷ, chỉ vài năm đạt mức rất
cao.
→ Kết luận: Khoản thu này của DIG biến động mạnh, lệch phải, phản ánh
tính không ổn định và phụ thuộc vào chu kì ngành
write.csv(data_full, "data_full_raw.csv", row.names = FALSE)
data_full <- data_full %>% distinct()
data_selected <- data_full %>%
select(
tai_san_ngan_han,
tai_san_dai_han,
hang_ton_kho,
no_ngan_han,
nguoi_mua_tra_tien_truoc,
doanh_thu_chua_thuc_hien,
thang_du_von_co_phan,
doanh_so_thuan,
von_chu_so_huu,
tai_san_do_dang_dai_han
)
head(data_selected)
## # A tibble: 6 × 10
## tai_san_ngan_han tai_san_dai_han hang_ton_kho no_ngan_han
## <dbl> <dbl> <dbl> <dbl>
## 1 3211018731920 1878291152766 2437143822512 995785492325
## 2 4182170299524 1693635395548 2858982948566 1298517198101
## 3 4809788192964 1273441750823 3538192056247 1607679312569
## 4 5633632858566 1198475308854 3147381338237 2997356703194
## 5 7130818433089 1066410074669 4203273070739 3269454322565
## 6 7299152349851 4527010691862 4401218373486 5986660581699
## # ℹ 6 more variables: nguoi_mua_tra_tien_truoc <dbl>,
## # doanh_thu_chua_thuc_hien <dbl>, thang_du_von_co_phan <dbl>,
## # doanh_so_thuan <dbl>, von_chu_so_huu <dbl>, tai_san_do_dang_dai_han <dbl>
write.csv(data_selected, "data_taichinh_10bien.csv", row.names = FALSE)
dim(data_selected)
## [1] 10 10
sum(duplicated(data_selected))
## [1] 0
data_selected <- data_selected[!duplicated(data_selected), ]
Lệnh sum(duplicated(data_selected)) đếm số dòng trùng lặp, còn
data_selected
data_selected[!duplicated(data_selected), ] loại bỏ các dòng trùng, giữ
lại lần xuất hiện đầu tiên.
colSums(is.na(data_selected))
## tai_san_ngan_han tai_san_dai_han hang_ton_kho
## 0 0 0
## no_ngan_han nguoi_mua_tra_tien_truoc doanh_thu_chua_thuc_hien
## 0 0 0
## thang_du_von_co_phan doanh_so_thuan von_chu_so_huu
## 0 0 0
## tai_san_do_dang_dai_han
## 0
data_selected <- data_selected %>%
mutate(across(where(is.numeric), ~ ifelse(is.na(.), median(., na.rm = TRUE), .)))
Lệnh colSums(is.na(data_selected)) đếm tổng số giá trị bị thiếu (NA)
trong từng cột; mutate(across(…)) thay thế các giá trị NA của biến số
bằng trung vị (median) tương ứng.
Ý nghĩa thống kê: Việc thay NA bằng trung vị giúp dữ liệu đầy đủ hơn,
tránh mất thông tin và giảm ảnh hưởng của các giá trị ngoại lai đến phân
tích
str(data_selected)
## tibble [10 × 10] (S3: tbl_df/tbl/data.frame)
## $ tai_san_ngan_han : num [1:10] 3.21e+12 4.18e+12 4.81e+12 5.63e+12 7.13e+12 ...
## $ tai_san_dai_han : num [1:10] 1.88e+12 1.69e+12 1.27e+12 1.20e+12 1.07e+12 ...
## $ hang_ton_kho : num [1:10] 2.44e+12 2.86e+12 3.54e+12 3.15e+12 4.20e+12 ...
## $ no_ngan_han : num [1:10] 9.96e+11 1.30e+12 1.61e+12 3.00e+12 3.27e+12 ...
## $ nguoi_mua_tra_tien_truoc: num [1:10] 2.86e+11 5.14e+11 7.60e+11 1.02e+12 1.73e+12 ...
## $ doanh_thu_chua_thuc_hien: num [1:10] 3.13e+11 3.10e+11 1.57e+11 1.54e+11 1.50e+11 ...
## $ thang_du_von_co_phan : num [1:10] 2.38e+11 6.61e+10 6.61e+10 6.61e+10 2.08e+11 ...
## $ doanh_so_thuan : num [1:10] 6.55e+11 1.15e+12 1.59e+12 2.35e+12 2.12e+12 ...
## $ von_chu_so_huu : num [1:10] 2.66e+12 2.80e+12 2.89e+12 3.22e+12 4.01e+12 ...
## $ tai_san_do_dang_dai_han : num [1:10] 7.80e+10 6.88e+10 6.80e+10 9.09e+10 8.94e+10 ...
data_selected <- data_selected %>%
mutate(
tong_tai_san = tai_san_ngan_han + tai_san_dai_han,
he_so_no = ifelse(von_chu_so_huu == 0, NA, no_ngan_han / von_chu_so_huu),
ty_le_hang_ton = ifelse(tai_san_ngan_han == 0, NA, hang_ton_kho / tai_san_ngan_han),
ty_le_von_ts = ifelse((tai_san_ngan_han+tai_san_dai_han)==0, NA, von_chu_so_huu/(tai_san_ngan_han+tai_san_dai_han)),
ty_suat_doanh_thu = ifelse(tai_san_dai_han==0, NA, doanh_so_thuan / tai_san_dai_han)
)
tong_tai_san: Tổng tài sản = tài sản ngắn + dài hạn → phản ánh quy mô
tài sản doanh nghiệp.
he_so_no: Nợ ngắn hạn / vốn chủ sở hữu → đo mức độ đòn bẩy tài chính,
càng cao rủi ro càng lớn.
ty_le_hang_ton: Hàng tồn kho / tài sản ngắn hạn → thể hiện tỷ trọng hàng
tồn, cao quá có thể gây ứ đọng vốn.
ty_le_von_ts: Vốn chủ sở hữu / tổng tài sản → đánh giá tỷ lệ tự chủ tài
chính, cao là ổn định hơn.
ty_suat_doanh_thu: Doanh thu thuần / tài sản dài hạn → đo hiệu quả sử
dụng tài sản cố định, cao là hiệu quả tốt.
data_selected <- data_selected %>%
mutate(
nhom_doanh_thu = case_when(
doanh_so_thuan >= quantile(doanh_so_thuan, 0.75, na.rm=TRUE) ~ "Cao",
doanh_so_thuan >= quantile(doanh_so_thuan, 0.25, na.rm=TRUE) ~ "Trung bình",
TRUE ~ "Thấp"
)
)
Hàm case_when() chia biến doanh_so_thuan (doanh thu thuần) thành 3
nhóm dựa trên phân vị (quantile):
Từ 0.75 trở lên → “Cao”
Từ 0.25 đến <0.75 → “Trung bình”
Nhỏ hơn 0.25 → “Thấp”
data_selected <- data_selected %>%
mutate(
nhom_he_so_no = case_when(
he_so_no > 1 ~ "Nợ cao",
he_so_no > 0.5 ~ "Nợ trung bình",
TRUE ~ "Nợ thấp"
)
)
Về kỹ thuật:
Hàm mutate() tạo biến mới nhom_he_so_no trong bộ dữ liệu.
Hàm case_when() phân loại giá trị của biến he_so_no thành 3 nhóm:
he_so_no > 1 → gán nhãn “Nợ cao”
he_so_no > 0.5 → gán nhãn “Nợ trung bình”
Còn lại (TRUE) → “Nợ thấp”
Ý nghĩa kinh tế:
Hệ số nợ phản ánh mức độ phụ thuộc vào vốn vay.
Nợ cao → doanh nghiệp đang rủi ro tài chính, dễ chịu áp lực trả
nợ.
Nợ trung bình → cơ cấu vốn cân đối giữa nợ và vốn chủ sở hữu.
Nợ thấp → doanh nghiệp an toàn, chủ yếu dùng vốn tự có.
names(data_selected)
## [1] "tai_san_ngan_han" "tai_san_dai_han"
## [3] "hang_ton_kho" "no_ngan_han"
## [5] "nguoi_mua_tra_tien_truoc" "doanh_thu_chua_thuc_hien"
## [7] "thang_du_von_co_phan" "doanh_so_thuan"
## [9] "von_chu_so_huu" "tai_san_do_dang_dai_han"
## [11] "tong_tai_san" "he_so_no"
## [13] "ty_le_hang_ton" "ty_le_von_ts"
## [15] "ty_suat_doanh_thu" "nhom_doanh_thu"
## [17] "nhom_he_so_no"
summary(data_selected)
## tai_san_ngan_han tai_san_dai_han hang_ton_kho
## Min. :3.211e+12 Min. :1.066e+12 Min. :2.437e+12
## 1st Qu.:5.016e+12 1st Qu.:1.378e+12 1st Qu.:3.245e+12
## Median :7.215e+12 Median :2.216e+12 Median :4.026e+12
## Mean :8.432e+12 Mean :2.654e+12 Mean :4.507e+12
## 3rd Qu.:1.113e+13 3rd Qu.:3.615e+12 3rd Qu.:5.545e+12
## Max. :1.599e+13 Max. :5.632e+12 Max. :8.157e+12
## no_ngan_han nguoi_mua_tra_tien_truoc doanh_thu_chua_thuc_hien
## Min. :9.958e+11 Min. :2.857e+11 Min. :1.144e+11
## 1st Qu.:1.955e+12 1st Qu.:8.248e+11 1st Qu.:1.220e+11
## Median :3.608e+12 Median :1.599e+12 Median :1.519e+11
## Mean :4.054e+12 Mean :1.371e+12 Mean :1.743e+11
## 3rd Qu.:5.658e+12 3rd Qu.:1.759e+12 3rd Qu.:1.753e+11
## Max. :7.962e+12 Max. :2.426e+12 Max. :3.130e+11
## thang_du_von_co_phan doanh_so_thuan von_chu_so_huu
## Min. :6.611e+10 Min. :6.552e+11 Min. :2.656e+12
## 1st Qu.:1.016e+11 1st Qu.:1.189e+12 1st Qu.:2.973e+12
## Median :2.672e+11 Median :1.745e+12 Median :4.400e+12
## Mean :5.201e+11 Mean :1.714e+12 Mean :5.176e+12
## 3rd Qu.:1.046e+12 3rd Qu.:2.288e+12 3rd Qu.:7.764e+12
## Max. :1.121e+12 Max. :2.569e+12 Max. :8.041e+12
## tai_san_do_dang_dai_han tong_tai_san he_so_no ty_le_hang_ton
## Min. :6.800e+10 Min. :5.089e+12 Min. :0.3749 Min. :0.3431
## 1st Qu.:8.048e+10 1st Qu.:6.270e+12 1st Qu.:0.5187 1st Qu.:0.5189
## Median :9.019e+10 Median :1.001e+13 Median :0.7121 Median :0.5741
## Mean :9.235e+10 Mean :1.109e+13 Mean :0.7486 Mean :0.5796
## 3rd Qu.:1.006e+11 3rd Qu.:1.631e+13 3rd Qu.:0.9746 3rd Qu.:0.6635
## Max. :1.267e+11 Max. :1.854e+13 Max. :1.2498 Max. :0.7590
## ty_le_von_ts ty_suat_doanh_thu nhom_doanh_thu nhom_he_so_no
## Min. :0.4050 Min. :0.3488 Length:10 Length:10
## 1st Qu.:0.4588 1st Qu.:0.4645 Class :character Class :character
## Median :0.4732 Median :0.5294 Mode :character Mode :character
## Mean :0.4725 Mean :0.8586
## 3rd Qu.:0.4859 3rd Qu.:1.1087
## Max. :0.5285 Max. :1.9840
write.csv(data_selected, "data_selected_clean.csv", row.names = FALSE)
tail(data_selected)
## # A tibble: 6 × 17
## tai_san_ngan_han tai_san_dai_han hang_ton_kho no_ngan_han
## <dbl> <dbl> <dbl> <dbl>
## 1 7.13e12 1066410074669 4203273070739 3269454322565
## 2 7.30e12 4527010691862 4401218373486 5986660581699
## 3 1.12e13 5632288008979 3848208105002 4670430680530
## 4 1.09e13 3870776854827 5925737257822 3945743304514
## 5 1.40e13 2849516181739 6553691313316 7807921730527
## 6 1.60e13 2553566187167 8157039128017 7961859074539
## # ℹ 13 more variables: nguoi_mua_tra_tien_truoc <dbl>,
## # doanh_thu_chua_thuc_hien <dbl>, thang_du_von_co_phan <dbl>,
## # doanh_so_thuan <dbl>, von_chu_so_huu <dbl>, tai_san_do_dang_dai_han <dbl>,
## # tong_tai_san <dbl>, he_so_no <dbl>, ty_le_hang_ton <dbl>,
## # ty_le_von_ts <dbl>, ty_suat_doanh_thu <dbl>, nhom_doanh_thu <chr>,
## # nhom_he_so_no <chr>
colSums(data_selected < 0, na.rm = TRUE)
## tai_san_ngan_han tai_san_dai_han hang_ton_kho
## 0 0 0
## no_ngan_han nguoi_mua_tra_tien_truoc doanh_thu_chua_thuc_hien
## 0 0 0
## thang_du_von_co_phan doanh_so_thuan von_chu_so_huu
## 0 0 0
## tai_san_do_dang_dai_han tong_tai_san he_so_no
## 0 0 0
## ty_le_hang_ton ty_le_von_ts ty_suat_doanh_thu
## 0 0 0
## nhom_doanh_thu nhom_he_so_no
## 0 0
data_selected <- data_selected %>% mutate(across(where(is.numeric), as.numeric))
mutate(across(where(is.numeric), as.numeric))
➤ Dòng lệnh này đảm bảo tất cả các cột dạng số trong data_selected đều
có kiểu dữ liệu numeric.
→ Hàm across(where(is.numeric), as.numeric) quét qua toàn bộ các cột, và
ép kiểu dữ liệu về dạng số nếu cần.
cor_cols <- data_selected %>% select(where(is.numeric))
round(cor(cor_cols, use="pairwise.complete.obs"),2)
## tai_san_ngan_han tai_san_dai_han hang_ton_kho
## tai_san_ngan_han 1.00 0.47 0.93
## tai_san_dai_han 0.47 1.00 0.26
## hang_ton_kho 0.93 0.26 1.00
## no_ngan_han 0.90 0.47 0.87
## nguoi_mua_tra_tien_truoc 0.83 0.49 0.80
## doanh_thu_chua_thuc_hien -0.56 -0.45 -0.48
## thang_du_von_co_phan 0.90 0.67 0.75
## doanh_so_thuan 0.04 0.44 -0.10
## von_chu_so_huu 0.95 0.66 0.83
## tai_san_do_dang_dai_han 0.69 0.67 0.53
## tong_tai_san 0.97 0.68 0.84
## he_so_no 0.43 0.18 0.47
## ty_le_hang_ton -0.77 -0.65 -0.51
## ty_le_von_ts -0.31 -0.34 -0.27
## ty_suat_doanh_thu -0.38 -0.63 -0.32
## no_ngan_han nguoi_mua_tra_tien_truoc
## tai_san_ngan_han 0.90 0.83
## tai_san_dai_han 0.47 0.49
## hang_ton_kho 0.87 0.80
## no_ngan_han 1.00 0.90
## nguoi_mua_tra_tien_truoc 0.90 1.00
## doanh_thu_chua_thuc_hien -0.60 -0.70
## thang_du_von_co_phan 0.72 0.64
## doanh_so_thuan 0.12 0.42
## von_chu_so_huu 0.82 0.77
## tai_san_do_dang_dai_han 0.53 0.57
## tong_tai_san 0.89 0.83
## he_so_no 0.75 0.73
## ty_le_hang_ton -0.69 -0.71
## ty_le_von_ts -0.58 -0.60
## ty_suat_doanh_thu -0.34 -0.11
## doanh_thu_chua_thuc_hien thang_du_von_co_phan
## tai_san_ngan_han -0.56 0.90
## tai_san_dai_han -0.45 0.67
## hang_ton_kho -0.48 0.75
## no_ngan_han -0.60 0.72
## nguoi_mua_tra_tien_truoc -0.70 0.64
## doanh_thu_chua_thuc_hien 1.00 -0.48
## thang_du_von_co_phan -0.48 1.00
## doanh_so_thuan -0.66 0.02
## von_chu_so_huu -0.60 0.98
## tai_san_do_dang_dai_han -0.64 0.84
## tong_tai_san -0.60 0.94
## he_so_no -0.56 0.12
## ty_le_hang_ton 0.66 -0.78
## ty_le_von_ts 0.32 -0.06
## ty_suat_doanh_thu -0.15 -0.59
## doanh_so_thuan von_chu_so_huu tai_san_do_dang_dai_han
## tai_san_ngan_han 0.04 0.95 0.69
## tai_san_dai_han 0.44 0.66 0.67
## hang_ton_kho -0.10 0.83 0.53
## no_ngan_han 0.12 0.82 0.53
## nguoi_mua_tra_tien_truoc 0.42 0.77 0.57
## doanh_thu_chua_thuc_hien -0.66 -0.60 -0.64
## thang_du_von_co_phan 0.02 0.98 0.84
## doanh_so_thuan 1.00 0.13 0.38
## von_chu_so_huu 0.13 1.00 0.84
## tai_san_do_dang_dai_han 0.38 0.84 1.00
## tong_tai_san 0.16 0.98 0.77
## he_so_no 0.39 0.29 0.12
## ty_le_hang_ton -0.48 -0.82 -0.79
## ty_le_von_ts -0.39 -0.19 0.11
## ty_suat_doanh_thu 0.41 -0.50 -0.27
## tong_tai_san he_so_no ty_le_hang_ton ty_le_von_ts
## tai_san_ngan_han 0.97 0.43 -0.77 -0.31
## tai_san_dai_han 0.68 0.18 -0.65 -0.34
## hang_ton_kho 0.84 0.47 -0.51 -0.27
## no_ngan_han 0.89 0.75 -0.69 -0.58
## nguoi_mua_tra_tien_truoc 0.83 0.73 -0.71 -0.60
## doanh_thu_chua_thuc_hien -0.60 -0.56 0.66 0.32
## thang_du_von_co_phan 0.94 0.12 -0.78 -0.06
## doanh_so_thuan 0.16 0.39 -0.48 -0.39
## von_chu_so_huu 0.98 0.29 -0.82 -0.19
## tai_san_do_dang_dai_han 0.77 0.12 -0.79 0.11
## tong_tai_san 1.00 0.41 -0.83 -0.36
## he_so_no 0.41 1.00 -0.37 -0.78
## ty_le_hang_ton -0.83 -0.37 1.00 0.32
## ty_le_von_ts -0.36 -0.78 0.32 1.00
## ty_suat_doanh_thu -0.50 0.14 0.17 0.07
## ty_suat_doanh_thu
## tai_san_ngan_han -0.38
## tai_san_dai_han -0.63
## hang_ton_kho -0.32
## no_ngan_han -0.34
## nguoi_mua_tra_tien_truoc -0.11
## doanh_thu_chua_thuc_hien -0.15
## thang_du_von_co_phan -0.59
## doanh_so_thuan 0.41
## von_chu_so_huu -0.50
## tai_san_do_dang_dai_han -0.27
## tong_tai_san -0.50
## he_so_no 0.14
## ty_le_hang_ton 0.17
## ty_le_von_ts 0.07
## ty_suat_doanh_thu 1.00
Ý nghĩa kỹ thuật
select(where(is.numeric)): chọn chỉ các cột dạng số trong data_selected
để chuẩn bị phân tích tương quan.
cor(…, use=“pairwise.complete.obs”): tính ma trận hệ số tương quan
Pearson giữa các biến số, bỏ qua các giá trị bị thiếu (NA) theo từng cặp
biến.
round(…, 2): làm tròn kết quả tương quan đến 2 chữ số thập phân cho dễ
đọc.
Ý nghĩa thống kê
Bảng tương quan giúp xác định mức độ và chiều hướng mối liên hệ tuyến
tính giữa các biến định lượng (ví dụ: doanh thu và tài sản, hay nợ và
vốn).
→ Giá trị tương quan gần 1 hoặc -1 thể hiện mối liên hệ mạnh, trong khi
gần 0 là yếu hoặc không liên quan.
cat("Hoàn tất bước II — dữ liệu đã được xử lý thô và mã hóa. data_selected sẵn sàng.\n")
## Hoàn tất bước II — dữ liệu đã được xử lý thô và mã hóa. data_selected sẵn sàng.
write.csv(data_selected, "data_selected_backup.csv", row.names = FALSE)
summary(data_selected)
## tai_san_ngan_han tai_san_dai_han hang_ton_kho
## Min. :3.211e+12 Min. :1.066e+12 Min. :2.437e+12
## 1st Qu.:5.016e+12 1st Qu.:1.378e+12 1st Qu.:3.245e+12
## Median :7.215e+12 Median :2.216e+12 Median :4.026e+12
## Mean :8.432e+12 Mean :2.654e+12 Mean :4.507e+12
## 3rd Qu.:1.113e+13 3rd Qu.:3.615e+12 3rd Qu.:5.545e+12
## Max. :1.599e+13 Max. :5.632e+12 Max. :8.157e+12
## no_ngan_han nguoi_mua_tra_tien_truoc doanh_thu_chua_thuc_hien
## Min. :9.958e+11 Min. :2.857e+11 Min. :1.144e+11
## 1st Qu.:1.955e+12 1st Qu.:8.248e+11 1st Qu.:1.220e+11
## Median :3.608e+12 Median :1.599e+12 Median :1.519e+11
## Mean :4.054e+12 Mean :1.371e+12 Mean :1.743e+11
## 3rd Qu.:5.658e+12 3rd Qu.:1.759e+12 3rd Qu.:1.753e+11
## Max. :7.962e+12 Max. :2.426e+12 Max. :3.130e+11
## thang_du_von_co_phan doanh_so_thuan von_chu_so_huu
## Min. :6.611e+10 Min. :6.552e+11 Min. :2.656e+12
## 1st Qu.:1.016e+11 1st Qu.:1.189e+12 1st Qu.:2.973e+12
## Median :2.672e+11 Median :1.745e+12 Median :4.400e+12
## Mean :5.201e+11 Mean :1.714e+12 Mean :5.176e+12
## 3rd Qu.:1.046e+12 3rd Qu.:2.288e+12 3rd Qu.:7.764e+12
## Max. :1.121e+12 Max. :2.569e+12 Max. :8.041e+12
## tai_san_do_dang_dai_han tong_tai_san he_so_no ty_le_hang_ton
## Min. :6.800e+10 Min. :5.089e+12 Min. :0.3749 Min. :0.3431
## 1st Qu.:8.048e+10 1st Qu.:6.270e+12 1st Qu.:0.5187 1st Qu.:0.5189
## Median :9.019e+10 Median :1.001e+13 Median :0.7121 Median :0.5741
## Mean :9.235e+10 Mean :1.109e+13 Mean :0.7486 Mean :0.5796
## 3rd Qu.:1.006e+11 3rd Qu.:1.631e+13 3rd Qu.:0.9746 3rd Qu.:0.6635
## Max. :1.267e+11 Max. :1.854e+13 Max. :1.2498 Max. :0.7590
## ty_le_von_ts ty_suat_doanh_thu nhom_doanh_thu nhom_he_so_no
## Min. :0.4050 Min. :0.3488 Length:10 Length:10
## 1st Qu.:0.4588 1st Qu.:0.4645 Class :character Class :character
## Median :0.4732 Median :0.5294 Mode :character Mode :character
## Mean :0.4725 Mean :0.8586
## 3rd Qu.:0.4859 3rd Qu.:1.1087
## Max. :0.5285 Max. :1.9840
dim(data_selected)
## [1] 10 17
names(data_selected)
## [1] "tai_san_ngan_han" "tai_san_dai_han"
## [3] "hang_ton_kho" "no_ngan_han"
## [5] "nguoi_mua_tra_tien_truoc" "doanh_thu_chua_thuc_hien"
## [7] "thang_du_von_co_phan" "doanh_so_thuan"
## [9] "von_chu_so_huu" "tai_san_do_dang_dai_han"
## [11] "tong_tai_san" "he_so_no"
## [13] "ty_le_hang_ton" "ty_le_von_ts"
## [15] "ty_suat_doanh_thu" "nhom_doanh_thu"
## [17] "nhom_he_so_no"
colSums(!is.na(data_selected)) # đánh giá dữ liệu đầy đủ
## tai_san_ngan_han tai_san_dai_han hang_ton_kho
## 10 10 10
## no_ngan_han nguoi_mua_tra_tien_truoc doanh_thu_chua_thuc_hien
## 10 10 10
## thang_du_von_co_phan doanh_so_thuan von_chu_so_huu
## 10 10 10
## tai_san_do_dang_dai_han tong_tai_san he_so_no
## 10 10 10
## ty_le_hang_ton ty_le_von_ts ty_suat_doanh_thu
## 10 10 10
## nhom_doanh_thu nhom_he_so_no
## 10 10
round(colMeans(select(data_selected, where(is.numeric)), na.rm=TRUE),2)
## tai_san_ngan_han tai_san_dai_han hang_ton_kho
## 8.432207e+12 2.654341e+12 4.507087e+12
## no_ngan_han nguoi_mua_tra_tien_truoc doanh_thu_chua_thuc_hien
## 4.054141e+12 1.371313e+12 1.742761e+11
## thang_du_von_co_phan doanh_so_thuan von_chu_so_huu
## 5.201069e+11 1.714091e+12 5.176498e+12
## tai_san_do_dang_dai_han tong_tai_san he_so_no
## 9.235171e+10 1.108655e+13 7.500000e-01
## ty_le_hang_ton ty_le_von_ts ty_suat_doanh_thu
## 5.800000e-01 4.700000e-01 8.600000e-01
select(…, where(is.numeric)): chọn tất cả các cột dạng số trong bộ dữ
liệu data_selected.
colMeans(…, na.rm=TRUE): tính trung bình cho từng biến số (bỏ qua giá
trị NA).
round(…, 2): làm tròn kết quả đến 2 chữ số thập phân.
Kết quả cho ra giá trị trung bình của từng chỉ tiêu tài chính từ
2015–2024.
Về ý nghĩa thống kê – tài chính:
Tài sản ngắn hạn (8.43e+12) cao hơn tài sản dài hạn (2.65e+12) → cơ cấu
tài sản nghiêng về ngắn hạn, phản ánh hoạt động đầu tư chủ yếu ngắn
hạn.
Nợ ngắn hạn (4.05e+12) chiếm khoảng 37% tổng tài sản → mức đòn bẩy trung
bình, không quá rủi ro.
Hệ số nợ ~0.75 → trung bình 75% tài sản được tài trợ bằng nợ, thể hiện
doanh nghiệp tận dụng vốn vay nhiều.
Tỷ suất doanh thu ~0.86 → hiệu quả sinh lợi khá cao, doanh thu duy trì
gần bằng quy mô tài sản hoạt động.
round(sapply(select(data_selected, where(is.numeric)), sd, na.rm=TRUE),2)
## tai_san_ngan_han tai_san_dai_han hang_ton_kho
## 4.356181e+12 1.562626e+12 1.821154e+12
## no_ngan_han nguoi_mua_tra_tien_truoc doanh_thu_chua_thuc_hien
## 2.541916e+12 6.958012e+11 7.525787e+10
## thang_du_von_co_phan doanh_so_thuan von_chu_so_huu
## 4.757754e+11 6.680732e+11 2.386188e+12
## tai_san_do_dang_dai_han tong_tai_san he_so_no
## 1.883167e+10 5.272965e+12 2.900000e-01
## ty_le_hang_ton ty_le_von_ts ty_suat_doanh_thu
## 1.300000e-01 4.000000e-02 6.400000e-01
select(…, where(is.numeric)) → chọn các biến dạng số trong
data_selected.
sapply(…, sd, na.rm=TRUE) → tính độ lệch chuẩn (Standard Deviation) của
từng biến, bỏ qua giá trị NA.
round(…, 2) → làm tròn đến 2 chữ số thập phân.
→ Kết quả biểu thị mức độ biến động (dao động quanh giá trị trung bình)
của từng chỉ tiêu tài chính.
Về ý nghĩa thống kê – tài chính:
Tài sản ngắn hạn (4.36e+12) và tổng tài sản (5.27e+12) có độ lệch chuẩn
lớn → biến động mạnh qua các năm, phản ánh giai đoạn đầu tư – mở rộng
quy mô mạnh.
Tài sản dài hạn (1.56e+12), vốn chủ sở hữu (2.39e+12) → dao động trung
bình, cho thấy nguồn vốn và đầu tư dài hạn ổn định hơn.
Hệ số nợ (0.29) và tỷ lệ vốn/tài sản (0.04) có độ lệch chuẩn thấp → cấu
trúc tài chính ít biến động, duy trì chính sách tài trợ ổn định.
sapply(select(data_selected, where(is.numeric)), range, na.rm=TRUE)
## tai_san_ngan_han tai_san_dai_han hang_ton_kho no_ngan_han
## [1,] 3.211019e+12 1.066410e+12 2.437144e+12 9.957855e+11
## [2,] 1.598576e+13 5.632288e+12 8.157039e+12 7.961859e+12
## nguoi_mua_tra_tien_truoc doanh_thu_chua_thuc_hien thang_du_von_co_phan
## [1,] 2.856693e+11 114442807380 6.611126e+10
## [2,] 2.426154e+12 312988984851 1.121120e+12
## doanh_so_thuan von_chu_so_huu tai_san_do_dang_dai_han tong_tai_san
## [1,] 6.552252e+11 2.656336e+12 67997970133 5.089310e+12
## [2,] 2.568689e+12 8.041311e+12 126652346287 1.853932e+13
## he_so_no ty_le_hang_ton ty_le_von_ts ty_suat_doanh_thu
## [1,] 0.3748717 0.3431422 0.4050451 0.3488412
## [2,] 1.2497910 0.7589940 0.5285356 1.9839876
sapply(select(data_selected, where(is.numeric)), median, na.rm=TRUE)
## tai_san_ngan_han tai_san_dai_han hang_ton_kho
## 7.214985e+12 2.215929e+12 4.025741e+12
## no_ngan_han nguoi_mua_tra_tien_truoc doanh_thu_chua_thuc_hien
## 3.607599e+12 1.599121e+12 1.518893e+11
## thang_du_von_co_phan doanh_so_thuan von_chu_so_huu
## 2.672225e+11 1.745200e+12 4.399788e+12
## tai_san_do_dang_dai_han tong_tai_san he_so_no
## 9.019191e+10 1.001170e+13 7.121210e-01
## ty_le_hang_ton ty_le_von_ts ty_suat_doanh_thu
## 5.740644e-01 4.731896e-01 5.294454e-01
Về ý nghĩa thống kê – tài chính:
Tài sản ngắn hạn: dao động từ 3.2e+12 → 1.6e+13; trung vị khoảng 7.2e+12
→ tăng mạnh, cho thấy xu hướng mở rộng quy mô lưu động.
Tổng tài sản: biên độ lớn (5.1e+12 → 1.85e+13) → phản ánh giai đoạn tăng
trưởng tài sản rõ rệt.
Vốn chủ sở hữu: tăng dần, trung vị ~5.3e+12 → nền tảng vốn hóa ngày càng
vững.
Hệ số nợ (0.37–1.25): có giai đoạn đòn bẩy cao nhưng trung vị ~0.75 →
vẫn trong ngưỡng an toàn.
Tỷ suất doanh thu (~0.86 median): ổn định, cho thấy hiệu quả hoạt động
duy trì tốt.
sapply(select(data_selected, where(is.numeric)), var, na.rm=TRUE)
## tai_san_ngan_han tai_san_dai_han hang_ton_kho
## 1.897632e+25 2.441798e+24 3.316601e+24
## no_ngan_han nguoi_mua_tra_tien_truoc doanh_thu_chua_thuc_hien
## 6.461336e+24 4.841392e+23 5.663746e+21
## thang_du_von_co_phan doanh_so_thuan von_chu_so_huu
## 2.263623e+23 4.463218e+23 5.693894e+24
## tai_san_do_dang_dai_han tong_tai_san he_so_no
## 3.546320e+20 2.780416e+25 8.234323e-02
## ty_le_hang_ton ty_le_von_ts ty_suat_doanh_thu
## 1.584670e-02 1.360113e-03 4.091456e-01
colSums(select(data_selected, where(is.numeric)), na.rm=TRUE)
## tai_san_ngan_han tai_san_dai_han hang_ton_kho
## 8.432207e+13 2.654341e+13 4.507087e+13
## no_ngan_han nguoi_mua_tra_tien_truoc doanh_thu_chua_thuc_hien
## 4.054141e+13 1.371313e+13 1.742761e+12
## thang_du_von_co_phan doanh_so_thuan von_chu_so_huu
## 5.201069e+12 1.714091e+13 5.176498e+13
## tai_san_do_dang_dai_han tong_tai_san he_so_no
## 9.235171e+11 1.108655e+14 7.485683e+00
## ty_le_hang_ton ty_le_von_ts ty_suat_doanh_thu
## 5.796395e+00 4.725418e+00 8.586068e+00
c(
Min = min(data_selected$tai_san_ngan_han, na.rm=TRUE),
Max = max(data_selected$tai_san_ngan_han, na.rm=TRUE),
Mean = mean(data_selected$tai_san_ngan_han, na.rm=TRUE),
Median = median(data_selected$tai_san_ngan_han, na.rm=TRUE),
SD = sd(data_selected$tai_san_ngan_han, na.rm=TRUE)
)
## Min Max Mean Median SD
## 3.211019e+12 1.598576e+13 8.432207e+12 7.214985e+12 4.356181e+12
min(), max(): xác định phạm vi dao động (range) của giá trị tài sản
ngắn hạn trong dữ liệu.
mean(): giá trị trung bình cộng của TSNH.
median(): giá trị trung vị — điểm giữa của phân bố, giúp giảm ảnh hưởng
của các giá trị ngoại lai.
sd(): độ lệch chuẩn — đo mức độ biến động quanh giá trị trung
bình.
Ý nghĩa thống kê:
TSNH trung bình ≈ 8.43×10¹², khá lớn, cho thấy các công ty trong mẫu có
quy mô tài sản ngắn hạn cao.
Độ lệch chuẩn 4.36×10¹² phản ánh sự chênh lệch đáng kể giữa các doanh
nghiệp — có doanh nghiệp giữ lượng TSNH rất cao so với trung bình.
Trung vị (7.21×10¹²) < Mean ⇒ phân bố lệch phải (right-skewed) — có
một số công ty có TSNH cực lớn kéo trung bình lên cao.
c(Min=min(data_selected$tai_san_dai_han,na.rm=TRUE), Max=max(data_selected$tai_san_dai_han,na.rm=TRUE),
Mean=mean(data_selected$tai_san_dai_han,na.rm=TRUE), SD=sd(data_selected$tai_san_dai_han,na.rm=TRUE))
## Min Max Mean SD
## 1.066410e+12 5.632288e+12 2.654341e+12 1.562626e+12
Ý nghĩa thống kê:
TSDH trung bình thấp hơn TSNH, cho thấy cấu trúc tài sản của doanh
nghiệp thiên về tài sản ngắn hạn.
SD = 1.56×10¹², nhỏ hơn so với TSNH ⇒ mức độ biến động thấp hơn, nghĩa
là các doanh nghiệp có cấu trúc tài sản dài hạn tương đối ổn định
hơn.
c(Mean=mean(data_selected$hang_ton_kho,na.rm=TRUE), SD=sd(data_selected$hang_ton_kho,na.rm=TRUE))
## Mean SD
## 4.507087e+12 1.821154e+12
Ý nghĩa thống kê:
Trung bình hàng tồn kho khoảng 4.5×10¹², chiếm tỷ trọng đáng kể trong
TSNH.
Độ lệch chuẩn khá lớn (≈ 40% giá trị trung bình), cho thấy sự khác biệt
đáng kể về quy mô tồn kho
summary(data_selected$no_ngan_han)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 9.958e+11 1.955e+12 3.608e+12 4.054e+12 5.658e+12 7.962e+12
Sử dụng hàm summary() để tính giá trị nhỏ nhất, lớn nhất, trung bình,
trung vị và các tứ phân vị (quartiles).
1st Qu. là giá trị mà 25% mẫu nhỏ hơn nó; 3rd Qu. là giá trị mà 75% mẫu
nhỏ hơn nó.
📊 Ý nghĩa thống kê:
Nợ ngắn hạn trung bình ≈ 4.05×10¹² — chiếm tỷ trọng đáng kể so với tổng
tài sản ngắn hạn.
Độ phân tán cao: từ 9.96×10¹¹ đến 7.96×10¹² → cho thấy sự khác biệt lớn
về quy mô vay nợ ngắn hạn giữa các công ty.
Median (3.61×10¹²) < Mean (4.05×10¹²) ⇒ phân bố lệch phải
(right-skewed) — có một số công ty có nợ ngắn hạn rất cao kéo trung bình
lên.
summary(data_selected$nguoi_mua_tra_tien_truoc)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 2.857e+11 8.248e+11 1.599e+12 1.371e+12 1.759e+12 2.426e+12
Ý nghĩa thống kê:
Giá trị trung bình (1.37×10¹²) và trung vị (1.60×10¹²) tương đối gần
nhau ⇒ phân bố gần đối xứng, ít bị ảnh hưởng bởi giá trị ngoại
lai.
Biến này dao động không quá lớn (từ 2.86×10¹¹ → 2.43×10¹²), cho thấy sự
ổn định trong chính sách nhận tiền trước của khách hàng giữa các doanh
nghiệp.
summary(data_selected$doanh_thu_chua_thuc_hien)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 1.144e+11 1.220e+11 1.519e+11 1.743e+11 1.753e+11 3.130e+11
Đây là khoản doanh thu nhận trước nhưng chưa được ghi nhận, vì hàng
hóa/dịch vụ chưa được cung cấp.
📊 Ý nghĩa thống kê:
Giá trị trung bình và trung vị khá nhỏ so với các biến tài sản và nợ
khác ⇒ biến này chỉ chiếm tỷ trọng nhỏ trong tổng nguồn vốn.
Phạm vi dao động không quá lớn ⇒ biến khá ổn định giữa các doanh
nghiệp.
Mean > Median ⇒ vẫn có một vài doanh nghiệp có doanh thu chưa thực
hiện cao hơn mức chung.
cor_tsn_nnh <- cor(data_selected$tai_san_ngan_han, data_selected$no_ngan_han, use="complete.obs")
cat("Hệ số tương quan TSNH vs NNH:", round(cor_tsn_nnh,2), "\n")
## Hệ số tương quan TSNH vs NNH: 0.9
Dùng hàm cor() trong R để tính hệ số tương quan Pearson giữa hai biến
định lượng.
use=“complete.obs” giúp loại bỏ các giá trị thiếu trước khi tính.
📈 Ý nghĩa thống kê:
Hệ số r = 0.9 → tương quan dương rất mạnh giữa TSNH và NNH.
Nghĩa là khi TSNH tăng, NNH thường cũng tăng.
Giải thích: hệ số >0.7 có thể cho thấy nợ tăng cùng TSNH
cor_htk_nm <- cor(data_selected$hang_ton_kho, data_selected$nguoi_mua_tra_tien_truoc, use="complete.obs")
cat("Hệ số tương quan HTK vs NM:", round(cor_htk_nm,2), "\n")
## Hệ số tương quan HTK vs NM: 0.8
Hàm cor() trong R được dùng để tính hệ số tương quan Pearson giữa hai
biến định lượng.
use=“complete.obs” đảm bảo chỉ sử dụng các quan sát đầy đủ, không có giá
trị thiếu.
Kết quả: r = 0.8
📊 Về ý nghĩa thống kê:
r = 0.8 → mối tương quan dương mạnh giữa hàng tồn kho và người mua trả
tiền trước.
Nghĩa là: khi hàng tồn kho tăng, số tiền khách hàng trả trước cũng tăng,
phản ánh sự liên kết giữa quy mô sản xuất – dự trữ và khả năng bán
hàng/đặt trước.
lm1 <- lm(doanh_so_thuan ~ von_chu_so_huu, data = data_selected)
summary(lm1)
##
## Call:
## lm(formula = doanh_so_thuan ~ von_chu_so_huu, data = data_selected)
##
## Residuals:
## Min 1Q Median 3Q Max
## -9.686e+11 -5.060e+11 2.516e+10 6.366e+11 7.869e+11
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1.529e+12 5.547e+11 2.756 0.0248 *
## von_chu_so_huu 3.581e-02 9.817e-02 0.365 0.7247
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 7.028e+11 on 8 degrees of freedom
## Multiple R-squared: 0.01636, Adjusted R-squared: -0.1066
## F-statistic: 0.1331 on 1 and 8 DF, p-value: 0.7247
Kết quả chính:
Hệ số góc (β₁) = 0.0365 → tác động dương nhưng nhỏ
p-value = 0.7247 > 0.05 → không có ý nghĩa thống kê
R² = 0.016 → mô hình chỉ giải thích được 1.6% biến thiên doanh số
📊 Về ý nghĩa thống kê:
Không có bằng chứng cho thấy vốn chủ sở hữu ảnh hưởng đáng kể đến doanh
số thuần trong mẫu quan sát.
Độ phù hợp mô hình thấp → doanh số phụ thuộc vào nhiều yếu tố khác (nợ,
đầu tư, thị trường…).
lm2 <- lm(tai_san_ngan_han ~ hang_ton_kho, data = data_selected)
summary(lm2)
##
## Call:
## lm(formula = tai_san_ngan_han ~ hang_ton_kho, data = data_selected)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.474e+12 -6.837e+11 -6.113e+11 2.740e+10 4.244e+12
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -1.563e+12 1.530e+12 -1.022 0.336668
## hang_ton_kho 2.218e+00 3.169e-01 6.999 0.000113 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.731e+12 on 8 degrees of freedom
## Multiple R-squared: 0.8596, Adjusted R-squared: 0.8421
## F-statistic: 48.98 on 1 and 8 DF, p-value: 0.0001128
Hệ số góc β₁ = 2.218: khi hàng tồn kho tăng thêm 1 đơn vị, tài sản
ngắn hạn tăng trung bình 2.218 đơn vị, nếu các yếu tố khác không
đổi.
p-value < 0.001 → biến HTK có ý nghĩa thống kê mạnh trong việc giải
thích biến thiên của TSNH.
R² = 0.8596 → mô hình giải thích khoảng 85.96% biến động tài sản ngắn
hạn thông qua hàng tồn kho, cho thấy mối quan hệ rất chặt chẽ.
F-statistic = 48.98 với p-value < 0.001 → mô hình tổng thể phù hợp,
đáng tin cậy.
theme_finance <- theme_minimal(base_size = 13) +
theme(
plot.title = element_text(face="bold", hjust=0.5, size=14),
plot.caption = element_text(hjust=0.5, face="italic"),
axis.text.x = element_text(angle=45, hjust=1)
)
data_selected$nam <- 2015:(2015 + nrow(data_selected) - 1)
head(data_selected)
## # A tibble: 6 × 18
## tai_san_ngan_han tai_san_dai_han hang_ton_kho no_ngan_han
## <dbl> <dbl> <dbl> <dbl>
## 1 3211018731920 1878291152766 2437143822512 995785492325
## 2 4182170299524 1693635395548 2858982948566 1298517198101
## 3 4809788192964 1273441750823 3538192056247 1607679312569
## 4 5633632858566 1198475308854 3147381338237 2997356703194
## 5 7130818433089 1066410074669 4203273070739 3269454322565
## 6 7299152349851 4527010691862 4401218373486 5986660581699
## # ℹ 14 more variables: nguoi_mua_tra_tien_truoc <dbl>,
## # doanh_thu_chua_thuc_hien <dbl>, thang_du_von_co_phan <dbl>,
## # doanh_so_thuan <dbl>, von_chu_so_huu <dbl>, tai_san_do_dang_dai_han <dbl>,
## # tong_tai_san <dbl>, he_so_no <dbl>, ty_le_hang_ton <dbl>,
## # ty_le_von_ts <dbl>, ty_suat_doanh_thu <dbl>, nhom_doanh_thu <chr>,
## # nhom_he_so_no <chr>, nam <int>
Thêm cột năm cho dữ liệu — có 10 dòng nên năm 2015–2024.
ggplot(data_selected, aes(x = nam, y = tai_san_ngan_han)) +
geom_col(fill="skyblue", alpha=0.8) + # layer 1: cột
geom_line(color="darkblue", linewidth=1) + # layer 2: đường xu hướng
geom_point(color="blue", size=2) + # layer 3: điểm dữ liệu
geom_smooth(method="lm", se=FALSE, color="orange", linewidth=1) + # layer 4: đường hồi quy
geom_hline(yintercept = mean(data_selected$tai_san_ngan_han, na.rm=TRUE),
linetype="dashed", color="red") + # layer 5: đường trung bình
labs(
title="Tài sản ngắn hạn qua các năm",
x="Năm",
y="Giá trị (VNĐ)",
caption="Nguồn: data_selected"
) +
scale_x_continuous(breaks = 2015:2024) +
theme_finance
## `geom_smooth()` using formula = 'y ~ x'
Biểu đồ thể hiện xu hướng tăng của tài sản ngắn hạn qua các năm
2015–2024.
Cột màu xanh: giá trị tài sản từng năm → cho thấy quy mô tăng dần.
Đường xanh đậm + chấm tròn: diễn biến thực tế qua từng năm.
Đường cam: xu hướng hồi quy tuyến tính → phản ánh mức tăng ổn định theo
thời gian.
Đường đỏ đứt đoạn: giá trị trung bình tài sản ngắn hạn → dùng để so sánh
các năm cao/thấp hơn mức trung bình.
Ý nghĩa kinh tế: doanh nghiệp đang mở rộng quy mô tài sản lưu động, phản
ánh khả năng thanh khoản và đầu tư ngắn hạn được cải thiện qua các
năm.
ggplot(data_selected, aes(x = nam, y = tai_san_dai_han)) +
geom_col(fill="lightgreen", alpha=0.8) +
geom_line(color="darkgreen", linewidth=1) +
geom_point(color="darkgreen", size=2) +
geom_smooth(method="lm", se=FALSE, color="orange", linewidth=1) +
geom_hline(yintercept = mean(data_selected$tai_san_dai_han, na.rm=TRUE),
linetype="dashed", color="red") +
labs(title="Tài sản dài hạn qua các năm", x="Năm", y="Giá trị (VNĐ)") +
scale_x_continuous(breaks = 2015:2024) +
theme_finance
## `geom_smooth()` using formula = 'y ~ x'
Về kỹ thuật:
Biểu đồ gồm 5 layer:
geom_col() – cột màu xanh lá hiển thị giá trị tài sản dài hạn từng
năm.
geom_line() – đường xanh biểu diễn xu hướng biến động qua thời
gian.
geom_point() – các điểm dữ liệu cụ thể từng năm.
geom_smooth(method=“lm”) – đường hồi quy màu cam, cho thấy xu hướng
chung tăng nhẹ.
geom_hline() – đường đỏ đứt đoạn biểu thị mức trung bình toàn kỳ.
Về ý nghĩa kinh tế:
Tài sản dài hạn tăng mạnh giai đoạn 2019–2021, đạt đỉnh năm 2021, sau đó
giảm dần đến 2024.
Xu hướng hồi quy cho thấy doanh nghiệp vẫn duy trì đầu tư dài hạn ổn
định, dù có dao động ngắn hạn.
Mức trung bình (đường đỏ) giúp so sánh năm nào vượt hoặc thấp hơn mức
chuẩn, hỗ trợ đánh giá hiệu quả đầu tư tài sản cố định theo thời
gian.
ggplot(data_selected, aes(x = nam, y = hang_ton_kho)) +
geom_col(fill="pink", alpha=0.8) +
geom_line(color="darkred", linewidth=1) +
geom_point(color="darkred", size=2) +
geom_smooth(method="lm", se=FALSE, color="black", linewidth=1) +
geom_hline(yintercept = median(data_selected$hang_ton_kho, na.rm=TRUE),
linetype="dotted", color="gray") +
labs(title="Hàng tồn kho qua các năm", x="Năm", y="Giá trị (VNĐ)") +
scale_x_continuous(breaks = 2015:2024) +
theme_finance
## `geom_smooth()` using formula = 'y ~ x'
Về kỹ thuật:
Biểu đồ có 5 lớp:
geom_col() – cột hồng thể hiện giá trị hàng tồn kho từng năm.
geom_line() – đường đỏ xu hướng biến động.
geom_point() – điểm dữ liệu từng năm.
geom_smooth(method=“lm”) – đường hồi quy đen thể hiện xu hướng
tăng.
geom_hline() – đường xám đứt biểu thị mức trung vị.
Về ý nghĩa kinh tế:
Hàng tồn kho tăng đều, nhất là từ 2022–2024, phản ánh mức dự trữ hàng
hóa lớn hơn.
Xu hướng hồi quy cho thấy tồn kho tăng ổn định, có thể do mở rộng quy mô
hoặc tiêu thụ chậm.
Mức trung vị giúp nhận biết năm tồn kho cao/thấp hơn trung bình, hỗ trợ
đánh giá hiệu quả quản lý hàng hóa.
ggplot(data_selected, aes(x = nam, y = no_ngan_han)) +
geom_col(fill="plum", alpha=0.8) +
geom_line(color="purple", linewidth=1) +
geom_point(color="purple", size=2) +
geom_smooth(method="lm", se=FALSE, color="darkred", linewidth=1) +
geom_hline(yintercept = mean(data_selected$no_ngan_han, na.rm=TRUE),
linetype="dashed", color="red") +
labs(title="Nợ ngắn hạn qua các năm", x="Năm", y="Giá trị (VNĐ)") +
scale_x_continuous(breaks = 2015:2024) + theme_finance
## `geom_smooth()` using formula = 'y ~ x'
Về kỹ thuật:
geom_col() – cột tím thể hiện giá trị nợ ngắn hạn từng năm.
geom_line() – đường tím biểu diễn xu hướng biến động theo thời
gian.
geom_point() – điểm dữ liệu từng năm.
geom_smooth(method=“lm”) – đường hồi quy nâu, thể hiện xu hướng tăng rõ
rệt.
geom_hline() – đường đỏ đứt đoạn biểu thị mức trung bình toàn kỳ.
Về ý nghĩa kinh tế:
Nợ ngắn hạn tăng mạnh qua các năm, đặc biệt giai đoạn 2020–2024, cho
thấy doanh nghiệp mở rộng vay ngắn hạn hoặc tăng nhu cầu vốn lưu
động.
Đường hồi quy thể hiện xu hướng nợ tăng ổn định, phản ánh sự phụ thuộc
lớn hơn vào nguồn tài trợ ngắn hạn.
So với đường trung bình, các năm gần đây vượt xa mức chuẩn, cho thấy rủi
ro thanh toán ngắn hạn tăng lên.
ggplot(data_selected, aes(x = nam, y = nguoi_mua_tra_tien_truoc)) +
geom_col(fill="khaki", alpha=0.8) +
geom_line(color="saddlebrown", linewidth=1) +
geom_point(color="saddlebrown", size=2) +
geom_smooth(method="lm", se=FALSE, color="blue", linewidth=1) +
geom_hline(yintercept = mean(data_selected$nguoi_mua_tra_tien_truoc, na.rm=TRUE),
linetype="dashed", color="red") +
labs(title="Người mua trả tiền trước qua các năm", x="Năm", y="Giá trị (VNĐ)") +
scale_x_continuous(breaks = 2015:2024) + theme_finance
## `geom_smooth()` using formula = 'y ~ x'
Về kỹ thuật:
Biểu đồ gồm 5 lớp:
geom_col() – cột vàng thể hiện giá trị tiền khách trả trước từng
năm.
geom_line() – đường nâu biểu diễn xu hướng biến động theo thời
gian.
geom_point() – các điểm dữ liệu cụ thể từng năm.
geom_smooth(method=“lm”) – đường hồi quy xanh dương cho thấy xu hướng
tăng ổn định.
geom_hline() – đường đỏ đứt đoạn biểu thị mức trung bình toàn kỳ.
Về ý nghĩa kinh tế:
Khoản người mua trả tiền trước tăng đều qua các năm, phản ánh niềm tin
và nhu cầu của khách hàng đối với doanh nghiệp.
Giai đoạn 2019–2020 đạt đỉnh, sau đó điều chỉnh nhẹ rồi tăng trở lại năm
2024.
Xu hướng hồi quy cho thấy doanh nghiệp có khả năng thu tiền trước tốt
hơn theo thời gian, giúp cải thiện dòng tiền ngắn hạn và giảm áp lực vay
vốn lưu động.
ggplot(data_selected, aes(x = nam, y = doanh_thu_chua_thuc_hien)) +
geom_col(fill="gold", alpha=0.8) +
geom_line(color="darkgoldenrod", linewidth=1) +
geom_point(color="darkgoldenrod", size=2) +
geom_smooth(method="lm", se=FALSE, color="darkorange", linewidth=1) +
geom_hline(yintercept = mean(data_selected$doanh_thu_chua_thuc_hien, na.rm=TRUE),
linetype="dashed", color="red") +
labs(title="Doanh thu chưa thực hiện qua các năm", x="Năm", y="Giá trị (VNĐ)") +
scale_x_continuous(breaks = 2015:2024) + theme_finance
## `geom_smooth()` using formula = 'y ~ x'
Về kỹ thuật:
Biểu đồ gồm 5 lớp:
geom_col() – cột vàng thể hiện doanh thu chưa thực hiện từng năm.
geom_line() – đường nâu biểu diễn xu hướng biến động doanh thu theo thời
gian.
geom_point() – các điểm dữ liệu cụ thể từng năm.
geom_smooth(method=“lm”) – đường hồi quy màu cam cho thấy xu hướng giảm
dần.
geom_hline() – đường đỏ đứt đoạn biểu thị mức trung bình toàn kỳ.
Về ý nghĩa kinh tế:
Doanh thu chưa thực hiện giảm dần rõ rệt từ 2016 đến 2023, phản ánh
doanh nghiệp đang ghi nhận doanh thu nhanh hơn hoặc ít hợp đồng dài hạn
hơn.
Đến 2024 có dấu hiệu phục hồi nhẹ, cho thấy khả năng gia tăng hợp đồng
trả trước hoặc dịch vụ dài hạn.
Xu hướng chung giảm thể hiện hiệu quả trong việc chuyển đổi doanh thu
tiềm năng thành doanh thu thực tế qua các năm.
ggplot(data_selected, aes(x = nam, y = thang_du_von_co_phan)) +
geom_col(fill="lightsteelblue", alpha=0.8) +
geom_line(color="steelblue4", linewidth=1) +
geom_point(color="steelblue4", size=2) +
geom_smooth(method="lm", se=FALSE, color="darkblue", linewidth=1) +
geom_hline(yintercept = mean(data_selected$thang_du_von_co_phan, na.rm=TRUE),
linetype="dashed", color="red") +
labs(title="Thặng dư vốn cổ phần qua các năm", x="Năm", y="Giá trị (VNĐ)") +
scale_x_continuous(breaks = 2015:2024) + theme_finance
## `geom_smooth()` using formula = 'y ~ x'
Về kỹ thuật:
Biểu đồ được tạo từ các lớp:
geom_col() – cột xanh nhạt thể hiện thặng dư vốn cổ phần từng năm.
geom_line() – đường xanh đậm biểu diễn sự thay đổi theo thời gian.
geom_point() – đánh dấu các giá trị cụ thể từng năm.
geom_smooth(method=“lm”) – đường xu hướng hồi quy tuyến tính màu xanh
dương.
geom_hline() – đường đỏ đứt đoạn thể hiện mức trung bình toàn giai
đoạn.
Về ý nghĩa kinh tế:
Giai đoạn 2015–2019: thặng dư vốn thấp, dao động nhỏ → doanh nghiệp chưa
có nhiều hoạt động phát hành thêm cổ phần hoặc thặng dư vốn tích lũy
ít.
Từ 2020–2021: tăng mạnh, đạt đỉnh → cho thấy doanh nghiệp huy động thêm
vốn cổ phần hoặc phát hành cổ phiếu với giá cao hơn mệnh giá.
2022–2024: duy trì ở mức cao, ổn định → phản ánh cơ cấu vốn cổ phần ổn
định và niềm tin nhà đầu tư vững vàng.
ggplot(data_selected, aes(x = nam, y = doanh_so_thuan)) +
geom_col(fill="lightsalmon", alpha=0.8) +
geom_line(color="tomato4", linewidth=1) +
geom_point(color="tomato4", size=2) +
geom_smooth(method="lm", se=FALSE, color="firebrick", linewidth=1) +
geom_hline(yintercept = mean(data_selected$doanh_so_thuan, na.rm=TRUE),
linetype="dashed", color="red") +
labs(title="Doanh số thuần qua các năm", x="Năm", y="Giá trị (VNĐ)") +
scale_x_continuous(breaks = 2015:2024) + theme_finance
## `geom_smooth()` using formula = 'y ~ x'
Về kỹ thuật:
Biểu đồ gồm 5 lớp:
geom_col() – cột cam hiển thị doanh số thuần từng năm.
geom_line() – đường nâu biểu diễn xu hướng biến động doanh thu theo thời
gian.
geom_point() – điểm dữ liệu cụ thể của từng năm.
geom_smooth(method=“lm”) – đường xu hướng hồi quy màu nâu đậm, thể hiện
xu thế tăng nhẹ tổng thể.
geom_hline() – đường đỏ đứt đoạn thể hiện mức trung bình toàn kỳ.
Về ý nghĩa kinh tế:
2015–2018: doanh số thuần tăng nhanh, cho thấy hoạt động kinh doanh mở
rộng mạnh.
2019–2021: đạt đỉnh cao, phản ánh giai đoạn tăng trưởng mạnh nhất.
2022–2023: doanh số giảm sâu, có thể do biến động thị trường hoặc chi
phí gia tăng.
2024: doanh số phục hồi nhẹ, cho thấy dấu hiệu ổn định trở lại.
ggplot(data_selected, aes(x = nam, y = von_chu_so_huu)) +
geom_col(fill="lightblue", alpha=0.8) +
geom_line(color="navy", linewidth=1) +
geom_point(color="navy", size=2) +
geom_smooth(method="lm", se=FALSE, color="steelblue", linewidth=1) +
geom_hline(yintercept = mean(data_selected$von_chu_so_huu, na.rm=TRUE),
linetype="dashed", color="red") +
labs(title="Vốn chủ sở hữu qua các năm", x="Năm", y="Giá trị (VNĐ)") +
scale_x_continuous(breaks = 2015:2024) + theme_finance
## `geom_smooth()` using formula = 'y ~ x'
Về kỹ thuật:
Biểu đồ gồm 5 lớp (layer) chính:
geom_col() – các cột xanh nhạt biểu diễn vốn chủ sở hữu từng năm, giúp
dễ quan sát quy mô theo thời gian.
geom_line() – đường màu xanh đậm thể hiện xu hướng biến động vốn qua các
năm.
geom_point() – các điểm tròn đánh dấu giá trị cụ thể từng năm.
geom_smooth(method = “lm”) – đường xu hướng hồi quy tuyến tính màu xanh
nhạt, cho thấy xu thế tăng trưởng dài hạn.
geom_hline() – đường đỏ đứt đoạn biểu diễn mức vốn chủ sở hữu trung bình
toàn kỳ.
Về ý nghĩa kinh tế:
2015–2019: Vốn chủ sở hữu tăng đều và ổn định, phản ánh doanh nghiệp
tích lũy vốn nội tại tốt, hoạt động kinh doanh hiệu quả.
2020: Có bước nhảy rõ rệt, cho thấy tăng vốn hoặc lợi nhuận giữ lại đột
biến – có thể nhờ mở rộng hoạt động hoặc điều chỉnh cơ cấu vốn.
2021–2023: Duy trì ở mức cao ổn định, chứng tỏ doanh nghiệp giữ được
năng lực tài chính vững mạnh, không bị suy giảm đáng kể.
2024: Tăng nhẹ, củng cố xu thế ổn định – tăng trưởng bền vững của nguồn
vốn chủ sở hữu trong dài hạn.
ggplot(data_selected, aes(x = nam, y = tai_san_do_dang_dai_han)) +
geom_col(fill="lightpink", alpha=0.8) +
geom_line(color="deeppink4", linewidth=1) +
geom_point(color="deeppink4", size=2) +
geom_smooth(method="lm", se=FALSE, color="brown", linewidth=1) +
geom_hline(yintercept = mean(data_selected$tai_san_do_dang_dai_han, na.rm=TRUE),
linetype="dashed", color="red") +
labs(title="Tài sản dở dang dài hạn qua các năm", x="Năm", y="Giá trị (VNĐ)") +
scale_x_continuous(breaks = 2015:2024) + theme_finance
## `geom_smooth()` using formula = 'y ~ x'
Về kỹ thuật:
Biểu đồ gồm 5 lớp (layer) chính:
geom_col() – các cột màu hồng nhạt biểu diễn quy mô tài sản dở dang dài
hạn từng năm.
geom_line() – đường màu tím đậm thể hiện xu hướng biến động giá trị tài
sản qua thời gian.
geom_point() – các điểm tròn đánh dấu giá trị cụ thể của từng năm.
geom_smooth(method = “lm”) – đường nâu hồi quy tuyến tính, phản ánh xu
hướng tăng trưởng dài hạn của chỉ tiêu.
geom_hline() – đường đỏ đứt đoạn thể hiện mức tài sản dở dang dài hạn
trung bình toàn giai đoạn.
Về ý nghĩa kinh tế:
2015–2017: Giá trị tài sản dở dang duy trì ở mức thấp và ổn định – phản
ánh quy mô đầu tư xây dựng chưa mở rộng.
2018–2020: Bắt đầu tăng dần, cho thấy doanh nghiệp mở rộng hoạt động đầu
tư và các dự án dài hạn.
2021–2022: Đạt đỉnh cao, chứng tỏ nhiều dự án lớn được triển khai mạnh
mẽ, có thể là giai đoạn tăng tốc đầu tư.
2023–2024: Có dấu hiệu giảm nhẹ nhưng vẫn cao hơn mức trung bình, cho
thấy doanh nghiệp bước vào giai đoạn hoàn thiện dự án, giảm dần đầu tư
mới.
👉 Tóm lại: Tài sản dở dang dài hạn của DIG có xu hướng tăng ổn định
trong dài hạn, phản ánh chiến lược đầu tư mở rộng quy mô hoạt động của
doanh nghiệp.
ggplot(data_selected, aes(x = nam, y = ty_le_hang_ton)) +
geom_col(fill="lightcyan", alpha=0.8) +
geom_line(color="darkcyan", linewidth=1) +
geom_point(color="darkcyan", size=2) +
geom_smooth(method="loess", se=FALSE, color="darkblue", linewidth=1) +
geom_hline(yintercept = mean(data_selected$ty_le_hang_ton, na.rm=TRUE), linetype="dashed", color="red") +
labs(title="Tỷ lệ hàng tồn kho / TSNH qua các năm", x="Năm", y="Tỷ lệ") +
scale_x_continuous(breaks = 2015:2024) + theme_finance
## `geom_smooth()` using formula = 'y ~ x'
Về kỹ thuật:
Biểu đồ được tạo từ 5 lớp (layer) trong ggplot2:
geom_col() – các cột xanh nhạt biểu diễn tỷ lệ hàng tồn kho / TSNH theo
từng năm.
geom_line() – đường màu xanh đậm cho thấy xu hướng biến động tỷ lệ tồn
kho qua thời gian.
geom_point() – các điểm xanh lam thể hiện giá trị cụ thể từng năm, giúp
người xem dễ so sánh.
geom_smooth(method = “lm”) – đường hồi quy tuyến tính màu xanh dương
nhạt, mô tả xu hướng giảm nhẹ tổng thể.
geom_hline() – đường đỏ đứt đoạn biểu diễn mức trung bình toàn kỳ của tỷ
lệ hàng tồn kho trên TSNH.
Về ý nghĩa kinh tế:
2015–2017: Tỷ lệ hàng tồn kho / TSNH ở mức cao, dao động quanh 0,7–0,8,
cho thấy doanh nghiệp tích trữ hàng hóa nhiều, có thể để đáp ứng nhu cầu
tăng mạnh hoặc phòng ngừa rủi ro cung ứng.
2018–2020: Tỷ lệ giảm dần, phản ánh chính sách quản trị hàng tồn kho
được cải thiện, doanh nghiệp tối ưu hóa vòng quay hàng hóa.
2021: Giảm mạnh xuống mức thấp nhất, có thể do doanh thu tăng nhanh hơn
lượng hàng dự trữ, hoặc doanh nghiệp giảm quy mô lưu kho để tiết kiệm
chi phí.
2022–2024: Tỷ lệ nhích lên nhẹ, nhưng vẫn dưới mức trung bình, cho thấy
doanh nghiệp duy trì chiến lược kiểm soát hàng tồn kho thận trọng và
hiệu quả hơn.
→ Tổng thể, đường hồi quy đi xuống nhẹ, thể hiện xu hướng giảm dần tỷ
trọng hàng tồn kho trong tài sản ngắn hạn, hàm ý hiệu quả quản lý vốn
lưu động được cải thiện.
ggplot(data_selected, aes(x = nam, y = he_so_no)) +
geom_col(fill="gray80", alpha=0.8) +
geom_line(color="black", linewidth=1) +
geom_point(color="black", size=2) +
geom_smooth(method="loess", se=FALSE, color="red", linewidth=1) +
geom_hline(yintercept = mean(data_selected$he_so_no, na.rm=TRUE), linetype="dashed", color="red") +
labs(title="Hệ số nợ qua các năm", x="Năm", y="Tỷ lệ") +
scale_x_continuous(breaks = 2015:2024) + theme_finance
## `geom_smooth()` using formula = 'y ~ x'
Về kỹ thuật:
Biểu đồ được tạo từ 5 lớp (layer) trong ggplot
geom_col() – các cột xám nhạt biểu diễn hệ số nợ của doanh nghiệp theo
từng năm.
geom_line() – đường đen mô tả biến động thực tế của hệ số nợ qua thời
gian.
geom_point() – các điểm đen thể hiện giá trị cụ thể của từng năm.
geom_smooth(method = “loess”) – đường cong hồi quy màu đỏ, cho thấy xu
hướng tổng thể biến động theo chu kỳ, không hoàn toàn tuyến tính.
geom_hline() – đường đỏ đứt đoạn biểu diễn mức trung bình toàn kỳ của hệ
số nợ.
Về ý nghĩa kinh tế:
2015–2017: Hệ số nợ tăng dần từ mức thấp (~0,4) lên khoảng 0,6–0,7, thể
hiện doanh nghiệp gia tăng sử dụng đòn bẩy tài chính để tài trợ cho mở
rộng hoạt động.
2018–2020: Tiếp tục tăng mạnh, đạt đỉnh trên 1,2 lần vào năm 2020, cho
thấy doanh nghiệp phụ thuộc đáng kể vào nguồn vốn vay, có thể nhằm tận
dụng lãi suất thấp hoặc mở rộng đầu tư.
2021–2022: Giảm sâu, xuống mức thấp nhất khoảng 0,5, phản ánh xu hướng
giảm nợ hoặc tái cơ cấu tài chính, giúp giảm rủi ro đòn bẩy.
2023–2024: Hệ số nợ phục hồi trở lại, tiến gần mức trung bình dài hạn
(~0,8), doanh nghiệp đã cân bằng lại cấu trúc vốn duy trì mức vay hợp lý
cho tăng trưởng.
→ Nhìn chung, đường xu hướng cong đỏ (loess) cho thấy chu kỳ tài chính
rõ nét: giai đoạn tăng mạnh – điều chỉnh – ổn định trở lại, phản ánh quá
trình quản trị nợ linh hoạt theo biến động của môi trường kinh
doanh.
ggplot(data_selected, aes(x = nam, y = ty_le_von_ts)) +
geom_col(fill="palegreen", alpha=0.8) +
geom_line(color="darkgreen", linewidth=1) +
geom_point(color="darkgreen", size=2) +
geom_smooth(method="loess", se=FALSE, color="darkblue", linewidth=1) +
geom_hline(yintercept = mean(data_selected$ty_le_von_ts, na.rm=TRUE), linetype="dashed", color="red") +
labs(title="Tỷ lệ VCSH / Tổng tài sản qua các năm", x="Năm", y="Tỷ lệ") +
scale_x_continuous(breaks = 2015:2024) + theme_finance
## `geom_smooth()` using formula = 'y ~ x'
Về kỹ thuật:
Biểu đồ gồm 5 lớp chính:
geom_col() – cột màu xanh nhạt biểu diễn tỷ lệ VCSH/Tổng tài sản từng
năm.
geom_line() – đường xanh đậm thể hiện xu hướng biến động của tỷ lệ
này.
geom_point() – các điểm tròn xanh đánh dấu giá trị cụ thể qua từng
năm.
geom_smooth(method=“loess”) – đường cong trơn màu xanh dương, mô tả xu
thế tổng quát của dữ liệu.
geom_hline() – đường đỏ đứt đoạn thể hiện mức trung bình của tỷ lệ trong
toàn giai đoạn.
Về ý nghĩa kinh tế:
2015–2017: Tỷ lệ VCSH/Tổng tài sản ở mức cao và ổn định → doanh nghiệp
chủ yếu dùng vốn tự có, ít phụ thuộc nợ.
2018–2020: Tỷ lệ giảm mạnh, đặc biệt năm 2020 → mức độ sử dụng đòn bẩy
tài chính tăng, doanh nghiệp huy động thêm nợ hoặc tăng đầu tư.
2021–2022: Tỷ lệ phục hồi mạnh, vượt mức trung bình → cho thấy doanh
nghiệp tái cân đối nguồn vốn, củng cố năng lực tài chính.
2023–2024: Giảm nhẹ nhưng vẫn gần mức trung bình → cơ cấu vốn duy trì ổn
định, phản ánh sự cân bằng hợp lý giữa vốn chủ và nợ.
Kết luận: Tỷ lệ VCSH/Tổng tài sản của DIG dao động quanh mức 45–55%, thể
hiện cấu trúc tài chính tương đối an toàn và ổn định trong dài hạn.
ggplot(data_selected, aes(x = nam, y = ty_suat_doanh_thu)) +
geom_col(fill="plum", alpha=0.8) +
geom_line(color="purple4", linewidth=1) +
geom_point(color="purple4", size=2) +
geom_smooth(method="loess", se=FALSE, color="black", linewidth=1) +
geom_hline(yintercept = mean(data_selected$ty_suat_doanh_thu, na.rm=TRUE), linetype="dashed", color="red") +
labs(title="Tỷ suất doanh thu / TSDH qua các năm", x="Năm", y="Tỷ lệ") +
scale_x_continuous(breaks = 2015:2024) + theme_finance
## `geom_smooth()` using formula = 'y ~ x'
Về kỹ thuật:
Biểu đồ gồm 5 lớp (layer):
geom_col() – cột tím nhạt biểu diễn tỷ suất doanh thu/Tài sản dài hạn
(TSDH) từng năm.
geom_line() – đường tím đậm thể hiện xu hướng biến động của tỷ suất theo
thời gian.
geom_point() – các điểm tròn tím đánh dấu giá trị cụ thể mỗi năm.
geom_smooth(method=“loess”) – đường cong đen mô tả xu hướng tổng thể,
làm mượt biến động.
geom_hline() – đường đỏ đứt đoạn biểu diễn mức trung bình toàn kỳ.
Về ý nghĩa kinh tế:
2015–2018: Tỷ suất tăng nhanh, đạt đỉnh giai đoạn 2018–2019 (~2 lần) →
cho thấy hiệu quả sử dụng TSDH cao, doanh nghiệp tận dụng tốt tài sản
đầu tư cho hoạt động tạo doanh thu.
2020–2022: Giảm mạnh dưới mức trung bình → phản ánh hiệu quả khai thác
tài sản giảm, có thể do đầu tư dở dang hoặc thị trường suy yếu.
2023–2024: Tỷ suất nhích tăng nhẹ → hiệu quả bắt đầu phục hồi, cho thấy
khả năng sử dụng TSDH đang được cải thiện.
👉 Kết luận: Hiệu quả sử dụng tài sản dài hạn của DIG đạt đỉnh năm
2018–2019, sau đó giảm nhưng có dấu hiệu phục hồi cuối kỳ, phản ánh quá
trình tái đầu tư và điều chỉnh hoạt động sản xuất – kinh doanh.
df_15 <- data_selected %>% select(nam, tai_san_ngan_han, no_ngan_han) %>% pivot_longer(-nam, names_to="Loai", values_to="GiaTri")
ggplot(df_15, aes(x=nam, y=GiaTri, fill=Loai)) +
geom_col(position="dodge", alpha=0.8) +
geom_line(aes(group=Loai, color=Loai), linewidth=1) +
geom_point(aes(color=Loai), size=2) +
geom_hline(yintercept = mean(data_selected$tai_san_ngan_han, na.rm=TRUE), linetype="dashed", color="red") +
labs(title="So sánh TSNH & Nợ ngắn hạn", x="Năm", y="Giá trị (VNĐ)", fill="Loại", color="Loại") +
scale_x_continuous(breaks = 2015:2024) + theme_finance
Về kỹ thuật:
Biểu đồ gồm 5 lớp (layer):
geom_col() – các cột song song màu đỏ và xanh ngọc, thể hiện giá trị nợ
ngắn hạn và tài sản ngắn hạn (TSNH) theo từng năm.
genm_line() – đường nối cùng màu biểu diễn xu hướng biến động của từng
chỉ tiêu.
geom_point() – các điểm tròn đánh dấu giá trị cụ thể mỗi năm.
geom_hline() – đường đỏ đứt đoạn biểu diễn mức TSNH trung bình toàn
kỳ.
scale_x_continuous() – hiển thị rõ mốc thời gian 2015–2024.
Về ý nghĩa tài chính:
2015–2019: TSNH và nợ ngắn hạn cùng tăng, nhưng TSNH luôn cao hơn, phản
ánh khả năng thanh toán ngắn hạn tốt, doanh nghiệp giữ được dự trữ tài
sản lưu động ổn định.
2020–2021: Khoảng cách giữa TSNH và nợ ngắn hạn thu hẹp, cho thấy áp lực
thanh khoản tăng – có thể do dòng tiền bị ứ đọng hoặc đầu tư dở
dang.
2022–2024: TSNH tăng mạnh vượt xa nợ ngắn hạn, thể hiện khả năng tự chủ
tài chính ngắn hạn cải thiện đáng kể.
👉 Kết luận:
DIG duy trì cơ cấu vốn lưu động lành mạnh, với tài sản ngắn hạn đủ bù
đắp nợ ngắn hạn, đặc biệt giai đoạn 2022–2024 cho thấy sức mạnh tài
chính ngắn hạn tăng rõ rệt và rủi ro thanh khoản giảm.
df_16 <- data_selected %>% select(nam, tai_san_dai_han, von_chu_so_huu) %>% pivot_longer(-nam, names_to="Loai", values_to="GiaTri")
ggplot(df_16, aes(x=nam, y=GiaTri, fill=Loai)) +
geom_col(position="dodge", alpha=0.8) +
geom_line(aes(group=Loai, color=Loai), linewidth=1) +
geom_point(aes(color=Loai), size=2) +
geom_hline(yintercept = mean(data_selected$tai_san_dai_han, na.rm=TRUE), linetype="dashed", color="red") +
labs(title="So sánh TSDH & Vốn chủ sở hữu", x="Năm", y="Giá trị (VNĐ)", fill="Loại", color="Loại") +
scale_x_continuous(breaks = 2015:2024) + theme_finance
Về kỹ thuật:
Biểu đồ gồm 5 lớp (layer):
geom_col() – các cột song song màu đỏ và xanh ngọc, thể hiện giá trị tài
sản dài hạn (TSDH) và vốn chủ sở hữu (VCSH) theo từng năm.
geom_line() – đường nối cùng màu thể hiện xu hướng biến động của từng
chỉ tiêu.
geom_point() – điểm tròn đánh dấu giá trị cụ thể mỗi năm.
geom_hline() – đường đỏ đứt đoạn biểu diễn mức TSDH trung bình toàn
kỳ.
scale_x_continuous() – hiển thị rõ mốc thời gian 2015–2024.
Về ý nghĩa tài chính:
2015–2019: VCSH tăng đều, trong khi TSDH ổn định ở mức thấp → công ty
duy trì đầu tư dài hạn thận trọng.
2020–2021: Cả hai cùng tăng mạnh, đặc biệt TSDH tăng vọt → giai đoạn DIG
mở rộng quy mô đầu tư, phát triển dự án mới.
2022–2024: VCSH tiếp tục tăng, vượt xa TSDH → cơ cấu vốn an toàn, doanh
nghiệp chủ động tài trợ tài sản dài hạn bằng vốn tự có.
👉 Kết luận:
DIG đang có cơ cấu tài chính vững chắc, với vốn chủ sở hữu tăng mạnh và
bao phủ hoàn toàn tài sản dài hạn, cho thấy khả năng tự chủ tài chính
cao, ít phụ thuộc nợ vay dài hạn và nền tảng tài chính ổn định để phát
triển bền vững.
### 4.17 So sánh Tài sản dở dang & Người mua trả tiền trước
df_17 <- data_selected %>% select(nam, tai_san_do_dang_dai_han, nguoi_mua_tra_tien_truoc) %>% pivot_longer(-nam, names_to="Loai", values_to="GiaTri")
ggplot(df_17, aes(x=nam, y=GiaTri, fill=Loai)) +
geom_col(position="dodge", alpha=0.8) +
geom_line(aes(group=Loai, color=Loai), linewidth=1) +
geom_point(aes(color=Loai), size=2) +
geom_hline(yintercept = mean(data_selected$tai_san_do_dang_dai_han, na.rm=TRUE), linetype="dashed", color="red") +
labs(title="So sánh Tài sản dở dang dài hạn & Người mua trả tiền trước", x="Năm", y="Giá trị (VNĐ)", fill="Loại", color="Loại") +
scale_x_continuous(breaks = 2015:2024) + theme_finance
Về kỹ thuật:
Biểu đồ gồm 5 lớp (layer):
geom_col() – các cột song song màu đỏ và xanh ngọc, thể hiện giá trị
người mua trả tiền trước và tài sản dở dang dài hạn theo từng năm.
geom_line() – các đường cùng màu thể hiện xu hướng biến động của từng
chỉ tiêu.
geom_point() – điểm tròn đánh dấu giá trị cụ thể mỗi năm.
geom_hline() – đường đỏ đứt đoạn biểu diễn mức tài sản dở dang dài hạn
trung bình toàn kỳ.
scale_x_continuous() – hiển thị rõ mốc thời gian 2015–2024.
Về ý nghĩa tài chính:
2015–2019: Cả hai chỉ tiêu tăng, song người mua trả tiền trước tăng
nhanh hơn nhiều → dự án mở rộng, khách hàng đặt tiền sớm.
2020–2021: Đạt đỉnh, thể hiện giai đoạn cao điểm triển khai dự án bất
động sản.
2022–2024: Giảm nhẹ rồi tăng lại mạnh năm 2024 → dòng tiền khách hàng
quay trở lại, dự án tái khởi động.
Tài sản dở dang dài hạn duy trì mức ổn định thấp, cho thấy tiến độ đầu
tư kiểm soát tốt.
ggplot(data_selected, aes(x = hang_ton_kho, y = nguoi_mua_tra_tien_truoc)) +
geom_point(color="darkred", size=2) +
geom_smooth(method="lm", se=FALSE, color="blue", linewidth=1) +
geom_vline(xintercept = mean(data_selected$hang_ton_kho, na.rm=TRUE), linetype="dotted") +
geom_hline(yintercept = mean(data_selected$nguoi_mua_tra_tien_truoc, na.rm=TRUE), linetype="dotted") +
geom_rug(sides="bl", alpha=0.3) +
labs(title="Hàng tồn kho vs Người mua trả tiền trước", x="Hàng tồn kho", y="Người mua trả tiền trước") +
theme_finance
## `geom_smooth()` using formula = 'y ~ x'
Về kỹ thuật:
Biểu đồ gồm 5 lớp (layer) chính:
geom_point() – các điểm tròn đỏ sẫm biểu diễn mối quan hệ giữa hàng tồn
kho và người mua trả tiền trước theo từng năm.
geom_smooth(method = “lm”) – đường hồi quy tuyến tính màu xanh, cho thấy
xu hướng tổng thể giữa hai biến.
geom_vline() và geom_hline() – hai đường chấm đen biểu diễn giá trị
trung bình của mỗi biến, chia đồ thị thành bốn vùng để dễ nhận biết vị
trí dữ liệu.
geom_rug() – các vạch nhỏ ở cạnh dưới và trái, giúp thể hiện phân bố dữ
liệu.
Về ý nghĩa tài chính:
Đường hồi quy có hệ số dương rõ rệt, chứng tỏ mối quan hệ tuyến tính
thuận giữa hàng tồn kho và người mua trả tiền trước.
Khi hàng tồn kho tăng, người mua trả tiền trước cũng tăng → phản ánh
doanh nghiệp ghi nhận doanh thu dở dang lớn hơn, nhiều hợp đồng bán hàng
chưa bàn giao tài sản.
Điều này cho thấy DIG đang mở rộng hoạt động đầu tư và kinh doanh bất
động sản, với lượng hàng tồn kho cao được hỗ trợ bởi dòng tiền ứng trước
của khách hàng, giảm áp lực vốn lưu động.
ggplot(data_selected, aes(x = von_chu_so_huu, y = doanh_so_thuan)) +
geom_point(color="darkblue", size=2) +
geom_smooth(method="lm", se=FALSE, color="red", linewidth=1) +
geom_vline(xintercept = mean(data_selected$von_chu_so_huu, na.rm=TRUE), linetype="dotted") +
geom_hline(yintercept = mean(data_selected$doanh_so_thuan, na.rm=TRUE), linetype="dotted") +
geom_rug(sides="bl", alpha=0.3) +
labs(title="Doanh số thuần vs Vốn chủ sở hữu", x="Vốn chủ sở hữu", y="Doanh số thuần") +
theme_finance
## `geom_smooth()` using formula = 'y ~ x'
ggplot(data_selected, aes(…))
→ Khởi tạo biểu đồ với dữ liệu data_selected, trục X là vốn chủ sở hữu,
trục Y là doanh số thuần.
geom_point(color=“darkblue”, size=2)
→ Vẽ các điểm dữ liệu (mỗi năm là 1 điểm màu xanh đậm).
geom_smooth(method=“lm”, se=FALSE, color=“red”, linewidth=1)
→ Thêm đường hồi quy tuyến tính (linear model) màu đỏ, không hiển thị
vùng sai số.
geom_vline(…) và geom_hline(…)
→ Thêm đường trung bình của X và Y (đường chấm dọc và ngang) để so sánh
vị trí tương đối.
geom_rug(sides=“bl”, alpha=0.3)
→ Hiển thị phân bố dữ liệu dọc hai trục (các vạch nhỏ ở cạnh dưới và
trái).
labs(…)
Biểu đồ thể hiện mối quan hệ giữa Doanh số thuần và Vốn chủ sở
hữu.
Đường hồi quy màu đỏ có độ dốc rất nhỏ, cho thấy tương quan dương yếu
giữa hai biến.
Nghĩa là: khi vốn chủ sở hữu tăng, doanh thu thuần chỉ tăng nhẹ, chưa
phản ánh rõ hiệu quả sử dụng vốn.
Các điểm dữ liệu phân tán khá rộng → có thể bị ảnh hưởng bởi yếu tố thị
trường, chu kỳ dự án hoặc doanh thu ghi nhận không đều theo từng
năm.
👉 Kết luận: Doanh nghiệp chưa tối ưu hóa hiệu quả sử dụng vốn chủ sở
hữu, doanh thu tăng chậm hơn so với tốc độ tăng vốn.
if(!"tong_tai_san" %in% names(data_selected)) {
data_selected <- data_selected %>% mutate(tong_tai_san = tai_san_ngan_han + tai_san_dai_han)
}
ggplot(data_selected, aes(x = nam, y = tong_tai_san)) +
geom_col(fill="gold", alpha=0.8) +
geom_line(color="darkorange", linewidth=1) +
geom_point(color="orange", size=2) +
geom_smooth(method="lm", se=FALSE, color="red", linewidth=1) +
geom_hline(yintercept = mean(data_selected$tong_tai_san, na.rm=TRUE), linetype="dashed", color="red") +
labs(title="Tổng tài sản qua các năm", x="Năm", y="Tổng giá trị (VNĐ)") +
scale_x_continuous(breaks = 2015:2024) + theme_finance
## `geom_smooth()` using formula = 'y ~ x'
Về kỹ thuật:
Biểu đồ gồm 5 lớp (layer):
geom_col() – các cột vàng thể hiện tổng tài sản từng năm, giúp quan sát
quy mô theo thời gian.
geom_line() – đường cam nối các điểm, biểu diễn xu hướng biến động tài
sản.
geom_point() – các điểm tròn màu cam đánh dấu giá trị cụ thể mỗi
năm.
geom_smooth(method = “lm”) – đường hồi quy tuyến tính màu đỏ, cho thấy
xu hướng tăng dài hạn.
geom_hline() – đường đỏ đứt đoạn thể hiện mức tổng tài sản trung bình
giai đoạn 2015–2024.
Về ý nghĩa tài chính:
2015–2019: Tổng tài sản tăng đều, cho thấy doanh nghiệp mở rộng quy mô
và đầu tư tích cực.
2020–2021: Tăng mạnh đột biến, phản ánh giai đoạn mở rộng tài sản lớn
(đầu tư, dự án mới).
2022–2024: Tiếp tục duy trì mức cao, thể hiện năng lực tài chính và tích
lũy tài sản ổn định.
👉 Kết luận:
Tổng tài sản của DIG có xu hướng tăng mạnh và ổn định, phản ánh quy mô
hoạt động ngày càng mở rộng và năng lực tài chính được củng cố trong dài
hạn.