knitr::opts_chunk$set(echo = TRUE)
options(width = 60)
library(showtext)
showtext_auto()
font_add_google("Roboto", "roboto")
library(readxl)
library(tidyverse)
library(lubridate)
library(data.table)
library(stringr)
library(recipes)
library(moments)
library(psych)
library(dplyr)
library(tidyr)
library(stringr)
library(ggplot2)
library(scales)
library(kableExtra)
library(janitor)
library(reshape2)
library(stringi)
dataset <- read_excel("C:/Users/DELL/Downloads/AA.xlsx")
head(dataset)
## # A tibble: 6 × 13
## `Mal ID` Username Gender `Days Watched` `Mean Score`
## <dbl> <chr> <chr> <dbl> <dbl>
## 1 1 Xinil Male 142. 7.37
## 2 3 Aokaado Male 68.6 7.34
## 3 4 Crystal Female 213. 6.68
## 4 20 vondur Male 73.1 8.06
## 5 36 Baman Male 272. 5.9
## 6 44 beddan Male 18.6 7.6
## # ℹ 8 more variables: Watching <dbl>, Completed <dbl>,
## # `On Hold` <dbl>, Dropped <dbl>, `Plan to Watch` <dbl>,
## # `Total Entries` <dbl>, Rewatched <dbl>,
## # `Episodes Watched` <dbl>
Giải thích: Hàm head() hiển thị 6 dòng đầu tiên của bộ dữ liệu.
Nhận xét: Giúp người phân tích có cái nhìn trực quan về cấu trúc dữ
liệu: tên biến, kiểu dữ liệu, dạng giá trị.Phát hiện nhanh lỗi nhập
liệu, giá trị NA, hoặc định dạng sai (chẳng hạn cột số nhưng bị lưu dạng
ký tự).
dim(dataset)
## [1] 224383 13
Giải thích: Hàm dim() trả về kích thước của bộ dữ liệu, bao gồm số
dòng (quan sát) và số cột (biến).
Nhận xét: Kết quả cho biết bộ dữ liệu có 224,383 quan sát và 13 biến (có
224,383 người dùng và 13 đặc trưng mô tả mỗi người dùng đó).
names(dataset)
## [1] "Mal ID" "Username"
## [3] "Gender" "Days Watched"
## [5] "Mean Score" "Watching"
## [7] "Completed" "On Hold"
## [9] "Dropped" "Plan to Watch"
## [11] "Total Entries" "Rewatched"
## [13] "Episodes Watched"
Giải thích: Hàm name() hiển thị tên của tất cả các biến (cột) trong
bộ dữ liệu.
Nhận xét: Việc liệt kê tên biến giúp người phân tích nắm được cấu trúc
thông tin, phục vụ cho việc chọn lọc, xử lý và trực quan hóa dữ liệu ở
các bước sau.
capture.output(str(dataset))
## [1] "tibble [224,383 × 13] (S3: tbl_df/tbl/data.frame)"
## [2] " $ Mal ID : num [1:224383] 1 3 4 20 36 44 47 66 70 77 ..."
## [3] " $ Username : chr [1:224383] \"Xinil\" \"Aokaado\" \"Crystal\" \"vondur\" ..."
## [4] " $ Gender : chr [1:224383] \"Male\" \"Male\" \"Female\" \"Male\" ..."
## [5] " $ Days Watched : num [1:224383] 142.3 68.6 212.8 73.1 272.1 ..."
## [6] " $ Mean Score : num [1:224383] 7.37 7.34 6.68 8.06 5.9 7.6 6.84 7.53 7.18 6.38 ..."
## [7] " $ Watching : num [1:224383] 1 23 16 11 27 0 15 34 30 13 ..."
## [8] " $ Completed : num [1:224383] 233 137 636 94 1144 ..."
## [9] " $ On Hold : num [1:224383] 8 99 303 11 11 0 22 13 9 0 ..."
## [10] " $ Dropped : num [1:224383] 93 44 0 2 55 0 3 6 8 0 ..."
## [11] " $ Plan to Watch : num [1:224383] 64 40 45 20 338 0 19 10 22 2 ..."
## [12] " $ Total Entries : num [1:224383] 399 343 1000 138 1575 ..."
## [13] " $ Rewatched : num [1:224383] 60 15 10 7 36 0 1 50 15 0 ..."
## [14] " $ Episodes Watched: num [1:224383] 8458 4072 12781 4374 16309 ..."
Giải thích:
- Hàm stc() mô tả cấu trúc chi tiết của dataset, bao gồm loại dữ liệu
(numeric, character, factor,…) và vài giá trị mẫu của từng biến.
- Hàm capture.output() được dùng để lưu kết quả xuất ra thay vì in ra
màn hình.
Nhận xét: Giúp người phân tích hiểu rõ kiểu dữ liệu của từng biến, từ đó
chọn phương pháp xử lý phù hợp.
summary(dataset)
## Mal ID Username Gender
## Min. : 1 Length:224383 Length:224383
## 1st Qu.: 131461 Class :character Class :character
## Median : 317908 Mode :character Mode :character
## Mean : 384653
## 3rd Qu.: 481725
## Max. :1291097
##
## Days Watched Mean Score Watching
## Min. : 0.00 Min. : 0.000 Min. : 0.00
## 1st Qu.: 6.30 1st Qu.: 7.000 1st Qu.: 1.00
## Median : 29.20 Median : 7.800 Median : 4.00
## Mean : 53.99 Mean : 6.808 Mean : 10.18
## 3rd Qu.: 72.60 3rd Qu.: 8.470 3rd Qu.: 10.00
## Max. :105338.60 Max. :10.000 Max. :2934.00
## NA's :8 NA's :8 NA's :8
## Completed On Hold Dropped
## Min. : 0.0 Min. : 0.000 Min. : 0.00
## 1st Qu.: 9.0 1st Qu.: 0.000 1st Qu.: 0.00
## Median : 59.0 Median : 1.000 Median : 1.00
## Mean : 151.9 Mean : 7.979 Mean : 10.39
## 3rd Qu.: 183.0 3rd Qu.: 7.000 3rd Qu.: 8.00
## Max. :13226.0 Max. :5167.000 Max. :14341.00
## NA's :8 NA's :8 NA's :8
## Plan to Watch Total Entries Rewatched
## Min. : 0.00 Min. : 0.0 Min. : 0.00
## 1st Qu.: 0.00 1st Qu.: 16.0 1st Qu.: 0.00
## Median : 7.00 Median : 94.0 Median : 0.00
## Mean : 42.11 Mean : 222.5 Mean : 10.45
## 3rd Qu.: 37.00 3rd Qu.: 279.0 3rd Qu.: 5.00
## Max. :21804.00 Max. :24817.0 Max. :13215.00
## NA's :8 NA's :8 NA's :8
## Episodes Watched
## Min. : 0
## 1st Qu.: 377
## Median : 1748
## Mean : 3441
## 3rd Qu.: 4386
## Max. :5433345
## NA's :8
Giải thích: Hàm summary() cung cấp thống kê mô tả cơ bản cho từng
biến.
- Biến định lượng hiển thị min, max, median, mean, quartiles.
- Biến định tính hiển thị tần suất từng mức giá trị.
Nhận xét: Giúp nắm được xu hướng trung tâm, phạm vi giá trị, và phát
hiện các giá trị bất thường (outlier) trong dữ liệu.
sum(duplicated(dataset))
## [1] 0
Giải thích:
- Hàm duplicated() xác định những dòng (quan sát) bị trùng trong bộ dữ
liệu, trả về giá trị logic TRUE/FALSE.
- Hàm sum() cộng tổng số TRUE → tức là đếm số dòng bị trùng lặp. Nếu kết
quả > 0, bộ dữ liệu có các bản ghi lặp lại và cần xử lý (loại bỏ hoặc
gộp lại). Nếu = 0, dữ liệu là duy nhất, không bị trùng.
sum(sapply(dataset, is.numeric))
## [1] 11
Giải thích:
- Hàm sapply() áp dụng is.numeric cho từng biến trong dataset để kiểm
tra xem biến đó có phải dạng số hay không.
- Hàm sum() sau đó cộng tổng số biến có giá trị TRUE chính là số lượng
biến định lượng trong dataset.
Nhận xét: Giúp xác định có bao nhiêu biến có thể sử dụng cho các phép
tính thống kê, mô hình hóa hoặc trực quan hóa định lượng.
sum(sapply(dataset, function(x) is.factor(x) | is.character(x)))
## [1] 2
Giải thích:
- Kiểm tra xem từng biến có phải kiểu phân loại (factor) hoặc kiểu chuỗi
ký tự (character) hay không.
- Hàm sum() sẽ cộng tổng các biến có kiểu đó trả về số lượng biến định
tính.
Nhận xét: Giúp xác định có bao nhiêu biến định tính để dùng trong việc
phân tích nhóm, vẽ biểu đồ tần suất, hoặc dùng làm biến phân loại trong
mô hình thống kê.
names(dataset)[sapply(dataset, is.numeric)]
## [1] "Mal ID" "Days Watched"
## [3] "Mean Score" "Watching"
## [5] "Completed" "On Hold"
## [7] "Dropped" "Plan to Watch"
## [9] "Total Entries" "Rewatched"
## [11] "Episodes Watched"
Giải thích: Hàm sapply(dataset, is.numeric) tạo ra một vector logic,
TRUE tại những biến có kiểu số. Sau đó names(dataset)[…] lọc ra tên của
các biến định lượng.
Nhận xét: Giúp người phân tích biết rõ biến nào có thể sử dụng cho các
phép tính trung bình, phương sai, hoặc vẽ biểu đồ dạng histogram,
scatter plot,…
names(dataset)[sapply(dataset, function(x) is.factor(x) | is.character(x))]
## [1] "Username" "Gender"
Giải thích: Hàm sapply(dataset, function(x) is.factor(x) |
is.character(x)) kiểm tra từng cột trong dataset. Trong đó:
- is.factor(x) kiểm tra xem biến có kiểu phân loại (như giới tính, trạng
thái xem phim, thể loại, v.v.) không.
- is.character(x) kiểm tra xem biến có kiểu chuỗi ký tự không (ví dụ:
tên anime, username, thể loại…).
- Dấu | nghĩa là “hoặc”: chỉ cần thỏa một trong hai điều kiện là
TRUE.
- names(dataset)[…] để lấy tên của các biến có giá trị TRUE (biến định
tính)
Kết quả trả về danh sách các biến định tính trong bộ dữ liệu, ví dụ như
gender, type, status, title,…
Những biến này được dùng cho việc phân tích nhóm hoặc tần suất (đếm số
lượng từng loại), vẽ biểu đồ cột, biểu đồ tròn hay phân tích mối quan hệ
giữa các nhóm.
Nhận xét: Việc xác định các biến định tính giúp người phân tích biết
được đâu là biến phân loại, qua đó chọn kỹ thuật xử lý và trực quan hóa
phù hợp.
variable_meaning <- data.frame(
Variable = c("mal_id", "gender", "type", "episodes_watched", "mean_score",
"days_watched", "rewatched", "on_hold", "dropped", "completed",
"plan_to_watch", "total_entries", "title"),
Meaning = c("Mã định danh duy nhất của anime trên hệ thống (MyAnimeList ID)",
"Giới tính của người dùng (Nam/Nữ/Khác)",
"Loại anime (TV, Movie, OVA, ONA, Special, ...)",
"Số tập phim mà người dùng đã xem",
"Điểm trung bình mà người dùng đánh giá anime (thang điểm 1–10)",
"Tổng số ngày mà người dùng dành để xem anime",
"Số lần người dùng xem lại anime (Rewatched)",
"Số anime người dùng đang tạm dừng xem (On-hold)",
"Số anime người dùng đã bỏ xem (Dropped)",
"Số anime người dùng đã hoàn thành (Completed)",
"Số anime người dùng dự định sẽ xem (Plan to watch)",
"Tổng số anime mà người dùng có trong danh sách xem",
"Tên anime hoặc series"))
variable_meaning
## Variable
## 1 mal_id
## 2 gender
## 3 type
## 4 episodes_watched
## 5 mean_score
## 6 days_watched
## 7 rewatched
## 8 on_hold
## 9 dropped
## 10 completed
## 11 plan_to_watch
## 12 total_entries
## 13 title
## Meaning
## 1 Mã định danh duy nhất của anime trên hệ thống (MyAnimeList ID)
## 2 Giới tính của người dùng (Nam/Nữ/Khác)
## 3 Loại anime (TV, Movie, OVA, ONA, Special, ...)
## 4 Số tập phim mà người dùng đã xem
## 5 Điểm trung bình mà người dùng đánh giá anime (thang điểm 1–10)
## 6 Tổng số ngày mà người dùng dành để xem anime
## 7 Số lần người dùng xem lại anime (Rewatched)
## 8 Số anime người dùng đang tạm dừng xem (On-hold)
## 9 Số anime người dùng đã bỏ xem (Dropped)
## 10 Số anime người dùng đã hoàn thành (Completed)
## 11 Số anime người dùng dự định sẽ xem (Plan to watch)
## 12 Tổng số anime mà người dùng có trong danh sách xem
## 13 Tên anime hoặc series
Giải thích:
- Dùng hàm data.frame() để tạo một bảng dữ liệu mới (data frame). Mỗi
cột trong bảng được truyền vào qua đối số, có thể là vector, list hoặc
giá trị cụ thể.
- Dùng Variable = c(…) để tạo một vector chứa tên các biến có trong bộ
dữ liệu gốc (dataset). Các tên biến như mal_id, gender, type,
episodes_watched,… được liệt kê đầy đủ để đảm bảo người đọc biết rõ từng
biến xuất hiện trong dataset. Đây là cột đầu tiên trong bảng
variable_meaning, giữ vai trò liệt kê biến gốc.
- Dùng Meaning = c(…), cột thứ hai là một vector mô tả ý nghĩa cụ thể
của từng biến. Mỗi phần tử tương ứng 1 dòng với biến ở cột
Variable.
- Variable_meaning <- … Dấu <- dùng để gán kết quả (tức là bảng
mới vừa tạo) vào một biến có tên variable_meaning. Sau khi chạy lệnh
này, người thực hiện có thể xem bảng bằng cách gọi variable_meaning ở
dòng sau.
- variable_meaning: Khi gọi riêng tên bảng, R sẽ hiển thị nội dung của
nó ra màn hình. Kết quả là một bảng gồm 2 cột là Variable (Tên biến
trong dữ liệu gốc) và Meaning (Giải thích ý nghĩa của biến đó).
Nhận xét: Giúp người phân tích nắm bắt nhanh và rõ ràng nội dung của
từng biến, đảm bảo quá trình phân tích, trực quan hóa và diễn giải kết
quả được chính xác, logic và có cơ sở.
colnames(dataset) <- colnames(dataset) %>%
str_to_lower() %>%
str_replace_all("\\s+", "_") %>%
str_replace_all("[^a-z0-9_]", "")
Giải thích: Lấy tên cột hiện tại (colnames(dataset)), chuyển tất cả
thành chữ thường (str_to_lower()), thay mọi khoảng trắng (1 hoặc nhiều)
bằng dấu gạch dưới _ (str_replace_all(“\s+”, “”)), rồi loại bỏ mọi
ký tự không phải chữ cái thường, chữ số hoặc
(str_replace_all(”[^a-z0-9_]“,”“)).
Nhận xét: Việc chuẩn hóa tên cột giúp bộ dữ liệu đạt được tính thống
nhất và chuyên nghiệp trong quá trình xử lý. Các tên biến sau khi chuyển
thành chữ thường, loại bỏ khoảng trắng và ký tự đặc biệt sẽ giúp hạn chế
tối đa lỗi cú pháp khi gọi biến trong R, đồng thời đảm bảo khả năng
tương thích cao với các gói phân tích (đặc biệt là tidyverse). Bên cạnh
đó, thao tác này còn giúp việc đọc hiểu tên biến trở nên trực quan, dễ
thao tác và đồng nhất.
num_candidates <- c("score","members","episodes","popularity","votes")
for (v in num_candidates) {
if (v %in% colnames(dataset)) {
dataset[[v]] <- as.numeric(str_replace_all(as.character(dataset[[v]]), ",", ""))
}
}
Giải thích: Với từng tên trong num_candidates nếu có trong dataset,
mã sẽ:
- Ép kiểu sang character (để chắc chắn thao tác string)
- Loại bỏ dấu phẩy , (ví dụ “1,234”: “1234”) bằng str_replace_all,
- Chuyển sang numeric bằng as.numeric.
Nhận xét: Dữ liệu định lượng nếu được lưu ở dạng ký tự (text) sẽ không
thể thực hiện các phép tính thống kê hay mô hình hoá. Do đó, việc chuyển
đổi về dạng numeric là bước quan trọng nhằm chuẩn bị dữ liệu cho quá
trình phân tích sau này. Đồng thời, việc loại bỏ dấu phẩy trong các giá
trị như “1,000” giúp tránh lỗi ép kiểu và đảm bảo tính chính xác của các
phép tính trung bình, phương sai hoặc hồi quy.
dataset <- dataset %>%
mutate(
username = str_trim(username),
gender = str_trim(gender)
)
Giải thích: Hàm str_trim() loại bỏ khoảng trắng ở đầu và cuối chuỗi
(leading/trailing). mutate() cập nhật lại hai cột username và
gender.
Nhận xét: Khoảng trắng dư thừa hoặc định dạng không nhất quán trong
chuỗi ký tự có thể khiến các thao tác nhóm hoặc lọc dữ liệu bị sai lệch.
Việc loại bỏ khoảng trắng và chuẩn hóa chữ giúp các biến dạng text (như
username, gender) được đồng nhất, từ đó đảm bảo độ tin cậy cho các phân
tích so sánh hoặc thống kê tần suất. Đây là một bước nhỏ nhưng đóng vai
trò quan trọng trong việc làm sạch dữ liệu.
for (cname in c("type","rating","status","popularity_bucket")) {
if (cname %in% colnames(dataset)) dataset[[cname]] <- as.factor(dataset[[cname]])
}
Giải thích: Với mỗi tên cột liệt kê, nếu tồn tại trong dataset thì
chuyển kiểu của cột đó thành factor.
Nhận xét: Biến factor trong R được hiểu như biến định tính có giới hạn
số lượng giá trị (levels). Việc chuyển các cột như type, rating, status,
popularity_bucket sang dạng factor giúp chương trình nhận biết được đây
là biến phân loại, không phải biến số. Điều này giúp cho quá trình trực
quan hóa trở nên chính xác và có ý nghĩa thống kê hơn.
dataset <- dataset %>%
mutate(
gender = case_when(
str_to_lower(gender) %in% c("male", "m") ~ "Male",
str_to_lower(gender) %in% c("female", "f") ~ "Female",
TRUE ~ gender
)
)
Giải thích: Dùng case_when() để chuẩn hóa giá trị trong cột gender:
các biến thể như “male”, “M” thành “Male”, tương tự cho “Female”. Các
giá trị khác giữ nguyên.
Nhận xét: Giới tính là biến thường xuyên bị nhập dữ liệu không đồng nhất
(ví dụ “Male”, “male”, “M”, “m”). Việc chuẩn hóa các giá trị này về cùng
một dạng giúp dữ liệu trở nên đồng nhất, dễ đọc và dễ xử lý. Đồng thời,
việc thống nhất cách viết (viết hoa chữ cái đầu) còn giúp biểu đồ, bảng
thống kê trở nên nhất quán và chuyên nghiệp hơn.
if ("genre" %in% colnames(dataset)) {
dataset <- dataset %>% mutate(genre_list = str_split(genre, ",\\s*"))
}
Giải thích: Nếu tồn tại cột genre (chuỗi chứa nhiều thể loại phân
tách bằng dấu phẩy), str_split(…, “,\s*“) sẽ tách mỗi ô thành một list
các thể loại và lưu vào cột genrelist.
Nhận xét: Trong nhiều tập dữ liệu, một bản ghi có thể thuộc nhiều thể
loại (multi-label). Việc tách cột genre thành danh sách riêng
(genre_list) cho phép khai thác sâu hơn các mối quan hệ giữa thể loại,
giúp người phân tích dễ dàng thực hiện thống kê theo từng nhãn riêng
biệt. Nhờ đó, có thể thực hiện các phân tích đa chiều.
numeric_cols <- names(dataset)[sapply(dataset, is.numeric)]
for (nc in numeric_cols) {
na_count <- sum(is.na(dataset[[nc]]))
if (na_count > 0) {
dataset[[nc]][is.na(dataset[[nc]])] <- median(dataset[[nc]], na.rm = TRUE)
message("Imputed ", na_count, " NA in ", nc, " with median.")
}
}
## Imputed 8 NA in days_watched with median.
## Imputed 8 NA in mean_score with median.
## Imputed 8 NA in watching with median.
## Imputed 8 NA in completed with median.
## Imputed 8 NA in on_hold with median.
## Imputed 8 NA in dropped with median.
## Imputed 8 NA in plan_to_watch with median.
## Imputed 8 NA in total_entries with median.
## Imputed 8 NA in rewatched with median.
## Imputed 8 NA in episodes_watched with median.
Giải thích: Xác định các cột numeric,với mỗi cột có NA, thay các giá
trị NA bằng median của cột đó và in thông báo. Vì Median là lựa chọn
robust (không bị ảnh hưởng mạnh bởi outlier) so với mean. Việc impute
giữ kích thước mẫu đầy đủ để thuận tiện cho phân tích hoặc mô hình mà
không làm méo phân bố quá nhiều.
Nhận xét: Trung vị (median) là một thước đo đại diện cho xu hướng trung
tâm, ít bị ảnh hưởng bởi các giá trị ngoại lai. Việc thay thế các giá
trị thiếu (NA) trong biến số bằng trung vị giúp giữ lại kích thước mẫu
đầy đủ, đảm bảo dữ liệu không bị mất mát khi thực hiện các mô hình hồi
quy hoặc phân tích mô tả. Đồng thời, phương pháp này giúp giảm thiểu sai
lệch so với việc loại bỏ hàng chứa giá trị thiếu.
fac_cols <- names(dataset)[sapply(dataset, is.factor)]
for (fc in fac_cols) dataset[[fc]] <- fct_explicit_na(dataset[[fc]], na_level = "unknown")
Giải thích: Tìm các cột kiểu factor và biến các giá trị NA thành một
level mới có tên “unknown” bằng forcats::fct_explicit_na(). Việc giữ NA
như NA có thể gây lỗi khi vẽ hoặc khi chuyển dữ liệu cho mô hình (một số
hàm bỏ NA). Biến NA thành level unknown vừa giữ thông tin rằng “thiếu dữ
liệu”, vừa cho phép phân tích tần suất, so sánh và trực quan hóa nhóm
unknown.
Nhận xét: Thay vì loại bỏ các giá trị bị thiếu, việc gán nhãn “unknown”
giúp bảo toàn thông tin và phản ánh rõ ràng tình trạng “thiếu dữ liệu”
trong phân tích. Cách xử lý này có thể hữu ích trong việc mô tả dữ liệu,
giúp người đọc dễ dàng nhận thấy tỷ lệ thiếu trong từng nhóm, đồng thời
tránh lỗi khi vẽ biểu đồ hoặc khi chuyển dữ liệu vào mô hình học
máy.
if (all(c("title","release_year") %in% colnames(dataset))) {
dataset <- dataset %>% distinct(title, release_year, .keep_all = TRUE)
}
Giải thích: Nếu cả hai cột tồn tại, distinct(title, release_year,
.keep_all = TRUE) giữ lại bản ghi đầu tiên cho mỗi cặp (title,
release_year) và loại bỏ các bản ghi trùng lặp.
Nhận xét: Các bản ghi trùng lặp có thể làm sai lệch kết quả thống kê,
đặc biệt là khi tính số lượng hoặc trung bình. Việc loại bỏ trùng lặp
theo cặp (title, release year) giúp đảm bảo tính duy nhất cho mỗi bộ
phim trong từng năm phát hành, góp phần làm cho tập dữ liệu trở nên
chính xác, tin cậy và phản ánh đúng thực tế.
if ("members" %in% colnames(dataset)) {
dataset <- dataset %>% mutate(
popularity_bucket = case_when(
members >= quantile(members, .90, na.rm=TRUE) ~ "very_high",
members >= quantile(members, .75, na.rm=TRUE) ~ "high",
members >= quantile(members, .50, na.rm=TRUE) ~ "medium",
TRUE ~ "low"
)
)
dataset$popularity_bucket <- factor(dataset$popularity_bucket, levels = c("low","medium","high","very_high"))
}
Giải thích: Sử dụng phân vị (quantile) của cột members để chia thành
4 nhóm: low (<50th), medium (50–75), high (75–90), very_high (≥90th).
Sau đó chuyển sang factor với thứ tự mong muốn.
Nhận xét: Việc phân nhóm mức độ phổ biến dựa trên các phân vị
(quantiles) giúp chia dữ liệu thành các nhóm có ý nghĩa thống kê như
“low”, “medium”, “high”, “very high”. Nhờ đó, người phân tích có thể dễ
dàng nhận biết sự khác biệt giữa các nhóm, phục vụ cho việc so sánh,
trực quan hóa và xây dựng mô hình dự đoán. Bước này không chỉ giúp dữ
liệu trở nên dễ hiểu mà còn tăng giá trị ứng dụng thực tiễn trong việc
đánh giá xu hướng phổ biến của từng bộ phim hoặc tác phẩm.
num_data <- dataset %>%
select(days_watched, mean_score, watching, completed, on_hold,
dropped, plan_to_watch, total_entries, rewatched, episodes_watched)
Giải thích: Lệnh select() trong gói dplyr được dùng để chọn ra các
cột định lượng cần thống kê mô tả. Ở đây, ta chọn 10 biến thể hiện hành
vi xem anime của người dùng như: số ngày đã xem (days_watched), điểm
trung bình (mean_score), số lượng anime đã hoàn thành (completed), đang
xem (watching), tạm hoãn (on_hold), bỏ xem (dropped),dự định xem
(plan_to_watch),Tổng số anime mà người dùng có trong danh sách xem
(total_entries),xem lại (rewatched), tập phim đã xem
(episodes_watched).
Nhận xét: Việc tách riêng dữ liệu định lượng giúp cho quá trình phân
tích thống kê trở nên chính xác và thuận tiện hơn, vì các phép tính như
trung bình, phương sai hay độ lệch chuẩn chỉ áp dụng cho biến số.
summary(num_data)
## days_watched mean_score watching
## Min. : 0.00 Min. : 0.000 Min. : 0.00
## 1st Qu.: 6.30 1st Qu.: 7.000 1st Qu.: 1.00
## Median : 29.20 Median : 7.800 Median : 4.00
## Mean : 53.99 Mean : 6.808 Mean : 10.18
## 3rd Qu.: 72.60 3rd Qu.: 8.470 3rd Qu.: 10.00
## Max. :105338.60 Max. :10.000 Max. :2934.00
## completed on_hold dropped
## Min. : 0.0 Min. : 0.000 Min. : 0.00
## 1st Qu.: 9.0 1st Qu.: 0.000 1st Qu.: 0.00
## Median : 59.0 Median : 1.000 Median : 1.00
## Mean : 151.9 Mean : 7.979 Mean : 10.39
## 3rd Qu.: 183.0 3rd Qu.: 7.000 3rd Qu.: 8.00
## Max. :13226.0 Max. :5167.000 Max. :14341.00
## plan_to_watch total_entries rewatched
## Min. : 0.00 Min. : 0.0 Min. : 0.00
## 1st Qu.: 0.00 1st Qu.: 16.0 1st Qu.: 0.00
## Median : 7.00 Median : 94.0 Median : 0.00
## Mean : 42.11 Mean : 222.5 Mean : 10.45
## 3rd Qu.: 37.00 3rd Qu.: 279.0 3rd Qu.: 5.00
## Max. :21804.00 Max. :24817.0 Max. :13215.00
## episodes_watched
## Min. : 0
## 1st Qu.: 377
## Median : 1748
## Mean : 3441
## 3rd Qu.: 4386
## Max. :5433345
Giải thích: Hàm summary() cung cấp tóm tắt thống kê cơ bản cho từng
biến: giá trị nhỏ nhất (Min), giá trị lớn nhất (Max), trung vị (Median),
giá trị trung bình (Mean) và các tứ phân vị (1st Qu., 3rd Qu.).
Nhận xét: Kết quả giúp nắm được đặc điểm phân bố và mức độ biến thiên
của dữ liệu.
mean_days <- mean(num_data$days_watched, na.rm=TRUE)
mean_days
## [1] 53.99096
mean_score <- mean(num_data$mean_score, na.rm=TRUE)
mean_score
## [1] 6.808495
mean_completed <- mean(num_data$completed, na.rm=TRUE)
mean_completed
## [1] 151.863
Giải thích: Hàm mean() tính giá trị trung bình của từng biến, giúp
biết mức độ “đại diện” của dữ liệu.
Tham số na.rm=TRUE được thêm vào để loại bỏ các giá trị thiếu (NA) khi
tính toán.
- mean_days_watched: cho biết trung bình người dùng đã xem anime trong
bao nhiêu ngày.
- mean_mean_score: thể hiện mức điểm trung bình mà người dùng thường
chấm.
- mean_completed: trung bình số lượng anime đã hoàn thành của mỗi người
dùng.
Nhận xét: Nếu giá trị trung bình của days_watched lớn và mean_score ở
mức cao, điều đó cho thấy nhóm người dùng hoạt động tích cực và có mức
đánh giá khá cao.
Kết quả cho thấy trung bình mỗi người dùng trong tập dữ liệu đã xem
anime trong khoảng 54 ngày. Con số này cho thấy phần lớn người dùng duy
trì thói quen xem anime trong thời gian khá dài, thể hiện mức độ gắn bó
tương đối cao với nội dung.
Trung bình điểm đánh giá anime là 6.8/10, nằm ở mức khá. Điều này phản
ánh rằng đa số người xem có đánh giá tích cực nhưng chưa thật sự xuất
sắc có thể do chênh lệch về chất lượng các bộ anime hoặc tiêu chí đánh
giá của người xem.
Trung bình mỗi người dùng đã hoàn thành khoảng 152 bộ anime. Đây là con
số rất cao, cho thấy nhóm mẫu trong dữ liệu bao gồm nhiều người dùng
hoạt động tích cực, có thể là những fan lâu năm hoặc người xem thường
xuyên.
median_days_watched <- median(num_data$days_watched, na.rm=TRUE)
median_days_watched
## [1] 29.2
median_mean_score <- median(num_data$mean_score, na.rm=TRUE)
median_mean_score
## [1] 7.8
Giải thích:
- median(x, na.rm=TRUE) tính trung vị của biến x; na.rm=TRUE loại bỏ giá
trị NA trước khi tính.
- Gán kết quả vào median_days_watched, median_mean_score để sử dụng
tiếp.
Nhận xét: Trung vị phản ánh giá trị nằm giữa phân bố dữ liệu, tức là 50%
quan sát có giá trị nhỏ hơn hoặc bằng trung vị và 50% còn lại lớn hơn
hoặc bằng. Đây là chỉ tiêu quan trọng khi dữ liệu có ngoại lệ hoặc phân
bố lệch, vì trung vị ít bị ảnh hưởng bởi các giá trị cực đoan hơn trung
bình. Trong đó, trung vị của days_watched thể hiện số ngày xem trung
bình của người dùng điển hình trong mẫu dữ liệu, còn trung vị của
mean_score phản ánh mức điểm đánh giá trung tâm mà người dùng thường
dành cho các bộ anime.
Kết quả cho thấy một nửa số người dùng xem anime ít hơn 29 ngày, còn một
nửa xem nhiều hơn 29 ngày. So với giá trị trung bình (≈54 ngày), điều
này cho thấy phân phối dữ liệu lệch phải (right-skewed) nghĩa là vẫn có
một nhóm nhỏ người xem cực kỳ nhiều (outlier), kéo giá trị trung bình
lên cao.
Mức trung vị này cao hơn trung bình (6.8) cho thấy đa số người dùng chấm
điểm cao hơn 7, trong khi một số ít đánh giá rất thấp đã kéo điểm trung
bình xuống. Điều này phản ánh xu hướng đánh giá tích cực chiếm ưu thế
trong tập dữ liệu.
min_days_watched <- min(num_data$days_watched, na.rm=TRUE)
min_days_watched
## [1] 0
min_mean_score <- min(num_data$mean_score, na.rm=TRUE)
min_mean_score
## [1] 0
Giải thích: Hàm min() được sử dụng để tìm giá trị nhỏ nhất của từng
biến, đồng thời loại bỏ các giá trị NA với tham số na.rm = TRUE.
Nhận xét: Giá trị nhỏ nhất cho thấy giới hạn thấp nhất mà dữ liệu có thể
đạt được. Với biến days_watched, giá trị này giúp xác định liệu có người
dùng nào chưa xem ngày nào (0 ngày) hay không. Còn đối với mean_score,
giá trị nhỏ nhất thể hiện mức đánh giá thấp nhất mà người dùng đã chấm.
Việc xác định giá trị nhỏ nhất cũng giúp phát hiện các bất thường trong
dữ liệu, chẳng hạn như điểm âm hoặc số ngày xem không hợp lý.
max_days_watched <- max(num_data$days_watched, na.rm=TRUE)
max_days_watched
## [1] 105338.6
max_mean_score <- max(num_data$mean_score, na.rm=TRUE)
max_mean_score
## [1] 10
Giải thích: Hàm max() được dùng để xác định giá trị lớn nhất trong
mỗi biến định lượng, loại bỏ các giá trị thiếu.
Nhận xét: Giá trị lớn nhất thể hiện mức độ cực đại trong dữ liệu. Đối
với days_watched, nó cho biết người dùng xem nhiều nhất bao nhiêu ngày,
giúp nhận diện hành vi “xem nhiều bất thường” (outlier) trong mẫu. Còn
với mean_score, giá trị lớn nhất phản ánh điểm số tối đa mà người dùng
có thể chấm. Việc biết được giới hạn trên này giúp đánh giá mức độ đa
dạng và sự lan tỏa trong hành vi người dùng.
sd_days_watched <- sd(num_data$days_watched, na.rm=TRUE)
sd_days_watched
## [1] 236.2184
sd_mean_score <- sd(num_data$mean_score, na.rm=TRUE)
sd_mean_score
## [1] 2.991183
Giải thích: Sử dụng hàm sd() để tính độ lệch chuẩn là thước đo mức độ
phân tán của dữ liệu quanh giá trị trung bình.
Nhận xét: Độ lệch chuẩn cho biết dữ liệu có dao động nhiều hay ít so với
trung bình. Nếu độ lệch chuẩn của days_watched lớn, điều đó chứng tỏ sự
khác biệt rõ rệt giữa người xem ít và người xem nhiều; còn nếu nhỏ, phần
lớn người dùng có thói quen xem tương đối giống nhau. Đối với
mean_score, độ lệch chuẩn cao thể hiện sự đa dạng trong quan điểm đánh
giá giữa người dùng, còn độ lệch chuẩn thấp chứng tỏ các đánh giá tương
đối đồng nhất. Chỉ tiêu này đặc biệt quan trọng khi muốn đánh giá tính
ổn định và độ tập trung của dữ liệu. Kết quả cho thấy độ lệch chuẩn bằng
236.2184 rất cao so với giá trị trung bình (≈54 ngày), cho thấy mức độ
phân tán lớn trong thời gian xem anime của người dùng. Điều này nghĩa là
có sự khác biệt rõ rệt giữa những người xem ít (chỉ vài ngày) và những
người xem rất nhiều (hàng trăm ngày). Phân phối này lệch phải mạnh
(right-skewed) và thể hiện sự tồn tại của một nhóm nhỏ “người xem cường
độ cao” kéo độ lệch chuẩn lên cao.
Đối với mean_score (SD = 2.99): Với thang điểm 1–10, độ lệch chuẩn gần 3
cho thấy mức độ chênh lệch đánh giá khá lớn. Nghĩa là người dùng có quan
điểm rất khác nhau khi đánh giá anime có người cho điểm rất thấp (dưới
4), nhưng cũng có nhóm chấm rất cao (9–10). Điều này phản ánh sự đa dạng
trong cảm nhận cá nhân, có thể do khác biệt về thể loại, độ tuổi hoặc
tiêu chuẩn đánh giá của từng người.
var_days_watched <- var(num_data$days_watched, na.rm=TRUE)
var_days_watched
## [1] 55799.13
var_mean_score <- var(num_data$mean_score, na.rm=TRUE)
var_mean_score
## [1] 8.947179
Giải thích: Hàm var() trong R được dùng để tính phương sai của một
biến định lượng. Tham số na.rm=TRUE giúp loại bỏ các giá trị bị thiếu
(NA) trong quá trình tính toán. Ở đây, ta lần lượt tính phương sai cho
hai biến days_watched (số ngày xem trung bình) và mean_score (điểm trung
bình đánh giá anime).
Nhận xét: Phương sai của days_watched cho thấy mức độ chênh lệch trong
thói quen xem anime giữa các người dùng. Nếu phương sai cao, có nghĩa là
có sự khác biệt lớn giữa những người xem ít và người xem nhiều — thể
hiện tính đa dạng trong mức độ “gắn bó” với anime.
Ngược lại, phương sai của mean_score thể hiện mức độ khác biệt trong
cách người dùng đánh giá anime. Nếu giá trị này thấp, người dùng có xu
hướng đồng thuận khi chấm điểm (điểm đánh giá tương đối đồng đều). Nếu
cao, điều đó cho thấy ý kiến về chất lượng anime rất phân tán, có thể do
khác biệt về gu, thể loại hoặc độ nổi tiếng của từng bộ phim.
Kết quả cho thấy phương sai của day_watched xấp sỉ 55799 con số này rất
lớn, phù hợp với độ lệch chuẩn cao, cho thấy dữ liệu có mức độ dao động
mạnh. Người dùng trong mẫu nghiên cứu không đồng nhất về thói quen xem
anime — một số xem rất ít, trong khi một số khác xem cực kỳ nhiều.
Phương sai của mean_score (≈ 8.95): So với thang điểm 1–10, đây cũng là
một phương sai khá đáng kể. Điều này cho thấy sự không nhất quán trong
đánh giá chất lượng anime: cùng một bộ phim có thể được chấm rất cao
hoặc rất thấp tùy người xem.
range_days_watched <- max_days_watched - min_days_watched
range_days_watched
## [1] 105338.6
range_mean_score <- max_mean_score - min_mean_score
range_mean_score
## [1] 10
Giải thích: Khoảng biến thiên được tính bằng hiệu giữa giá trị lớn
nhất (max_days_watched, max_mean_score) và giá trị nhỏ nhất
(min_days_watched, min_mean_score). Đây là một cách đơn giản để đo lường
độ trải rộng của dữ liệu.
Nhận xét: Khoảng biến thiên của days_watched giúp xác định mức độ chênh
lệch cực đại trong thời gian xem anime của người dùng. Nếu khoảng này
lớn, nghĩa là có người chỉ xem vài ngày, trong khi người khác xem hàng
trăm hoặc hàng nghìn ngày phản ánh sự khác biệt lớn trong cường độ yêu
thích anime. Trong khi đó, khoảng biến thiên của mean_score thể hiện
biên độ đánh giá của người dùng. Ví dụ, nếu khoảng biến thiên chỉ dao
động từ 6 đến 9, điều đó chứng tỏ phần lớn anime được đánh giá khá cao.
Nếu trải dài từ 1 đến 10, nghĩa là có nhiều phim bị đánh giá rất thấp và
rất cao thể hiện tính phân hóa mạnh về chất lượng hoặc cảm nhận người
xem. Kết quả cho thấy giá trị cao nhất của số ngày xem và thấp nhất
chênh lệch nhau 105838,6 ngày. Điều này cho thấy dữ liệu có mức độ phân
tán rất lớn, có thể tồn tại những người dùng xem anime trong thời gian
cực kỳ dài so với những người xem rất ít. Đây là dấu hiệu của phân phối
lệch phải (skewed), và có thể có outlier (giá trị ngoại lai). Đối với
mean_score có range bằng 10 chứng tỏ dữ liệu đánh giá bao phủ đủ toàn bộ
thang điểm, tức có cả người dùng chấm điểm rất thấp và rất cao.
iqr_days_watched <- IQR(num_data$days_watched, na.rm=TRUE)
iqr_days_watched
## [1] 66.3
iqr_mean_score <- IQR(num_data$mean_score, na.rm=TRUE)
iqr_mean_score
## [1] 1.47
Giải thích: Hàm IQR() tính khoảng tứ phân vị, là hiệu giữa phân vị
thứ 3 (Q3) và phân vị thứ 1 (Q1). Nó biểu thị phạm vi mà 50% giá trị
trung tâm của dữ liệu nằm trong đó.
Nhận xét: Nếu IQR của days_watched nhỏ, điều đó cho thấy phần lớn người
dùng có thói quen xem tương đối giống nhau. Nếu lớn, nghĩa là nhóm người
dùng trung bình có sự khác biệt đáng kể trong số ngày xem. Tương tự, IQR
của mean_score cho biết mức độ đa dạng trong cách chấm điểm ở nhóm người
dùng trung bình. Nếu nhỏ, các đánh giá khá đồng nhất; nếu lớn, điều đó
thể hiện người dùng đánh giá anime một cách rất khác nhau, có thể do sự
khác biệt về thể loại hoặc độ nổi tiếng của từng bộ phim. Kết quả cho
thấy:
- Đối với days_watched có IQR bằng 66.3 nghĩa là 50% người dùng nằm
trong khoảng giữa (giữa Q1 và Q3) có số ngày xem chênh lệch nhau 66,3
ngày. Mức này tương đối lớn, phản ánh mức độ phân tán cao của hành vi
xem anime.
- Đối với mean_score có IQR bằng 1.47 cho thấy phần lớn người dùng đánh
giá anime trong khoảng hẹp chỉ khoảng 1,47 điểm quanh trung vị hay hành
vi chấm điểm tương đối ổn định, ít biến động, chủ yếu tập trung quanh
mức trung bình.
quantile(num_data$days_watched, probs=c(0.25,0.5,0.75), na.rm=TRUE)
## 25% 50% 75%
## 6.3 29.2 72.6
quantile(num_data$mean_score, probs=c(0.25,0.5,0.75), na.rm=TRUE)
## 25% 50% 75%
## 7.00 7.80 8.47
Giải thích: quantile() trả về các giá trị phân vị: Q1 (25%), Q2 (50%
- trung vị) và Q3 (75%). Mỗi phân vị cho biết mốc mà tại đó một tỷ lệ
phần trăm người dùng có giá trị thấp hơn.
Nhận xét:
- Đối với days_watched, Q1 – Q3 cho thấy mức xem anime phổ biến của nhóm
người dùng trung bình. Nếu Q1 thấp nhưng Q3 rất cao, nghĩa là chỉ một
nhóm nhỏ xem cực kỳ nhiều anime, trong khi đa số xem ít.
- Với mean_score, các phân vị này giúp xác định xu hướng đánh giá. Ví
dụ, nếu cả Q1, Q2, Q3 đều cao (>7), điều đó cho thấy phần lớn anime
được đánh giá tích cực; ngược lại, nếu trung vị thấp, có thể người dùng
đánh giá nghiêm khắc hơn. Kết quả cho thấy:
Đối với biến days_watched 25% người dùng xem ít hơn 6.3 ngày, 50% xem ít
hơn 29.2 ngày và 75% xem ít hơn 72.6 ngày. Có thể thấy đa số người dùng
xem trong khoảng 30 đến 80 ngày, chỉ một số ít vượt hơn mức này.
Đối với biến mean_score 25% người dùng đánh giá anime thấp hơn 7 điểm,
50% đánh giá dưới 7.8 điểm, và 75% dưới 8.47 điểm.Cho thấy phần lớn
người dùng chấm điểm khá cao (trên 7), cho thấy xu hướng tích cực trong
đánh giá, chỉ có số ít người cho điểm thấp hơn đáng kể.
skew_days_watched <- skewness(num_data$days_watched, na.rm=TRUE)
skew_days_watched
## [1] 395.2411
skew_mean_score <- skewness(num_data$mean_score, na.rm=TRUE)
skew_mean_score
## [1] -1.623193
Giải thích: skewness() đo độ lệch của phân phối dữ liệu.
- Skewness > 0: lệch phải (có nhiều giá trị nhỏ, ít giá trị cực
lớn).
- Skewness < 0: lệch trái (nhiều giá trị cao, ít giá trị nhỏ).
Nhận xét: days_watched có skewness bằng 395.2411, cho thấy đa số người
dùng chỉ xem ít anime, nhưng có một số ít người xem rất nhiều. Đối với
mean_score, giá trị âm cho thấy phân phối lệch trái nhẹ. Phần lớn người
dùng có xu hướng đánh giá cao, trong khi chỉ có một phần nhỏ người dùng
cho điểm rất thấp.
kurt_days_watched <- kurtosis(num_data$days_watched, na.rm=TRUE)
kurt_days_watched
## [1] 175897.1
kurt_mean_score <- kurtosis(num_data$mean_score, na.rm=TRUE)
kurt_mean_score
## [1] 4.163564
Giải thích: kurtosis() đo mức độ tập trung của phân phối quanh trung
bình.
- Giá trị > 3: phân phối nhọn (tập trung mạnh, nhiều outlier).
- Giá trị < 3: phân phối bẹt (phân tán đều hơn).
Nhận xét: Nếu days_watched có kurtosis cực kỳ cao, cho thấy đa số người
dùng xem một lượng tương tự nhau, nhưng cũng tồn tại một số ít cá nhân
có hành vi cực đoan (xem cực kỳ nhiều hoặc rất ít). Mean_score có
kurtosis lớn hơn 3, điều đó cho thấy điểm đánh giá phân tán rộng, không
có sự tập trung rõ ở mức trung bình — người dùng có gu anime rất khác
nhau.
mean_days_watched <- mean(dataset$days_watched, na.rm = TRUE)
sd_days_watched <- sd(dataset$days_watched, na.rm = TRUE)
cv_days_watched <- sd_days_watched / mean_days_watched
cv_days_watched
## [1] 4.375147
cv_mean_score <- sd(dataset$mean_score, na.rm = TRUE) / mean(dataset$mean_score, na.rm = TRUE)
cv_mean_score
## [1] 0.4393311
Giải thích: Hệ số biến thiên (CV) đo mức độ biến động tương đối so
với trung bình, bằng tỷ lệ giữa độ lệch chuẩn và trung bình.
Nhận xét:
- CV của days_watched cao (lớn hơn 1), cho thấy mức biến động rất cao so
với giá trị trung bình. nghĩa là mức độ chênh lệch trong thói quen xem
anime giữa các người dùng là rất lớn tức có người xem cực nhiều, có
người gần như không xem.
- Trong khi đó, CV của mean_score cho thấy độ đồng thuận trong đánh giá:
giá trị này thấp hơn 1 phản ánh sự nhất quán trong nhận định về chất
lượng anime; còn CV cao chỉ ra rằng đánh giá của người dùng rất khác
nhau không xảy ra sự chênh lệch quá lớn trong cách chấm điểm, có thể do
sự khác biệt về thể loại, độ nổi tiếng hoặc tiêu chí đánh giá cá
nhân.
sum_days_watched <- sum(num_data$days_watched, na.rm=TRUE)
sum_days_watched
## [1] 12114653
sum_mean_score <- sum(num_data$mean_score, na.rm=TRUE)
sum_mean_score
## [1] 1527711
Giải thích: Sử dụng hàm sum() để tính tổng giá trị của hai biến định
lượng là days_watched (tổng số ngày người dùng xem anime) và mean_score
(điểm trung bình đánh giá anime). Tham số na.rm=TRUE giúp bỏ qua các giá
trị bị thiếu (NA) khi tính toán, đảm bảo kết quả chính xác.
Nhận xét:
- Tổng giá trị của days_watched cho thấy mức độ tổng thể mà toàn bộ
người dùng trong mẫu dữ liệu đã dành thời gian cho việc xem anime. Giá
trị này càng cao thể hiện mức độ tương tác lớn và thời gian đầu tư cho
nội dung cao.
- Tổng của mean_score biểu thị tổng điểm đánh giá mà tất cả người dùng
đã chấm. Chỉ số này giúp hiểu được quy mô tổng thể của dữ liệu đánh giá
và có thể dùng để so sánh giữa các nhóm người dùng hoặc giai đoạn khác
nhau.
valid_days <- sum(!is.na(num_data$days_watched))
valid_days
## [1] 224383
valid_score <- sum(!is.na(num_data$mean_score))
valid_score
## [1] 224383
Giải thích: Hàm is.na() trả về giá trị TRUE nếu phần tử bị thiếu, và
!is.na() đảo ngược để chọn những giá trị hợp lệ. Sau đó, sum() cộng tổng
số giá trị TRUE, tức là tổng số quan sát không bị thiếu trong từng
biến.
Nhận xét:
- Số lượng quan sát hợp lệ của days_watched và mean_score cho biết mức
độ hoàn thiện của dữ liệu.
- Cả hai biến đều có 224383 số lượng quan sát hợp lệ bằng tổng số dòng
của dataset cho thấy toàn bộ dữ liệu đầy đủ, không có giá trị NA.
na_total <- sum(is.na(num_data))
na_total
## [1] 0
Giải thích: Lệnh này tính tổng toàn bộ số lượng giá trị bị thiếu (NA)
trong toàn bộ bảng dữ liệu định lượng num_data.
Nhận xét: Kết quả cho thấy dữ liệu còn bao nhiêu giá trị bị thiếu. Đây
là bước quan trọng để đánh giá chất lượng dữ liệu đầu vào. Nếu số lượng
NA cao, mô hình phân tích sau này có thể bị sai lệch, và cần phải xử lý
bằng phương pháp thay thế trung vị, trung bình hoặc loại bỏ dòng. Trong
trường hợp này, việc kiểm tra NA giúp đảm bảo dữ liệu đã được làm sạch ở
bước 2 trước đó.
cor_days_score <- cor(num_data$days_watched, num_data$mean_score, use="complete.obs")
cor_days_score
## [1] 0.04657811
Giải thích: Hàm cor() tính hệ số tương quan Pearson giữa hai biến
định lượng days_watched và mean_score. Tham số use=“complete.obs” đảm
bảo chỉ tính toán với các quan sát đầy đủ (không chứa NA ở hai biến). Hệ
số tương quan (r) dao động từ -1 đến 1:
- r > 0: Mối quan hệ thuận, khi số ngày xem tăng thì điểm đánh giá
cũng có xu hướng tăng.
- r < 0: Mối quan hệ nghịch, khi xem nhiều ngày thì điểm đánh giá có
xu hướng giảm.
- r ≈ 0: Không có mối liên hệ đáng kể.
Nhận xét: Kết quả cho thấy hệ số tương quan gần bằng 0 thể hiện mối liên
hệ giữa số ngày xem anime và điểm đánh giá trung bình hầu như không đáng
kể.
cor_matrix <- cor(num_data, use="complete.obs")
cor_matrix
## days_watched mean_score watching
## days_watched 1.00000000 0.04657811 0.08909481
## mean_score 0.04657811 1.00000000 0.09358653
## watching 0.08909481 0.09358653 1.00000000
## completed 0.27191605 0.08625524 0.27563638
## on_hold 0.07455846 0.05174231 0.16701886
## dropped 0.07624655 0.02001563 0.09494424
## plan_to_watch 0.08851837 0.06120565 0.25272542
## total_entries 0.24775387 0.09734002 0.38814331
## rewatched 0.11922316 0.06025678 0.07110934
## episodes_watched 0.61279105 0.04543834 0.08219492
## completed on_hold dropped
## days_watched 0.27191605 0.07455846 0.07624655
## mean_score 0.08625524 0.05174231 0.02001563
## watching 0.27563638 0.16701886 0.09494424
## completed 1.00000000 0.24370111 0.26743060
## on_hold 0.24370111 1.00000000 0.20491943
## dropped 0.26743060 0.20491943 1.00000000
## plan_to_watch 0.33204146 0.24186015 0.15864750
## total_entries 0.90558924 0.38102608 0.40469141
## rewatched 0.20963029 0.07515581 0.06463776
## episodes_watched 0.23970288 0.07015880 0.06585478
## plan_to_watch total_entries rewatched
## days_watched 0.08851837 0.24775387 0.11922316
## mean_score 0.06120565 0.09734002 0.06025678
## watching 0.25272542 0.38814331 0.07110934
## completed 0.33204146 0.90558924 0.20963029
## on_hold 0.24186015 0.38102608 0.07515581
## dropped 0.15864750 0.40469141 0.06463776
## plan_to_watch 1.00000000 0.66489377 0.08702700
## total_entries 0.66489377 1.00000000 0.20047691
## rewatched 0.08702700 0.20047691 1.00000000
## episodes_watched 0.07785181 0.21881104 0.12370288
## episodes_watched
## days_watched 0.61279105
## mean_score 0.04543834
## watching 0.08219492
## completed 0.23970288
## on_hold 0.07015880
## dropped 0.06585478
## plan_to_watch 0.07785181
## total_entries 0.21881104
## rewatched 0.12370288
## episodes_watched 1.00000000
Giải thích: Hàm cor() được áp dụng lên toàn bộ bảng dữ liệu định
lượng num_data để tạo ma trận tương quan giữa tất cả các biến.
Nhận xét: Ma trận tương quan giúp ta quan sát mối quan hệ tuyến tính
giữa từng cặp biến trong dataset. Thông qua ma trận này, có thể phát
hiện biến nào có mối liên hệ mạnh, biến nào độc lập. Việc này rất hữu
ích trong phân tích hồi quy hoặc xây dựng mô hình dự báo vì giúp tránh
đa cộng tuyến.
Kết quả cho thấy một số cặp biến có mỗi tương quan dương mạnh:
- completed và total_entries (r = 0.9055): Đây là mối tương quan dương
rất mạnh, gần như tuyến tính hoàn hảo. Nghĩa là số anime đã hoàn thành
gần như tăng tương ứng với tổng số anime mà người dùng đã thêm vào danh
sách.
- plan_to_watch và total_entries (r = 0.6648): Mối tương quan dương khá
cao, cho thấy người dùng có nhiều anime đã xem thường cũng có nhiều
anime dự định xem.
describe(num_data)
## vars n mean sd median
## days_watched 1 224383 53.99 236.22 29.2
## mean_score 2 224383 6.81 2.99 7.8
## watching 3 224383 10.18 28.13 4.0
## completed 4 224383 151.86 270.45 59.0
## on_hold 5 224383 7.98 30.34 1.0
## dropped 6 224383 10.39 51.04 1.0
## plan_to_watch 7 224383 42.11 141.99 7.0
## total_entries 8 224383 222.54 382.51 94.0
## rewatched 9 224383 10.45 48.08 0.0
## episodes_watched 10 224383 3440.74 16790.89 1748.0
## trimmed mad min max range
## days_watched 39.20 40.18 0 105338.6 105338.6
## mean_score 7.31 1.07 0 10.0 10.0
## watching 5.64 5.93 0 2934.0 2934.0
## completed 95.47 85.99 0 13226.0 13226.0
## on_hold 3.47 1.48 0 5167.0 5167.0
## dropped 3.90 1.48 0 14341.0 14341.0
## plan_to_watch 18.36 10.38 0 21804.0 21804.0
## total_entries 146.13 134.92 0 24817.0 24817.0
## rewatched 2.91 0.00 0 13215.0 13215.0
## episodes_watched 2368.61 2407.74 0 5433345.0 5433345.0
## skew kurtosis se
## days_watched 395.24 175892.52 0.50
## mean_score -1.62 1.16 0.01
## watching 25.29 1566.98 0.06
## completed 6.64 117.21 0.57
## on_hold 57.55 7229.67 0.06
## dropped 130.48 31514.33 0.11
## plan_to_watch 33.27 3166.77 0.30
## total_entries 8.80 278.84 0.81
## rewatched 102.21 25725.71 0.10
## episodes_watched 236.00 69141.40 35.45
Giải thích: Hàm describe() trong thư viện psych tạo ra bảng thống kê
mô tả đầy đủ cho tất cả các biến định lượng, bao gồm số lượng quan sát,
giá trị trung bình, độ lệch chuẩn, min, max, median, skewness,
kurtosis,…
Nhận xét: Đây là bước tổng hợp toàn diện giúp ta nhìn nhanh toàn bộ đặc
điểm của dữ liệu sau khi xử lý. Dựa vào bảng này, ta có thể đánh giá độ
phân tán, xu hướng trung tâm, mức độ lệch, cũng như sự khác biệt giữa
các biến. Đối với dữ liệu về người dùng anime, bảng này giúp nhận diện
các hành vi nổi bật: ví dụ, người dùng trung bình xem bao nhiêu ngày,
đánh giá trung bình bao nhiêu điểm, hay biến nào có mức độ dao động lớn
nhất.
ggplot(dataset, aes(x = gender, y = mean_score, fill = gender)) +
geom_boxplot(alpha = 0.7) +
geom_jitter(color = "black", alpha = 0.2) +
stat_summary(fun = mean, geom = "point", color = "red", size = 3) +
labs(title = "Phân bố điểm trung bình theo giới tính",
x = "Giới tính", y = "Điểm trung bình") +
theme_minimal() +
theme(legend.position = "none")
Giải thích: Biểu đồ sử dụng ggplot2 để thể hiện phân bố điểm trung
bình (mean_score) theo giới tính (gender).
- geom_boxplot() hiển thị hộp dữ liệu thể hiện trung vị, tứ phân vị và
ngoại lệ.
- geom_jitter() thêm các điểm rải rác để minh họa phân bố từng cá
nhân.
- stat_summary(fun = mean) đánh dấu giá trị trung bình bằng điểm màu
đỏ.
- labs() đặt tiêu đề và nhãn trục, theme_minimal() giúp biểu đồ rõ ràng,
dễ đọc. - theme_minimal(): Tùy chỉnh giao diện, loại bỏ chi tiết thừa để
biểu đồ sạch, hiện đại và dễ đọc.
Nhận xét: Biểu đồ thể hiện sự phân bố điểm trung bình của người dùng
theo từng giới tính cho thấy có sự khác biệt nhất định giữa các nhóm.
Các hộp trong biểu đồ biểu thị mức độ tập trung và phân tán của điểm số,
trong đó nhóm có hộp nhỏ hơn thể hiện sự đồng nhất cao hơn trong cách
cho điểm, còn nhóm có hộp rộng cho thấy sự đa dạng hơn trong hành vi
đánh giá. Điểm tròn màu đỏ biểu diễn giá trị trung bình của mỗi nhóm,
giúp ta dễ dàng nhận thấy nhóm nào có xu hướng đánh giá cao hơn hoặc
thấp hơn trung bình chung.
ggplot(dataset, aes(x = days_watched)) +
geom_histogram(binwidth = 50, fill = "skyblue", color = "black", alpha = 0.8) +
geom_vline(aes(xintercept = mean(days_watched, na.rm = TRUE)),
color = "red", linetype = "dashed") +
annotate("text", x = mean(dataset$days_watched, na.rm = TRUE) + 200,
y = 100, label = "Trung bình", vjust = -1, color = "red") +
labs(title = "Phân bố số ngày xem phim", x = "Số ngày", y = "Tần suất") +
xlim(0, 3000) +
theme_light()
## Warning: Removed 9 rows containing non-finite outside the scale
## range (`stat_bin()`).
## Warning: Removed 2 rows containing missing values or values outside
## the scale range (`geom_bar()`).
Giải thích:
- geom_histogram(): Tạo biểu đồ cột thể hiện tần suất xuất hiện của biến
days_watched trong từng khoảng (mỗi khoảng rộng 50 ngày). Màu cột xanh
da trời giúp dễ quan sát, đường viền đen tạo độ tách biệt giữa các
cột.
– geom_vline(): Thêm đường gạch đỏ (dashed line) biểu diễn giá trị trung
bình của days_watched, giúp nhận biết vị trí của giá trị trung
tâm.
– annotate(): Gắn nhãn “Trung bình” ngay vị trí đường đỏ, giúp người xem
dễ hiểu ý nghĩa của đường đánh dấu này.
– labs(): Đặt tiêu đề và nhãn trục X, Y, giúp biểu đồ có ngữ cảnh rõ
ràng và chuyên nghiệp.
- xlim(0, 3000): Giới hạn phần dữ liệu chính.
– theme_light(): Sử dụng giao diện sáng, nền trắng – giúp biểu đồ sạch,
dễ nhìn.
Nhận xét: Biểu đồ histogram mô tả phân bố số ngày người dùng xem phim
cho thấy phần lớn người dùng chỉ xem trong một khoảng thời gian ngắn,
trong khi có một số ít người dành thời gian xem phim rất lớn. Phân phối
dữ liệu thể hiện rõ xu hướng lệch phải, nghĩa là đa số tập trung ở các
giá trị nhỏ, còn phần đuôi kéo dài về phía bên phải do ảnh hưởng của một
số người dùng “xem nhiều bất thường”. Đường trung bình màu đỏ nằm khá xa
về phía đuôi phân phối, điều này cho thấy giá trị trung bình bị chi phối
bởi các trường hợp ngoại lệ. Vì vậy, trong trường hợp này, giá trị trung
vị (median) sẽ phản ánh đúng hơn xu hướng chung của dữ liệu. Biểu đồ
giúp ta nhận ra rằng hành vi xem phim của người dùng không đồng đều: có
sự chênh lệch lớn giữa nhóm xem ít và nhóm xem nhiều.
ggplot(dataset, aes(x = days_watched, y = episodes_watched)) +
geom_point(alpha = 0.4, color = "darkblue") +
geom_smooth(method = "lm", color = "red", se = FALSE) +
geom_density_2d(color = "gray50") +
labs(title = "Mối quan hệ giữa số ngày xem và số tập đã xem",
x = "Số ngày xem", y = "Số tập đã xem") +
xlim(0, 5000) +
ylim(0, 200000) +
theme_bw()
## `geom_smooth()` using formula = 'y ~ x'
## Warning: Removed 31 rows containing non-finite outside the scale
## range (`stat_smooth()`).
## Warning: Removed 31 rows containing non-finite outside the scale
## range (`stat_density2d()`).
## Warning: Removed 31 rows containing missing values or values outside
## the scale range (`geom_point()`).
## Warning: Removed 7 rows containing missing values or values outside
## the scale range (`geom_smooth()`).
Giải thích:
– geom_point(): Vẽ các điểm dữ liệu (scatter plot), mỗi điểm biểu diễn
một người dùng với tọa độ gồm days_watched (trục X) và episodes_watched
(trục Y).
+ alpha = 0.4 làm mờ để giảm chồng lấn điểm.
+ color = “darkblue” giúp điểm nổi bật, dễ quan sát.
– geom_smooth(method = “lm”): Thêm đường hồi quy tuyến tính màu đỏ, biểu
diễn xu hướng quan hệ giữa hai biến.
+ method = “lm” nghĩa là dùng linear model (hồi quy tuyến tính).
+ se = FALSE tắt vùng tin cậy (confidence interval) để đồ thị gọn
hơn.
– geom_density_2d(): Vẽ đường đồng mật độ (contour lines) thể hiện vùng
có mật độ điểm cao, giúp thấy khu vực tập trung dữ liệu (nhiều người
dùng có hành vi tương tự).
– labs(): Thêm tiêu đề và nhãn trục X, Y để biểu đồ rõ nghĩa: “Mối quan
hệ giữa số ngày xem và số tập đã xem”.
- xlim(0, 5000) +
ylim(0, 200000) + : Giới hạn phần chính.
– theme_bw(): Dùng giao diện trắng đen (black & white theme) cho
phong cách chuyên nghiệp, dễ đọc và làm nổi bật điểm dữ liệu.
Nhận xét: Biểu đồ thể hiện mối quan hệ giữa số ngày xem phim và số tập
đã xem của người dùng cho thấy xu hướng tuyến tính rõ rệt và dương tính
mạnh. Đường hồi quy màu đỏ thể hiện rằng khi số ngày xem phim tăng, số
tập phim đã xem cũng tăng gần như tỷ lệ thuận, chứng tỏ người dùng có xu
hướng duy trì mức độ xem ổn định theo thời gian. Các điểm dữ liệu phân
bố dày đặc ở góc dưới bên trái cho thấy phần lớn người dùng chỉ xem
trong thời gian ngắn và với số lượng tập hạn chế, trong khi một số ít
điểm nằm xa về phía bên phải biểu diễn những người có tần suất xem rất
cao – đây có thể là những người hâm mộ hoặc “nghiện phim”. Sự xuất hiện
của các cụm điểm đậm ở một số vùng phản ánh hành vi xem phổ biến.
ggplot(dataset, aes(x = gender, y = watching, fill = gender)) +
geom_col(position = "dodge") +
geom_text(aes(label = watching), vjust = -0.5) +
labs(title = "Số anime đang xem theo giới tính",
x = "Giới tính", y = "Số lượng anime") +
scale_fill_brewer(palette = "Set2") +
theme_classic()
Giải thích:
- geom_col(): Vẽ biểu đồ cột thể hiện số anime đang xem (watching) theo
giới tính (gender), với các cột đặt cạnh nhau (position =
“dodge”).
- geom_text(): Hiển thị giá trị số lượng trên đầu mỗi cột giúp dễ so
sánh.
- labs() – Thêm tiêu đề và nhãn trục X, Y: “Số anime đang xem theo giới
tính”.
- scale_fill_brewer(palette = “Set2”): Dùng bảng màu tươi sáng, phân
biệt rõ giới tính.
- theme_classic(): Dùng giao diện đơn giản, làm nổi bật dữ liệu.
Nhận xét: Biểu đồ cột so sánh số lượng anime đang xem theo giới tính cho
thấy có sự khác biệt nhẹ giữa các nhóm. Trong đó, nam giới có xu hướng
theo dõi nhiều anime hơn một chút so với nữ giới, trong khi nhóm người
dùng thuộc giới tính khác (“Non-binary”) có số lượng thấp hơn đáng kể –
điều này có thể do quy mô nhóm nhỏ hoặc mức độ tham gia cộng đồng thấp
hơn. Các cột được tô màu khác nhau giúp làm nổi bật sự khác biệt trực
quan giữa các nhóm giới, đồng thời giá trị hiển thị trên đỉnh mỗi cột
giúp người đọc dễ dàng so sánh chính xác.
ggplot(dataset, aes(x = as.factor(rewatched), y = mean_score, fill = as.factor(rewatched))) +
geom_boxplot() +
geom_jitter(alpha = 0.3) +
stat_summary(fun = mean, geom = "line", aes(group=1), color="red") +
labs(title = "Điểm trung bình theo số lần xem lại",
x = "Số lần xem lại", y = "Điểm trung bình") +
theme_minimal() +
theme(legend.position = "none")
Giải thích:
- geom_boxplot(): Vẽ biểu đồ hộp thể hiện sự phân bố của mean_score
(điểm trung bình) theo rewatched (số lần xem lại). Hộp thể hiện trung
vị, tứ phân vị và các giá trị ngoại lai.
- geom_jitter(alpha = 0.3): Thêm các điểm dữ liệu rải rác để hiển thị
phân tán thực tế, tránh chồng lấn.
- stat_summary(fun = mean, geom = “line”, aes(group=1), color=“red”): Vẽ
đường nối các giá trị trung bình giữa các nhóm, giúp quan sát xu hướng
thay đổi điểm trung bình theo số lần xem lại.
- labs(): Thêm tiêu đề và nhãn trục, giúp người xem dễ hiểu nội dung
biểu đồ.
- theme_minimal(): Dùng giao diện tối giản, loại bỏ chi tiết thừa để tập
trung vào dữ liệu (ẩn chú thích bằng
theme(legend.position=“none”)).
Nhận xét: Biểu đồ thể hiện mối quan hệ giữa số lần xem lại anime và điểm
trung bình mà người xem đánh giá. Có thể thấy, khi số lần xem lại tăng
lên, điểm trung bình có xu hướng duy trì ở mức ổn định và cao hơn trung
bình chung. Điều này cho thấy những bộ anime được xem lại nhiều lần
thường là các tác phẩm có chất lượng nội dung cao, dễ để lại ấn tượng
mạnh hoặc có yếu tố cảm xúc khiến người xem muốn thưởng thức lại. Tổng
thể, biểu đồ phản ánh rằng tần suất xem lại có tương quan tích cực với
mức độ yêu thích của khán giả.
ggplot(dataset, aes(x = total_entries, y = mean_score)) +
geom_point(alpha = 0.4, color = "orange") +
geom_density_2d(color = "blue") +
geom_smooth(method = "lm", color = "red", se = FALSE) +
labs(title = "Tương quan giữa tổng số anime và điểm trung bình") +
theme_light() +
theme(plot.title = element_text(face = "bold"))
## `geom_smooth()` using formula = 'y ~ x'
Giải thích:
- geom_point(alpha = 0.4, color = “orange”): Vẽ các điểm phân tán thể
hiện mối quan hệ giữa tổng số anime mà người dùng đã thêm vào danh sách
(total_entries) và điểm trung bình (mean_score) mà họ đánh giá. Mỗi điểm
đại diện cho một người dùng.
- geom_density_2d(color = “blue”): Thêm đường đồng mật độ 2D, thể hiện
vùng tập trung cao của các điểm dữ liệu, giúp xác định khu vực có nhiều
người dùng có đặc điểm tương tự.
- geom_smooth(method = “lm”, color = “red”, se = FALSE): Thêm đường hồi
quy tuyến tính, minh họa xu hướng tổng thể giữa hai biến. Màu đỏ nổi bật
giúp dễ nhận thấy mối tương quan (tăng hoặc giảm).
- labs(title = “Tương quan giữa tổng số anime và điểm trung bình”): Thêm
tiêu đề giúp người xem hiểu rõ nội dung biểu đồ.
- theme_light() và theme(plot.title = element_text(face = “bold”)): Tạo
phong cách sáng, đơn giản, đồng thời làm nổi bật tiêu đề để biểu đồ rõ
ràng và dễ đọc.
Nhận xét: Biểu đồ này mô tả mối quan hệ giữa tổng số anime mà người dùng
đã xem và điểm trung bình họ chấm. Dễ nhận thấy xu hướng đường hồi quy
(màu đỏ) cho thấy người xem càng có kinh nghiệm xem nhiều anime, điểm
trung bình họ chấm càng có xu hướng giảm nhẹ. Điều này phản ánh một thực
tế phổ biến: những người đã xem nhiều anime hơn thường khó tính hơn
trong việc đánh giá, bởi họ có chuẩn so sánh rộng hơn và dễ nhận ra điểm
yếu trong từng tác phẩm. Ngược lại, những người xem ít anime thường có
xu hướng chấm điểm cao hơn, do họ dễ bị ấn tượng bởi các yếu tố mới lạ.
Như vậy, biểu đồ này làm nổi bật mối quan hệ nghịch nhẹ giữa số lượng
anime đã xem và mức độ hài lòng trung bình.
ggplot(dataset, aes(x = gender, y = mean_score, fill = gender)) +
geom_violin(alpha = 0.7) +
geom_boxplot(width = 0.1, fill = "white") +
geom_jitter(width = 0.2, alpha = 0.3) +
labs(title = "Phân bố điểm trung bình theo giới tính") +
theme_bw() +
theme(legend.position = "none")
Giải thích:
- geom_violin(alpha = 0.7): Vẽ biểu đồ violin, thể hiện phân bố xác suất
của điểm trung bình (mean_score) theo giới tính (gender). Phần dày của
hình violin biểu thị vùng có nhiều quan sát tập trung.
- geom_boxplot(width = 0.1, fill = “white”): Thêm biểu đồ hộp (boxplot)
bên trong mỗi violin để hiển thị thống kê tóm tắt như trung vị, tứ phân
vị và giá trị ngoại lai.
- geom_jitter(width = 0.2, alpha = 0.3): Hiển thị các điểm dữ liệu riêng
lẻ bằng cách rải nhẹ theo chiều ngang để tránh chồng chéo, giúp nhìn rõ
mật độ phân bố thực tế.
- labs(title = “Phân bố điểm trung bình theo giới tính”): Thêm tiêu đề
mô tả rõ nội dung biểu đồ.
- theme_bw() + theme(legend.position = “none”): Dùng giao diện nền trắng
(black and white) giúp biểu đồ gọn gàng, tập trung vào dữ liệu, đồng
thời ẩn chú giải vì màu sắc đã thể hiện rõ giới tính.
Nhận xét: Biểu đồ violin cho thấy sự khác biệt trong phân bố điểm trung
bình giữa các nhóm giới tính: Female, Male và Non-Binary.
Nhìn chung, cả ba nhóm có xu hướng tập trung điểm trung bình trong
khoảng 6.5 đến 8 điểm, cho thấy mức độ hài lòng tương đối đồng nhất giữa
các giới. Tuy nhiên, có thể nhận thấy nhóm Non-Binary có độ phân tán
rộng hơn, biểu hiện qua phần thân violin dài hơn — điều này có nghĩa là
ý kiến đánh giá trong nhóm này đa dạng và không đồng nhất như hai nhóm
còn lại.
Ngược lại, nhóm Female và Male có phân bố tương đối đối xứng và tập
trung, cho thấy mức độ đồng thuận cao hơn trong việc đánh giá anime.
Tổng thể, biểu đồ chỉ ra rằng giới tính không phải là yếu tố tạo ra sự
chênh lệch đáng kể trong điểm trung bình, nhưng có sự khác biệt nhỏ về
mức độ phân tán và độ ổn định trong đánh giá.
ggplot(subset(dataset, episodes_watched < 500000 & days_watched < 10000),
aes(x = episodes_watched, y = days_watched, color = rewatched)) +
geom_point(alpha = 0.6) +
geom_smooth(method = "lm", se = FALSE, color = "black") +
scale_color_gradient(low = "blue", high = "red") +
labs(title = "Quan hệ giữa số tập và số ngày xem theo số lần xem lại (loại bỏ ngoại lệ)",
x = "Số tập đã xem", y = "Số ngày xem") +
theme_minimal()
## `geom_smooth()` using formula = 'y ~ x'
Giải thích:
- geom_point(alpha = 0.6): Vẽ biểu đồ phân tán (scatter plot), hiển thị
mối quan hệ giữa số tập đã xem (episodes_watched) và số ngày xem
(days_watched). Mỗi điểm đại diện cho một người dùng. Độ trong suốt
(alpha = 0.6) giúp tránh chồng chéo khi dữ liệu dày đặc.
- geom_smooth(method = “lm”, se = FALSE, color = “black”): Thêm đường
hồi quy tuyến tính (linear model) để thể hiện xu hướng chung giữa hai
biến. Đường này giúp ta nhận biết liệu người xem nhiều tập có xu hướng
dành nhiều ngày hơn để xem không.
- scale_color_gradient(low = “blue”, high = “red”): Tô màu dựa trên biến
rewatched (số lần xem lại): Màu xanh thể hiện ít hoặc không xem lại. Màu
đỏ thể hiện xem lại nhiều lần. Việc này giúp làm nổi bật sự khác biệt
trong hành vi giữa những người xem lại ít và nhiều.
- labs(title = “Quan hệ giữa số tập và ngày xem theo số lần xem lại”):
Đặt tiêu đề biểu đồ, mô tả rõ ràng nội dung và biến được phân
tích.
- theme_minimal(): Áp dụng giao diện tối giản, giúp biểu đồ sáng sủa,
tập trung vào dữ liệu và tránh yếu tố gây nhiễu thị giác.
Nhận xét: Biểu đồ thể hiện mối quan hệ giữa số tập anime đã xem
(episodes_watched) và số ngày xem (days_watched), được tô màu theo số
lần xem lại (rewatched). Quan sát thấy phần lớn các điểm dữ liệu tập
trung theo đường xu hướng tăng, cho thấy rằng người xem càng xem nhiều
tập thì tổng số ngày xem càng tăng theo tỉ lệ thuận — điều này hoàn toàn
hợp lý vì người xem cần nhiều thời gian hơn để hoàn thành nhiều tập phim
hơn. Đáng chú ý, các điểm có màu đỏ (tức là rewatched cao) thường nằm ở
khu vực có số tập và số ngày cao hơn trung bình, cho thấy những người có
thói quen xem lại anime cũng là những người xem nhiều và đầu tư thời
gian dài hơn cho sở thích của mình. Tóm lại, biểu đồ phản ánh mối quan
hệ tích cực giữa khối lượng xem anime và thời gian dành cho nó, đồng
thời nhấn mạnh rằng sự đam mê và mức độ gắn bó với anime có liên hệ chặt
chẽ với thói quen xem lại.
ggplot(dataset, aes(x = completed, y = mean_score)) +
geom_point(alpha = 0.4, color = "steelblue") +
geom_smooth(method = "loess", color = "red") +
geom_density_2d(color = "gray50") +
labs(title = "Điểm trung bình theo số anime đã hoàn thành") +
theme_classic() +
theme(plot.title = element_text(size = 12, face = "bold"))
## `geom_smooth()` using formula = 'y ~ x'
## Warning: Failed to fit group -1.
## Caused by error in `predLoess()`:
## ! workspace required (75523896008) is too large probably because of setting 'se = TRUE'.
Giải thích:
- geom_point(alpha = 0.4, color = “steelblue”): Vẽ biểu đồ phân tán
(scatter plot), thể hiện từng quan sát giữa hai biến:
+ Trục X: completed (số anime đã hoàn thành).
+ Trục Y: mean_score (điểm trung bình người dùng đánh giá).
Mỗi điểm đại diện cho một người dùng. Độ trong suốt alpha = 0.4 giúp
tránh chồng lấn khi dữ liệu dày.
- geom_smooth(method = “loess”, color = “red”): Thêm đường xu hướng
(LOESS curve) – một phương pháp hồi quy phi tuyến tính, thể hiện xu
hướng thay đổi của điểm trung bình theo số anime đã hoàn thành. Đường
màu đỏ mô tả mối quan hệ trơn tru, không nhất thiết tuyến tính giữa hai
biến.
- geom_density_2d(color = “gray50”): Thêm đường mật độ 2 chiều (contour
lines) để biểu diễn khu vực tập trung nhiều điểm dữ liệu. Những vùng có
nhiều đường bao dày hơn thể hiện mật độ người xem cao hơn, tức là nhiều
người có cùng hành vi xem và điểm số tương tự.
- labs(title = “Điểm trung bình theo số anime đã hoàn thành”): Đặt tiêu
đề biểu đồ, giúp người đọc hiểu rõ nội dung biểu diễn là mối liên hệ
giữa số anime hoàn thành và điểm đánh giá trung bình.
- theme_classic() + theme(plot.title = element_text(size = 12, face =
“bold”)): Áp dụng giao diện cổ điển (classic) với nền trắng và đường
trục rõ nét, đồng thời làm nổi bật tiêu đề bằng cỡ chữ lớn và in đậm để
tăng tính trực quan.
Nhận xét: Biểu đồ thể hiện mối quan hệ giữa số anime đã hoàn thành
(completed) và điểm trung bình đánh giá (mean_score). Quan sát cho thấy
có xu hướng tăng nhẹ: những người xem và hoàn thành nhiều anime hơn
thường có xu hướng đưa ra điểm trung bình cao hơn, phản ánh rằng họ là
nhóm người xem có kinh nghiệm và chọn lọc nội dung kỹ hơn. Tuy nhiên,
mật độ điểm dữ liệu dày ở vùng số anime thấp cho thấy phần lớn người
dùng mới hoặc người xem thông thường vẫn chiếm tỷ lệ lớn. Tổng thể, biểu
đồ gợi ý rằng mức độ trải nghiệm có thể ảnh hưởng tích cực đến đánh giá
anime.
dataset %>%
summarise(across(c(watching, completed, on_hold, dropped, plan_to_watch),
sum, na.rm = TRUE)) %>%
pivot_longer(everything(), names_to = "status", values_to = "count") %>%
ggplot(aes(x = status, y = count, fill = status)) +
geom_col() +
geom_text(aes(label = count), vjust = -0.5) +
labs(title = "So sánh các trạng thái xem anime",
x = "Trạng thái", y = "Số lượng") +
scale_fill_brewer(palette = "Set3") +
theme_minimal()
## Warning: There was 1 warning in `summarise()`.
## ℹ In argument: `across(...)`.
## Caused by warning:
## ! The `...` argument of `across()` is deprecated as of
## dplyr 1.1.0.
## Supply arguments directly to `.fns` through an anonymous
## function instead.
##
## # Previously
## across(a:b, mean, na.rm = TRUE)
##
## # Now
## across(a:b, \(x) mean(x, na.rm = TRUE))
Giải thích:
- %>%: là toán tử pipe, nghĩa là “chuyển kết quả của bước trước sang
bước sau”.
- summarise(): tạo ra bảng tóm tắt.
- across(): áp dụng cùng một hàm (sum) lên nhiều cột cùng lúc.
- c(watching, completed, on_hold, dropped, plan_to_watch): đây là 5 cột
thể hiện các trạng thái xem anime.
- sum(…, na.rm = TRUE): tính tổng số lượng anime cho từng trạng thái, bỏ
qua giá trị NA.
- pivot_longer() biến đổi dữ liệu từ 5 cột thành 2 cột mới:
+ status: chứa tên trạng thái (watching, completed, …)
+ count: chứa giá trị tổng tương ứng.
- ggplot(aes(…)): khởi tạo biểu đồ, gán biến trục x, y và màu
(fill).
- geom_col(): vẽ biểu đồ cột (height = count cho từng status).
- labs() giúp thêm tiêu đề chính, và tên trục X/Y cho biểu đồ.
- scale_fill_brewer(palette = “Set3”): chọn bảng màu “Set3” — các màu
nhạt, dễ phân biệt.
- theme_minimal(): giao diện nhẹ nhàng, ít đường kẻ — giúp nổi bật dữ
liệu.
- theme(plot.title = …): in đậm tiêu đề và chỉnh cỡ chữ.
Nhận xét: Biểu đồ cột cho thấy sự khác biệt rõ rệt trong số lượng anime
ở các trạng thái xem khác nhau: “Completed”, “Watching”, “On-Hold”,
“Dropped” và “Plan to Watch”. Kết quả minh họa rằng đa số người dùng có
xu hướng hoàn thành hoặc lên kế hoạch xem nhiều anime, trong khi tỷ lệ
anime bị “bỏ dở” hoặc “tạm dừng” thấp hơn. Điều này phản ánh sự gắn bó
và kiên trì của cộng đồng người xem, đồng thời cho thấy rằng phần lớn
người dùng có mục tiêu theo đuổi trọn vẹn bộ anime hơn là bỏ ngang.
ggplot(dataset, aes(x = on_hold)) +
geom_histogram(binwidth = 2, fill = "gold", color = "black", alpha = 0.7) +
geom_vline(aes(xintercept = mean(on_hold, na.rm = TRUE)),
color = "red", linetype = "dashed") +
geom_density(aes(y = ..count.. * 3), color = "brown") +
labs(title = "Phân bố số anime đang tạm dừng",
x = "Số anime on-hold", y = "Tần suất") +
xlim(0, 100) +
theme_light()
## Warning: The dot-dot notation (`..count..`) was deprecated in
## ggplot2 3.4.0.
## ℹ Please use `after_stat(count)` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where
## this warning was generated.
## Warning: Removed 1808 rows containing non-finite outside the scale
## range (`stat_bin()`).
## Warning: Removed 1808 rows containing non-finite outside the scale
## range (`stat_density()`).
## Warning: Removed 2 rows containing missing values or values outside
## the scale range (`geom_bar()`).
Giải thích:
- ggplot(dataset, aes(x = on_hold)): Khởi tạo biểu đồ với trục hoành là
số lượng anime đang tạm dừng (on_hold).
- geom_histogram(…): Vẽ biểu đồ tần suất (histogram) để hiển thị phân bố
số anime đang bị tạm dừng.
binwidth = 2: mỗi cột đại diện cho nhóm 2 đơn vị. Và fill = “gold”,
color = “black”, alpha = 0.7: chọn màu vàng nhạt, viền đen, độ trong
suốt 70%.
- geom_vline(…): Thêm đường thẳng đứng màu đỏ nét đứt biểu diễn giá trị
trung bình của biến on_hold. Giúp người xem dễ dàng nhận biết mức trung
bình trên biểu đồ.
- geom_density(aes(y = ..count..*3), color = “brown”): Vẽ đường mật độ
(density curve) chồng lên histogram, mô tả xu hướng phân bố mượt mà.
Nhân hệ số 3 để điều chỉnh tỷ lệ y cho khớp với histogram.
Màu nâu giúp dễ phân biệt với các lớp khác.
- labs(…): Thêm tiêu đề và nhãn trục, giúp biểu đồ rõ ràng, có ngữ
nghĩa.
- xlim(0, 100): Giới hạn phần dữ liệu chính.
- theme_light(): Dùng giao diện sáng nhẹ, dễ đọc.
Nhận xét: Biểu đồ histogram thể hiện phân bố số lượng anime đang ở trạng
thái “On-Hold” của người xem. Dễ thấy rằng đa số người dùng chỉ có một
vài anime bị tạm dừng, trong khi số lượng người có danh sách “On-Hold”
dài là rất ít. Đường trung bình được thêm vào giúp xác định mức trung
bình của dữ liệu, cho thấy phần lớn người xem chỉ tạm ngừng ở mức độ
thấp, có thể do họ chuyển sang xem các anime mới hoặc đợi phần tiếp theo
phát hành. Điều này thể hiện mức độ duy trì mối quan tâm cao của khán
giả đối với các bộ anime đang theo dõi.
ggplot(dataset, aes(x = dropped)) +
geom_histogram(binwidth = 2, fill = "salmon", color = "black", alpha = 0.7) +
geom_vline(aes(xintercept = mean(dropped, na.rm = TRUE)),
color = "blue", linetype = "dotted") +
annotate("text", x = mean(dataset$dropped, na.rm = TRUE) + 3, y = 150,
label = "Mean", color = "blue") +
labs(title = "Phân bố số anime bị bỏ dở",
x = "Số anime bị bỏ", y = "Tần suất") +
xlim(0, 100) +
theme_bw()
## Warning: Removed 3614 rows containing non-finite outside the scale
## range (`stat_bin()`).
## Warning: Removed 2 rows containing missing values or values outside
## the scale range (`geom_bar()`).
Giải thích:
- ggplot(dataset, aes(x = dropped)): Khởi tạo biểu đồ với dữ liệu từ
dataset, trong đó biến dropped được chọn làm trục hoành. Biến này biểu
thị số lượng anime mà người dùng đã bỏ dở.
- geom_histogram(binwidth = 2, fill = “salmon”, color = “black”, alpha =
0.7): Vẽ biểu đồ tần suất (histogram) mô tả phân bố của biến
dropped.
+ binwidth = 2: mỗi cột đại diện cho một khoảng 2 đơn vị số anime bị bỏ
dở.
+ fill = “salmon”: tô màu hồng nhạt cho các cột, giúp biểu đồ dễ
nhìn.
+ color = “black”: viền đen bao quanh từng cột, làm nổi bật ranh giới
giữa các khoảng.
+ alpha = 0.7: tăng độ trong suốt để biểu đồ mềm mại, trực quan
hơn.
- geom_vline(aes(xintercept = mean(dropped, na.rm = TRUE)), color =
“blue”, linetype = “dotted”): Thêm đường thẳng đứng tại vị trí giá trị
trung bình của biến dropped.
+ color = “blue” giúp đường trung bình nổi bật.
+ linetype = “dotted” (nét chấm chấm) dùng để phân biệt với đường trục
chính, tăng tính thẩm mỹ.
- annotate(“text”, x = mean(dataset$dropped, na.rm = TRUE) + 3, y = 150,
label = “Mean”, color = “blue”): Thêm nhãn chữ “Mean” gần đường trung
bình để người xem dễ nhận biết.
- labs(title = “Phân bố số anime bị bỏ dở”, x = “Số anime bị bỏ”, y =
“Tần suất”): Đặt tiêu đề và nhãn trục cho biểu đồ.
+ Tiêu đề “Phân bố số anime bị bỏ dở” giúp người đọc nắm được ý nghĩa
biểu đồ.
+ Trục X là số anime bị bỏ, trục Y là tần suất xuất hiện của từng giá
trị.
- xlim(0, 100): Giới hạn trục X để dễ thấy phần chính.
- theme_bw(): Áp dụng giao diện nền trắng – kiểu hiển thị đơn giản, rõ
ràng, giúp biểu đồ dễ đọc và phù hợp khi in trong báo cáo học
thuật.
Nhận xét: Biểu đồ này cho thấy phân bố số lượng anime bị bỏ dở trong
cộng đồng người xem. Phần lớn các giá trị tập trung ở mức thấp, thể hiện
rằng đa số người dùng ít khi bỏ dở anime, trong khi chỉ có một nhóm nhỏ
có số lượng “Dropped” cao hơn. Việc thêm đường trung bình (và nhãn
“Mean”) giúp dễ dàng nhận thấy mức bỏ dở trung bình rất thấp, phản ánh
rằng phần lớn khán giả có thói quen kiên nhẫn và hoàn thành bộ phim
trước khi đưa ra đánh giá. Như vậy, đây là tín hiệu tích cực về mức độ
yêu thích và cam kết của người xem đối với anime.
ggplot(dataset, aes(x = plan_to_watch)) +
geom_histogram(binwidth = 10, fill = "deepskyblue", color = "black", alpha = 0.7) +
geom_vline(aes(xintercept = mean(plan_to_watch, na.rm = TRUE)),
color = "red", linetype = "dashed") +
geom_density(aes(y = ..count.. * 2), color = "blue") +
labs(title = "Phân bố số anime dự định xem",
x = "Số anime plan_to_watch", y = "Tần suất") +
xlim(0, 500) +
theme_minimal()
## Warning: Removed 2168 rows containing non-finite outside the scale
## range (`stat_bin()`).
## Warning: Removed 2168 rows containing non-finite outside the scale
## range (`stat_density()`).
## Warning: Removed 2 rows containing missing values or values outside
## the scale range (`geom_bar()`).
Giải thích:
- ggplot(dataset, aes(x = plan_to_watch)): Khởi tạo biểu đồ từ bộ dữ
liệu dataset, trong đó biến plan_to_watch được đặt ở trục hoành. Biến
này thể hiện số lượng anime mà người dùng có kế hoạch xem trong tương
lai, phản ánh ý định hoặc sở thích tiềm năng của họ.
- geom_histogram(binwidth = 10, fill = “deepskyblue”, color = “black”,
alpha = 0.7): Vẽ biểu đồ tần suất (histogram) biểu diễn phân bố của biến
plan_to_watch. + binwidth = 10: mỗi cột biểu đồ đại diện cho một khoảng
10 anime dự định xem, giúp dữ liệu mượt và dễ quan sát hơn.
+ fill = “deepskyblue”: sử dụng màu xanh da trời tươi để tăng tính trực
quan và gợi cảm giác nhẹ nhàng.
+ color = “black”: viền đen quanh từng cột giúp các khoảng phân bố rõ
ràng.
+ alpha = 0.7: làm các cột hơi trong suốt, tạo cảm giác mềm mại và
chuyên nghiệp.
- geom_vline(aes(xintercept = mean(plan_to_watch, na.rm = TRUE)), color
= “red”, linetype = “dashed”): Thêm đường thẳng đứng biểu diễn giá trị
trung bình của số anime dự định xem.
+ color = “red”: màu đỏ nổi bật, giúp người đọc dễ dàng nhận biết vị trí
trung bình.
+ linetype = “dashed”: sử dụng nét đứt để phân biệt đường trung bình với
đường trục, đồng thời tăng tính thẩm mỹ cho biểu đồ.
- geom_density(aes(y = ..count..2), color = “blue”): Thêm đường mật
độ (density curve) chồng lên biểu đồ tần suất, giúp biểu diễn dạng phân
bố trơn của dữ liệu.
+ aes(y = ..count..2): điều chỉnh tỷ lệ trục tung để đường mật độ
khớp với chiều cao của các cột histogram, đảm bảo hai lớp hiển thị tương
thích.
+ color = “blue”: tô đường mật độ màu xanh lam, tạo cảm giác cân đối với
màu của cột histogram và dễ nhận diện.
- labs(title = “Phân bố số anime dự định xem”, x = “Số anime
plan_to_watch”, y = “Tần suất”): Đặt tiêu đề và nhãn cho các trục của
biểu đồ.
+ Tiêu đề “Phân bố số anime dự định xem” giúp người đọc hiểu rõ nội dung
biểu đồ.
+ Trục X biểu diễn số lượng anime mà người dùng dự định xem, trục Y thể
hiện tần suất xuất hiện của các giá trị này trong dữ liệu.
- xlim(0, 500): Giới hạn trục X để thấy rõ vùng phổ biến.
- theme_minimal(): Áp dụng giao diện nền tối giản, loại bỏ các chi tiết
không cần thiết (đường viền, nền xám…), giúp tập trung sự chú ý vào các
yếu tố dữ liệu chính và tạo cảm giác hiện đại, tinh gọn cho biểu
đồ.
Nhận xét: Biểu đồ thể hiện số lượng anime mà người xem dự định sẽ xem
trong tương lai (Plan to Watch). Kết quả cho thấy phần lớn người dùng có
danh sách “Plan to Watch” khá dài, thể hiện sự quan tâm và nhu cầu khám
phá anime mới liên tục. Đường density và đường trung bình giúp minh họa
rằng có xu hướng nghiêng phải (right-skewed), nghĩa là vẫn có một số
người dùng cực kỳ năng động với danh sách dự định dài vượt trội. Biểu đồ
này phản ánh sự đam mê và hứng thú mạnh mẽ của cộng đồng anime, với xu
hướng liên tục cập nhật và mở rộng trải nghiệm giải trí.
ggplot(dataset, aes(x = total_entries)) +
geom_histogram(binwidth = 10, fill = "violet", color = "black", alpha = 0.7) +
geom_vline(aes(xintercept = median(total_entries, na.rm = TRUE)),
color = "red", linetype = "dashed") +
geom_density(aes(y = ..count.. * 3), color = "darkblue") +
labs(title = "Phân bố tổng số anime của người dùng",
x = "Tổng số anime", y = "Tần suất") +
xlim(0, 1000) +
theme_classic()
## Warning: Removed 8186 rows containing non-finite outside the scale
## range (`stat_bin()`).
## Warning: Removed 8186 rows containing non-finite outside the scale
## range (`stat_density()`).
## Warning: Removed 2 rows containing missing values or values outside
## the scale range (`geom_bar()`).
Giải thích:
- geom_histogram(binwidth = 10, fill = “violet”, color = “black”, alpha
= 0.7): Vẽ biểu đồ tần suất (histogram) mô tả phân bố của biến
total_entries – tức tổng số anime mà mỗi người dùng đã từng tương tác
(bao gồm xem, lên kế hoạch, bỏ dở, v.v.). Các cột có màu tím (violet),
đường viền đen giúp dễ phân biệt, và độ trong suốt alpha = 0.7 tạo cảm
giác nhẹ, tránh biểu đồ bị quá đặc. Mỗi cột biểu diễn số lượng người
dùng nằm trong từng khoảng giá trị tổng số anime.
- geom_vline(aes(xintercept = median(total_entries, na.rm = TRUE)),
color = “red”, linetype = “dashed”): Thêm một đường thẳng đứng tại vị
trí trung vị của tổng số anime. Đường màu đỏ, nét gạch (dashed) giúp dễ
nhận biết vị trí giá trị trung vị – tức mức mà 50% người dùng có tổng số
anime thấp hơn và 50% cao hơn.
- geom_density(aes(y = ..count.. * 3), color = “darkblue”): Chồng thêm
đường mật độ (density curve) để biểu diễn dạng phân bố mượt hơn của dữ
liệu. Đường màu xanh đậm cho thấy xu hướng tập trung hay phân tán của
người dùng theo tổng số anime. Hệ số nhân (×3) giúp đường mật độ tỷ lệ
thuận với trục tần suất, dễ so sánh trực quan với các cột
histogram.
- labs(title = “Phân bố tổng số anime của người dùng”, x = “Tổng số
anime”, y = “Tần suất”): Đặt tiêu đề và nhãn cho các trục, giúp người
đọc dễ hiểu rằng biểu đồ đang mô tả sự phân bố của tổng số anime theo
từng người dùng trong bộ dữ liệu.
- xlim(0, 1000): Giới hạn trục hoành từ 0 đến 1000 nhằm loại bỏ các giá
trị ngoại lai (outliers) và giúp biểu đồ trực quan, tập trung hơn vào
vùng dữ liệu chính.
- theme_classic(): Áp dụng giao diện cổ điển với nền trắng và khung trục
rõ ràng, giúp biểu đồ gọn gàng, dễ đọc và mang phong cách học
thuật.
Nhận xét: Biểu đồ này thể hiện phân bố tổng số anime mà người dùng đã
tương tác (bao gồm các trạng thái như xem, đang xem, hoặc đã hoàn
thành). Phần lớn người dùng có tổng số anime ở mức trung bình hoặc thấp,
thể hiện qua mật độ tập trung cao ở vùng đầu của trục hoành. Đường trung
bình màu đỏ cho thấy số lượng anime trung bình mỗi người theo dõi không
quá lớn, trong khi một số ít người dùng có giá trị cao hơn hẳn, cho thấy
sự đa dạng trong mức độ tham gia của cộng đồng. Nhìn chung, biểu đồ phản
ánh rằng phần đông người dùng có xu hướng theo dõi anime ở mức vừa phải,
trong khi một nhóm nhỏ lại thể hiện độ đam mê cao hơn hẳn.
ggplot(dataset, aes(x = days_watched, fill = gender)) +
geom_histogram(bins = 40, color = "black", alpha = 0.7) +
geom_density(aes(y = ..count..), color = "red", size = 1) +
geom_vline(aes(xintercept = mean(days_watched, na.rm = TRUE)),
color = "blue", linetype = "dashed") +
facet_wrap(~gender) +
xlim(0, 1000) +
theme_minimal() +
labs(title = "Phân phối số ngày xem phim theo giới tính",
x = "Số ngày xem", y = "Tần suất")
## 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.
## Warning: Removed 60 rows containing non-finite outside the scale
## range (`stat_bin()`).
## Warning: Removed 60 rows containing non-finite outside the scale
## range (`stat_density()`).
## Warning: Removed 6 rows containing missing values or values outside
## the scale range (`geom_bar()`).
Giải thích:
- geom_histogram(bins = 40, color = “black”, alpha = 0.7): Vẽ biểu đồ
tần suất (histogram) thể hiện phân bố số ngày xem anime (days_watched)
của người dùng. Biểu đồ được chia thành 40 khoảng (bins), mỗi cột thể
hiện số lượng người dùng có tổng số ngày xem nằm trong một phạm vi nhất
định. Các cột có viền đen và độ trong suốt alpha = 0.7 giúp dễ quan sát
khi dữ liệu được tô màu khác nhau theo giới tính.
- geom_density(aes(y = ..count..), color = “red”, size = 1): Thêm đường
mật độ màu đỏ để làm mượt phân bố dữ liệu, giúp quan sát xu hướng tổng
thể thay vì chỉ nhìn qua các cột rời rạc. Đường này có cùng đơn vị với
biểu đồ tần suất (do dùng ..count..), nên dễ dàng so sánh mật độ người
xem ở các mức days_watched khác nhau.
- geom_vline(aes(xintercept = mean(days_watched, na.rm = TRUE)), color =
“blue”, linetype = “dashed”): Thêm đường thẳng đứng màu xanh lam, nét
đứt (dashed line) để biểu diễn giá trị trung bình của biến days_watched.
Đường này giúp người đọc xác định vị trí trung bình so với phần lớn dữ
liệu và quan sát xem phân bố có bị lệch (skewed) về bên trái hay
phải.
- facet_wrap(gender): Chia biểu đồ thành hai phần riêng biệt tương ứng
với từng giới tính (nam và nữ). Cách hiển thị này giúp dễ dàng so sánh
trực quan hành vi xem anime giữa hai giới, đặc biệt là về độ tập trung,
mức trung bình và độ lệch phân bố.
- xlim(0, 1000): Giới hạn trục X từ 0 đến 1000 để tập trung hiển thị
vùng dữ liệu chính, tránh các giá trị ngoại lai (outliers) khiến biểu đồ
bị kéo giãn và khó quan sát phần trung tâm.
- theme_minimal(): Sử dụng giao diện tối giản, loại bỏ các đường nền và
yếu tố không cần thiết, giúp biểu đồ rõ ràng, nhấn mạnh dữ liệu
chính.
- labs(title = “Phân phối số ngày xem phim theo giới tính”, x = “Số ngày
xem”, y = “Tần suất”): Đặt tiêu đề và nhãn trục, mô tả rõ nội dung biểu
đồ là sự phân bố số ngày xem anime giữa các nhóm giới tính.
Nhận xét: Biểu đồ minh họa phân bố số ngày xem phim (days_watched) theo
từng giới tính. Kết quả cho thấy các nhóm giới tính có phân bố tương đối
tương đồng, tuy nhiên vẫn có sự khác biệt nhỏ: nhóm nam giới thường có
số ngày xem cao hơn một chút, trong khi nhóm nữ giới có phân bố nghiêng
về phía các giá trị thấp hơn. Đường trung bình màu đỏ cho thấy vị trí
trung bình của mỗi nhóm, giúp dễ dàng nhận thấy sự chênh lệch nhẹ giữa
các giới tính. Biểu đồ này gợi ý rằng giới tính có thể là một yếu tố ảnh
hưởng đến thói quen xem anime, mặc dù mức độ khác biệt không quá
lớn.
ggplot(dataset, aes(x = rewatched)) +
geom_histogram(binwidth = 1, fill = "lightpink", color = "black", alpha = 0.7) +
geom_vline(aes(xintercept = mean(rewatched, na.rm = TRUE)),
color = "darkred", linetype = "dotted") +
geom_density(aes(y = ..count.. * 2), color = "darkred") +
labs(title = "Phân bố số lần xem lại anime",
x = "Số lần xem lại", y = "Tần suất") +
xlim(0, 100) +
theme_bw()
## Warning: Removed 4576 rows containing non-finite outside the scale
## range (`stat_bin()`).
## Warning: Removed 4576 rows containing non-finite outside the scale
## range (`stat_density()`).
## Warning: Removed 2 rows containing missing values or values outside
## the scale range (`geom_bar()`).
Giải thích:
- geom_histogram(binwidth = 1, fill = “lightpink”, color = “black”,
alpha = 0.7): Vẽ biểu đồ tần suất (histogram) thể hiện phân bố của biến
rewatched – số lần người dùng xem lại anime. Mỗi cột đại diện cho số
lượng người dùng có cùng (hoặc gần giống) số lần xem lại. Màu nền hồng
nhạt (lightpink) giúp biểu đồ nhẹ mắt, đường viền đen làm nổi bật các
cột, và độ trong suốt alpha = 0.7 tạo sự cân bằng giữa độ đậm và rõ
ràng. Việc chọn binwidth = 1 cho phép hiển thị chi tiết số lần xem lại
theo từng đơn vị, phù hợp với dữ liệu rời rạc.
- geom_vline(aes(xintercept = mean(rewatched, na.rm = TRUE)), color =
“darkred”, linetype = “dotted”): Thêm một đường thẳng đứng biểu thị giá
trị trung bình của số lần xem lại anime. Đường màu đỏ đậm và kiểu nét
chấm (dotted) giúp dễ dàng nhận biết vị trí của trung bình – từ đó so
sánh xem phần lớn người dùng xem lại ít hay nhiều hơn mức trung
bình.
- geom_density(aes(y = ..count.. * 2), color = “darkred”): Chồng thêm
đường mật độ (density curve) màu đỏ đậm để biểu diễn dạng phân bố mượt
mà của dữ liệu. Đường này giúp hình dung xu hướng chung của tần suất xem
lại anime, trong khi hệ số nhân (×2) giúp đường tỷ lệ hợp lý với cột
histogram, đảm bảo tính trực quan khi so sánh.
- labs(title = “Phân bố số lần xem lại anime”, x = “Số lần xem lại”, y =
“Tần suất”): Đặt tiêu đề và nhãn cho trục hoành và trục tung. Biểu đồ
thể hiện rõ mục đích là mô tả phân bố số lần người dùng xem lại anime,
giúp người đọc hiểu được hành vi tái xem trong cộng đồng người
dùng.
- xlim(0, 100): Giới hạn trục X từ 0 đến 100 để loại bỏ các giá trị cực
lớn hiếm gặp, giúp biểu đồ tập trung và mịn hơn ở vùng giá trị chính,
nơi phần lớn người dùng tập trung.
- theme_bw(): Sử dụng giao diện nền trắng (black & white) mang tính
học thuật, với đường trục rõ ràng, giúp biểu đồ chuyên nghiệp và dễ đọc
hơn.
Nhận xét: Biểu đồ thể hiện tần suất số lần xem lại anime của người dùng.
Dễ thấy rằng phần lớn người xem chỉ xem lại ít anime, trong khi chỉ có
một nhóm nhỏ xem lại nhiều lần. Đường trung bình và đường mật độ thể
hiện rõ xu hướng nghiêng phải (right-skewed), nghĩa là có một vài người
dùng có xu hướng xem lại anime rất nhiều lần. Hiện tượng này phản ánh sự
yêu thích mạnh mẽ của một nhóm nhỏ người xem trung thành, đồng thời cho
thấy rằng hành vi xem lại không phổ biến rộng rãi trong cộng đồng nói
chung.
watch_status <- dataset %>%
summarise(
watching = sum(watching, na.rm=TRUE),
completed = sum(completed, na.rm=TRUE),
on_hold = sum(on_hold, na.rm=TRUE),
dropped = sum(dropped, na.rm=TRUE),
plan_to_watch = sum(plan_to_watch, na.rm=TRUE)
) %>% tidyr::pivot_longer(everything(), names_to="status", values_to="count")
ggplot(watch_status, aes(x=reorder(status, -count), y=count, fill=status)) +
geom_col() +
geom_text(aes(label=comma(count)), vjust=-0.5, size=3.5) +
theme_bw() +
labs(title="Tổng số lượng anime theo trạng thái", x="Trạng thái", y="Số lượng")
Giải thích:
- summarise(…): Lệnh này tính tổng số lượng anime của từng trạng thái
xem trong bộ dữ liệu. Cụ thể:
+ watching: tổng số anime mà người dùng hiện đang xem.
+ completed: tổng số anime đã hoàn thành.
+ on_hold: tổng số anime đang tạm hoãn.
+ dropped: tổng số anime bị bỏ dở.
+ plan_to_watch: tổng số anime người dùng dự định xem trong tương lai.
Việc dùng na.rm = TRUE giúp loại bỏ giá trị thiếu (NA), đảm bảo kết quả
chính xác.
- pivot_longer(everything(), names_to = “status”, values_to = “count”):
Chuyển bảng dữ liệu từ dạng rộng sang dài, tức là gom các cột trạng thái
thành hai cột mới:
+ status: chứa tên trạng thái (watching, completed, on_hold, dropped,
plan_to_watch).
+ count: chứa tổng số lượng tương ứng của mỗi trạng thái. Cấu trúc này
thuận tiện cho việc trực quan hóa bằng ggplot2.
- ggplot(watch_status, aes(x = reorder(status, -count), y = count, fill
= status)): Khởi tạo biểu đồ cột, trong đó:
+ X: tên trạng thái xem anime.
+ Y: tổng số lượng anime ở mỗi trạng thái.
+ fill = status: tô màu từng cột theo nhóm trạng thái khác nhau, giúp dễ
phân biệt.
Hàm reorder(status, -count) sắp xếp các cột theo thứ tự giảm dần của giá
trị count, từ cao nhất đến thấp nhất.
- geom_col(): Vẽ biểu đồ cột (column chart), trong đó chiều cao của mỗi
cột thể hiện tổng số lượng anime theo từng trạng thái. Đây là dạng biểu
đồ phù hợp để so sánh tổng thể giữa các nhóm phân loại.
- geom_text(aes(label = comma(count)), vjust = -0.5, size = 3.5): Thêm
nhãn hiển thị giá trị thực tế trên đầu mỗi cột.
+ Hàm comma(count) (thuộc thư viện scales) giúp định dạng số có dấu phẩy
ngăn cách hàng nghìn (ví dụ: 12,345), dễ đọc hơn.
+ Tham số vjust = -0.5 điều chỉnh vị trí nhãn nằm ngay trên cột để dễ
nhìn.
- theme_bw(): Áp dụng giao diện nền trắng – khung đen (black-white
theme), giúp biểu đồ rõ ràng, chuyên nghiệp, phù hợp cho báo cáo học
thuật.
- labs(title = “Tổng số lượng anime theo trạng thái”, x = “Trạng thái”,
y = “Số lượng”): Đặt tiêu đề và nhãn trục, mô tả rõ ý nghĩa biểu đồ —
thể hiện tổng số anime mà người dùng đã hoàn thành, đang xem, tạm dừng,
bỏ dở hoặc có kế hoạch xem.
Nhận xét: Biểu đồ cột so sánh số lượng anime theo từng trạng thái xem
bao gồm: “Watching”, “Completed”, “On-Hold”, “Dropped” và “Plan to
Watch”. Kết quả cho thấy số anime ở trạng thái “Completed” và “Plan to
Watch” chiếm tỷ trọng cao nhất, chứng tỏ phần lớn người dùng hoặc đã
hoàn thành xem, hoặc đang lên kế hoạch xem thêm nhiều anime mới. Ngược
lại, hai trạng thái “Dropped” và “On-Hold” chiếm tỷ lệ thấp, phản ánh
rằng người xem anime thường có xu hướng kiên trì thay vì bỏ dở giữa
chừng. Biểu đồ này cho thấy cộng đồng người xem anime duy trì mức độ
tương tác và hứng thú cao, thể hiện một văn hóa xem kiên định và liên
tục mở rộng danh sách phim.
ggplot(watch_status, aes(x=status, y=count, group=1)) +
geom_line(color="darkblue", size=1) +
geom_point(size=3, color="red") +
geom_text(aes(label=count), vjust=-0.5) +
theme_classic() +
labs(title="Xu hướng số lượng phim theo trạng thái", x="Trạng thái", y="Số lượng")
Giải thích:
- ggplot(watch_status, aes(x = status, y = count, group = 1)): Khởi tạo
biểu đồ đường (line chart) với dữ liệu từ bảng watch_status.
+ status: biểu diễn trên trục X, là các trạng thái xem anime (watching,
completed, on_hold, dropped, plan_to_watch).
+ count: biểu diễn trên trục Y, là tổng số lượng anime tương ứng với
từng trạng thái.
+ group = 1: đảm bảo các điểm dữ liệu được nối liền thành một đường duy
nhất (thay vì nhiều nhóm tách biệt).
- geom_line(color = “darkblue”, size = 1): Vẽ đường nối giữa các điểm dữ
liệu, thể hiện xu hướng thay đổi số lượng anime theo từng trạng
thái.
+ Đường màu xanh đậm (darkblue) giúp nổi bật, thể hiện rõ mạch xu
hướng.
+ size = 1 quy định độ dày của đường, tăng độ dễ nhìn trong báo
cáo.
- geom_point(size = 3, color = “red”): Thêm các điểm dữ liệu màu đỏ tại
mỗi vị trí trạng thái để làm nổi bật giá trị cụ thể. Các điểm này giúp
người xem dễ dàng nhận biết và phân biệt từng giá trị hơn là chỉ nhìn
đường xu hướng.
- geom_text(aes(label = count), vjust = -0.5): Thêm nhãn số lượng cụ thể
ngay trên mỗi điểm dữ liệu.
vjust = -0.5 giúp các con số hiển thị phía trên điểm đỏ, tránh bị chồng
lấn. Nhờ đó, người xem có thể đọc trực tiếp giá trị mà không cần ước
lượng từ trục Y.
- theme_classic(): Áp dụng giao diện nền trắng và đường trục rõ nét, tạo
cảm giác gọn gàng, chuyên nghiệp, phù hợp cho báo cáo thống kê hoặc học
thuật.
- labs(title = “Xu hướng số lượng phim theo trạng thái”, x = “Trạng
thái”, y = “Số lượng”): Đặt tiêu đề và nhãn cho hai trục, giúp người đọc
hiểu rằng biểu đồ thể hiện sự biến động của tổng số anime giữa các trạng
thái khác nhau trong quá trình xem.
Nhận xét: Biểu đồ cho thấy sự khác biệt rõ rệt giữa các trạng thái xem
phim. Số lượng phim “đã xem” thường cao nhất, trong khi nhóm “đang xem”
và “dự định xem” có xu hướng thấp hơn. Điều này phản ánh thói quen xem
phim của người dùng có xu hướng hoàn thành danh sách phim đã chọn.
ggplot(dataset, aes(x = episodes_watched)) +
geom_histogram(bins=50, fill="skyblue", color="black") +
scale_x_log10() +
geom_vline(aes(xintercept=median(episodes_watched,na.rm=TRUE)), color="red") +
theme_bw() +
labs(title="Phân phối log-scale số tập phim", x="Log(Số tập)", y="Tần suất")
## Warning in scale_x_log10(): log-10 transformation
## introduced infinite values.
## Warning: Removed 25766 rows containing non-finite outside the scale
## range (`stat_bin()`).
Giải thích:
- ggplot(dataset, aes(x = episodes_watched)): Khởi tạo biểu đồ phân bố
(histogram) với dữ liệu từ dataset, trong đó biến episodes_watched (số
tập phim mà người dùng đã xem) được chọn làm trục hoành. Mục tiêu là xem
xét mức độ phân tán và tần suất của số tập phim giữa các người
dùng.
- geom_histogram(bins = 50, fill = “skyblue”, color = “black”): Vẽ biểu
đồ tần suất gồm 50 cột, mỗi cột đại diện cho một khoảng giá trị số tập
phim.
+ bins = 50 giúp chia nhỏ dữ liệu thành 50 khoảng, thể hiện chi tiết hơn
sự phân bố.
+ fill = “skyblue” tạo màu xanh nhạt nhẹ nhàng cho các cột, giúp dễ quan
sát.
+ color = “black” thêm đường viền đen cho từng cột để phân tách rõ ràng
giữa các nhóm dữ liệu.
- scale_x_log10(): Chuyển trục X sang thang đo logarit (log-scale). Đây
là một bước rất quan trọng khi dữ liệu bị lệch mạnh về một phía — chẳng
hạn có nhiều người xem rất ít tập, trong khi một số ít người xem hàng
ngàn tập. Việc dùng log giúp thu hẹp khoảng cách giữa các giá trị lớn và
nhỏ, làm cho biểu đồ cân đối và dễ đọc hơn, đồng thời thể hiện rõ hơn xu
hướng tổng thể của dữ liệu.
- geom_vline(aes(xintercept = median(episodes_watched, na.rm = TRUE)),
color = “red”): Thêm đường thẳng đứng màu đỏ tại vị trí trung vị
(median) của số tập phim đã xem. Việc dùng trung vị thay vì trung bình
giúp biểu diễn giá trị “đại diện” cho phần lớn người dùng, tránh bị ảnh
hưởng bởi các giá trị ngoại lai (outliers) — chẳng hạn vài người xem quá
nhiều anime.
- theme_bw(): Áp dụng chủ đề nền trắng (black-white theme), giúp các chi
tiết như cột màu xanh và đường trung vị đỏ nổi bật rõ ràng, phù hợp cho
các báo cáo học thuật.
- labs(title = “Phân phối log-scale số tập phim”, x = “Log(Số tập)”, y =
“Tần suất”): Đặt tiêu đề và nhãn trục cho biểu đồ, làm rõ rằng biểu đồ
này thể hiện phân bố của số tập phim đã xem trên thang logarit.
Nhận xét: Biểu đồ cho thấy phần lớn người dùng chỉ xem một lượng nhỏ đến
trung bình số tập phim, thể hiện qua mật độ tập trung ở phía bên trái
(tức giá trị log nhỏ). Khi chuyển sang thang log, ta dễ dàng nhận ra xu
hướng giảm dần của tần suất khi số tập phim tăng. Điều này phản ánh thực
tế rằng chỉ có một nhóm nhỏ người dùng xem số lượng anime rất lớn, trong
khi phần đông dừng lại ở mức vừa phải.
dataset %>%
group_by(gender) %>%
summarise(mean_score_avg = mean(mean_score, na.rm=TRUE)) %>%
ggplot(aes(x=gender, y=mean_score_avg, fill=gender)) +
geom_col() +
geom_text(aes(label=round(mean_score_avg,2)), vjust=-0.5) +
theme_minimal() +
labs(title="Điểm trung bình theo giới tính", x="Giới tính", y="Điểm trung bình")
Giải thích:
- group_by(gender):chia bộ dữ liệu thành các nhóm theo biến gender (giới
tính nam, nữ, hoặc khác nếu có).
- summarise(mean_score_avg = mean(mean_score, na.rm=TRUE))
+ Hàm mean() tính giá trị trung bình của biến mean_score.
+ Tham số na.rm=TRUE giúp loại bỏ các giá trị bị thiếu (NA) trong quá
trình tính toán. Kết quả trả về là một bảng mới gồm hai cột: gender và
mean_score_avg
- geom_col(): Dùng để vẽ cột với chiều cao tương ứng giá trị trung bình
của mỗi nhóm giới tính. Màu sắc của từng cột được xác định bởi biến fill
= gender.
- geom_text(aes(label=round(mean_score_avg,2)), vjust=-0.5)
+ label hiển thị giá trị trung bình được làm tròn đến 2 chữ số thập
phân.
+ vjust = -0.5 điều chỉnh vị trí nhãn nằm phía trên đầu cột, giúp dễ
nhìn.
- theme_minimal(): Sử dụng giao diện tối giản giúp biểu đồ gọn gàng, dễ
đọc.
- labs(title=“Điểm trung bình theo giới tính”, x=“Giới tính”, y=“Điểm
trung bình”)
Nhận xét: Điểm trung bình đánh giá phim giữa các giới tính có sự chênh
lệch nhẹ. Nhóm nữ thường cho điểm cao hơn một chút so với nhóm nam, phản
ánh xu hướng đánh giá tích cực hơn của người dùng nữ.
ggplot(dataset, aes(x = gender, y = mean_score, fill = gender)) +
geom_boxplot(alpha = 0.7) +
geom_jitter(width = 0.2, alpha = 0.2, color = "black") +
stat_summary(fun=mean, geom="point", shape=18, color="red", size=3) +
theme_light() +
labs(title="Phân phối điểm trung bình theo giới tính", x="Giới tính", y="Điểm trung bình")
Giải thích:
- ggplot() với dữ liệu đầu vào là dataset, trong đó trục hoành biểu diễn
biến giới tính (gender) và trục tung biểu diễn điểm trung bình
(mean_score). Các hộp trong biểu đồ được tô màu theo giới tính nhờ tham
số fill = gender, giúp dễ dàng phân biệt giữa các nhóm.
- geom_boxplot(alpha = 0.7) được sử dụng để vẽ biểu đồ hộp (boxplot),
thể hiện phân bố điểm trung bình của từng nhóm giới tính với độ trong
suốt vừa phải để không che mất các lớp khác.
- geom_jitter(width = 0.2, alpha = 0.2, color = “black”) được thêm vào
để hiển thị các điểm dữ liệu riêng lẻ, cho phép quan sát rõ hơn mức độ
phân tán của từng cá nhân trong mỗi nhóm giới tính, đồng thời tránh việc
các điểm bị chồng lên nhau.
- stat_summary(fun = mean, geom = “point”, shape = 18, color = “red”,
size = 3) được dùng để đánh dấu giá trị trung bình của từng nhóm bằng
một điểm màu đỏ hình thoi, giúp người xem dễ dàng nhận biết xu hướng
trung bình của mỗi giới.
- theme_light(): Giao diện sáng, nhẹ nhàng, rõ ràng và dễ đọc.
- labs(), với tiêu đề “Phân phối điểm trung bình theo giới tính” cùng
các nhãn trục “Giới tính” và “Điểm trung bình”, giúp biểu đồ có tính mô
tả tốt hơn.
Nhận xét: Biểu đồ thể hiện sự khác biệt về điểm trung bình giữa các giới
tính. Kết quả cho thấy điểm trung bình của các nhóm không có sự chênh
lệch quá lớn, tuy nhiên vẫn tồn tại những khác biệt nhỏ về giá trị trung
vị và mức độ phân tán. Nhóm nam nhìn chung có điểm trung bình cao hơn
một chút so với nhóm nữ và nhóm phi nhị nguyên giới, cho thấy có thể tồn
tại sự khác biệt trong xu hướng hoặc tiêu chí đánh giá phim giữa các
giới tính.
dataset_filtered <- dataset %>% filter(episodes_watched < 10000)
ggplot(dataset_filtered, aes(x = episodes_watched, fill = gender)) +
geom_histogram(bins = 50, color = "black", alpha = 0.6) +
geom_density(aes(y = ..count..), color = "red", size = 1) +
geom_vline(aes(xintercept = mean(episodes_watched, na.rm = TRUE)),
color = "blue", linetype = "dashed", size = 1) +
facet_wrap(~gender) +
theme_minimal() +
labs(title = "Phân phối số tập phim đã xem (loại bỏ outlier)",
x = "Số tập phim đã xem",
y = "Tần suất") +
scale_x_continuous(labels = scales::comma)
Giải thích:
- dataset_filtered <- dataset %>% filter(episodes_watched <
10000): giúp giữ lại những quan sát có số tập phim nhỏ hơn 10.000, đảm
bảo dữ liệu không bị ảnh hưởng bởi các trường hợp quá lớn, từ đó phản
ánh trung thực hơn thói quen xem phim của người dùng.
- hàm ggplot() được sử dụng với biến episodes_watched làm trục hoành,
thể hiện số tập phim đã xem, và fill = gender để tô màu khác nhau cho
từng giới tính.
- geom_histogram(bins = 50, color = “black”, alpha = 0.6) vẽ biểu đồ cột
thể hiện tần suất xem phim, trong đó dữ liệu được chia thành 50 khoảng
(bins), giúp biểu đồ mượt mà hơn. Mỗi cột có viền đen (color = “black”)
và độ trong suốt 60% (alpha = 0.6) để các cột không bị che lấp khi chồng
màu. Tiếp theo, geom_density(aes(y = ..count..), color = “red”, size =
1) thêm đường mật độ phân phối (density curve) màu đỏ phủ lên biểu đồ
cột, cho phép quan sát xu hướng chung của dữ liệu dưới dạng đường cong
liên tục thay vì chỉ qua các cột rời rạc.
- geom_vline(aes(xintercept = mean(episodes_watched, na.rm = TRUE)),
color = “blue”, linetype = “dashed”, size = 1) vẽ một đường thẳng đứng
màu xanh tại vị trí giá trị trung bình của số tập phim đã xem, giúp
người xem dễ dàng nhận biết mức trung bình so với toàn bộ phân
phối.
- facet_wrap(~gender), cho phép so sánh trực tiếp phân phối giữa các
nhóm nam và nữ trên cùng một thang đo. Giao diện được làm gọn gàng và
hiện đại nhờ chủ đề theme_minimal().
- labs() để biểu đồ có tiêu đề “Phân phối số tập phim đã xem (loại bỏ
outlier)” cùng các trục được đặt tên rõ ràng (“Số tập phim đã xem” và
“Tần suất”).
- scale_x_continuous(labels = scales::comma) giúp hiển thị giá trị trục
hoành ở dạng có dấu phẩy (ví dụ: 1,000; 5,000) nhằm tăng tính trực quan
và dễ đọc.
Nhận xét: Biểu đồ mô tả phân phối số tập phim đã xem (sau khi loại bỏ
các giá trị ngoại lai) của người dùng theo giới tính. Kết quả cho thấy
phân phối của cả ba nhóm đều lệch phải, nghĩa là phần lớn người dùng chỉ
xem một số lượng nhỏ tập phim, trong khi chỉ một số ít xem rất nhiều.
Trung bình số tập phim đã xem của nhóm nam cao hơn so với nhóm nữ và
nhóm phi nhị nguyên giới, điều này gợi ý rằng nhóm nam có xu hướng dành
nhiều thời gian cho việc xem phim hơn. Sự khác biệt về giá trị trung
bình giữa các nhóm giới tính phản ánh mức độ quan tâm và tần suất xem
phim khác nhau, cho thấy yếu tố giới tính có thể ảnh hưởng đến hành vi
tiêu thụ nội dung giải trí.
bctc <- read_excel("C:/Users/DELL/Downloads/dig ban cuoi.xlsx")
## 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(bctc)
## # A tibble: 6 × 189
## ...1 `TỔNG TÀI SẢN` `TÀI SẢN NGẮN HẠN`
## <dbl> <dbl> <dbl>
## 1 2015 5.09e12 3211018731920
## 2 2016 5.88e12 4182170299524
## 3 2017 6.08e12 4809788192964
## 4 2018 6.83e12 5633632858566
## 5 2019 8.20e12 7130818433089
## 6 2020 1.18e13 7299152349851
## # ℹ 186 more variables: `Tiền và tương đương tiền` <dbl>,
## # Tiền <dbl>, `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>, …
Giải thích: Hàm head() hiển thị 6 dòng đầu tiên của bộ dữ liệu.
Nhận xét: Giúp người phân tích có cái nhìn trực quan về cấu trúc dữ
liệu: tên biến, kiểu dữ liệu, dạng giá trị. Phát hiện nhanh lỗi nhập
liệu, giá trị NA, hoặc định dạng sai (chẳng hạn cột số nhưng bị lưu dạng
ký tự).
dim(bctc)
## [1] 10 189
Giải thích: Hàm dim() trả về kích thước của bộ dữ liệu, bao gồm số
dòng (quan sát) và số cột (biến).
Nhận xét: Kết quả cho biết bộ dữ liệu có 10 năm quan sát trong giai đoạn
nghiên cứu (từ 2015 đến 2024). Mỗi hàng thể hiện các chỉ tiêu tài chính
của Công ty DIG trong một năm và 189 cột tương ứng với 189 biến tài
chính khác nhau được thu thập từ báo cáo tài chính của công ty.
names(bctc)
## [1] "...1"
## [2] "TỔNG TÀI SẢN"
## [3] "TÀI SẢN NGẮN HẠN"
## [4] "Tiền và tương đương tiền"
## [5] "Tiền"
## [6] "Các khoản tương đương tiền"
## [7] "Giá trị thuần đầu tư ngắn hạn"
## [8] "Đầu tư ngắn hạn"
## [9] "Dự phòng đầu tư ngắn hạn"
## [10] "Chứng khoán đầu tư giữ đến ngày đáo hạn"
## [11] "Các khoản phải thu"
## [12] "Phải thu khách hàng"
## [13] "Trả trước người bán"
## [14] "Phải thu nội bộ"
## [15] "Phải thu về XDCB"
## [16] "Phải thu về cho vay ngắn hạn"
## [17] "Phải thu khác"
## [18] "Dự phòng nợ khó đòi"
## [19] "Tài sản thiếu chờ xử lý"
## [20] "Hàng tồn kho, ròng"
## [21] "Hàng tồn kho"
## [22] "Dự phòng giảm giá HTK"
## [23] "Tài sản lưu động khác...23"
## [24] "Trả trước ngắn hạn"
## [25] "Thuế VAT phải thu"
## [26] "Phải thu thuế khác"
## [27] "Giao dịch mua bán lại trái phiếu chính phủ...27"
## [28] "Tài sản lưu động khác...28"
## [29] "TÀI SẢN DÀI HẠN"
## [30] "Phải thu dài hạn"
## [31] "Phải thu khách hàng dài hạn"
## [32] "Trả trước người bán dài hạn"
## [33] "Vốn kinh doanh ở các đơn vị trực thuộc"
## [34] "Phải thu nội bộ dài hạn"
## [35] "Phải thu về cho vay dài hạn"
## [36] "Phải thu dài hạn khác"
## [37] "Dự phòng phải thu dài hạn"
## [38] "Tài sản cố định"
## [39] "GTCL TSCĐ hữu hình"
## [40] "Nguyên giá TSCĐ hữu hình"
## [41] "Khấu hao lũy kế TSCĐ hữu hình"
## [42] "GTCL Tài sản thuê tài chính"
## [43] "Nguyên giá tài sản thuê tài chính"
## [44] "Khấu hao lũy kế tài sản thuê tài chính"
## [45] "GTCL tài sản cố định vô hình"
## [46] "Nguyên giá TSCĐ vô hình"
## [47] "Khấu hao lũy kế TSCĐ vô hình"
## [48] "Bất động sản đầu tư"
## [49] "Nguyên giá tài sản đầu tư"
## [50] "Khấu hao lũy kế tài sản đầu tư"
## [51] "Tài sản dở dang dài hạn"
## [52] "Chi phí sản xuất, kinh doanh dở dang dài hạn"
## [53] "Xây dựng cơ bản dở dang"
## [54] "Đầu tư dài hạn"
## [55] "Đầu tư vào các công ty con"
## [56] "Đầu tư vào công ty liên doanh"
## [57] "Đầu tư dài hạn khác"
## [58] "Dự phòng giảm giá đầu tư dài hạn"
## [59] "Đầu tư nắm giữ đến ngày đáo hạn"
## [60] "Tài sản dài hạn khác"
## [61] "Trả trước dài hạn"
## [62] "Thuế thu nhập hoãn lại phải thu"
## [63] "Thiết bị, vật tư, phụ tùng thay thế dài hạn"
## [64] "Các tài sản dài hạn khác"
## [65] "Lợi thế thương mại"
## [66] "NỢ PHẢI TRẢ"
## [67] "Nợ ngắn hạn"
## [68] "Phải trả người bán"
## [69] "Người mua trả tiền trước"
## [70] "Thuế và các khoản phải trả Nhà nước"
## [71] "Phải trả người lao động"
## [72] "Chi phí phải trả"
## [73] "Phải trả nội bộ"
## [74] "Phải trả về xây dựng cơ bản"
## [75] "Doanh thu chưa thực hiện ngắn hạn"
## [76] "Phải trả khác"
## [77] "Vay ngắn hạn"
## [78] "Dự phòng các khoản phải trả ngắn hạn"
## [79] "Quỹ khen thưởng, phúc lợi"
## [80] "Quỹ bình ổn giá"
## [81] "Giao dịch mua bán lại trái phiếu chính phủ...81"
## [82] "Nợ dài hạn"
## [83] "Phải trả nhà cung cấp dài hạn"
## [84] "Người mua trả tiền trước dài hạn"
## [85] "Chi phí phải trả dài hạn"
## [86] "Phải trả nội bộ về vốn kinh doanh"
## [87] "Phải trả nội bộ dài hạn"
## [88] "Doanh thu chưa thực hiên"
## [89] "Phải trả dài hạn khác"
## [90] "Vay dài hạn"
## [91] "Trái phiếu chuyển đổi"
## [92] "Cổ phiếu ưu đãi...92"
## [93] "Thuế thu nhập hoãn lại phải trả"
## [94] "Dự phòng trợ cấp thôi việc"
## [95] "Dự phòng các khoản công nợ dài hạn"
## [96] "Quỹ phát triển khoa học công nghệ"
## [97] "VỐN CHỦ SỞ HỮU"
## [98] "Vốn và các quỹ"
## [99] "Vốn góp"
## [100] "Cổ phiếu phổ thông"
## [101] "Cổ phiếu ưu đãi...101"
## [102] "Thặng dư vốn cổ phần"
## [103] "Quyền chọn chuyển đổi trái phiếu"
## [104] "Vốn khác"
## [105] "Cổ phiếu Quỹ"
## [106] "Chênh lệch đánh giá lại tài sản"
## [107] "Chênh lệch tỷ giá"
## [108] "Quỹ đầu tư và phát triển"
## [109] "Quỹ hỗ trợ sắp xếp doanh nghiệp"
## [110] "Quỹ dự phòng tài chính"
## [111] "Quỹ khác"
## [112] "Lãi chưa phân phối"
## [113] "LNST chưa phân phối lũy kế đến cuối kỳ trước"
## [114] "LNST chưa phân phối kỳ này"
## [115] "Lợi ích cổ đông không kiểm soát"
## [116] "Vốn Ngân sách nhà nước và quỹ khác"
## [117] "Quỹ khen thưởng, phúc lợi (trước 2010)"
## [118] "Vốn ngân sách nhà nước"
## [119] "Nguồn kinh phí đã hình thành TSCĐ"
## [120] "Lợi ích của cổ đông thiểu số...120"
## [121] "TỔNG CỘNG NGUỒN VỐN"
## [122] "Doanh số"
## [123] "Các khoản giảm trừ"
## [124] "Doanh số thuần"
## [125] "Giá vốn hàng bán"
## [126] "Lãi gộp"
## [127] "Thu nhập tài chính"
## [128] "Chi phí tài chính"
## [129] "Trong đó: Chi phí lãi vay"
## [130] "Lãi/(lỗ) từ công ty liên doanh"
## [131] "Chi phí bán hàng"
## [132] "Chi phí quản lý doanh nghiệp"
## [133] "Lãi/(lỗ) từ hoạt động kinh doanh"
## [134] "Thu nhập khác"
## [135] "Chi phí khác"
## [136] "Thu nhập khác, ròng"
## [137] "Lãi/(lỗ) từ công ty liên doanh (từ năm 2015)"
## [138] "Lãi/(lỗ) ròng trước thuế"
## [139] "Thuế thu nhập doanh nghiệp – hiện thời"
## [140] "Thuế thu nhập doanh nghiệp – hoãn lại"
## [141] "Chi phí thuế thu nhập doanh nghiệp"
## [142] "Lãi/(lỗ) thuần sau thuế"
## [143] "Lợi ích của cổ đông thiểu số...143"
## [144] "Lợi nhuận của Cổ đông của Công ty mẹ"
## [145] "Lãi cơ bản trên cổ phiếu"
## [146] "Lãi trên cổ phiếu pha loãng"
## [147] "EBIT"
## [148] "EBITDA"
## [149] "Lưu chuyển tiền thuần từ các hoạt động sản xuất kinh doanh"
## [150] "Lãi/lỗ trước những thay đổi vốn lưu động"
## [151] "Lãi trước thuế"
## [152] "Khấu hao TSCĐ"
## [153] "Phân bổ lợi thế thương mại"
## [154] "Chi phí dự phòng"
## [155] "Lãi/(lỗ) chênh lệch tỷ giá chưa thực hiện"
## [156] "Lãi/(lỗ) từ thanh lý tài sản cố định"
## [157] "Lãi/(lỗ) từ hoạt động đầu tư"
## [158] "Chi phí lãi vay"
## [159] "Thu lãi và cổ tức"
## [160] "Các khoản điều chỉnh khác"
## [161] "(Tăng)/giảm các khoản phải thu"
## [162] "(Tăng)/giảm hàng tồn kho"
## [163] "Tăng/(giảm) các khoản phải trả"
## [164] "( Tăng)/giảm chi phí trả trước"
## [165] "(Tăng)/giảm chứng khoán kinh doanh"
## [166] "Chi phí lãi vay đã trả"
## [167] "Thuế thu nhập doanh nghiệp đã trả"
## [168] "Tiền thu khác từ các hoạt động kinh doanh"
## [169] "Tiền chi khác từ các hoạt động kinh doanh"
## [170] "Lưu chuyển tiền tệ ròng từ hoạt động đầu tư"
## [171] "Tiền mua tài sản cố định và các tài sản dài hạn khác"
## [172] "Tiền thu được từ thanh lý tài sản cố định"
## [173] "Tiền cho vay hoặc mua công cụ nợ"
## [174] "Tiền thu từ cho vay hoặc thu từ phát hành công cụ nợ"
## [175] "Đầu tư vào các doanh nghiệp khác"
## [176] "Tiền thu từ việc bán các khoản đầu tư vào các doanh nghiệp khác"
## [177] "Cổ tức và tiền lãi nhận được"
## [178] "Lưu chuyển tiền tệ từ hoạt động tài chính"
## [179] "Tiền thu từ phát hành cổ phiếu và vốn góp"
## [180] "Chi trả cho việc mua lại, trả lại cổ phiếu"
## [181] "Tiền thu được các khoản đi vay"
## [182] "Tiển trả các khoản đi vay"
## [183] "Tiền thanh toán vốn gốc đi thuê tài chính"
## [184] "Cổ tức đã trả"
## [185] "Tiền lãi đã nhận"
## [186] "Lưu chuyển tiền thuần trong kỳ"
## [187] "Tiền và tương đương tiền đầu kỳ"
## [188] "Ảnh hưởng của chênh lệch tỷ giá"
## [189] "Tiền và tương đương tiền cuối kỳ"
Giải thích: Hàm name() hiển thị tên của tất cả các biến (cột) trong
bộ dữ liệu.
Nhận xét: Việc liệt kê tên biến giúp người phân tích nắm được cấu trúc
thông tin, phục vụ cho việc chọn lọc, xử lý và trực quan hóa dữ liệu ở
các bước sau.
str(bctc)
## tibble [10 × 189] (S3: tbl_df/tbl/data.frame)
## $ ...1 : num [1:10] 2015 2016 2017 2018 2019 ...
## $ TỔNG TÀI SẢN : num [1:10] 5.09e+12 5.88e+12 6.08e+12 6.83e+12 8.20e+12 ...
## $ TÀI SẢN NGẮN HẠN : num [1:10] 3.21e+12 4.18e+12 4.81e+12 5.63e+12 7.13e+12 ...
## $ Tiền và tương đương tiền : num [1:10] 6.45e+10 1.79e+11 2.03e+11 7.35e+11 5.94e+11 ...
## $ Tiền : num [1:10] 4.36e+10 1.79e+11 1.24e+11 4.00e+11 4.75e+11 ...
## $ Các khoản tương đương tiền : num [1:10] 2.10e+10 5.00e+07 7.87e+10 3.35e+11 1.19e+11 ...
## $ Giá trị thuần đầu tư ngắn hạn : num [1:10] 0.00 4.00e+10 4.07e+10 8.00e+08 2.25e+11 ...
## $ Đầu tư ngắn hạn : num [1:10] 0 0 0 0 0 0 0 0 0 0
## $ Dự phòng đầu tư ngắn hạn : num [1:10] 0 0 0 0 0 0 0 0 0 0
## $ Chứng khoán đầu tư giữ đến ngày đáo hạn : num [1:10] 0.00 4.00e+10 4.07e+10 8.00e+08 2.25e+11 ...
## $ Các khoản phải thu : num [1:10] 6.76e+11 1.05e+12 9.76e+11 1.70e+12 1.96e+12 ...
## $ Phải thu khách hàng : num [1:10] 4.96e+11 7.14e+11 7.03e+11 1.02e+12 9.41e+11 ...
## $ Trả trước người bán : num [1:10] 7.14e+10 2.04e+11 4.86e+10 2.80e+11 2.46e+11 ...
## $ Phải thu nội bộ : num [1:10] 0 0 0 0 0 0 0 0 0 0
## $ Phải thu về XDCB : num [1:10] 0 0 0 0 0 0 0 0 0 0
## $ Phải thu về cho vay ngắn hạn : num [1:10] 4.00e+09 3.07e+10 3.75e+10 1.00e+10 7.67e+10 ...
## $ Phải thu khác : num [1:10] 1.31e+11 1.28e+11 2.07e+11 4.10e+11 7.07e+11 ...
## $ Dự phòng nợ khó đòi : num [1:10] -2.63e+10 -2.92e+10 -2.00e+10 -2.28e+10 -1.51e+10 ...
## $ Tài sản thiếu chờ xử lý : num [1:10] 30846447 34403830 53098990 59203748 10783893 ...
## $ Hàng tồn kho, ròng : num [1:10] 2.44e+12 2.86e+12 3.54e+12 3.13e+12 4.19e+12 ...
## $ Hàng tồn kho : num [1:10] 2.44e+12 2.86e+12 3.54e+12 3.15e+12 4.20e+12 ...
## $ Dự phòng giảm giá HTK : num [1:10] -4.50e+08 -5.99e+08 0.00 -1.47e+10 -9.68e+09 ...
## $ Tài sản lưu động khác...23 : num [1:10] 3.35e+10 5.76e+10 5.18e+10 6.65e+10 1.63e+11 ...
## $ Trả trước ngắn hạn : num [1:10] 8.75e+09 4.24e+10 4.73e+10 6.20e+10 1.42e+11 ...
## $ Thuế VAT phải thu : num [1:10] 1.82e+10 5.24e+09 1.32e+09 1.88e+09 3.49e+09 ...
## $ Phải thu thuế khác : num [1:10] 6.61e+09 9.92e+09 3.16e+09 2.61e+09 1.76e+10 ...
## $ Giao dịch mua bán lại trái phiếu chính phủ...27 : num [1:10] 0 0 0 0 0 0 0 0 0 0
## $ Tài sản lưu động khác...28 : num [1:10] 0 0 0 0 0 0 0 0 0 0
## $ TÀI SẢN DÀI HẠN : num [1:10] 1.88e+12 1.69e+12 1.27e+12 1.20e+12 1.07e+12 ...
## $ Phải thu dài hạn : num [1:10] 3.18e+11 2.98e+11 2.92e+11 9.90e+10 8.46e+10 ...
## $ Phải thu khách hàng dài hạn : num [1:10] 1.67e+11 1.69e+11 1.69e+11 8.32e+09 8.32e+09 ...
## $ Trả trước người bán dài hạn : num [1:10] 0 0 0 0 0 0 0 0 0 0
## $ Vốn kinh doanh ở các đơn vị trực thuộc : num [1:10] 0 0 0 0 0 0 0 0 0 0
## $ Phải thu nội bộ dài hạn : num [1:10] 0 0 0 0 0 0 0 0 0 0
## $ Phải thu về cho vay dài hạn : num [1:10] 6.21e+10 4.07e+10 3.43e+10 3.54e+09 0.00 ...
## $ Phải thu dài hạn khác : num [1:10] 8.87e+10 8.88e+10 8.89e+10 8.71e+10 8.46e+10 ...
## $ Dự phòng phải thu dài hạn : num [1:10] 0.00 0.00 0.00 0.00 -8.32e+09 ...
## $ Tài sản cố định : num [1:10] 2.46e+11 2.59e+11 2.32e+11 3.60e+11 3.34e+11 ...
## $ GTCL TSCĐ hữu hình : num [1:10] 2.35e+11 2.47e+11 2.14e+11 3.40e+11 3.14e+11 ...
## $ Nguyên giá TSCĐ hữu hình : num [1:10] 4.23e+11 4.83e+11 4.51e+11 6.86e+11 6.11e+11 ...
## $ Khấu hao lũy kế TSCĐ hữu hình : num [1:10] -1.88e+11 -2.36e+11 -2.37e+11 -3.46e+11 -2.97e+11 ...
## $ GTCL Tài sản thuê tài chính : num [1:10] 0 0 0 0 0 0 0 0 0 0
## $ Nguyên giá tài sản thuê tài chính : num [1:10] 0 0 0 0 0 0 0 0 0 0
## $ Khấu hao lũy kế tài sản thuê tài chính : num [1:10] 0 0 0 0 0 0 0 0 0 0
## $ GTCL tài sản cố định vô hình : num [1:10] 1.07e+10 1.18e+10 1.73e+10 2.00e+10 1.97e+10 ...
## $ Nguyên giá TSCĐ vô hình : num [1:10] 1.14e+10 1.26e+10 1.82e+10 2.11e+10 2.02e+10 ...
## $ Khấu hao lũy kế TSCĐ vô hình : num [1:10] -7.44e+08 -8.01e+08 -8.57e+08 -1.11e+09 -5.40e+08 ...
## $ Bất động sản đầu tư : num [1:10] 1.24e+11 1.21e+11 1.18e+11 1.60e+11 1.56e+11 ...
## $ Nguyên giá tài sản đầu tư : num [1:10] 1.44e+11 1.44e+11 1.44e+11 1.90e+11 1.89e+11 ...
## $ Khấu hao lũy kế tài sản đầu tư : num [1:10] -2.05e+10 -2.34e+10 -2.62e+10 -2.96e+10 -3.34e+10 ...
## $ Tài sản dở dang dài hạn : num [1:10] 7.80e+10 6.88e+10 6.80e+10 9.09e+10 8.94e+10 ...
## $ Chi phí sản xuất, kinh doanh dở dang dài hạn : num [1:10] 0 0 0 0 0 ...
## $ Xây dựng cơ bản dở dang : num [1:10] 0 0 0 0 0 0 0 0 0 0
## $ Đầu tư dài hạn : num [1:10] 1.07e+12 8.95e+11 5.34e+11 4.03e+11 3.19e+11 ...
## $ Đầu tư vào các công ty con : num [1:10] 0 0 0 0 0 0 0 0 0 0
## $ Đầu tư vào công ty liên doanh : num [1:10] 8.09e+11 7.51e+11 2.45e+11 1.72e+11 1.93e+11 ...
## $ Đầu tư dài hạn khác : num [1:10] 2.22e+11 1.51e+11 3.01e+11 2.48e+11 1.19e+11 ...
## $ Dự phòng giảm giá đầu tư dài hạn : num [1:10] -7.85e+09 -7.00e+09 -2.84e+10 -2.88e+10 -2.03e+10 ...
## $ Đầu tư nắm giữ đến ngày đáo hạn : num [1:10] 4.20e+10 0.00 1.60e+10 1.22e+10 2.72e+10 ...
## $ Tài sản dài hạn khác : num [1:10] 4.70e+10 5.19e+10 3.00e+10 8.54e+10 8.37e+10 ...
## $ Trả trước dài hạn : num [1:10] 2.54e+10 3.09e+10 2.55e+10 3.18e+10 2.39e+10 ...
## $ Thuế thu nhập hoãn lại phải thu : num [1:10] 2.16e+10 2.10e+10 4.45e+09 4.36e+09 1.55e+10 ...
## $ Thiết bị, vật tư, phụ tùng thay thế dài hạn : num [1:10] 0 0 0 0 0 0 0 0 0 0
## $ Các tài sản dài hạn khác : num [1:10] 0 0 0 0 0 0 0 0 0 0
## $ Lợi thế thương mại : num [1:10] 0 0 0 0 0 0 0 0 0 0
## $ NỢ PHẢI TRẢ : num [1:10] 2.43e+12 3.08e+12 3.19e+12 3.61e+12 4.19e+12 ...
## $ Nợ ngắn hạn : num [1:10] 9.96e+11 1.30e+12 1.61e+12 3.00e+12 3.27e+12 ...
## $ Phải trả người bán : num [1:10] 1.14e+11 1.60e+11 2.14e+11 2.70e+11 3.26e+11 ...
## $ Người mua trả tiền trước : num [1:10] 2.86e+11 5.14e+11 7.60e+11 1.02e+12 1.73e+12 ...
## $ Thuế và các khoản phải trả Nhà nước : num [1:10] 9.62e+09 3.62e+10 4.20e+10 8.88e+10 2.14e+11 ...
## $ Phải trả người lao động : num [1:10] 1.90e+10 2.12e+10 2.31e+10 2.64e+10 2.15e+10 ...
## $ Chi phí phải trả : num [1:10] 7.81e+10 9.57e+10 9.56e+10 8.19e+10 1.71e+10 ...
## $ Phải trả nội bộ : num [1:10] 0 0 0 0 0 0 0 0 0 0
## $ Phải trả về xây dựng cơ bản : num [1:10] 0 0 0 0 0 0 0 0 0 0
## $ Doanh thu chưa thực hiện ngắn hạn : num [1:10] 3.49e+09 5.46e+09 3.37e+09 3.54e+09 4.83e+10 ...
## $ Phải trả khác : num [1:10] 1.75e+11 1.63e+11 1.07e+11 3.11e+11 3.49e+11 ...
## $ Vay ngắn hạn : num [1:10] 3.10e+11 3.07e+11 3.64e+11 1.19e+12 5.48e+11 ...
## $ Dự phòng các khoản phải trả ngắn hạn : num [1:10] 2e+08 0e+00 0e+00 0e+00 0e+00 ...
## $ Quỹ khen thưởng, phúc lợi : num [1:10] 7.26e+06 -3.02e+09 -1.97e+09 3.26e+09 1.38e+10 ...
## $ Quỹ bình ổn giá : num [1:10] 0 0 0 0 0 0 0 0 0 0
## $ Giao dịch mua bán lại trái phiếu chính phủ...81 : num [1:10] 0 0 0 0 0 0 0 0 0 0
## $ Nợ dài hạn : num [1:10] 1.44e+12 1.78e+12 1.58e+12 6.15e+11 9.18e+11 ...
## $ Phải trả nhà cung cấp dài hạn : num [1:10] 0 0 0 0 0 0 0 0 0 0
## $ Người mua trả tiền trước dài hạn : num [1:10] 0 0 0 0 0 0 0 0 0 0
## $ Chi phí phải trả dài hạn : num [1:10] 0 0 0 0 0 0 0 0 0 0
## $ Phải trả nội bộ về vốn kinh doanh : num [1:10] 0 0 0 0 0 0 0 0 0 0
## $ Phải trả nội bộ dài hạn : num [1:10] 0 0 0 0 0 0 0 0 0 0
## $ Doanh thu chưa thực hiên : num [1:10] 3.13e+11 3.10e+11 1.57e+11 1.54e+11 1.50e+11 ...
## $ Phải trả dài hạn khác : num [1:10] 2.16e+09 1.41e+09 1.09e+09 1.44e+09 2.04e+10 ...
## $ Vay dài hạn : num [1:10] 1.08e+12 1.43e+12 1.40e+12 4.24e+11 7.30e+11 ...
## $ Trái phiếu chuyển đổi : num [1:10] 0.00 0.00 0.00 0.00 0.00 9.75e+09 0.00 0.00 0.00 0.00
## $ Cổ phiếu ưu đãi...92 : logi [1:10] NA NA NA NA NA NA ...
## $ Thuế thu nhập hoãn lại phải trả : num [1:10] 4.21e+10 3.67e+10 2.97e+10 3.52e+10 1.74e+10 ...
## $ Dự phòng trợ cấp thôi việc : num [1:10] 0 0 0 0 0 0 0 0 0 0
## $ Dự phòng các khoản công nợ dài hạn : num [1:10] 5.67e+08 6.45e+08 1.75e+09 1.19e+09 6.32e+08 ...
## $ Quỹ phát triển khoa học công nghệ : num [1:10] 0 0 0 0 0 0 0 0 0 0
## $ VỐN CHỦ SỞ HỮU : num [1:10] 2.66e+12 2.80e+12 2.89e+12 3.22e+12 4.01e+12 ...
## $ Vốn và các quỹ : num [1:10] 2.66e+12 2.80e+12 2.89e+12 3.22e+12 4.01e+12 ...
## $ Vốn góp : num [1:10] 2.15e+12 2.38e+12 2.38e+12 2.52e+12 3.15e+12 ...
## [list output truncated]
Giải thích:
- Hàm stc() mô tả cấu trúc chi tiết của bctc, bao gồm loại dữ liệu
(numeric, character, factor,…) và vài giá trị mẫu của từng biến.
Nhận xét: Giúp người phân tích hiểu rõ kiểu dữ liệu của từng biến, từ đó
chọn phương pháp xử lý phù hợp.
summary(bctc)
## ...1 TỔNG TÀI SẢN TÀI SẢN NGẮN HẠN
## Min. :2015 Min. :5.089e+12 Min. :3.211e+12
## 1st Qu.:2017 1st Qu.:6.270e+12 1st Qu.:5.016e+12
## Median :2020 Median :1.001e+13 Median :7.215e+12
## Mean :2020 Mean :1.109e+13 Mean :8.432e+12
## 3rd Qu.:2022 3rd Qu.:1.631e+13 3rd Qu.:1.113e+13
## Max. :2024 Max. :1.854e+13 Max. :1.599e+13
## Tiền và tương đương tiền Tiền
## Min. :6.455e+10 Min. :4.356e+10
## 1st Qu.:2.137e+11 1st Qu.:1.937e+11
## Median :4.984e+11 Median :3.349e+11
## Mean :6.517e+11 Mean :4.817e+11
## 3rd Qu.:7.726e+11 3rd Qu.:3.977e+11
## Max. :2.307e+12 Max. :2.297e+12
## Các khoản tương đương tiền Giá trị thuần đầu tư ngắn hạn
## Min. :5.000e+07 Min. :0.000e+00
## 1st Qu.:1.302e+10 1st Qu.:4.017e+10
## Median :9.630e+10 Median :1.569e+11
## Mean :1.700e+11 Mean :4.451e+11
## 3rd Qu.:2.810e+11 3rd Qu.:2.179e+11
## Max. :6.195e+11 Max. :2.738e+12
## Đầu tư ngắn hạn Dự phòng đầu tư ngắn hạn
## 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
## Chứng khoán đầu tư giữ đến ngày đáo hạn
## Min. :0.000e+00
## 1st Qu.:4.017e+10
## Median :1.569e+11
## Mean :4.451e+11
## 3rd Qu.:2.179e+11
## Max. :2.738e+12
## Các khoản phải thu Phải thu khách hàng
## Min. :6.762e+11 Min. :4.964e+11
## 1st Qu.:1.210e+12 1st Qu.:7.708e+11
## Median :2.105e+12 Median :1.029e+12
## Mean :2.703e+12 Mean :9.578e+11
## 3rd Qu.:4.111e+12 3rd Qu.:1.153e+12
## Max. :5.944e+12 Max. :1.219e+12
## Trả trước người bán Phải thu nội bộ Phải thu về XDCB
## Min. :2.939e+10 Min. :0 Min. :0
## 1st Qu.:1.044e+11 1st Qu.:0 1st Qu.:0
## Median :2.105e+11 Median :0 Median :0
## Mean :1.740e+11 Mean :0 Mean :0
## 3rd Qu.:2.216e+11 3rd Qu.:0 3rd Qu.:0
## Max. :2.802e+11 Max. :0 Max. :0
## Phải thu về cho vay ngắn hạn Phải thu khác
## Min. :4.000e+09 Min. :1.278e+11
## 1st Qu.:3.239e+10 1st Qu.:2.576e+11
## Median :7.670e+10 Median :7.979e+11
## Mean :1.226e+11 Mean :1.469e+12
## 3rd Qu.:2.415e+11 3rd Qu.:2.451e+12
## Max. :2.774e+11 Max. :4.548e+12
## Dự phòng nợ khó đòi Tài sản thiếu chờ xử lý
## Min. :-2.922e+10 Min. : 0
## 1st Qu.:-2.349e+10 1st Qu.: 1320000
## Median :-2.285e+10 Median : 6464870
## Mean :-2.072e+10 Mean :19444275
## 3rd Qu.:-1.629e+10 3rd Qu.:33514484
## Max. :-9.744e+09 Max. :59203748
## Hàng tồn kho, ròng Hàng tồn kho
## Min. :2.437e+12 Min. :2.437e+12
## 1st Qu.:3.234e+12 1st Qu.:3.245e+12
## Median :4.019e+12 Median :4.026e+12
## Mean :4.503e+12 Mean :4.507e+12
## 3rd Qu.:5.541e+12 3rd Qu.:5.545e+12
## Max. :8.155e+12 Max. :8.157e+12
## Dự phòng giảm giá HTK Tài sản lưu động khác...23
## Min. :-1.467e+10 Min. :3.355e+10
## 1st Qu.:-5.543e+09 1st Qu.:5.980e+10
## Median :-2.434e+09 Median :1.358e+11
## Mean :-4.269e+09 Mean :1.298e+11
## 3rd Qu.:-1.058e+09 3rd Qu.:1.972e+11
## Max. : 0.000e+00 Max. :2.183e+11
## Trả trước ngắn hạn Thuế VAT phải thu
## Min. :8.746e+09 Min. :1.320e+09
## 1st Qu.:5.098e+10 1st Qu.:2.766e+09
## Median :1.181e+11 Median :4.362e+09
## Mean :1.090e+11 Mean :8.499e+09
## 3rd Qu.:1.667e+11 3rd Qu.:1.399e+10
## Max. :1.862e+11 Max. :2.238e+10
## Phải thu thuế khác
## Min. :2.611e+09
## 1st Qu.:7.438e+09
## Median :1.243e+10
## Mean :1.234e+10
## 3rd Qu.:1.714e+10
## Max. :2.506e+10
## Giao dịch mua bán lại trái phiếu chính phủ...27
## Min. :0
## 1st Qu.:0
## Median :0
## Mean :0
## 3rd Qu.:0
## Max. :0
## Tài sản lưu động khác...28 TÀI SẢN DÀI HẠN
## Min. :0 Min. :1.066e+12
## 1st Qu.:0 1st Qu.:1.378e+12
## Median :0 Median :2.216e+12
## Mean :0 Mean :2.654e+12
## 3rd Qu.:0 3rd Qu.:3.615e+12
## Max. :0 Max. :5.632e+12
## Phải thu dài hạn Phải thu khách hàng dài hạn
## Min. :8.461e+10 Min. :0.000e+00
## 1st Qu.:2.934e+11 1st Qu.:0.000e+00
## Median :6.340e+11 Median :8.318e+09
## Mean :1.303e+12 Mean :5.296e+10
## 3rd Qu.:2.132e+12 3rd Qu.:1.275e+11
## Max. :4.110e+12 Max. :1.687e+11
## Trả trước người bán dài hạn
## Min. :0
## 1st Qu.:0
## Median :0
## Mean :0
## 3rd Qu.:0
## Max. :0
## Vốn kinh doanh ở các đơn vị trực thuộc
## Min. :0
## 1st Qu.:0
## Median :0
## Mean :0
## 3rd Qu.:0
## Max. :0
## Phải thu nội bộ dài hạn Phải thu về cho vay dài hạn
## Min. :0 Min. :0.000e+00
## 1st Qu.:0 1st Qu.:0.000e+00
## Median :0 Median :1.769e+09
## Mean :0 Mean :3.119e+10
## 3rd Qu.:0 3rd Qu.:3.910e+10
## Max. :0 Max. :1.712e+11
## Phải thu dài hạn khác Dự phòng phải thu dài hạn
## Min. :8.461e+10 Min. :-8.318e+09
## 1st Qu.:8.875e+10 1st Qu.: 0.000e+00
## Median :4.338e+11 Median : 0.000e+00
## Mean :1.220e+12 Mean :-1.664e+09
## 3rd Qu.:2.132e+12 3rd Qu.: 0.000e+00
## Max. :4.110e+12 Max. : 0.000e+00
## Tài sản cố định GTCL TSCĐ hữu hình
## Min. :2.315e+11 Min. :2.142e+11
## 1st Qu.:2.776e+11 1st Qu.:2.638e+11
## Median :5.389e+11 Median :5.073e+11
## Mean :5.240e+11 Mean :4.954e+11
## 3rd Qu.:7.521e+11 3rd Qu.:7.199e+11
## Max. :8.421e+11 Max. :7.558e+11
## Nguyên giá TSCĐ hữu hình Khấu hao lũy kế TSCĐ hữu hình
## 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 Tài sản thuê tài chính
## Min. :0
## 1st Qu.:0
## Median :0
## Mean :0
## 3rd Qu.:0
## Max. :0
## Nguyên giá tài sản thuê tài chính
## Min. :0
## 1st Qu.:0
## Median :0
## Mean :0
## 3rd Qu.:0
## Max. :0
## Khấu hao lũy kế tài sản thuê tài chính
## Min. :0
## 1st Qu.:0
## Median :0
## Mean :0
## 3rd Qu.:0
## Max. :0
## GTCL tài sản cố định vô hình Nguyên giá TSCĐ vô hình
## Min. :1.066e+10 Min. :1.141e+10
## 1st Qu.:1.764e+10 1st Qu.:1.847e+10
## Median :1.983e+10 Median :2.066e+10
## Mean :2.858e+10 Mean :3.012e+10
## 3rd Qu.:3.224e+10 3rd Qu.:3.480e+10
## Max. :8.629e+10 Max. :8.978e+10
## Khấu hao lũy kế TSCĐ vô hình Bất động sản đầu tư
## Min. :-3.483e+09 Min. :1.038e+11
## 1st Qu.:-2.251e+09 1st Qu.:1.144e+11
## Median :-9.835e+08 Median :1.225e+11
## Mean :-1.538e+09 Mean :1.314e+11
## 3rd Qu.:-7.584e+08 3rd Qu.:1.549e+11
## Max. :-5.399e+08 Max. :1.603e+11
## Nguyên giá tài sản đầu tư Khấu hao lũy kế tài sản đầu tư
## 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
## Tài sản dở dang dài hạn
## Min. :6.800e+10
## 1st Qu.:8.048e+10
## Median :9.019e+10
## Mean :9.235e+10
## 3rd Qu.:1.006e+11
## Max. :1.267e+11
## Chi phí sản xuất, kinh doanh dở dang dài hạn
## Min. :0.00e+00
## 1st Qu.:0.00e+00
## Median :0.00e+00
## Mean :1.49e+08
## 3rd Qu.:0.00e+00
## Max. :1.49e+09
## Xây dựng cơ bản dở dang Đầu tư dài hạn
## Min. :0 Min. :2.993e+11
## 1st Qu.:0 1st Qu.:3.304e+11
## Median :0 Median :3.515e+11
## Mean :0 Mean :4.882e+11
## 3rd Qu.:0 3rd Qu.:5.010e+11
## Max. :0 Max. :1.066e+12
## Đầu tư vào các công ty con Đầu tư vào công ty liên doanh
## Min. :0 Min. :1.716e+11
## 1st Qu.:0 1st Qu.:2.060e+11
## Median :0 Median :2.975e+11
## Mean :0 Mean :3.562e+11
## 3rd Qu.:0 3rd Qu.:3.125e+11
## Max. :0 Max. :8.091e+11
## Đầu tư dài hạn khác Dự phòng giảm giá đầu tư dài hạn
## Min. :2.344e+09 Min. :-5.579e+10
## 1st Qu.:6.345e+10 1st Qu.:-3.676e+10
## Median :1.191e+11 Median :-2.435e+10
## Mean :1.312e+11 Mean :-2.535e+10
## 3rd Qu.:2.045e+11 3rd Qu.:-1.091e+10
## Max. :3.012e+11 Max. :-6.496e+07
## Đầu tư nắm giữ đến ngày đáo hạn Tài sản dài hạn khác
## Min. :0.000e+00 Min. :2.998e+10
## 1st Qu.:1.880e+10 1st Qu.:5.987e+10
## Median :2.950e+10 Median :9.875e+10
## Mean :2.614e+10 Mean :1.158e+11
## 3rd Qu.:3.375e+10 3rd Qu.:1.723e+11
## Max. :4.200e+10 Max. :2.260e+11
## Trả trước dài hạn Thuế thu nhập hoãn lại phải thu
## Min. :1.668e+10 Min. :4.361e+09
## 1st Qu.:2.546e+10 1st Qu.:1.345e+10
## Median :2.890e+10 Median :1.583e+10
## Mean :3.195e+10 Mean :1.573e+10
## 3rd Qu.:3.531e+10 3rd Qu.:2.017e+10
## Max. :5.506e+10 Max. :2.827e+10
## Thiết bị, vật tư, phụ tùng thay thế dài hạn
## Min. :0
## 1st Qu.:0
## Median :0
## Mean :0
## 3rd Qu.:0
## Max. :0
## Các tài sản dài hạn khác Lợi thế thương mại
## 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
## NỢ PHẢI TRẢ Nợ ngắn hạn
## Min. :2.433e+12 Min. :9.958e+11
## 1st Qu.:3.298e+12 1st Qu.:1.955e+12
## Median :5.570e+12 Median :3.608e+12
## Mean :5.910e+12 Mean :4.054e+12
## 3rd Qu.:8.460e+12 3rd Qu.:5.658e+12
## Max. :1.050e+13 Max. :7.962e+12
## Phải trả người bán Người mua trả tiền trước
## Min. :1.140e+11 Min. :2.857e+11
## 1st Qu.:2.280e+11 1st Qu.:8.248e+11
## Median :3.068e+11 Median :1.599e+12
## Mean :3.214e+11 Mean :1.371e+12
## 3rd Qu.:4.066e+11 3rd Qu.:1.759e+12
## Max. :5.449e+11 Max. :2.426e+12
## Thuế và các khoản phải trả Nhà nước
## Min. :9.618e+09
## 1st Qu.:5.369e+10
## Median :9.035e+10
## Mean :1.219e+11
## 3rd Qu.:1.810e+11
## Max. :3.414e+11
## Phải trả người lao động Chi phí phải trả
## Min. :1.895e+10 Min. :1.714e+10
## 1st Qu.:2.193e+10 1st Qu.:7.908e+10
## Median :2.849e+10 Median :9.567e+10
## Mean :2.836e+10 Mean :1.415e+11
## 3rd Qu.:3.324e+10 3rd Qu.:1.992e+11
## Max. :3.967e+10 Max. :3.467e+11
## Phải trả nội bộ Phải trả về xây dựng cơ bản
## 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
## Doanh thu chưa thực hiện ngắn hạn Phải trả khác
## Min. :3.374e+09 Min. :1.069e+11
## 1st Qu.:4.020e+09 1st Qu.:2.093e+11
## Median :5.220e+10 Median :4.661e+11
## Mean :3.521e+10 Mean :1.136e+12
## 3rd Qu.:5.663e+10 3rd Qu.:2.283e+12
## Max. :6.154e+10 Max. :2.865e+12
## Vay ngắn hạn Dự phòng các khoản phải trả ngắn hạn
## Min. :3.065e+11 Min. :0.000e+00
## 1st Qu.:4.101e+11 1st Qu.:0.000e+00
## Median :6.504e+11 Median :0.000e+00
## Mean :8.754e+11 Mean :5.937e+08
## 3rd Qu.:1.147e+12 3rd Qu.:4.521e+08
## Max. :2.150e+12 Max. :3.708e+09
## Quỹ khen thưởng, phúc lợi Quỹ bình ổn giá
## 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 dịch mua bán lại trái phiếu chính phủ...81
## Min. :0
## 1st Qu.:0
## Median :0
## Mean :0
## 3rd Qu.:0
## Max. :0
## Nợ dài hạn Phải trả nhà cung cấp dài hạn
## Min. :6.154e+11 Min. :0
## 1st Qu.:1.069e+12 1st Qu.:0
## Median :1.511e+12 Median :0
## Mean :1.856e+12 Mean :0
## 3rd Qu.:2.347e+12 3rd Qu.:0
## Max. :4.505e+12 Max. :0
## Người mua trả tiền trước dài hạn Chi phí phải trả dài hạn
## 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
## Phải trả nội bộ về vốn kinh doanh Phải trả nội bộ dài hạn
## 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
## Doanh thu chưa thực hiên Phải trả dài hạn khác
## Min. :1.144e+11 Min. :1.093e+09
## 1st Qu.:1.220e+11 1st Qu.:1.622e+09
## Median :1.519e+11 Median :1.987e+10
## Mean :1.743e+11 Mean :1.583e+10
## 3rd Qu.:1.753e+11 3rd Qu.:2.009e+10
## Max. :3.130e+11 Max. :5.184e+10
## Vay dài hạn Trái phiếu chuyển đổi
## Min. :4.240e+11 Min. :0.00e+00
## 1st Qu.:8.591e+11 1st Qu.:0.00e+00
## 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
## Cổ phiếu ưu đãi...92 Thuế thu nhập hoãn lại phải trả
## Mode:logical Min. :1.741e+10
## NA's:10 1st Qu.:2.784e+10
## Median :3.245e+10
## Mean :3.682e+10
## 3rd Qu.:4.078e+10
## Max. :6.436e+10
## Dự phòng trợ cấp thôi việc
## Min. :0
## 1st Qu.:0
## Median :0
## Mean :0
## 3rd Qu.:0
## Max. :0
## Dự phòng các khoản công nợ dài hạn
## Min. :5.666e+08
## 1st Qu.:7.809e+08
## Median :2.117e+09
## Mean :2.374e+09
## 3rd Qu.:2.933e+09
## Max. :5.692e+09
## Quỹ phát triển khoa học công nghệ VỐN CHỦ SỞ HỮU
## Min. :0 Min. :2.656e+12
## 1st Qu.:0 1st Qu.:2.973e+12
## Median :0 Median :4.400e+12
## Mean :0 Mean :5.176e+12
## 3rd Qu.:0 3rd Qu.:7.764e+12
## Max. :0 Max. :8.041e+12
## Vốn và các quỹ Vốn góp
## Min. :2.656e+12 Min. :2.145e+12
## 1st Qu.:2.973e+12 1st Qu.:2.418e+12
## Median :4.400e+12 Median :3.167e+12
## Mean :5.176e+12 Mean :3.906e+12
## 3rd Qu.:7.764e+12 3rd Qu.:5.824e+12
## Max. :8.041e+12 Max. :6.099e+12
## Cổ phiếu phổ thông Cổ phiếu ưu đãi...101
## Min. :2.145e+12 Min. :0
## 1st Qu.:2.418e+12 1st Qu.:0
## Median :3.167e+12 Median :0
## Mean :3.906e+12 Mean :0
## 3rd Qu.:5.824e+12 3rd Qu.:0
## Max. :6.099e+12 Max. :0
## Thặng dư vốn cổ phần Quyền chọn chuyển đổi trái phiếu
## Min. :6.611e+10 Min. :0
## 1st Qu.:1.016e+11 1st Qu.:0
## Median :2.672e+11 Median :0
## Mean :5.201e+11 Mean :0
## 3rd Qu.:1.046e+12 3rd Qu.:0
## Max. :1.121e+12 Max. :0
## Vốn khác Cổ phiếu Quỹ
## Min. :0.000e+00 Min. :0
## 1st Qu.:0.000e+00 1st Qu.:0
## Median :1.163e+09 Median :0
## Mean :4.590e+09 Mean :0
## 3rd Qu.:8.934e+09 3rd Qu.:0
## Max. :1.490e+10 Max. :0
## Chênh lệch đánh giá lại tài sản Chênh lệch tỷ giá
## 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
## Quỹ đầu tư và phát triển Quỹ hỗ trợ sắp xếp doanh nghiệp
## Min. :8.469e+10 Min. :0
## 1st Qu.:1.041e+11 1st Qu.:0
## Median :1.666e+11 Median :0
## Mean :1.568e+11 Mean :0
## 3rd Qu.:1.913e+11 3rd Qu.:0
## Max. :2.300e+11 Max. :0
## Quỹ dự phòng tài chính Quỹ khác Lãi chưa phân phối
## Min. :0 Min. :0 Min. :6.607e+10
## 1st Qu.:0 1st Qu.:0 1st Qu.:2.244e+11
## Median :0 Median :0 Median :3.769e+11
## Mean :0 Mean :0 Mean :4.539e+11
## 3rd Qu.:0 3rd Qu.:0 3rd Qu.:5.149e+11
## Max. :0 Max. :0 Max. :1.111e+12
## LNST chưa phân phối lũy kế đến cuối kỳ trước
## Min. :-2.719e+08
## 1st Qu.: 4.315e+10
## Median : 9.318e+10
## Mean : 1.484e+11
## 3rd Qu.: 2.532e+11
## Max. : 4.369e+11
## LNST chưa phân phối kỳ này Lợi ích cổ đông không kiểm soát
## 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
## Vốn Ngân sách nhà nước và quỹ khác
## Min. :0
## 1st Qu.:0
## Median :0
## Mean :0
## 3rd Qu.:0
## Max. :0
## Quỹ khen thưởng, phúc lợi (trước 2010)
## Min. :0
## 1st Qu.:0
## Median :0
## Mean :0
## 3rd Qu.:0
## Max. :0
## Vốn ngân sách nhà nước Nguồn kinh phí đã hình thành TSCĐ
## 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
## Lợi ích của cổ đông thiểu số...120 TỔNG CỘNG NGUỒN VỐN
## Min. :0 Min. :5.089e+12
## 1st Qu.:0 1st Qu.:6.270e+12
## Median :0 Median :1.001e+13
## Mean :0 Mean :1.109e+13
## 3rd Qu.:0 3rd Qu.:1.631e+13
## Max. :0 Max. :1.854e+13
## Doanh số Các khoản giảm trừ
## Min. :6.920e+11 Min. :-2.305e+11
## 1st Qu.:1.369e+12 1st Qu.:-1.132e+11
## Median :1.817e+12 Median :-3.517e+10
## Mean :1.790e+12 Mean :-7.588e+10
## 3rd Qu.:2.379e+12 3rd Qu.:-1.872e+10
## Max. :2.586e+12 Max. :-1.335e+10
## Doanh số thuần Giá vốn hàng bán
## Min. :6.552e+11 Min. :-1.847e+12
## 1st Qu.:1.189e+12 1st Qu.:-1.666e+12
## Median :1.745e+12 Median :-1.233e+12
## Mean :1.714e+12 Mean :-1.241e+12
## 3rd Qu.:2.288e+12 3rd Qu.:-8.757e+11
## Max. :2.569e+12 Max. :-4.912e+11
## Lãi gộp Thu nhập tài chính
## Min. :1.640e+11 Min. :2.370e+10
## 1st Qu.:3.033e+11 1st Qu.:4.308e+10
## Median :4.782e+11 Median :8.858e+10
## Mean :4.734e+11 Mean :1.024e+11
## 3rd Qu.:6.384e+11 3rd Qu.:1.455e+11
## Max. :8.395e+11 Max. :2.276e+11
## Chi phí tài chính Trong đó: Chi phí lãi vay
## Min. :-2.649e+11 Min. :-2.432e+11
## 1st Qu.:-9.541e+10 1st Qu.:-8.388e+10
## Median :-5.420e+10 Median :-3.733e+10
## Mean :-7.490e+10 Mean :-6.210e+10
## 3rd Qu.:-2.849e+10 3rd Qu.:-1.816e+10
## Max. :-6.154e+09 Max. :-7.713e+09
## Lãi/(lỗ) từ công ty liên doanh Chi phí bán hàng
## Min. :-6.918e+10 Min. :-1.971e+11
## 1st Qu.:-3.948e+10 1st Qu.:-1.126e+11
## Median :-1.594e+10 Median :-9.636e+10
## Mean :-1.702e+10 Mean :-9.990e+10
## 3rd Qu.:-2.026e+09 3rd Qu.:-7.649e+10
## Max. : 6.671e+10 Max. :-4.232e+10
## Chi phí quản lý doanh nghiệp
## Min. :-1.803e+11
## 1st Qu.:-1.543e+11
## Median :-1.503e+11
## Mean :-1.368e+11
## 3rd Qu.:-1.059e+11
## Max. :-8.242e+10
## Lãi/(lỗ) từ hoạt động kinh doanh Thu nhập khác
## Min. :4.480e+10 Min. :6.777e+09
## 1st Qu.:1.448e+11 1st Qu.:2.281e+10
## Median :1.955e+11 Median :5.137e+10
## Mean :2.472e+11 Mean :1.880e+11
## 3rd Qu.:3.264e+11 3rd Qu.:1.050e+11
## Max. :5.331e+11 Max. :8.867e+11
## Chi phí khác Thu nhập khác, ròng
## Min. :-1.117e+11 Min. :-6.187e+10
## 1st Qu.:-4.867e+10 1st Qu.:-3.048e+09
## Median :-2.407e+10 Median : 2.082e+10
## Mean :-3.693e+10 Mean : 1.511e+11
## 3rd Qu.:-1.410e+10 3rd Qu.: 7.880e+10
## Max. :-4.370e+09 Max. : 7.975e+11
## Lãi/(lỗ) từ công ty liên doanh (từ năm 2015)
## Min. :0
## 1st Qu.:0
## Median :0
## Mean :0
## 3rd Qu.:0
## Max. :0
## Lãi/(lỗ) ròng trước thuế
## Min. :3.213e+10
## 1st Qu.:1.600e+11
## Median :2.271e+11
## Mean :3.983e+11
## 3rd Qu.:4.605e+11
## Max. :1.282e+12
## Thuế thu nhập doanh nghiệp – hiện thời
## Min. :-2.911e+11
## 1st Qu.:-1.187e+11
## Median :-6.431e+10
## Mean :-8.937e+10
## 3rd Qu.:-3.975e+10
## Max. :-1.038e+10
## Thuế thu nhập doanh nghiệp – hoãn lại
## Min. :-4.477e+10
## 1st Qu.:-7.335e+09
## Median :-1.085e+09
## Mean : 1.399e+09
## 3rd Qu.: 1.623e+10
## Max. : 3.401e+10
## Chi phí thuế thu nhập doanh nghiệp Lãi/(lỗ) thuần sau thuế
## 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
## Lợi ích của cổ đông thiểu số...143
## Min. :-1.917e+10
## 1st Qu.:-4.491e+09
## Median : 4.971e+09
## Mean : 4.841e+09
## 3rd Qu.: 8.498e+09
## Max. : 4.724e+10
## Lợi nhuận của Cổ đông của Công ty mẹ
## Min. :1.046e+10
## 1st Qu.:1.156e+11
## Median :1.702e+11
## Mean :3.055e+11
## 3rd Qu.:3.742e+11
## Max. :9.862e+11
## Lãi cơ bản trên cổ phiếu Lãi trên cổ phiếu pha loãng
## Min. : 44.0 Min. : 0.0
## 1st Qu.: 202.5 1st Qu.: 0.0
## Median : 516.5 Median : 0.0
## Mean : 805.0 Mean : 467.6
## 3rd Qu.:1272.8 3rd Qu.: 924.8
## Max. :2157.0 Max. :2157.0
## EBIT EBITDA
## Min. :-4.931e+09 Min. :1.997e+10
## 1st Qu.: 9.613e+10 1st Qu.:1.530e+11
## Median : 2.608e+11 Median :2.818e+11
## Mean : 2.367e+11 Mean :2.789e+11
## 3rd Qu.: 3.539e+11 3rd Qu.:4.080e+11
## Max. : 4.878e+11 Max. :5.390e+11
## Lưu chuyển tiền thuần từ các hoạt động sản xuất kinh doanh
## Min. :-2.206e+12
## 1st Qu.:-5.235e+11
## Median :-3.677e+11
## Mean :-3.161e+11
## 3rd Qu.:-2.498e+11
## Max. : 2.859e+12
## Lãi/lỗ trước những thay đổi vốn lưu động
## Min. :0.000e+00
## 1st Qu.:1.496e+11
## Median :3.333e+11
## Mean :2.831e+11
## 3rd Qu.:3.729e+11
## Max. :5.333e+11
## Lãi trước thuế Khấu hao TSCĐ
## Min. :0.000e+00 Min. :1.923e+10
## 1st Qu.:1.600e+11 1st Qu.:2.333e+10
## Median :2.271e+11 Median :4.116e+10
## Mean :3.951e+11 Mean :4.218e+10
## 3rd Qu.:4.605e+11 3rd Qu.:6.140e+10
## Max. :1.282e+12 Max. :6.833e+10
## Phân bổ lợi thế thương mại Chi phí dự phòng
## Min. :0 Min. :-3.606e+10
## 1st Qu.:0 1st Qu.:-7.565e+09
## Median :0 Median :-2.200e+09
## Mean :0 Mean :-5.366e+09
## 3rd Qu.:0 3rd Qu.: 3.232e+09
## Max. :0 Max. : 1.786e+10
## Lãi/(lỗ) chênh lệch tỷ giá chưa thực hiện
## Min. :-2.621e+07
## 1st Qu.:-4.788e+06
## Median :-8.632e+05
## Mean : 2.104e+09
## 3rd Qu.:-7.742e+03
## Max. : 2.106e+10
## Lãi/(lỗ) từ thanh lý tài sản cố định
## Min. :0
## 1st Qu.:0
## Median :0
## Mean :0
## 3rd Qu.:0
## Max. :0
## Lãi/(lỗ) từ hoạt động đầu tư Chi phí lãi vay
## Min. :-9.027e+11 Min. :0.000e+00
## 1st Qu.:-1.742e+11 1st Qu.:1.816e+10
## Median :-1.029e+11 Median :3.733e+10
## Mean :-2.131e+11 Mean :6.474e+10
## 3rd Qu.:-3.494e+10 3rd Qu.:8.638e+10
## Max. : 1.775e+10 Max. :2.545e+11
## Thu lãi và cổ tức Các khoản điều chỉnh khác
## 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
## (Tăng)/giảm các khoản phải thu (Tăng)/giảm hàng tồn kho
## Min. :-2.154e+12 Min. :-2.078e+12
## 1st Qu.:-4.455e+11 1st Qu.:-8.392e+11
## Median :-2.055e+11 Median :-6.274e+11
## Mean :-2.213e+11 Mean :-5.559e+11
## 3rd Qu.: 8.118e+10 3rd Qu.:-1.055e+11
## Max. : 1.054e+12 Max. : 5.591e+11
## Tăng/(giảm) các khoản phải trả
## Min. :-1.112e+12
## 1st Qu.: 3.899e+10
## Median : 4.354e+11
## Mean : 4.629e+11
## 3rd Qu.: 7.942e+11
## Max. : 2.929e+12
## ( Tăng)/giảm chi phí trả trước
## Min. :-7.963e+10
## 1st Qu.:-3.462e+10
## Median :-1.011e+10
## Mean :-1.794e+10
## 3rd Qu.: 3.868e+08
## Max. : 3.979e+10
## (Tăng)/giảm chứng khoán kinh doanh Chi phí lãi vay đã trả
## 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
## Thuế thu nhập doanh nghiệp đã trả
## Min. :-2.571e+11
## 1st Qu.:-1.245e+11
## Median :-6.086e+10
## Mean :-8.953e+10
## 3rd Qu.:-4.036e+10
## Max. : 0.000e+00
## Tiền thu khác từ các hoạt động kinh doanh
## Min. :0.000e+00
## 1st Qu.:0.000e+00
## Median :0.000e+00
## Mean :1.373e+09
## 3rd Qu.:0.000e+00
## Max. :1.373e+10
## Tiền chi khác từ các hoạt động 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
## Lưu chuyển tiền tệ ròng từ hoạt động đầu tư
## 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
## Tiền mua tài sản cố định và các tài sản dài hạn khác
## 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
## Tiền thu được từ thanh lý tài sản cố định
## Min. :2.243e+08
## 1st Qu.:1.309e+09
## Median :2.822e+09
## Mean :6.105e+09
## 3rd Qu.:8.582e+09
## Max. :2.339e+10
## Tiền cho vay hoặc mua công cụ nợ
## Min. :-3.212e+12
## 1st Qu.:-3.430e+11
## Median :-2.559e+11
## Mean :-6.005e+11
## 3rd Qu.:-9.257e+10
## Max. :-1.270e+10
## Tiền thu từ cho vay hoặc thu từ phát hành công cụ nợ
## 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
## Đầu tư vào các doanh nghiệp khác
## 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
## Tiền thu từ việc bán các khoản đầu tư vào các doanh nghiệp khác
## 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
## Cổ tức và tiền lãi nhận được
## Min. :1.712e+10
## 1st Qu.:2.288e+10
## Median :3.531e+10
## Mean :4.987e+10
## 3rd Qu.:6.450e+10
## Max. :1.292e+11
## Lưu chuyển tiền tệ từ hoạt động tài chính
## Min. :-1.133e+12
## 1st Qu.:-1.024e+11
## Median : 5.777e+10
## Mean : 4.883e+11
## 3rd Qu.: 3.903e+11
## Max. : 5.331e+12
## Tiền thu từ phát hành cổ phiếu và vốn góp
## 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 trả cho việc mua lại, trả lại cổ phiếu
## Min. :-126500000
## 1st Qu.: 0
## Median : 0
## Mean : -12650000
## 3rd Qu.: 0
## Max. : 0
## Tiền thu được các khoản đi vay Tiển trả các khoản đi vay
## Min. :2.784e+11 Min. :-2.994e+12
## 1st Qu.:8.791e+11 1st Qu.:-2.165e+12
## Median :1.453e+12 Median :-1.136e+12
## Mean :1.708e+12 Mean :-1.486e+12
## 3rd Qu.:1.922e+12 3rd Qu.:-8.228e+11
## Max. :4.660e+12 Max. :-4.103e+11
## Tiền thanh toán vốn gốc đi thuê tài chính
## Min. :0
## 1st Qu.:0
## Median :0
## Mean :0
## 3rd Qu.:0
## Max. :0
## Cổ tức đã trả Tiền lãi đã nhận
## Min. :-1.789e+11 Min. :0
## 1st Qu.:-5.727e+10 1st Qu.:0
## Median :-1.473e+09 Median :0
## Mean :-3.750e+10 Mean :0
## 3rd Qu.:-2.964e+08 3rd Qu.:0
## Max. : 0.000e+00 Max. :0
## Lưu chuyển tiền thuần trong kỳ
## Min. :-1.522e+12
## 1st Qu.:-3.542e+11
## Median :-5.873e+10
## Mean : 3.121e+10
## 3rd Qu.: 4.277e+11
## Max. : 2.061e+12
## Tiền và tương đương tiền đầu kỳ
## Min. :6.455e+10
## 1st Qu.:2.137e+11
## Median :4.380e+11
## Mean :6.205e+11
## 3rd Qu.:6.996e+11
## Max. :2.307e+12
## Ảnh hưởng của chênh lệch tỷ giá
## Min. :-29769499
## 1st Qu.: 79796
## Median : 1860835
## Mean : 1585358
## 3rd Qu.: 4788018
## Max. : 26206966
## Tiền và tương đương tiền cuối kỳ
## 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
Giải thích: Hàm summary() cung cấp thống kê mô tả cơ bản cho từng
biến.
- Biến định lượng hiển thị min, max, median, mean, quartiles.
- Biến định tính hiển thị tần suất từng mức giá trị.
Nhận xét: Giúp nắm được xu hướng trung tâm, phạm vi giá trị, và phát
hiện các giá trị bất thường (outlier) trong dữ liệu.
sum(duplicated(bctc))
## [1] 0
Giải thích:
- Hàm duplicated() xác định những dòng (quan sát) bị trùng trong bộ dữ
liệu, trả về giá trị logic TRUE/FALSE.
- Hàm sum() cộng tổng số TRUE tức là đếm số dòng bị trùng lặp. Nếu kết
quả > 0, bộ dữ liệu có các bản ghi lặp lại và cần xử lý (loại bỏ hoặc
gộp lại). Nếu = 0, dữ liệu là duy nhất, không bị trùng.
sum(sapply(bctc, is.numeric))
## [1] 188
Giải thích:
- Hàm sapply() áp dụng is.numeric cho từng biến trong bctc để kiểm tra
xem biến đó có phải dạng số hay không.
- Hàm sum() sau đó cộng tổng số biến có giá trị TRUE chính là số lượng
biến định lượng trong dataset.
Nhận xét: Giúp xác định có bao nhiêu biến có thể sử dụng cho các phép
tính thống kê, mô hình hóa hoặc trực quan hóa định lượng.
sum(sapply(bctc, function(x) is.factor(x) | is.character(x)))
## [1] 0
Giải thích:
- Kiểm tra xem từng biến có phải kiểu phân loại (factor) hoặc kiểu chuỗi
ký tự (character) hay không.
- Hàm sum() sẽ cộng tổng các biến có kiểu đó trả về số lượng biến định
tính.
Nhận xét: Giúp xác định có bao nhiêu biến định tính để dùng trong việc
phân tích nhóm, vẽ biểu đồ tần suất, hoặc dùng làm biến phân loại trong
mô hình thống kê.
names(bctc)[sapply(bctc, is.numeric)]
## [1] "...1"
## [2] "TỔNG TÀI SẢN"
## [3] "TÀI SẢN NGẮN HẠN"
## [4] "Tiền và tương đương tiền"
## [5] "Tiền"
## [6] "Các khoản tương đương tiền"
## [7] "Giá trị thuần đầu tư ngắn hạn"
## [8] "Đầu tư ngắn hạn"
## [9] "Dự phòng đầu tư ngắn hạn"
## [10] "Chứng khoán đầu tư giữ đến ngày đáo hạn"
## [11] "Các khoản phải thu"
## [12] "Phải thu khách hàng"
## [13] "Trả trước người bán"
## [14] "Phải thu nội bộ"
## [15] "Phải thu về XDCB"
## [16] "Phải thu về cho vay ngắn hạn"
## [17] "Phải thu khác"
## [18] "Dự phòng nợ khó đòi"
## [19] "Tài sản thiếu chờ xử lý"
## [20] "Hàng tồn kho, ròng"
## [21] "Hàng tồn kho"
## [22] "Dự phòng giảm giá HTK"
## [23] "Tài sản lưu động khác...23"
## [24] "Trả trước ngắn hạn"
## [25] "Thuế VAT phải thu"
## [26] "Phải thu thuế khác"
## [27] "Giao dịch mua bán lại trái phiếu chính phủ...27"
## [28] "Tài sản lưu động khác...28"
## [29] "TÀI SẢN DÀI HẠN"
## [30] "Phải thu dài hạn"
## [31] "Phải thu khách hàng dài hạn"
## [32] "Trả trước người bán dài hạn"
## [33] "Vốn kinh doanh ở các đơn vị trực thuộc"
## [34] "Phải thu nội bộ dài hạn"
## [35] "Phải thu về cho vay dài hạn"
## [36] "Phải thu dài hạn khác"
## [37] "Dự phòng phải thu dài hạn"
## [38] "Tài sản cố định"
## [39] "GTCL TSCĐ hữu hình"
## [40] "Nguyên giá TSCĐ hữu hình"
## [41] "Khấu hao lũy kế TSCĐ hữu hình"
## [42] "GTCL Tài sản thuê tài chính"
## [43] "Nguyên giá tài sản thuê tài chính"
## [44] "Khấu hao lũy kế tài sản thuê tài chính"
## [45] "GTCL tài sản cố định vô hình"
## [46] "Nguyên giá TSCĐ vô hình"
## [47] "Khấu hao lũy kế TSCĐ vô hình"
## [48] "Bất động sản đầu tư"
## [49] "Nguyên giá tài sản đầu tư"
## [50] "Khấu hao lũy kế tài sản đầu tư"
## [51] "Tài sản dở dang dài hạn"
## [52] "Chi phí sản xuất, kinh doanh dở dang dài hạn"
## [53] "Xây dựng cơ bản dở dang"
## [54] "Đầu tư dài hạn"
## [55] "Đầu tư vào các công ty con"
## [56] "Đầu tư vào công ty liên doanh"
## [57] "Đầu tư dài hạn khác"
## [58] "Dự phòng giảm giá đầu tư dài hạn"
## [59] "Đầu tư nắm giữ đến ngày đáo hạn"
## [60] "Tài sản dài hạn khác"
## [61] "Trả trước dài hạn"
## [62] "Thuế thu nhập hoãn lại phải thu"
## [63] "Thiết bị, vật tư, phụ tùng thay thế dài hạn"
## [64] "Các tài sản dài hạn khác"
## [65] "Lợi thế thương mại"
## [66] "NỢ PHẢI TRẢ"
## [67] "Nợ ngắn hạn"
## [68] "Phải trả người bán"
## [69] "Người mua trả tiền trước"
## [70] "Thuế và các khoản phải trả Nhà nước"
## [71] "Phải trả người lao động"
## [72] "Chi phí phải trả"
## [73] "Phải trả nội bộ"
## [74] "Phải trả về xây dựng cơ bản"
## [75] "Doanh thu chưa thực hiện ngắn hạn"
## [76] "Phải trả khác"
## [77] "Vay ngắn hạn"
## [78] "Dự phòng các khoản phải trả ngắn hạn"
## [79] "Quỹ khen thưởng, phúc lợi"
## [80] "Quỹ bình ổn giá"
## [81] "Giao dịch mua bán lại trái phiếu chính phủ...81"
## [82] "Nợ dài hạn"
## [83] "Phải trả nhà cung cấp dài hạn"
## [84] "Người mua trả tiền trước dài hạn"
## [85] "Chi phí phải trả dài hạn"
## [86] "Phải trả nội bộ về vốn kinh doanh"
## [87] "Phải trả nội bộ dài hạn"
## [88] "Doanh thu chưa thực hiên"
## [89] "Phải trả dài hạn khác"
## [90] "Vay dài hạn"
## [91] "Trái phiếu chuyển đổi"
## [92] "Thuế thu nhập hoãn lại phải trả"
## [93] "Dự phòng trợ cấp thôi việc"
## [94] "Dự phòng các khoản công nợ dài hạn"
## [95] "Quỹ phát triển khoa học công nghệ"
## [96] "VỐN CHỦ SỞ HỮU"
## [97] "Vốn và các quỹ"
## [98] "Vốn góp"
## [99] "Cổ phiếu phổ thông"
## [100] "Cổ phiếu ưu đãi...101"
## [101] "Thặng dư vốn cổ phần"
## [102] "Quyền chọn chuyển đổi trái phiếu"
## [103] "Vốn khác"
## [104] "Cổ phiếu Quỹ"
## [105] "Chênh lệch đánh giá lại tài sản"
## [106] "Chênh lệch tỷ giá"
## [107] "Quỹ đầu tư và phát triển"
## [108] "Quỹ hỗ trợ sắp xếp doanh nghiệp"
## [109] "Quỹ dự phòng tài chính"
## [110] "Quỹ khác"
## [111] "Lãi chưa phân phối"
## [112] "LNST chưa phân phối lũy kế đến cuối kỳ trước"
## [113] "LNST chưa phân phối kỳ này"
## [114] "Lợi ích cổ đông không kiểm soát"
## [115] "Vốn Ngân sách nhà nước và quỹ khác"
## [116] "Quỹ khen thưởng, phúc lợi (trước 2010)"
## [117] "Vốn ngân sách nhà nước"
## [118] "Nguồn kinh phí đã hình thành TSCĐ"
## [119] "Lợi ích của cổ đông thiểu số...120"
## [120] "TỔNG CỘNG NGUỒN VỐN"
## [121] "Doanh số"
## [122] "Các khoản giảm trừ"
## [123] "Doanh số thuần"
## [124] "Giá vốn hàng bán"
## [125] "Lãi gộp"
## [126] "Thu nhập tài chính"
## [127] "Chi phí tài chính"
## [128] "Trong đó: Chi phí lãi vay"
## [129] "Lãi/(lỗ) từ công ty liên doanh"
## [130] "Chi phí bán hàng"
## [131] "Chi phí quản lý doanh nghiệp"
## [132] "Lãi/(lỗ) từ hoạt động kinh doanh"
## [133] "Thu nhập khác"
## [134] "Chi phí khác"
## [135] "Thu nhập khác, ròng"
## [136] "Lãi/(lỗ) từ công ty liên doanh (từ năm 2015)"
## [137] "Lãi/(lỗ) ròng trước thuế"
## [138] "Thuế thu nhập doanh nghiệp – hiện thời"
## [139] "Thuế thu nhập doanh nghiệp – hoãn lại"
## [140] "Chi phí thuế thu nhập doanh nghiệp"
## [141] "Lãi/(lỗ) thuần sau thuế"
## [142] "Lợi ích của cổ đông thiểu số...143"
## [143] "Lợi nhuận của Cổ đông của Công ty mẹ"
## [144] "Lãi cơ bản trên cổ phiếu"
## [145] "Lãi trên cổ phiếu pha loãng"
## [146] "EBIT"
## [147] "EBITDA"
## [148] "Lưu chuyển tiền thuần từ các hoạt động sản xuất kinh doanh"
## [149] "Lãi/lỗ trước những thay đổi vốn lưu động"
## [150] "Lãi trước thuế"
## [151] "Khấu hao TSCĐ"
## [152] "Phân bổ lợi thế thương mại"
## [153] "Chi phí dự phòng"
## [154] "Lãi/(lỗ) chênh lệch tỷ giá chưa thực hiện"
## [155] "Lãi/(lỗ) từ thanh lý tài sản cố định"
## [156] "Lãi/(lỗ) từ hoạt động đầu tư"
## [157] "Chi phí lãi vay"
## [158] "Thu lãi và cổ tức"
## [159] "Các khoản điều chỉnh khác"
## [160] "(Tăng)/giảm các khoản phải thu"
## [161] "(Tăng)/giảm hàng tồn kho"
## [162] "Tăng/(giảm) các khoản phải trả"
## [163] "( Tăng)/giảm chi phí trả trước"
## [164] "(Tăng)/giảm chứng khoán kinh doanh"
## [165] "Chi phí lãi vay đã trả"
## [166] "Thuế thu nhập doanh nghiệp đã trả"
## [167] "Tiền thu khác từ các hoạt động kinh doanh"
## [168] "Tiền chi khác từ các hoạt động kinh doanh"
## [169] "Lưu chuyển tiền tệ ròng từ hoạt động đầu tư"
## [170] "Tiền mua tài sản cố định và các tài sản dài hạn khác"
## [171] "Tiền thu được từ thanh lý tài sản cố định"
## [172] "Tiền cho vay hoặc mua công cụ nợ"
## [173] "Tiền thu từ cho vay hoặc thu từ phát hành công cụ nợ"
## [174] "Đầu tư vào các doanh nghiệp khác"
## [175] "Tiền thu từ việc bán các khoản đầu tư vào các doanh nghiệp khác"
## [176] "Cổ tức và tiền lãi nhận được"
## [177] "Lưu chuyển tiền tệ từ hoạt động tài chính"
## [178] "Tiền thu từ phát hành cổ phiếu và vốn góp"
## [179] "Chi trả cho việc mua lại, trả lại cổ phiếu"
## [180] "Tiền thu được các khoản đi vay"
## [181] "Tiển trả các khoản đi vay"
## [182] "Tiền thanh toán vốn gốc đi thuê tài chính"
## [183] "Cổ tức đã trả"
## [184] "Tiền lãi đã nhận"
## [185] "Lưu chuyển tiền thuần trong kỳ"
## [186] "Tiền và tương đương tiền đầu kỳ"
## [187] "Ảnh hưởng của chênh lệch tỷ giá"
## [188] "Tiền và tương đương tiền cuối kỳ"
Giải thích: Hàm sapply(bctc, is.numeric) tạo ra một vector logic,
TRUE tại những biến có kiểu số. Sau đó names(bctc)[…] lọc ra tên của các
biến định lượng.
Nhận xét: Giúp người phân tích biết rõ biến nào có thể sử dụng cho các
phép tính trung bình, phương sai, hoặc vẽ biểu đồ dạng histogram,
scatter plot,…
names(bctc)[sapply(bctc, function(x) is.factor(x) | is.character(x))]
## character(0)
Giải thích:
- names(bctc): lấy danh sách tên các biến (cột) trong bộ dữ liệu bctc
(báo cáo tài chính).
- sapply(bctc, function(x) …): duyệt qua từng cột trong dữ liệu bctc để
kiểm tra điều kiện.
- is.factor(x): kiểm tra xem biến có kiểu nhân tố (factor) hay
không.
- is.character(x): kiểm tra xem biến có kiểu chuỗi ký tự (character) hay
không.
- |: là toán tử “hoặc” – nếu một biến là factor hoặc character, điều
kiện trả về TRUE.
Nhận xét: Xác định các biến định tính (kiểu factor hoặc character) trong
bộ dữ liệu báo cáo tài chính của công ty DIG .Việc thực hiện bước này
giúp phân loại dữ liệu, phục vụ cho quá trình xử lý và phân tích sau
này, đảm bảo chỉ các biến định lượng được sử dụng trong các phép tính
thống kê.
names(bctc) <- str_trim(names(bctc))
Giải thích: str_trim() để xóa bỏ các khoảng trắng thừa ở đầu và cuối
trong tên cột dữ liệu.
Nhận xét: Tên biến được chuẩn hóa giúp tránh lỗi khi gọi tên biến trong
quá trình phân tích dữ liệu.
names(bctc) <- tolower(names(bctc))
Giải thích: tolower() giúp chuyển toàn bộ chữ hoa thành chữ thường
trong tên cột.
Nhận xét: Đảm bảo tính nhất quán tránh phân biệt chữ hoa chữ thường khi
xử lý dữ liệu.
names(bctc) <- stri_trans_general(names(bctc), "Latin-ASCII")
Giải thích: stri_trans_general() loại bỏ dấu tiếng Việt trong tên
cột, chuyển các ký tự có dấu sang dạng không dấu.
Nhận xét: Giúp dễ dàng xử lý và gọi tên biến trong quá trình trực quan
hóa dữ liệu.
names(bctc) <- str_replace_all(names(bctc), " ", "_")
Giải thích: str_replace_all(names(bctc), ” “,”_“) giúp thay thế toàn
bộ khoảng trắng trong tên biến bằng dấu gạch dưới.
Nhận xét: Giúp việc đọc hiểu tên biến trở nên trực quan, dễ thao tác và
đồng nhất.
bctc <- bctc %>% mutate(across(where(is.character), str_trim))
head(bctc)
## # A tibble: 6 × 189
## ...1 tong_tai_san tai_san_ngan_han tien_va_tuong_duong_…¹
## <dbl> <dbl> <dbl> <dbl>
## 1 2015 5.09e12 3211018731920 64549207165
## 2 2016 5.88e12 4182170299524 179462187815
## 3 2017 6.08e12 4809788192964 202909697337
## 4 2018 6.83e12 5633632858566 734834226232
## 5 2019 8.20e12 7130818433089 593928466557
## 6 2020 1.18e13 7299152349851 402938011038
## # ℹ abbreviated name: ¹tien_va_tuong_duong_tien
## # ℹ 185 more variables: tien <dbl>,
## # cac_khoan_tuong_duong_tien <dbl>,
## # gia_tri_thuan_dau_tu_ngan_han <dbl>,
## # dau_tu_ngan_han <dbl>, du_phong_dau_tu_ngan_han <dbl>,
## # chung_khoan_dau_tu_giu_den_ngay_dao_han <dbl>,
## # cac_khoan_phai_thu <dbl>, phai_thu_khach_hang <dbl>, …
Giải thích: mutate(across(…)) áp dụng str_trim() cho toàn bộ các cột
văn bảng giúp loại bỏ khoảng trắng dư thừa trong nội dung của các biến
dạng ký tự (character).
Nhận xét: Khoảng trắng dư thừa hoặc định dạng không nhất quán trong
chuỗi ký tự có thể khiến các thao tác nhóm hoặc lọc dữ liệu bị sai lệch.
Việc loại bỏ khoảng trắng và chuẩn hóa chữ giúp các biến dạng text được
đồng nhất, từ đó đảm bảo độ tin cậy cho các phân tích so sánh hoặc thống
kê tần suất.
colnames(bctc)[1] <- "nam"
num_cols <- sapply(bctc, is.numeric)
bctc[num_cols] <- lapply(bctc[num_cols], function(x) ifelse(is.na(x), median(x, na.rm = TRUE), x))
Giải thích: sapply(bctc, is.numeric) xác định các cột có kiểu số
(numeric),ifelse(is.na(x), median(x), x) thay thế các giá trị bị thiếu
(NA) bằng giá trị trung vị (median) của cột đó.
Nhận xét: giúp hoàn thiện dữ liệu, tránh lỗi trong tính toán do giá trị
bị thiếu. Việc sử dụng trung vị thay vì trung bình giúp giảm ảnh hưởng
của các giá trị ngoại lai.
if ("doanh_thu" %in% names(bctc)) {
bctc <- bctc %>% mutate(log_doanh_thu = log1p(doanh_thu))
}
Giải thích: Tạo cột log_doanh_thu bằng cách lấy (log1p) của doanh thu
.
Nhận xét: Biến log giúp ổn định phương sai và giảm độ lệch dữ liệu.
bctc <- bctc %>%
mutate(ty_le_no_von_chu = no_phai_tra / von_chu_so_huu)
bctc <- bctc %>%
rename(lai_lo_thuan_sau_thue = `lai/(lo)_thuan_sau_thue`)
bctc <- bctc %>%
mutate(tang_truong_loi_nhuan = (lai_lo_thuan_sau_thue - lag(lai_lo_thuan_sau_thue)) / lag(lai_lo_thuan_sau_thue))
bctc <- bctc %>%
arrange(nam) %>%
mutate(tang_truong_doanh_thu = (doanh_so_thuan / lag(doanh_so_thuan) - 1) * 100)
bctc <- bctc %>%
mutate(roe = lai_lo_thuan_sau_thue / von_chu_so_huu)
bctc <- bctc %>%
mutate(roa = lai_lo_thuan_sau_thue / tong_tai_san)
summary(bctc)
## nam tong_tai_san tai_san_ngan_han
## Min. :2015 Min. :5.089e+12 Min. :3.211e+12
## 1st Qu.:2017 1st Qu.:6.270e+12 1st Qu.:5.016e+12
## Median :2020 Median :1.001e+13 Median :7.215e+12
## Mean :2020 Mean :1.109e+13 Mean :8.432e+12
## 3rd Qu.:2022 3rd Qu.:1.631e+13 3rd Qu.:1.113e+13
## Max. :2024 Max. :1.854e+13 Max. :1.599e+13
##
## tien_va_tuong_duong_tien tien
## Min. :6.455e+10 Min. :4.356e+10
## 1st Qu.:2.137e+11 1st Qu.:1.937e+11
## Median :4.984e+11 Median :3.349e+11
## Mean :6.517e+11 Mean :4.817e+11
## 3rd Qu.:7.726e+11 3rd Qu.:3.977e+11
## Max. :2.307e+12 Max. :2.297e+12
##
## cac_khoan_tuong_duong_tien gia_tri_thuan_dau_tu_ngan_han
## Min. :5.000e+07 Min. :0.000e+00
## 1st Qu.:1.302e+10 1st Qu.:4.017e+10
## Median :9.630e+10 Median :1.569e+11
## Mean :1.700e+11 Mean :4.451e+11
## 3rd Qu.:2.810e+11 3rd Qu.:2.179e+11
## Max. :6.195e+11 Max. :2.738e+12
##
## dau_tu_ngan_han du_phong_dau_tu_ngan_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
##
## chung_khoan_dau_tu_giu_den_ngay_dao_han
## Min. :0.000e+00
## 1st Qu.:4.017e+10
## Median :1.569e+11
## Mean :4.451e+11
## 3rd Qu.:2.179e+11
## Max. :2.738e+12
##
## cac_khoan_phai_thu phai_thu_khach_hang
## Min. :6.762e+11 Min. :4.964e+11
## 1st Qu.:1.210e+12 1st Qu.:7.708e+11
## Median :2.105e+12 Median :1.029e+12
## Mean :2.703e+12 Mean :9.578e+11
## 3rd Qu.:4.111e+12 3rd Qu.:1.153e+12
## Max. :5.944e+12 Max. :1.219e+12
##
## tra_truoc_nguoi_ban phai_thu_noi_bo phai_thu_ve_xdcb
## Min. :2.939e+10 Min. :0 Min. :0
## 1st Qu.:1.044e+11 1st Qu.:0 1st Qu.:0
## Median :2.105e+11 Median :0 Median :0
## Mean :1.740e+11 Mean :0 Mean :0
## 3rd Qu.:2.216e+11 3rd Qu.:0 3rd Qu.:0
## Max. :2.802e+11 Max. :0 Max. :0
##
## phai_thu_ve_cho_vay_ngan_han phai_thu_khac
## Min. :4.000e+09 Min. :1.278e+11
## 1st Qu.:3.239e+10 1st Qu.:2.576e+11
## Median :7.670e+10 Median :7.979e+11
## Mean :1.226e+11 Mean :1.469e+12
## 3rd Qu.:2.415e+11 3rd Qu.:2.451e+12
## Max. :2.774e+11 Max. :4.548e+12
##
## du_phong_no_kho_doi tai_san_thieu_cho_xu_ly
## Min. :-2.922e+10 Min. : 0
## 1st Qu.:-2.349e+10 1st Qu.: 1320000
## Median :-2.285e+10 Median : 6464870
## Mean :-2.072e+10 Mean :19444275
## 3rd Qu.:-1.629e+10 3rd Qu.:33514484
## Max. :-9.744e+09 Max. :59203748
##
## hang_ton_kho,_rong hang_ton_kho
## Min. :2.437e+12 Min. :2.437e+12
## 1st Qu.:3.234e+12 1st Qu.:3.245e+12
## Median :4.019e+12 Median :4.026e+12
## Mean :4.503e+12 Mean :4.507e+12
## 3rd Qu.:5.541e+12 3rd Qu.:5.545e+12
## Max. :8.155e+12 Max. :8.157e+12
##
## du_phong_giam_gia_htk tai_san_luu_dong_khac...23
## Min. :-1.467e+10 Min. :3.355e+10
## 1st Qu.:-5.543e+09 1st Qu.:5.980e+10
## Median :-2.434e+09 Median :1.358e+11
## Mean :-4.269e+09 Mean :1.298e+11
## 3rd Qu.:-1.058e+09 3rd Qu.:1.972e+11
## Max. : 0.000e+00 Max. :2.183e+11
##
## tra_truoc_ngan_han thue_vat_phai_thu
## Min. :8.746e+09 Min. :1.320e+09
## 1st Qu.:5.098e+10 1st Qu.:2.766e+09
## Median :1.181e+11 Median :4.362e+09
## Mean :1.090e+11 Mean :8.499e+09
## 3rd Qu.:1.667e+11 3rd Qu.:1.399e+10
## Max. :1.862e+11 Max. :2.238e+10
##
## phai_thu_thue_khac
## Min. :2.611e+09
## 1st Qu.:7.438e+09
## Median :1.243e+10
## Mean :1.234e+10
## 3rd Qu.:1.714e+10
## Max. :2.506e+10
##
## giao_dich_mua_ban_lai_trai_phieu_chinh_phu...27
## Min. :0
## 1st Qu.:0
## Median :0
## Mean :0
## 3rd Qu.:0
## Max. :0
##
## tai_san_luu_dong_khac...28 tai_san_dai_han
## Min. :0 Min. :1.066e+12
## 1st Qu.:0 1st Qu.:1.378e+12
## Median :0 Median :2.216e+12
## Mean :0 Mean :2.654e+12
## 3rd Qu.:0 3rd Qu.:3.615e+12
## Max. :0 Max. :5.632e+12
##
## phai_thu_dai_han phai_thu_khach_hang_dai_han
## Min. :8.461e+10 Min. :0.000e+00
## 1st Qu.:2.934e+11 1st Qu.:0.000e+00
## Median :6.340e+11 Median :8.318e+09
## Mean :1.303e+12 Mean :5.296e+10
## 3rd Qu.:2.132e+12 3rd Qu.:1.275e+11
## Max. :4.110e+12 Max. :1.687e+11
##
## tra_truoc_nguoi_ban_dai_han
## Min. :0
## 1st Qu.:0
## Median :0
## Mean :0
## 3rd Qu.:0
## Max. :0
##
## von_kinh_doanh_o_cac_don_vi_truc_thuoc
## Min. :0
## 1st Qu.:0
## Median :0
## Mean :0
## 3rd Qu.:0
## Max. :0
##
## phai_thu_noi_bo_dai_han phai_thu_ve_cho_vay_dai_han
## Min. :0 Min. :0.000e+00
## 1st Qu.:0 1st Qu.:0.000e+00
## Median :0 Median :1.769e+09
## Mean :0 Mean :3.119e+10
## 3rd Qu.:0 3rd Qu.:3.910e+10
## Max. :0 Max. :1.712e+11
##
## phai_thu_dai_han_khac du_phong_phai_thu_dai_han
## Min. :8.461e+10 Min. :-8.318e+09
## 1st Qu.:8.875e+10 1st Qu.: 0.000e+00
## Median :4.338e+11 Median : 0.000e+00
## Mean :1.220e+12 Mean :-1.664e+09
## 3rd Qu.:2.132e+12 3rd Qu.: 0.000e+00
## Max. :4.110e+12 Max. : 0.000e+00
##
## tai_san_co_dinh gtcl_tscd_huu_hinh
## Min. :2.315e+11 Min. :2.142e+11
## 1st Qu.:2.776e+11 1st Qu.:2.638e+11
## Median :5.389e+11 Median :5.073e+11
## Mean :5.240e+11 Mean :4.954e+11
## 3rd Qu.:7.521e+11 3rd Qu.:7.199e+11
## 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
## Min. :0
## 1st Qu.:0
## Median :0
## Mean :0
## 3rd Qu.:0
## Max. :0
##
## nguyen_gia_tai_san_thue_tai_chinh
## Min. :0
## 1st Qu.:0
## Median :0
## Mean :0
## 3rd Qu.:0
## Max. :0
##
## khau_hao_luy_ke_tai_san_thue_tai_chinh
## Min. :0
## 1st Qu.:0
## Median :0
## Mean :0
## 3rd Qu.:0
## Max. :0
##
## gtcl_tai_san_co_dinh_vo_hinh nguyen_gia_tscd_vo_hinh
## Min. :1.066e+10 Min. :1.141e+10
## 1st Qu.:1.764e+10 1st Qu.:1.847e+10
## Median :1.983e+10 Median :2.066e+10
## Mean :2.858e+10 Mean :3.012e+10
## 3rd Qu.:3.224e+10 3rd Qu.:3.480e+10
## Max. :8.629e+10 Max. :8.978e+10
##
## khau_hao_luy_ke_tscd_vo_hinh bat_dong_san_dau_tu
## Min. :-3.483e+09 Min. :1.038e+11
## 1st Qu.:-2.251e+09 1st Qu.:1.144e+11
## Median :-9.835e+08 Median :1.225e+11
## Mean :-1.538e+09 Mean :1.314e+11
## 3rd Qu.:-7.584e+08 3rd Qu.:1.549e+11
## 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
## Min. :6.800e+10
## 1st Qu.:8.048e+10
## Median :9.019e+10
## Mean :9.235e+10
## 3rd Qu.:1.006e+11
## Max. :1.267e+11
##
## chi_phi_san_xuat,_kinh_doanh_do_dang_dai_han
## Min. :0.00e+00
## 1st Qu.:0.00e+00
## Median :0.00e+00
## Mean :1.49e+08
## 3rd Qu.:0.00e+00
## Max. :1.49e+09
##
## xay_dung_co_ban_do_dang dau_tu_dai_han
## Min. :0 Min. :2.993e+11
## 1st Qu.:0 1st Qu.:3.304e+11
## Median :0 Median :3.515e+11
## Mean :0 Mean :4.882e+11
## 3rd Qu.:0 3rd Qu.:5.010e+11
## Max. :0 Max. :1.066e+12
##
## dau_tu_vao_cac_cong_ty_con dau_tu_vao_cong_ty_lien_doanh
## Min. :0 Min. :1.716e+11
## 1st Qu.:0 1st Qu.:2.060e+11
## Median :0 Median :2.975e+11
## Mean :0 Mean :3.562e+11
## 3rd Qu.:0 3rd Qu.:3.125e+11
## Max. :0 Max. :8.091e+11
##
## dau_tu_dai_han_khac du_phong_giam_gia_dau_tu_dai_han
## Min. :2.344e+09 Min. :-5.579e+10
## 1st Qu.:6.345e+10 1st Qu.:-3.676e+10
## Median :1.191e+11 Median :-2.435e+10
## Mean :1.312e+11 Mean :-2.535e+10
## 3rd Qu.:2.045e+11 3rd Qu.:-1.091e+10
## Max. :3.012e+11 Max. :-6.496e+07
##
## dau_tu_nam_giu_den_ngay_dao_han tai_san_dai_han_khac
## Min. :0.000e+00 Min. :2.998e+10
## 1st Qu.:1.880e+10 1st Qu.:5.987e+10
## Median :2.950e+10 Median :9.875e+10
## Mean :2.614e+10 Mean :1.158e+11
## 3rd Qu.:3.375e+10 3rd Qu.:1.723e+11
## Max. :4.200e+10 Max. :2.260e+11
##
## tra_truoc_dai_han thue_thu_nhap_hoan_lai_phai_thu
## Min. :1.668e+10 Min. :4.361e+09
## 1st Qu.:2.546e+10 1st Qu.:1.345e+10
## Median :2.890e+10 Median :1.583e+10
## Mean :3.195e+10 Mean :1.573e+10
## 3rd Qu.:3.531e+10 3rd Qu.:2.017e+10
## Max. :5.506e+10 Max. :2.827e+10
##
## thiet_bi,_vat_tu,_phu_tung_thay_the_dai_han
## Min. :0
## 1st Qu.:0
## Median :0
## Mean :0
## 3rd Qu.:0
## Max. :0
##
## cac_tai_san_dai_han_khac loi_the_thuong_mai
## 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
##
## no_phai_tra no_ngan_han
## Min. :2.433e+12 Min. :9.958e+11
## 1st Qu.:3.298e+12 1st Qu.:1.955e+12
## Median :5.570e+12 Median :3.608e+12
## Mean :5.910e+12 Mean :4.054e+12
## 3rd Qu.:8.460e+12 3rd Qu.:5.658e+12
## Max. :1.050e+13 Max. :7.962e+12
##
## phai_tra_nguoi_ban nguoi_mua_tra_tien_truoc
## Min. :1.140e+11 Min. :2.857e+11
## 1st Qu.:2.280e+11 1st Qu.:8.248e+11
## Median :3.068e+11 Median :1.599e+12
## Mean :3.214e+11 Mean :1.371e+12
## 3rd Qu.:4.066e+11 3rd Qu.:1.759e+12
## Max. :5.449e+11 Max. :2.426e+12
##
## thue_va_cac_khoan_phai_tra_nha_nuoc
## Min. :9.618e+09
## 1st Qu.:5.369e+10
## Median :9.035e+10
## Mean :1.219e+11
## 3rd Qu.:1.810e+11
## Max. :3.414e+11
##
## phai_tra_nguoi_lao_dong chi_phi_phai_tra
## Min. :1.895e+10 Min. :1.714e+10
## 1st Qu.:2.193e+10 1st Qu.:7.908e+10
## Median :2.849e+10 Median :9.567e+10
## Mean :2.836e+10 Mean :1.415e+11
## 3rd Qu.:3.324e+10 3rd Qu.:1.992e+11
## Max. :3.967e+10 Max. :3.467e+11
##
## phai_tra_noi_bo phai_tra_ve_xay_dung_co_ban
## 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
##
## doanh_thu_chua_thuc_hien_ngan_han phai_tra_khac
## Min. :3.374e+09 Min. :1.069e+11
## 1st Qu.:4.020e+09 1st Qu.:2.093e+11
## Median :5.220e+10 Median :4.661e+11
## Mean :3.521e+10 Mean :1.136e+12
## 3rd Qu.:5.663e+10 3rd Qu.:2.283e+12
## Max. :6.154e+10 Max. :2.865e+12
##
## vay_ngan_han du_phong_cac_khoan_phai_tra_ngan_han
## Min. :3.065e+11 Min. :0.000e+00
## 1st Qu.:4.101e+11 1st Qu.:0.000e+00
## Median :6.504e+11 Median :0.000e+00
## Mean :8.754e+11 Mean :5.937e+08
## 3rd Qu.:1.147e+12 3rd Qu.:4.521e+08
## 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
## Min. :0
## 1st Qu.:0
## Median :0
## Mean :0
## 3rd Qu.:0
## Max. :0
##
## no_dai_han phai_tra_nha_cung_cap_dai_han
## Min. :6.154e+11 Min. :0
## 1st Qu.:1.069e+12 1st Qu.:0
## Median :1.511e+12 Median :0
## Mean :1.856e+12 Mean :0
## 3rd Qu.:2.347e+12 3rd Qu.:0
## Max. :4.505e+12 Max. :0
##
## nguoi_mua_tra_tien_truoc_dai_han chi_phi_phai_tra_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
##
## phai_tra_noi_bo_ve_von_kinh_doanh phai_tra_noi_bo_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
##
## doanh_thu_chua_thuc_hien phai_tra_dai_han_khac
## Min. :1.144e+11 Min. :1.093e+09
## 1st Qu.:1.220e+11 1st Qu.:1.622e+09
## Median :1.519e+11 Median :1.987e+10
## Mean :1.743e+11 Mean :1.583e+10
## 3rd Qu.:1.753e+11 3rd Qu.:2.009e+10
## Max. :3.130e+11 Max. :5.184e+10
##
## vay_dai_han trai_phieu_chuyen_doi
## Min. :4.240e+11 Min. :0.00e+00
## 1st Qu.:8.591e+11 1st Qu.:0.00e+00
## 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
##
## co_phieu_uu_dai...92 thue_thu_nhap_hoan_lai_phai_tra
## Mode:logical Min. :1.741e+10
## NA's:10 1st Qu.:2.784e+10
## Median :3.245e+10
## Mean :3.682e+10
## 3rd Qu.:4.078e+10
## Max. :6.436e+10
##
## du_phong_tro_cap_thoi_viec
## Min. :0
## 1st Qu.:0
## Median :0
## Mean :0
## 3rd Qu.:0
## Max. :0
##
## du_phong_cac_khoan_cong_no_dai_han
## Min. :5.666e+08
## 1st Qu.:7.809e+08
## Median :2.117e+09
## Mean :2.374e+09
## 3rd Qu.:2.933e+09
## Max. :5.692e+09
##
## quy_phat_trien_khoa_hoc_cong_nghe von_chu_so_huu
## Min. :0 Min. :2.656e+12
## 1st Qu.:0 1st Qu.:2.973e+12
## Median :0 Median :4.400e+12
## Mean :0 Mean :5.176e+12
## 3rd Qu.:0 3rd Qu.:7.764e+12
## Max. :0 Max. :8.041e+12
##
## von_va_cac_quy von_gop
## Min. :2.656e+12 Min. :2.145e+12
## 1st Qu.:2.973e+12 1st Qu.:2.418e+12
## Median :4.400e+12 Median :3.167e+12
## Mean :5.176e+12 Mean :3.906e+12
## 3rd Qu.:7.764e+12 3rd Qu.:5.824e+12
## Max. :8.041e+12 Max. :6.099e+12
##
## co_phieu_pho_thong co_phieu_uu_dai...101
## Min. :2.145e+12 Min. :0
## 1st Qu.:2.418e+12 1st Qu.:0
## Median :3.167e+12 Median :0
## Mean :3.906e+12 Mean :0
## 3rd Qu.:5.824e+12 3rd Qu.:0
## Max. :6.099e+12 Max. :0
##
## thang_du_von_co_phan quyen_chon_chuyen_doi_trai_phieu
## Min. :6.611e+10 Min. :0
## 1st Qu.:1.016e+11 1st Qu.:0
## Median :2.672e+11 Median :0
## Mean :5.201e+11 Mean :0
## 3rd Qu.:1.046e+12 3rd Qu.:0
## Max. :1.121e+12 Max. :0
##
## von_khac co_phieu_quy
## Min. :0.000e+00 Min. :0
## 1st Qu.:0.000e+00 1st Qu.:0
## Median :1.163e+09 Median :0
## Mean :4.590e+09 Mean :0
## 3rd Qu.:8.934e+09 3rd Qu.:0
## Max. :1.490e+10 Max. :0
##
## chenh_lech_danh_gia_lai_tai_san chenh_lech_ty_gia
## 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
##
## quy_dau_tu_va_phat_trien quy_ho_tro_sap_xep_doanh_nghiep
## Min. :8.469e+10 Min. :0
## 1st Qu.:1.041e+11 1st Qu.:0
## Median :1.666e+11 Median :0
## Mean :1.568e+11 Mean :0
## 3rd Qu.:1.913e+11 3rd Qu.:0
## Max. :2.300e+11 Max. :0
##
## quy_du_phong_tai_chinh quy_khac lai_chua_phan_phoi
## Min. :0 Min. :0 Min. :6.607e+10
## 1st Qu.:0 1st Qu.:0 1st Qu.:2.244e+11
## Median :0 Median :0 Median :3.769e+11
## Mean :0 Mean :0 Mean :4.539e+11
## 3rd Qu.:0 3rd Qu.:0 3rd Qu.:5.149e+11
## Max. :0 Max. :0 Max. :1.111e+12
##
## lnst_chua_phan_phoi_luy_ke_den_cuoi_ky_truoc
## Min. :-2.719e+08
## 1st Qu.: 4.315e+10
## Median : 9.318e+10
## Mean : 1.484e+11
## 3rd Qu.: 2.532e+11
## 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
## Min. :0
## 1st Qu.:0
## Median :0
## Mean :0
## 3rd Qu.:0
## Max. :0
##
## quy_khen_thuong,_phuc_loi_(truoc_2010)
## Min. :0
## 1st Qu.:0
## Median :0
## Mean :0
## 3rd Qu.: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
## Min. :0 Min. :5.089e+12
## 1st Qu.:0 1st Qu.:6.270e+12
## Median :0 Median :1.001e+13
## Mean :0 Mean :1.109e+13
## 3rd Qu.:0 3rd Qu.:1.631e+13
## Max. :0 Max. :1.854e+13
##
## doanh_so cac_khoan_giam_tru
## Min. :6.920e+11 Min. :-2.305e+11
## 1st Qu.:1.369e+12 1st Qu.:-1.132e+11
## Median :1.817e+12 Median :-3.517e+10
## Mean :1.790e+12 Mean :-7.588e+10
## 3rd Qu.:2.379e+12 3rd Qu.:-1.872e+10
## Max. :2.586e+12 Max. :-1.335e+10
##
## doanh_so_thuan gia_von_hang_ban
## Min. :6.552e+11 Min. :-1.847e+12
## 1st Qu.:1.189e+12 1st Qu.:-1.666e+12
## Median :1.745e+12 Median :-1.233e+12
## Mean :1.714e+12 Mean :-1.241e+12
## 3rd Qu.:2.288e+12 3rd Qu.:-8.757e+11
## Max. :2.569e+12 Max. :-4.912e+11
##
## lai_gop thu_nhap_tai_chinh
## Min. :1.640e+11 Min. :2.370e+10
## 1st Qu.:3.033e+11 1st Qu.:4.308e+10
## Median :4.782e+11 Median :8.858e+10
## Mean :4.734e+11 Mean :1.024e+11
## 3rd Qu.:6.384e+11 3rd Qu.:1.455e+11
## Max. :8.395e+11 Max. :2.276e+11
##
## chi_phi_tai_chinh trong_do:_chi_phi_lai_vay
## Min. :-2.649e+11 Min. :-2.432e+11
## 1st Qu.:-9.541e+10 1st Qu.:-8.388e+10
## Median :-5.420e+10 Median :-3.733e+10
## Mean :-7.490e+10 Mean :-6.210e+10
## 3rd Qu.:-2.849e+10 3rd Qu.:-1.816e+10
## Max. :-6.154e+09 Max. :-7.713e+09
##
## lai/(lo)_tu_cong_ty_lien_doanh chi_phi_ban_hang
## Min. :-6.918e+10 Min. :-1.971e+11
## 1st Qu.:-3.948e+10 1st Qu.:-1.126e+11
## Median :-1.594e+10 Median :-9.636e+10
## Mean :-1.702e+10 Mean :-9.990e+10
## 3rd Qu.:-2.026e+09 3rd Qu.:-7.649e+10
## Max. : 6.671e+10 Max. :-4.232e+10
##
## chi_phi_quan_ly_doanh__nghiep
## Min. :-1.803e+11
## 1st Qu.:-1.543e+11
## Median :-1.503e+11
## Mean :-1.368e+11
## 3rd Qu.:-1.059e+11
## Max. :-8.242e+10
##
## lai/(lo)_tu_hoat_dong_kinh_doanh thu_nhap_khac
## Min. :4.480e+10 Min. :6.777e+09
## 1st Qu.:1.448e+11 1st Qu.:2.281e+10
## Median :1.955e+11 Median :5.137e+10
## Mean :2.472e+11 Mean :1.880e+11
## 3rd Qu.:3.264e+11 3rd Qu.:1.050e+11
## Max. :5.331e+11 Max. :8.867e+11
##
## chi_phi_khac thu_nhap_khac,_rong
## Min. :-1.117e+11 Min. :-6.187e+10
## 1st Qu.:-4.867e+10 1st Qu.:-3.048e+09
## Median :-2.407e+10 Median : 2.082e+10
## Mean :-3.693e+10 Mean : 1.511e+11
## 3rd Qu.:-1.410e+10 3rd Qu.: 7.880e+10
## Max. :-4.370e+09 Max. : 7.975e+11
##
## lai/(lo)_tu_cong_ty_lien_doanh__(tu_nam_2015)
## Min. :0
## 1st Qu.:0
## Median :0
## Mean :0
## 3rd Qu.:0
## Max. :0
##
## lai/(lo)_rong_truoc_thue
## Min. :3.213e+10
## 1st Qu.:1.600e+11
## Median :2.271e+11
## Mean :3.983e+11
## 3rd Qu.:4.605e+11
## Max. :1.282e+12
##
## thue_thu_nhap_doanh_nghiep_-_hien_thoi
## Min. :-2.911e+11
## 1st Qu.:-1.187e+11
## Median :-6.431e+10
## Mean :-8.937e+10
## 3rd Qu.:-3.975e+10
## Max. :-1.038e+10
##
## thue_thu_nhap_doanh_nghiep_-_hoan_lai
## Min. :-4.477e+10
## 1st Qu.:-7.335e+09
## Median :-1.085e+09
## Mean : 1.399e+09
## 3rd Qu.: 1.623e+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
## Min. :-1.917e+10
## 1st Qu.:-4.491e+09
## Median : 4.971e+09
## Mean : 4.841e+09
## 3rd Qu.: 8.498e+09
## Max. : 4.724e+10
##
## loi_nhuan_cua_co_dong_cua_cong_ty_me
## Min. :1.046e+10
## 1st Qu.:1.156e+11
## Median :1.702e+11
## Mean :3.055e+11
## 3rd Qu.:3.742e+11
## Max. :9.862e+11
##
## lai_co_ban_tren_co_phieu lai_tren_co_phieu_pha_loang
## Min. : 44.0 Min. : 0.0
## 1st Qu.: 202.5 1st Qu.: 0.0
## Median : 516.5 Median : 0.0
## Mean : 805.0 Mean : 467.6
## 3rd Qu.:1272.8 3rd Qu.: 924.8
## Max. :2157.0 Max. :2157.0
##
## ebit ebitda
## Min. :-4.931e+09 Min. :1.997e+10
## 1st Qu.: 9.613e+10 1st Qu.:1.530e+11
## Median : 2.608e+11 Median :2.818e+11
## Mean : 2.367e+11 Mean :2.789e+11
## 3rd Qu.: 3.539e+11 3rd Qu.:4.080e+11
## Max. : 4.878e+11 Max. :5.390e+11
##
## luu_chuyen_tien_thuan_tu_cac_hoat_dong_san_xuat_kinh_doanh
## Min. :-2.206e+12
## 1st Qu.:-5.235e+11
## Median :-3.677e+11
## Mean :-3.161e+11
## 3rd Qu.:-2.498e+11
## Max. : 2.859e+12
##
## lai/lo_truoc_nhung_thay_doi_von_luu_dong
## Min. :0.000e+00
## 1st Qu.:1.496e+11
## Median :3.333e+11
## Mean :2.831e+11
## 3rd Qu.:3.729e+11
## Max. :5.333e+11
##
## lai_truoc_thue khau_hao_tscd
## Min. :0.000e+00 Min. :1.923e+10
## 1st Qu.:1.600e+11 1st Qu.:2.333e+10
## Median :2.271e+11 Median :4.116e+10
## Mean :3.951e+11 Mean :4.218e+10
## 3rd Qu.:4.605e+11 3rd Qu.:6.140e+10
## Max. :1.282e+12 Max. :6.833e+10
##
## phan_bo_loi_the_thuong_mai chi_phi_du_phong
## Min. :0 Min. :-3.606e+10
## 1st Qu.:0 1st Qu.:-7.565e+09
## Median :0 Median :-2.200e+09
## Mean :0 Mean :-5.366e+09
## 3rd Qu.:0 3rd Qu.: 3.232e+09
## Max. :0 Max. : 1.786e+10
##
## lai/(lo)_chenh_lech_ty_gia_chua_thuc_hien
## Min. :-2.621e+07
## 1st Qu.:-4.788e+06
## Median :-8.632e+05
## Mean : 2.104e+09
## 3rd Qu.:-7.742e+03
## Max. : 2.106e+10
##
## lai/(lo)_tu_thanh_ly_tai_san_co_dinh
## Min. :0
## 1st Qu.:0
## Median :0
## Mean :0
## 3rd Qu.:0
## Max. :0
##
## lai/(lo)_tu_hoat_dong_dau_tu chi_phi_lai_vay
## Min. :-9.027e+11 Min. :0.000e+00
## 1st Qu.:-1.742e+11 1st Qu.:1.816e+10
## Median :-1.029e+11 Median :3.733e+10
## Mean :-2.131e+11 Mean :6.474e+10
## 3rd Qu.:-3.494e+10 3rd Qu.:8.638e+10
## Max. : 1.775e+10 Max. :2.545e+11
##
## thu_lai_va_co_tuc cac_khoan_dieu_chinh_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
##
## (tang)/giam_cac_khoan_phai_thu (tang)/giam_hang_ton_kho
## Min. :-2.154e+12 Min. :-2.078e+12
## 1st Qu.:-4.455e+11 1st Qu.:-8.392e+11
## Median :-2.055e+11 Median :-6.274e+11
## Mean :-2.213e+11 Mean :-5.559e+11
## 3rd Qu.: 8.118e+10 3rd Qu.:-1.055e+11
## Max. : 1.054e+12 Max. : 5.591e+11
##
## tang/(giam)_cac_khoan_phai_tra
## Min. :-1.112e+12
## 1st Qu.: 3.899e+10
## Median : 4.354e+11
## Mean : 4.629e+11
## 3rd Qu.: 7.942e+11
## Max. : 2.929e+12
##
## (_tang)/giam_chi_phi_tra_truoc
## Min. :-7.963e+10
## 1st Qu.:-3.462e+10
## Median :-1.011e+10
## Mean :-1.794e+10
## 3rd Qu.: 3.868e+08
## 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
## Min. :-2.571e+11
## 1st Qu.:-1.245e+11
## Median :-6.086e+10
## Mean :-8.953e+10
## 3rd Qu.:-4.036e+10
## Max. : 0.000e+00
##
## tien_thu_khac_tu_cac_hoat_dong_kinh_doanh
## Min. :0.000e+00
## 1st Qu.:0.000e+00
## Median :0.000e+00
## Mean :1.373e+09
## 3rd Qu.: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
## Min. :2.243e+08
## 1st Qu.:1.309e+09
## Median :2.822e+09
## Mean :6.105e+09
## 3rd Qu.:8.582e+09
## Max. :2.339e+10
##
## tien_cho_vay_hoac_mua_cong_cu_no
## Min. :-3.212e+12
## 1st Qu.:-3.430e+11
## Median :-2.559e+11
## Mean :-6.005e+11
## 3rd Qu.:-9.257e+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
## Min. :1.712e+10
## 1st Qu.:2.288e+10
## Median :3.531e+10
## Mean :4.987e+10
## 3rd Qu.:6.450e+10
## Max. :1.292e+11
##
## luu_chuyen_tien_te_tu_hoat_dong_tai_chinh
## Min. :-1.133e+12
## 1st Qu.:-1.024e+11
## Median : 5.777e+10
## Mean : 4.883e+11
## 3rd Qu.: 3.903e+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
## Min. :-126500000
## 1st Qu.: 0
## Median : 0
## Mean : -12650000
## 3rd Qu.: 0
## Max. : 0
##
## tien_thu_duoc_cac_khoan_di_vay tien_tra_cac_khoan_di_vay
## Min. :2.784e+11 Min. :-2.994e+12
## 1st Qu.:8.791e+11 1st Qu.:-2.165e+12
## Median :1.453e+12 Median :-1.136e+12
## Mean :1.708e+12 Mean :-1.486e+12
## 3rd Qu.:1.922e+12 3rd Qu.:-8.228e+11
## Max. :4.660e+12 Max. :-4.103e+11
##
## tien_thanh_toan_von_goc_di_thue_tai_chinh
## Min. :0
## 1st Qu.:0
## Median :0
## Mean :0
## 3rd Qu.:0
## Max. :0
##
## co_tuc_da_tra tien_lai_da_nhan
## Min. :-1.789e+11 Min. :0
## 1st Qu.:-5.727e+10 1st Qu.:0
## Median :-1.473e+09 Median :0
## Mean :-3.750e+10 Mean :0
## 3rd Qu.:-2.964e+08 3rd Qu.:0
## Max. : 0.000e+00 Max. :0
##
## luu_chuyen_tien_thuan_trong_ky
## Min. :-1.522e+12
## 1st Qu.:-3.542e+11
## Median :-5.873e+10
## Mean : 3.121e+10
## 3rd Qu.: 4.277e+11
## Max. : 2.061e+12
##
## tien_va_tuong_duong_tien_dau_ky
## Min. :6.455e+10
## 1st Qu.:2.137e+11
## Median :4.380e+11
## Mean :6.205e+11
## 3rd Qu.:6.996e+11
## Max. :2.307e+12
##
## anh_huong_cua_chenh_lech_ty_gia
## Min. :-29769499
## 1st Qu.: 79796
## Median : 1860835
## Mean : 1585358
## 3rd Qu.: 4788018
## Max. : 26206966
##
## tien_va_tuong_duong_tien_cuoi_ky ty_le_no_von_chu
## Min. :6.455e+10 Min. :0.892
## 1st Qu.:2.137e+11 1st Qu.:1.058
## Median :4.984e+11 Median :1.113
## Mean :6.517e+11 Mean :1.128
## 3rd Qu.:7.726e+11 3rd Qu.:1.180
## Max. :2.307e+12 Max. :1.469
##
## tang_truong_loi_nhuan tang_truong_doanh_thu
## Min. :-0.80669 Min. :-45.919
## 1st Qu.:-0.08707 1st Qu.: -9.777
## Median : 0.37131 Median : 17.556
## Mean : 0.73339 Mean : 14.123
## 3rd Qu.: 0.94151 3rd Qu.: 38.352
## Max. : 3.75287 Max. : 75.806
## NA's :1 NA's :1
## roe roa
## Min. :0.005199 Min. :0.002714
## 1st Qu.:0.016470 1st Qu.:0.007768
## Median :0.047284 Median :0.023123
## Mean :0.062594 Mean :0.028615
## 3rd Qu.:0.100744 3rd Qu.:0.047887
## Max. :0.150705 Max. :0.061042
##
Giải thích: Hàm summary() cung cấp tóm tắt thống kê cơ bản cho từng
biến: giá trị nhỏ nhất (Min), giá trị lớn nhất (Max), trung vị (Median),
giá trị trung bình (Mean) và các tứ phân vị (1st Qu., 3rd Qu.).
Nhận xét: Kết quả giúp nắm được đặc điểm phân bố và mức độ biến thiên
của dữ liệu.
if ("doanh_so_thuan" %in% names(bctc)) {
mean(bctc$doanh_so_thuan, na.rm = TRUE)
}
## [1] 1.714091e+12
Giải thích: mean() được sử dụng để tính giá trị trung bình của biến
doanh số thuần, tham số na.rm = TRUE giúp bỏ qua các giá trị bị thiếu
(NA) để không ảnh hưởng đến kết quả. Tính giá trị trung bình của doanh
thu thuần phản ánh mức doanh thu bình quân hàng năm của doanh nghiệp
trong giai đoạn nghiên cứu, giúp đánh giá quy mô hoạt động và xu hướng
tăng trưởng doanh thu của công ty qua các năm.
Nhận xét: Giá trị doanh thu trung bình của công ty DIG trong giai 2015 -
2024 đặt 1.714 nghìn tỷ đồng. Kết quả này cho thấy doanh nghiệp có quy
mô doanh thu lớn, phản ảnh hoạt động kinh doanh của DIG diễn ra ổn định,
mức doanh thu trung bình cao cho thấy công ty duy trì được khả năng tạo
ra doanh thu đáng kể qua các năm, là tín hiệu tích cực về hiệu quả hoạt
động.
median(bctc$doanh_so_thuan, na.rm = TRUE)
## [1] 1.7452e+12
Giải thích: median() trả về giá trị trung vị, nghĩa là mức doanh thu
nằm giữa tập dữ liệu (50% thấp hơn và 50% cao hơn), na.rm = TRUE để bỏ
qua giá trị trống.
Nhận xét: Giá trị trung vị doanh thu thuần trong giai đoạn 2015 - 2024
đạt 1.7452 nghìn tỷ đồng lớn hơn nhẹ so với trung bình cho thấy dữ liệu
doanh thu của công ty tương đối đối xứng, không bị lệch nhiều về một
phía. Có thể kết luận rằng doanh thu thuần của DIG khá ổn định qua các
năm, không có biến động quá lớn hoặc năm ngoại lệ quá cao/thấp.
min(bctc$doanh_so_thuan, na.rm = TRUE)
## [1] 655225246754
Giải thích: min() được sử dụng để xác định giá trị nhỏ nhất (minimum)
trong biến doanh số thuần.
Nhận xét: Giá trị nhỏ nhất khoảng 655 tỷ đồng, mức doanh thu thấp nhất
mà DIG ghi nhận được trong giai đoạn phân tích. So với trung bình hơn
1.700 nghìn tỷ, mức thấp này cho thấy có những giai đoạn DIG gặp khó
khăn trong hoạt động kinh doanh hoặc chịu tác động từ thị trường bất
động sản.
max(bctc$doanh_so_thuan, na.rm = TRUE)
## [1] 2.568689e+12
Giải thích: max() được sử dụng để xác định giá trị lớn nhất (maximum)
trong biến doanh số thuần.
Nhận xét: Giá trị cao nhất 2.568 nghìn tỷ đồng , so với giá trị nhỏ nhất
thì mức chênh lệch rất lớn thể hiện biên độ biến động doanh thu cao, có
thể do DIG có năm đạt doanh thu vượt trội nhờ các dự án bất động sản
được ghi nhận doanh thu đột biến. Tuy nhiên, điều này cũng thể hiện sự
không đồng đều trong kết quả kinh doanh qua các năm.
sd(bctc$doanh_so_thuan, na.rm = TRUE)
## [1] 668073205517
Giải thích: dùng hàm tính độ lệch chuẩn (standard deviation) – chỉ
tiêu đo lường mức độ phân tán của doanh thu thuần so với giá trị trung
bình. Tham số na.rm = TRUE giúp loại bỏ giá trị NA trước khi tính
toán.
Nhận xét: Giá trị độ lệch chuẩn khoảng 6.68 nghìn tỷ đồng, giá trị độ
lệch chuẩn tương đối lớn so với trung bình (1.714 nghìn tỷ đồng), cho
thấy doanh thu thuần của công ty biến động mạnh qua các năm.
var(bctc$doanh_so_thuan, na.rm = TRUE)
## [1] 4.463218e+23
Giải thích: hàm var() được dùng để tính phương sai (variance) của
biến doanh số thuần. Đây là bình phương của độ lệch chuẩn, thể hiện mức
độ dao động của dữ liệu so với trung bình.
Nhận xét: Kết quả cho thấy giá trị phương sai của doanh thu thuần rất
lớn, phù hợp với độ lệch chuẩn cao, khẳng định doanh thu của DIG có sự
dao động đáng kể giữa các năm, phản ánh sự không ổn định trong hoạt động
kinh doanh.
if ("lai_lo_thuan_sau_thue" %in% names(bctc)) {
mean(bctc$lai_lo_thuan_sau_thue, na.rm = TRUE)
}
## [1] 310331572702
Giải thích: hàm mean() được sử dụng để tính giá trị trung bình của
biến lãi lỗ thuần sau thuế (lợi nhuận sau thuế). Tham số na.rm = TRUE
giúp bỏ qua các giá trị bị thiếu trong dữ liệu.
Nhận xét: Giá trị trung bình lợi nhuận sau thuế đạt 310.331.572.702 đồng
(xấp sỉ 310 tỷ đồng), mức lợi nhuận trung bình này thể hiện hiệu quả
kinh doanh của công ty ở mức tương đối ổn định và dương, cho thấy DIG
vẫn duy trì được khả năng sinh trong giai đoạn 2015 - 2024. So với quy
mô doanh thu trung bình hơn 1.700 nghìn tỷ, biên lợi nhuận của DIG tuy
không cao nhưng vẫn đảm bảo duy trì hoạt động kinh doanh có lãi.
range(bctc$lai_lo_thuan_sau_thue, na.rm = TRUE)
## [1] 13810019402 989941272786
Giải thích: hàm range() được sử dụng để trả về khoảng giá trị nhỏ
nhất và lớn nhất của biến lãi lỗ thuần sau thuế. Tham số na.rm = TRUE
giúp loại bỏ giá trị thiếu khi tính toán.
Nhận xét: Giá trị nhỏ nhất là 138.100.109.402 đồng, và giá trị lớn nhất
là 989.941.272.786 đồng. Khoảng chênh lệch giữa lợi nhuận thấp nhất và
cao nhất khá lớn, gần 852 tỷ đồng, phản ánh sự dao động đáng kể trong
hiệu quả hoạt động kinh doanh qua các năm. Tuy nhiên, cả hai giá trị đều
dương, cho thấy trong toàn bộ giai đoạn nghiên cứu, công ty không bị
thua lỗ mà luôn đạt lợi nhuận dương.
if ("lai_lo_thuan_sau_thue" %in% names(bctc)) {
sum(bctc$lai_lo_thuan_sau_thue < 0, na.rm = TRUE)
}
## [1] 0
Giải thích: lệnh sum(bctc$lai_lo_thuan_sau_thue < 0, na.rm = TRUE)
được dùng để đếm số lượng năm mà lợi nhuận sau thuế nhỏ hơn 0 (tức công
ty bị lỗ). Tham số na.rm = TRUE giúp loại bỏ giá trị NA khỏi quá trình
tính toán.
Nhận xét: Kết quả trả về 0, nghĩa là trong toàn bộ giai đoạn nghiên cứu
không có năm nào công ty DIG bị thua lỗ.
if ("tong_cong_nguon_von" %in% names(bctc)) {
quantile(bctc$tong_cong_nguon_von, probs = c(0.25,0.5,0.75), na.rm = TRUE)
}
## 25% 50% 75%
## 6.270449e+12 1.001170e+13 1.630765e+13
Giải thích: hàm quantile() được sử dụng để tính các phân vị
(quantiles) tại các mức 25%, 50% và 75% cho biến tổng cộng nguồn vốn.
Các phân vị này cho biết cách phân bố của dữ liệu, giúp đánh giá sự
chênh lệch giữa các giá trị thấp và cao. Tham số na.rm = TRUE được dùng
để loại bỏ các giá trị thiếu khi tính toán.
Nhận xét: Khoảng cách giữa phân vị 25% và 75% khá lớn (hơn 10 nghìn tỷ
đồng), phản ánh mức độ phân tán cao của tổng nguồn vốn giữa các năm có
thể do doanh nghiệp mở rộng quy mô đầu tư và huy động vốn mạnh mẽ trong
một số giai đoạn, làm tăng đáng kể quy mô tài sản và nguồn vốn so với
các năm trước.
if (all(c("doanh_so_thuan","lai_lo_thuan_sau_thue") %in% names(bctc))) {
cor(bctc$doanh_so_thuan, bctc$lai_lo_thuan_sau_thue, use = "pairwise.complete.obs")
}
## [1] 0.847131
Giải thích: hàm cor() được dùng để tính hệ số tương quan Pearson giữa
hai biến doanh số thuần và lãi lỗ thuần sau thuế. Tham số use =
“pairwise.complete.obs” cho phép tính toán trên các cặp dữ liệu không bị
thiếu.
Nhận xét: Hệ số tương quan giữa doanh thu thuần và lợi nhuận sau thuế là
0.847131. Một hệ số tương quan dương cao cho thấy mối quan hệ thuận
chiều mạnh giữa doanh thu và lợi nhuận sau thuế. Kết quả này thể hiện
khi doanh thu tăng thì lợi nhuận sau thuế của DIG cũng có xu hướng tăng
tương ứng, phản ánh hiệu quả hoạt động kinh doanh ổn định kiểm soát tốt
chi phí giúp lợi nhuận tăng trưởng cùng với doanh thu.
vars_corr <- intersect(c("doanh_so_thuan","lai_lo_thuan_sau_thue","ebit","ebitda","tong_cong_nguon_von","von_chu_so_huu","no_phai_tra","ty_le_no_von_chu"), names(bctc))
if (length(vars_corr) >= 2) {
round(cor(bctc %>% select(all_of(vars_corr)), use = "pairwise.complete.obs"), 2)
}
## doanh_so_thuan lai_lo_thuan_sau_thue
## doanh_so_thuan 1.00 0.85
## lai_lo_thuan_sau_thue 0.85 1.00
## ebit 0.94 0.81
## ebitda 0.93 0.82
## tong_cong_nguon_von 0.16 0.30
## von_chu_so_huu 0.13 0.23
## no_phai_tra 0.19 0.34
## ty_le_no_von_chu 0.40 0.51
## ebit ebitda tong_cong_nguon_von
## doanh_so_thuan 0.94 0.93 0.16
## lai_lo_thuan_sau_thue 0.81 0.82 0.30
## ebit 1.00 0.99 0.12
## ebitda 0.99 1.00 0.23
## tong_cong_nguon_von 0.12 0.23 1.00
## von_chu_so_huu 0.13 0.24 0.98
## no_phai_tra 0.11 0.21 0.99
## ty_le_no_von_chu 0.15 0.18 0.36
## von_chu_so_huu no_phai_tra
## doanh_so_thuan 0.13 0.19
## lai_lo_thuan_sau_thue 0.23 0.34
## ebit 0.13 0.11
## ebitda 0.24 0.21
## tong_cong_nguon_von 0.98 0.99
## von_chu_so_huu 1.00 0.94
## no_phai_tra 0.94 1.00
## ty_le_no_von_chu 0.19 0.49
## ty_le_no_von_chu
## doanh_so_thuan 0.40
## lai_lo_thuan_sau_thue 0.51
## ebit 0.15
## ebitda 0.18
## tong_cong_nguon_von 0.36
## von_chu_so_huu 0.19
## no_phai_tra 0.49
## ty_le_no_von_chu 1.00
Giải thích: hàm cor() được dùng để tạo ma trận hệ số tương quan giữa
các biến này. Tham số use = “pairwise.complete.obs” giúp tính toán tương
quan dựa trên các giá trị có sẵn (không bị thiếu). Cuối cùng, kết quả
được làm tròn đến 2 chữ số thập phân bằng hàm round().
Nhận xét:
- Ma trận tương quan cho thấy các chỉ tiêu lợi nhuận (EBIT, EBITDA, lợi
nhuận sau thuế) có mối liên hệ chặt chẽ với doanh thu thuần, phản ánh
hoạt động kinh doanh ổn định và hiệu quả.
- Trong khi đó, các biến phản ánh cơ cấu tài chính như tổng nguồn vốn,
vốn chủ sở hữu và nợ phải trả có mối tương quan cao với nhau, thể hiện
cấu trúc tài chính nhất quán và quản trị nợ hợp lý.
if ("doanh_so_thuan" %in% names(bctc)) {
nam_max <- bctc$nam[which.max(bctc$doanh_so_thuan)]
nam_min <- bctc$nam[which.min(bctc$doanh_so_thuan)]
cat("Năm có doanh số thuần cao nhất là:", nam_max, "\n")
cat("Năm có doanh số thuần thấp nhất là:", nam_min)
}
## Năm có doanh số thuần cao nhất là: 2021
## Năm có doanh số thuần thấp nhất là: 2015
Giải thích:
- Dùng hàm which.max(bctc$doanh_so_thuan) trả về vị trí có
giá trị doanh số thuần lớn nhất trong cột doanh số thuần.
- Dùng ham which.min(bctc$doanh_so_thuan) trả về vị trí có
giá trị doanh số thuần nhỏ nhất trong cột doanh số thuần.
- Dùng cat() để in ra kết quả của hai năm.
Nhận xét: Kết quả cho thấy năm 2021 là thời điểm doanh nghiệp đạt doanh
số thuần cao nhất, trong khi năm 2015 ghi nhận doanh số thấp nhất, phản
ảnh sự tăng trưởng mạnh mẽ trong hoạt động kinh doanh của công ty qua
các năm.
roe <- bctc$roe
mean(roe, na.rm = TRUE)
## [1] 0.06259356
Giải thích: mean() được sử dụng để tính giá trị trung bình của ROE
qua các năm, loại bỏ giá trị bị thiếu bằng tham số na.rm = TRUE.
Nhận xét: Tỷ suất lợi nhuận trên vốn chủ sở hữu trung bình 6,26% cho
thấy hiệu quả sử dụng vốn của DIG ở mức tương đối, nghĩa là 100 đồng vốn
chủ sở hữu tạo ra khoảng 6,26 đồng lợi nhuận sau thuế.
roa <- bctc$roa
mean(roe, na.rm = TRUE)
## [1] 0.06259356
Giải thích: mean() được sử dụng để tính giá trị trung bình của ROE
qua các năm, loại bỏ giá trị bị thiếu bằng tham số na.rm = TRUE.
Nhận xét: ROA trung bình đạt 0.0286 (tức 2,86%). Mức ROA thấp hơn ROE
cho thấy phần lớn nguồn vốn của DIG được tài trợ bằng nợ vay. Với 100
đồng tài sản, công ty chỉ tạo ra 2,86 đồng lợi nhuận sau thuế, phản ánh
hiệu quả sử dụng tài sản chưa cao.
if ("ty_le_no_von_chu" %in% names(bctc)) {
sum(bctc$ty_le_no_von_chu > 1, na.rm = TRUE)
}
## [1] 8
Giải thích: sum(btct$ty_le_no_von_chu > 1, na.rm = TRUE) đếm số
năm mà tỷ lệ này lớn hơn 1, tức là nợ phải trả vượt quá vốn chủ sở
hữu.
Nhận xét: DIG có 8 năm trong giai đoạn phân tích có tỷ lệ nợ/vốn chủ sở
hữu > 1, cho thấy DIG thường xuyên sử dụng đòn bẩy tài chính cao.
Điều này có thể giúp doanh nghiệp mở rộng đầu tư và tăng doanh thu trong
ngắn hạn, nhưng cũng làm gia tăng rủi ro thanh khoản và áp lực lãi vay
trong dài hạn.
if ("doanh_so_thuan" %in% names(bctc)) {
sd(bctc$doanh_so_thuan, na.rm = TRUE) / mean(bctc$doanh_so_thuan, na.rm = TRUE)
}
## [1] 0.3897535
Giải thích: hàm sd() tính độ lệch chuẩn, mean() tính giá trị trung
bình, và kết quả được chia để ra hệ số biến động.
Nhận xét: Hệ số biến động dưới 40% cho thấy doanh thu của DIG có mức ổn
định tương đối, không dao động quá lớn qua các năm, thể hiện sự duy trì
ổn định trong kết quả kinh doanh.
skewness(bctc$roe, na.rm = TRUE)
## [1] 0.4023822
kurtosis(bctc$roe, na.rm = TRUE)
## [1] 1.642837
Giải thích:
- Dùng skewness() để đo lường mức độ bất đối xứng của phân phối so với
phân phối chuẩn.
+ Nếu Skewness > 0: phân phối lệch phải (đuôi dài bên phải).
+ Nếu Skewness < 0: phân phối lệch trái (đuôi dài bên trái).
+ Nếu Skewness ≈ 0: phân phối xấp xỉ đối xứng.
- Dùng kurtosis (Độ nhọn) phản ánh mức độ tập trung của dữ liệu xung
quanh giá trị trung bình.
+ Nếu Kurtosis = 3: phân phối chuẩn.
+ Nếu Kurtosis > 3: phân phối nhọn (leptokurtic), dữ liệu tập trung
nhiều quanh trung bình.
+ Nếu Kurtosis < 3: phân phối bẹt (platykurtic), dữ liệu phân tán
hơn.
Nhận xét:
- Giá trị Skewness dương nhẹ (0,40): phân phối của ROE hơi lệch phải,
nghĩa là phần lớn doanh nghiệp có ROE tập trung ở mức thấp – trung bình,
trong khi một số ít doanh nghiệp có ROE rất cao kéo đuôi phân phối về
phía phải.
- Giá trị Kurtosis = 1,64 < 3: phân phối bẹt hơn phân phối chuẩn, thể
hiện mức độ phân tán lớn, ROE của các doanh nghiệp không tập trung mạnh
quanh giá trị trung bình mà trải rộng hơn trên toàn bộ tập dữ
liệu.
- Phân phối ROE của các doanh nghiệp trong mẫu không tuân theo phân phối
chuẩn, mà có xu hướng hơi lệch phải và tương đối phân tán, phản ánh sự
khác biệt đáng kể trong hiệu quả sử dụng vốn chủ sở hữu giữa các doanh
nghiệp.
bctc %>%
mutate(nhom_no = case_when(
ty_le_no_von_chu < 0.5 ~ "Thấp",
ty_le_no_von_chu < 1 ~ "Trung bình",
TRUE ~ "Cao"
)) %>%
group_by(nhom_no) %>%
summarise(tb_loi_nhuan = mean(lai_lo_thuan_sau_thue, na.rm = TRUE))
## # A tibble: 2 × 2
## nhom_no tb_loi_nhuan
## <chr> <dbl>
## 1 Cao 362267458894.
## 2 Trung bình 102588027936.
Giải thích: mutate() được sử dụng để tạo biến phân loại mới có tên là
nhom_no,giúp xác định các nhóm doanh nghiệp. Sau đó dùng hàm
group_by(nhom no) kết hợp với summarise() được dùng để tính trung bình
lợi nhuận sau thuế cho từng nhóm.Phần na.rm = TRUE giúp loại bỏ các giá
trị khuyết nhằm đảm bảo kết quả chính xác.
Nhận xét: Kết quả cho thấy nhóm có tỷ lệ nợ/vốn chủ sở hữu cao lại có
lợi nhuận trung bình sau thuế lớn hơn đáng kể so với nhóm trung bình,
thể hiện các doanh nghiệp có mức độ sử dụng đòn bẩy tài chính cao có thể
đang tận dụng nguồn vốn vay hiệu quả để tăng quy mô đầu tư và lợi
nhuận.
bctc %>%
group_by(nam) %>%
summarise(trung_vi_doanh_thu = median(doanh_so_thuan, na.rm = TRUE),
trung_vi_loi_nhuan = median(lai_lo_thuan_sau_thue, na.rm = TRUE))
## # A tibble: 10 × 3
## nam trung_vi_doanh_thu trung_vi_loi_nhuan
## <dbl> <dbl> <dbl>
## 1 2015 655225246754 13810019402
## 2 2016 1151928588324 65637174994
## 3 2017 1593710516859 202389875768
## 4 2018 2345008145519 332925078287
## 5 2019 2115744373631 371822631614
## 6 2020 2487174015553 721896130432
## 7 2021 2568688844439 989941272786
## 8 2022 1896688722277 191366036471
## 9 2023 1025746701725 111623208557
## 10 2024 1300998943328 101904298712
Giải thích: hàm summarise() để tính trung vị (median) của hai chỉ
tiêu doanh số thuần và lãi lỗ thuần sau thuế, dùng trung vị để phản ánh
xu hướng điển hình của các doanh nghiệp trong từng năm mà không bị ảnh
hưởng quá nhiều bởi các giá trị ngoại lệ.
Nhận xét: Kết quả cho thấy trung vị doanh thu và lợi nhuận của các doanh
nghiệp có xu hướng tăng dần qua các năm, đặc biệt giai đoạn
2015–2021.
- Doanh thu trung vị tăng đều từ khoảng 0.655 nghìn tỷ đồng vào năm 2015
đến 2.57 nghìn tỷ đồng vào năm 2021 phản ánh sự tăng trưởng mạnh về quy
mô hoạt động của doanh nghiệp.
- Lợi nhuận trung vị cũng tăng từ 0.0138 nghìn tỷ đồng vào năm 2015 đến
0.989 nghìn tỷ đồng vào năm 2021 phản ánh hiệu quả kinh doanh được cải
thiện rõ rệt qua thời gian.
bctc <- bctc %>%
mutate(doanh_so_thuan_ty = doanh_so_thuan / 1e9)
ggplot(bctc, aes(x = factor(nam), y = doanh_so_thuan_ty, fill = doanh_so_thuan_ty)) +
geom_col() +
geom_text(aes(label = round(doanh_so_thuan_ty, 1)), vjust = -0.3, size = 3) +
geom_hline(yintercept = mean(bctc$doanh_so_thuan_ty, na.rm = TRUE),
color = "red", linetype = "dashed") +
labs(title = "Doanh thu thuần theo năm",
x = "Năm",
y = "Doanh thu (tỷ đồng)") +
theme_minimal()
Giải thích:
- Để thể hiện xu hướng biến động của doanh thu thuần qua các năm, dữ
liệu được xử lý và chuyển đổi sang đơn vị “tỷ đồng” nhằm giúp việc quan
sát và so sánh dễ dàng, trực quan hơn.
- Dùng hàm ggplot2 để xây dựng biểu đồ cột trong đó trục hoành biểu diễn
năm, được chuyển sang dạng factor để đảm bảo mỗi năm hiển thị thành một
nhóm riêng biệt và trục tung thể hiện doanh thu thuần. Dùng tham số
fill=doanh số thuần tỷ giúp nhận diện các năm có doanh thu cao hay thấp
thông qua sắc độ màu.
- Hàm geom_col() để hiển thị các cột với chiều cao tương ứng doanh thu
từng năm. Nhằm làm rõ hơn giá trị cụ thể, geom_text() được thêm vào để
chèn nhãn hiển thị số liệu ngay phía trên đầu mỗi cột. Các giá trị được
làm tròn một chữ số thập phân bằng hàm round(),trong khi tham số vjust =
-0.3 được dùng để đẩy vị trí của nhãn lên cao hơn một chút so với đầu
cột, tránh việc chữ chèn lên phần đồ họa.
- Đường ngang màu đỏ được thêm vào bằng geom_hline() với tham số
yintercept lấy theo giá trị trung bình của doanh thu toàn giai đoạn
(mean(bctc$doanh_so_thuan_ty, na.rm = TRUE)).
- Phần tiêu đề và nhãn trục được thêm bằng labs(), trong đó trục tung
được ghi rõ “Doanh thu (tỷ đồng)” nhằm tránh nhầm lẫn đơn vị sau khi
chuyển đổi.
- Dùng theme_minimal() để biểu đồ hiển thị với giao diện tối giản giúp
làm nổi bật dữ liệu.
Nhận xét: Biểu đồ doanh thu thuần theo năm của Công ty Cổ phần Đầu tư
Phát triển Xây dựng (DIG) cho thấy xu hướng tăng trưởng khá rõ rệt trong
giai đoạn được quan sát. Trong những năm đầu, doanh thu thuần của doanh
nghiệp còn ở mức tương đối thấp, phản ánh quy mô hoạt động và hiệu quả
kinh doanh chưa thật sự nổi bật. Tuy nhiên, kể từ khoảng năm 2018 trở
đi, doanh thu của công ty bắt đầu tăng mạnh, đạt mức cao nhất vào các
năm 2020–2021 – giai đoạn thị trường bất động sản phát triển sôi động và
DIG đẩy mạnh đầu tư vào các dự án lớn. Đường trung bình màu đỏ thể hiện
mức doanh thu bình quân toàn kỳ nằm dưới các cột của những năm gần đây,
chứng tỏ hiệu quả kinh doanh đã được cải thiện đáng kể so với giai đoạn
trước. Mặc dù vậy, sau giai đoạn tăng trưởng mạnh, doanh thu có dấu hiệu
chững lại hoặc giảm nhẹ trong các năm gần nhất, cho thấy ảnh hưởng từ
biến động chung của thị trường bất động sản và các yếu tố kinh tế vĩ mô.
Nhìn tổng thể, biểu đồ phản ánh quá trình mở rộng quy mô hoạt động của
DIG qua các năm, đồng thời cho thấy khả năng duy trì doanh thu ổn định ở
mức cao so với giai đoạn đầu, dù thị trường có những giai đoạn điều
chỉnh. Đây là dấu hiệu tích cực, thể hiện năng lực tài chính và chiến
lược phát triển tương đối bền vững của doanh nghiệp trong dài hạn.
ggplot(bctc, aes(x = factor(nam), y = lai_lo_thuan_sau_thue / 1e9, fill = lai_lo_thuan_sau_thue / 1e9)) +
geom_col() +
geom_text(aes(label = round(lai_lo_thuan_sau_thue / 1e9, 1)), vjust = -0.3) +
geom_hline(yintercept = 0, color = "black") +
labs(
title = "Lợi nhuận sau thuế qua các năm",
x = "Năm",
y = "Lợi nhuận (tỷ đồng)"
) +
theme_classic()
Giải thích:
- Dùng lệnh ggplot() để trực quan hóa lợi nhuận sau thuế của DIG theo
từng năm, biến năm được biểu diễn lên trục hoành còn lợi nhuận sau thuế
được đổi từ đơn vị đồng sang tỷ đồng giúp giá trị thể hiện rõ ràng và dễ
so sánh hơn giữa các năm. Đồng thời được sử dùng trong tham số fill để
tạo hiệu ứng màu sắc,giúp phân biệt mức độ lợi nhuận của từng năm một
cách trực quan.
- Hàm geom_col() được dùng để vẽ biểu đồ cột, trong đó chiều cao của mỗi
cột biểu diễn giá trị lợi nhuận sau thuế tương ứng. Lệnh geom_text() bổ
sung các nhãn số lên đầu mỗi cột, hiển thị giá trị cụ thể của lợi nhuận
sau thuế (đơn vị tỷ đồng).
- Hàm geom_hline(yintercept = 0, color = “black”) vẽ một đường ngang màu
đen tại giá trị 0, nhằm thể hiện ranh giới giữa lợi nhuận và thua lỗ —
nếu có năm nào lợi nhuận âm thì phần cột đó sẽ hiển thị bên dưới đường
này.
- Hàm labs() được dùng để thêm tiêu đề cho biểu đồ (“Lợi nhuận sau thuế
qua các năm”) và gán nhãn cho hai trục: trục hoành thể hiện năm, còn
trục tung thể hiện lợi nhuận tính theo tỷ đồng.
- Lệnh theme_classic() được áp dụng để định dạng biểu đồ với phong cách
tối giản làm nổi bật dữ liệu chính.
Nhận xét: Biểu đồ cho thấy lợi nhuận sau thuế của DIG có sự tăng trưởng
mạnh mẽ trong giai đoạn 2016–2021, phản ánh hiệu quả hoạt động đầu tư và
kinh doanh tích cực, đặc biệt trong lĩnh vực bất động sản. Năm 2021 đạt
mức cao nhất gần 989.9 tỷ đồng, đánh dấu giai đoạn thịnh vượng nhất của
doanh nghiệp trong chu kỳ quan sát. Tuy nhiên, từ sau năm 2021, lợi
nhuận bắt đầu sụt giảm rõ rệt trong các năm 2022–2024, cho thấy sự ảnh
hưởng của biến động kinh tế vĩ mô, chi phí tài chính gia tăng và thị
trường bất động sản chững lại.
ggplot(bctc, aes(x = factor(nam), y = tong_tai_san / 1e9)) +
geom_col(fill = "skyblue") +
geom_line(aes(group = 1), color = "red", linewidth = 1) +
geom_point(color = "darkblue", size = 3) +
geom_text(aes(label = round(tong_tai_san / 1e9, 1)), vjust = -0.3) +
labs(
title = "Tổng tài sản theo năm",
x = "Năm",
y = "Tổng tài sản (tỷ đồng)"
) +
theme_bw()
Giải thích:
- Dùng lệnh ggplot() để trực quan hóa tổng tài sản của Công ty Cổ phần
Đầu tư Phát triển Xây dựng (DIG) qua các năm, với đơn vị đã được quy đổi
từ đồng sang tỷ đồng để biểu thị quy mô tài sản một cách rõ ràng và dễ
so sánh hơn, rục hoành (x) thể hiện các năm hoạt động, còn trục tung (y)
biểu diễn tổng tài sản của doanh nghiệp.
- Hàm geom_col(fill = “skyblue”) được dùng để tạo các cột màu xanh nhạt
biểu thị tổng tài sản từng năm. Mỗi cột cho biết quy mô tài sản mà DIG
đang nắm giữ tại thời điểm cuối năm, thể hiện xu hướng biến động về quy
mô đầu tư và mở rộng hoạt động.
- Hàm geom_line() thêm đường nối màu đỏ giữa các cột, giúp dễ dàng nhận
biết xu hướng tăng hoặc giảm của tài sản qua thời gian, còn geom_point()
đánh dấu từng năm bằng các điểm tròn màu xanh đậm để làm nổi bật dữ
liệu.
- Lệnh geom_text() chèn thêm nhãn số vào đầu mỗi cột, hiển thị giá trị
tổng tài sản cụ thể (đơn vị tỷ đồng). Tham số vjust = -0.3 giúp căn
chỉnh vị trí nhãn nằm ngay phía trên đầu cột.
- Hàm labs() được sử dụng để thêm tiêu đề và nhãn trục, trong đó tiêu đề
“Tổng tài sản theo năm” giúp xác định rõ nội dung biểu đồ, còn nhãn trục
y được đổi thành “Tổng tài sản (tỷ đồng)” tương ứng với đơn vị đã chuyển
đổi.
- Lệnh theme_bw() áp dụng chủ đề đen–trắng tối giản, giúp dữ liệu nổi
bật và dễ quan sát hơn.
Nhận xét:
- Biểu đồ cho thấy tổng tài sản của Công ty DIG tăng đều qua hầu hết các
năm, thể hiện xu hướng mở rộng quy mô hoạt động và đầu tư mạnh mẽ. Từ
mức khoảng 5089.3 tỷ đồng năm 2015, tổng tài sản của doanh nghiệp tăng
liên tục và đạt đỉnh vào năm 2024 với khoảng 18539.3 tỷ đồng, gấp hơn
hai lần so với giai đoạn đầu quan sát. Sự gia tăng mạnh mẽ trong các năm
2019–2021 phản ánh giai đoạn DIG đẩy mạnh triển khai các dự án bất động
sản lớn và mở rộng quỹ đất, góp phần nâng cao giá trị tổng tài sản đáng
kể.
- Mặc dù giai đoạn 2021–2022 có dấu hiệu giảm nhẹ về quy mô tài sản,
song đây chỉ là biến động tạm thời trong bối cảnh thị trường bất động
sản gặp khó khăn chung. Sau đó, tổng tài sản của doanh nghiệp nhanh
chóng phục hồi và tăng trở lại trong hai năm gần đây (2023–2024), cho
thấy DIG vẫn duy trì được tiềm lực tài chính và khả năng phát triển bền
vững trong dài hạn.
bctc_long <- bctc %>%
select(nam, doanh_so_thuan, lai_lo_thuan_sau_thue) %>%
tidyr::pivot_longer(cols = -nam, names_to = "chitieu", values_to = "giatri") %>%
mutate(giatri_ty = giatri / 1e9)
ggplot(bctc_long, aes(x = factor(nam), y = giatri_ty, fill = chitieu)) +
geom_col(position = position_dodge(width = 0.8), width = 0.7, alpha = 0.9) + # tăng độ rộng cột
geom_text(aes(label = comma(round(giatri_ty, 1))),
position = position_dodge(width = 0.8),
vjust = -0.3, size = 3.3, color = "black",
check_overlap = TRUE) + # tự động tránh chồng nhãn
scale_fill_manual(values = c("steelblue", "orange"), name = "Chỉ tiêu") +
scale_y_continuous(labels = comma) +
labs(title = "So sánh Doanh thu và Lợi nhuận theo năm",
x = "Năm", y = "Giá trị (tỷ đồng)") +
theme_minimal(base_size = 12) +
theme(
plot.title = element_text(face = "bold", size = 14, hjust = 0.5),
axis.text.x = element_text(angle = 0, vjust = 0.5),
legend.position = "top"
)
Giải thích:
- Dùng hàm mutate(across(…)) để chuyển đổi dữ liệu từ đồng sang tỷ
đồng.
- Dùng pivot_longer() giúp chuyển dữ liệu từ dạng rộng sang dạng dài để
thuận lợi cho việc vẽ nhiều biến trên cùng một trục thời gian.
- Hàm ggplot() dùng để khởi tạo biểu đồ.
- Hàm geom_col(position = position_dodge()) vẽ các cột song song cho
từng năm, giúp so sánh trực tiếp giữa doanh thu và lợi nhuận.
- Hàm geom_text() hiển thị giá trị cụ thể trên mỗi cột, đảm bảo dễ đọc
và tránh bị chồng chữ nhờ căn chỉnh hợp lý với vjust và position_dodge.
Ngoài ra, scale_fill_manual() được sử dụng để tùy chỉnh màu sắc cho từng
chỉ tiêu, giúp phân biệt rõ ràng giữa doanh thu (màu xanh dương) và lợi
nhuận (màu cam).
- Dùng scale_fill_manual(values = c(“steelblue”, “orange”), name = “Chỉ
tiêu”) để tùy chỉnh màu sắc thủ công cho từng nhóm dữ liệu trong biểu
đồ.Tham số name = “Chỉ tiêu” đặt tên cho phần chú giải (legend) là “Chỉ
tiêu”, giúp dễ dàng nhận biết ý nghĩa của từng màu.
- Dùng lệnh scale_y_continuous(labels = comma) giúp định dạng lại các
nhãn trục tung (trục Y) để hiển thị số liệu có dấu phân cách hàng nghìn
bằng dấu phẩy.
- Lệnh labs(title = “So sánh Doanh thu và Lợi nhuận theo năm”, x =
“Năm”, y = “Giá trị (tỷ đồng)”) để thiết lập tiêu đề và nhãn trục cho
biểu đồ.
- Dùng theme_minimal(base_size = 12) để áp dụng giao diện tối giản
(minimal theme), giúp biểu đồ có bố cục sạch, ít chi tiết rườm rà, đồng
thời cỡ chữ mặc định được đặt là 12 để tăng khả năng đọc.
Nhận xét: Biểu đồ thể hiện sự biến động của Doanh thu thuần và Lợi nhuận
sau thuế của doanh nghiệp DIG trong giai đoạn 2015–2024.
- Nhìn chung, doanh thu của công ty có xu hướng tăng mạnh qua các năm,
đặc biệt trong giai đoạn 2018–2021, phản ánh sự mở rộng quy mô hoạt động
và tăng trưởng của thị trường bất động sản – lĩnh vực kinh doanh chính
của DIG. Giai đoạn này, doanh thu đạt mức đỉnh vào năm 2021, cho thấy
doanh nghiệp tận dụng tốt chu kỳ tăng trưởng của ngành và gia tăng hiệu
quả khai thác dự án.
- Tuy nhiên, lợi nhuận sau thuế không tăng đồng đều so với doanh thu,
thể hiện rõ ở các năm 2020–2022, khi doanh thu vẫn duy trì mức cao nhưng
biên lợi nhuận có dấu hiệu giảm. Điều này cho thấy chi phí hoạt động và
chi phí tài chính của doanh nghiệp tăng lên đáng kể, đặc biệt trong bối
cảnh thị trường bất động sản chịu tác động của các chính sách kiểm soát
tín dụng và chi phí vốn tăng cao.
- Đến giai đoạn 2023–2024, doanh thu và lợi nhuận đều giảm nhẹ so với
giai đoạn đỉnh trước đó, phản ánh sự chững lại của thị trường bất động
sản và tình hình tài chính thận trọng hơn của DIG. Tuy vậy, việc duy trì
lợi nhuận dương cho thấy công ty vẫn đảm bảo được hiệu quả hoạt động ở
mức nhất định, dù môi trường kinh doanh có nhiều biến động.
ggplot(bctc, aes(x = factor(nam), y = roa)) +
geom_col(fill = "lightgreen") +
geom_point(aes(y = mean(roa, na.rm = TRUE)), color = "red", size = 3) +
geom_hline(yintercept = mean(bctc$roa, na.rm = TRUE), color = "red", linetype = "dashed") +
geom_text(aes(label = round(roa, 3)), vjust = -0.3) +
labs(title = "Tỷ suất sinh lợi trên tài sản (ROA)", x = "Năm", y = "ROA") +
theme_classic()
Giải thích:
- Dùng lệnh ggplot() để trực quan hóa tỷ suất sinh lời trên tài sản
(ROA) của Công ty Cổ phần Đầu tư Phát triển Xây dựng (DIG) trong giai
đoạn từ năm 2015 đến năm 2024, biến năm được ánh xạ lên trục hoành (x),
còn biến ROA được ánh xạ lên trục tung (y), biểu thị tỷ lệ sinh lời tính
trên tổng tài sản của doanh nghiệp.
- Hàm geom_col(fill = “lightgreen”) tạo biểu đồ cột màu xanh nhạt, giúp
thể hiện rõ sự thay đổi của chỉ số ROA theo từng năm.
- Hàm geom_point() được thêm vào để đánh dấu vị trí giá trị trung bình
của ROA toàn giai đoạn, với các điểm màu đỏ nhằm nhấn mạnh mức trung
bình này trên biểu đồ. Lệnh geom_hline() vẽ một đường ngang đứt nét màu
đỏ tại giá trị trung bình của ROA, đóng vai trò là mốc so sánh, giúp dễ
dàng nhận biết năm nào có hiệu suất sinh lời cao hơn hoặc thấp hơn trung
bình.
- Hàm geom_text() chèn các nhãn số thể hiện giá trị ROA cụ thể lên phía
trên mỗi cột, giúp việc đọc số liệu trở nên trực quan và thuận tiện hơn.
Tham số vjust = -0.3 được dùng để điều chỉnh vị trí hiển thị của nhãn
sao cho cân đối với chiều cao của cột.
- Hàm labs() thêm tiêu đề “Tỷ suất sinh lời trên tài sản (ROA)” cùng
nhãn trục hoành và trục tung.
- Lệnh theme_classic() được sử dụng để áp dụng phong cách hiển thị tối
giản, giúp làm nổi bật phần dữ liệu chính mà không bị chi phối bởi các
chi tiết phụ.
Nhận xét: Quan sát biểu đồ có thể thấy ROA của DIG có xu hướng tăng mạnh
trong giai đoạn 2015–2020, phản ánh hiệu quả sử dụng tài sản ngày càng
được cải thiện. Từ mức rất thấp 0,003 vào năm 2015, chỉ số ROA đã tăng
lên 0,061 vào năm 2020, đây là mức cao nhất trong toàn giai đoạn, thể
hiện giai đoạn doanh nghiệp đạt hiệu quả sinh lời tốt nhất. Giai đoạn
này trùng với thời điểm DIG đẩy mạnh đầu tư các dự án lớn và thị trường
bất động sản tăng trưởng mạnh mẽ, góp phần gia tăng lợi nhuận đáng kể so
với quy mô tài sản. Tuy nhiên, kể từ năm 2021 trở đi, chỉ số ROA của DIG
giảm nhanh và duy trì ở mức thấp, chỉ còn 0,005 vào năm 2024, thấp hơn
rất nhiều so với mức trung bình giai đoạn. Sự sụt giảm này phản ánh hiệu
quả sử dụng tài sản giảm sút đáng kể, có thể do áp lực chi phí tài
chính, lãi vay tăng, và lợi nhuận giảm mạnh trong bối cảnh thị trường
bất động sản khó khăn.
ggplot(bctc, aes(x = factor(nam), y = roe)) +
geom_col(fill = "gold") +
geom_line(aes(group = 1), color = "darkred") +
geom_point(color = "blue", size = 3) +
geom_text(aes(label = round(roe, 3)), vjust = -0.3) +
labs(title = "Tỷ suất sinh lợi trên vốn chủ (ROE)", x = "Năm", y = "ROE") +
theme_light()
Giải thích:
- Dùng lệnh ggplot() để trực quan hóa tỷ suất sinh lời trên vốn chủ sở
hữu (ROE) của Công ty Cổ phần Đầu tư Phát triển Xây dựng (DIG) trong
giai đoạn 2015–2024, biến năm được gán vào trục hoành (x), còn biến ROE
– tỷ suất lợi nhuận ròng trên vốn chủ sở hữu – được biểu diễn trên trục
tung (y).
- Hàm geom_col(fill = “gold”) được dùng để tạo biểu đồ cột màu vàng,
giúp dễ dàng so sánh mức độ sinh lời qua từng năm.
- Hàm geom_line(aes(group = 1), color = “darkred”) thêm vào đường nối
màu đỏ sẫm thể hiện xu hướng biến động của ROE giữa các năm, từ đó làm
nổi bật các giai đoạn tăng trưởng hoặc suy giảm. Hàm geom_point(color =
“blue”, size = 3) thêm các điểm màu xanh tại vị trí từng giá trị ROE,
giúp dễ xác định mốc cụ thể trên đường biểu diễn.
- Hàm geom_text() hiển thị giá trị ROE tròn đến ba chữ số thập phân ngay
phía trên mỗi cột.
- Lệnh labs() bổ sung tiêu đề “Tỷ suất sinh lời trên vốn chủ (ROE)” cùng
nhãn cho trục hoành và trục tung.
- Lệnh theme_light() áp dụng giao diện sáng, dễ nhìn.
Nhận xét:
- Biểu đồ cho thấy ROE của DIG tăng mạnh trong giai đoạn 2015–2020, thể
hiện hiệu quả sử dụng vốn chủ sở hữu được cải thiện rõ rệt. Từ mức 0,005
vào năm 2015, chỉ số ROE đã đạt đỉnh ở 0,151 vào năm 2020, giai đoạn này
đánh dấu thời kỳ DIG mở rộng hoạt động đầu tư và hưởng lợi từ sự bùng nổ
của thị trường bất động sản, giúp lợi nhuận tăng nhanh hơn tốc độ tăng
vốn chủ sở hữu .Tuy nhiên, sau năm 2020, chỉ số ROE giảm mạnh và duy trì
ở mức thấp trong các năm tiếp theo. Đến năm 2024, ROE chỉ còn 0,013,
thấp hơn đáng kể so với mức trung bình của giai đoạn trước. Sự suy giảm
này phản ánh áp lực lợi nhuận và chi phí tài chính gia tăng, trong khi
hiệu quả sử dụng vốn bị ảnh hưởng bởi tình hình thị trường bất động sản
trầm lắng và chính sách kiểm soát tín dụng.
- Nhìn chung, ROE của DIG có xu hướng biến động mạnh, với giai đoạn
2018–2020 đạt hiệu quả cao nhất, sau đó giảm dần và chững lại ở mức
thấp. Điều này cho thấy trong bối cảnh hiện nay, công ty cần cải thiện
khả năng sinh lời, tối ưu cơ cấu vốn và kiểm soát chi phí để phục hồi
mức ROE về ngưỡng an toàn và ổn định hơn trong tương lai.
ggplot(bctc, aes(x = factor(nam), y = ty_le_no_von_chu)) +
geom_col(fill = "orange") +
geom_text(aes(label = round(ty_le_no_von_chu, 2)), vjust = -0.3) +
geom_hline(yintercept = 1, color = "red", linetype = "dashed") +
geom_point(color = "blue", size = 3) +
labs(title = "Tỷ lệ nợ trên vốn chủ (D/E)", x = "Năm", y = "Tỷ lệ") +
theme_minimal()
Giải thích:
- Dùng lệnh ggplot() để trực quan hóa ỷ lệ nợ trên vốn chủ sở hữu
(Debt-to-Equity Ratio – D/E) của Công ty DIG qua các năm từ 2015 đến
2024. Biến năm được đưa vào trục hoành, còn biến tỷ lệ nợ vốn chủ thể
hiện tỷ lệ nợ phải trả so với vốn chủ sở hữu được biểu diễn trên trục
tung.
- Hàm geom_col(fill = “orange”) được sử dụng để tạo biểu đồ cột màu cam,
giúp thể hiện sự thay đổi của tỷ lệ D/E qua từng năm.
- Hàm geom_text(aes(label = round(ty_le_no_von_chu, 2)), vjust = -0.3)
hiển thị giá trị cụ thể của D/E phía trên mỗi cột, được làm tròn đến hai
chữ số thập phân.
- Hàm geom_hline(yintercept = 1, color = “red”, linetype = “dashed”)
biểu thị mốc D/E = 1 là ngưỡng quan trọng trong phân tích tài chính. Khi
tỷ lệ nợ/vốn chủ vượt quá 1, điều đó cho thấy doanh nghiệp đang tài trợ
hoạt động chủ yếu bằng nợ hơn là vốn của chủ sở hữu, đồng nghĩa với mức
độ rủi ro tài chính cao hơn.
- Hàm geom_point(color = “blue”, size = 3) thêm các điểm màu xanh lên
cột để làm nổi bật từng giá trị năm, giúp dễ nhận biết sự biến
động.
- Lệnh labs() được dùng để thêm tiêu đề “Tỷ lệ nợ trên vốn chủ (D/E)”
cùng nhãn cho trục hoành và trục tung.
- Lệnh theme_minimal() giúp biểu đồ có bố cục gọn gàng, tập trung vào dữ
liệu chính.
Nhận xét:
- Biểu đồ thể hiện tỷ lệ nợ trên vốn chủ của DIG dao động quanh mức 1,
cho thấy công ty duy trì một cơ cấu tài chính cân bằng giữa vốn vay và
vốn chủ sở hữu trong hầu hết giai đoạn 2015–2024. Cụ thể, từ năm 2015
đến 2018, chỉ số D/E tăng dần từ 0,92 lên 1,12, thể hiện việc DIG gia
tăng sử dụng nợ vay để tài trợ cho hoạt động mở rộng đầu tư điều thường
thấy trong các doanh nghiệp bất động sản khi cần vốn lớn cho các dự án
dài hạn.
- Năm 2020 mức D/E cao nhất là 1.47 , cho thấy mức độ phụ thuộc vào nợ
vay đạt đỉnh, có thể do DIG đẩy mạnh đầu tư dự án trong giai đoạn thị
trường tăng trưởng. Tuy nhiên, sau đó, chỉ số này có xu hướng giảm về
0,89 vào năm 2022, phản ánh doanh nghiệp giảm sử dụng đòn bẩy tài chính,
có thể do áp lực lãi vay tăng và các chính sách siết tín dụng bất động
sản. Đến năm 2024, D/E tăng nhẹ trở lại mức 1,31, cho thấy DIG bắt đầu
tái mở rộng hoạt động nhưng vẫn trong giới hạn an toàn tài chính.
ggplot(bctc, aes(x = ty_le_no_von_chu, y = roe)) +
geom_point(color = "darkblue", size = 3) +
geom_smooth(method = "lm", color = "red", se = FALSE) +
geom_hline(yintercept = mean(bctc$roe, na.rm = TRUE), linetype = "dashed") +
geom_vline(xintercept = mean(bctc$ty_le_no_von_chu, na.rm = TRUE), linetype = "dotted") +
labs(title = "Mối quan hệ giữa Tỷ lệ nợ và ROE", x = "Tỷ lệ nợ/vốn", y = "ROE") +
theme_light()
## `geom_smooth()` using formula = 'y ~ x'
Giải thích:
- Dùng lệnh ggplot() để phân tích mối quan hệ giữa mức độ đòn bẩy tài
chính ( tỷ lệ nợ trên vốn chủ sở hữu) và khả năng sinh lời trên vốn chủ
sở hữu (ROE) của Công ty DIG. Biến tỷ lệ nợ vốn chủ được biểu diễn trên
trục hoành, thể hiện tỷ lệ nợ trên vốn chủ còn biến ROE được đặt trên
trục tung biểu diễn mức sinh lời từ vốn chủ sở hữu.
- Hàm geom_point(color = “darkblue”, size = 3) tạo ra các điểm màu xanh
đậm, mỗi điểm tương ứng với một năm trong giai đoạn 2015–2024. Các điểm
này thể hiện cặp giá trị D/E và ROE tương ứng từng năm, giúp dễ nhận
biết sự phân bố dữ liệu.
- Hàm geom_smooth(method = “lm”, color = “red”, se = FALSE) thêm đường
hồi quy tuyến tính màu đỏ, mô tả xu hướng tuyến tính giữa hai
biến.
- Hàm geom_hline(yintercept = mean(bctc$roe, na.rm = TRUE), color =
“red”, linetype = “dashed”) vẽ đường ngang đỏ đứt đoạn thể hiện giá trị
trung bình của ROE trong giai đoạn nghiên cứu, giúp xác định các năm có
hiệu quả sinh lời cao hơn hoặc thấp hơn mức trung bình.
- Hàm geom_vline(xintercept = mean(bctc$ty_le_no_von_chu, na.rm = TRUE),
color = “black”, linetype = “dotted”)` thêm đường dọc đen chấm bi thể
hiện giá trị trung bình của tỷ lệ nợ/vốn chủ, chia biểu đồ thành bốn
vùng để quan sát mối tương quan rõ hơn.
- Lệnh labs() thêm tiêu đề và nhãn trục và theme_light() giúp biểu đồ
sáng rõ, dễ đọc.
Nhận xét:
- Biểu đồ thể hiện đường hồi quy tuyến tính màu đỏ có xu hướng dốc lên,
cho thấy mối tương quan dương giữa tỷ lệ nợ trên vốn chủ (D/E) và tỷ
suất sinh lời trên vốn chủ (ROE). Trong giai đọan năm 2015 - 2024 khi
DIG gia tăng tỷ lệ nợ vay, ROE của công ty cũng có xu hướng tăng theo.
Đây là dấu hiệu cho thấy việc sử dụng đòn bẩy tài chính giúp DIG khuếch
đại lợi nhuận trên vốn chủ, đặc biệt trong những năm thị trường bất động
sản tăng trưởng mạnh (2020–2021).
- Tuy nhiên, mối quan hệ này không hoàn toàn tuyến tính và ổn định tuyệt
đối. Một số điểm dữ liệu nằm lệch khỏi đường hồi quy đặc biệt trong giai
đoạn 2022–2024, khi tỷ lệ D/E vẫn cao nhưng ROE sụt giảm mạnh cho thấy
rằng đòn bẩy tài chính chỉ phát huy hiệu quả khi lợi nhuận trước lãi vay
duy trì tích cực. Khi chi phí lãi vay tăng hoặc lợi nhuận giảm, việc sử
dụng nợ cao có thể làm giảm hiệu quả sinh lời trên vốn chủ, đồng thời
tăng rủi ro tài chính cho doanh nghiệp.
- Nhìn chung, biểu đồ cho thấy DIG có xu hướng sử dụng nợ để gia tăng
khả năng sinh lời, nhưng mức độ hiệu quả phụ thuộc vào điều kiện thị
trường và khả năng quản lý chi phí vốn vay. Mối quan hệ dương giữa D/E
và ROE phản ánh chiến lược tận dụng đòn bẩy tài chính hợp lý trong giai
đoạn thuận lợi, song cũng là lời nhắc rằng doanh nghiệp cần kiểm soát tỷ
lệ nợ ở mức vừa phải để tránh rủi ro tài chính trong giai đoạn suy
giảm.
ggplot(bctc, aes(x = factor(nam), y = tang_truong_loi_nhuan)) +
geom_col(fill = "purple") +
geom_hline(yintercept = 0, color = "black") +
geom_text(aes(label = round(tang_truong_loi_nhuan, 2)), vjust = -0.3) +
geom_line(aes(group = 1), color = "orange") +
labs(title = "Tăng trưởng lợi nhuận qua các năm", x = "Năm", y = "Tăng trưởng (%)") +
theme_bw()
## Warning: Removed 1 row containing missing values or values outside
## the scale range (`geom_col()`).
## Warning: Removed 1 row containing missing values or values outside
## the scale range (`geom_text()`).
## Warning: Removed 1 row containing missing values or values outside
## the scale range (`geom_line()`).
Giải thích:
- Dùng lệnh ggplot() để trực quan hóa tốc độ tăng trưởng lợi nhuận của
công ty DIG theo từng năm trong giai đoạn 2015–2024. Biến năm được biểu
diễn trên trục hoành và tăng trưởng lợi nhuận được thể hiện qua trục
tung.
- Hàm geom_col(fill = “purple”) được sử dụng để tạo các cột dọc có màu
sắc biểu thị mức tăng trưởng lợi nhuận của từng năm.
- Hàm geom_hline(yintercept = 0, color = “black”) tạo thêm đường kẻ
ngang tại mức 0%, giúp dễ nhận biết các năm có tăng trưởng dương (lợi
nhuận tăng) và âm (lợi nhuận giảm).
- Hàm geom_text(aes(label = round(tang_truong_loi_nhuan, 2)), vjust =
-0.3) hiển thị giá trị phần trăm cụ thể trên đầu mỗi cột, làm rõ mức
biến động của lợi nhuận qua từng năm.
- Hàm geom_line(aes(group = 1), color = “orange”) nối các điểm giá trị
bằng đường màu cam để thể hiện xu hướng biến động lợi nhuận theo thời
gian, giúp quan sát dễ hơn các giai đoạn tăng giảm liên tiếp.
- Lệnh labs() và theme_bw() giúp cho việc đặt tiêu đề, nhãn trục và chọn
giao diện nền sáng, giúp biểu đồ rõ ràng, dễ đọc hơn.
Nhận xét: Biểu đồ cho thấy tăng trưởng lợi nhuận của DIG giai đoạn
2015–2024 có sự biến động mạnh, không duy trì ổn định.
- Giai đoạn 2015–2017, tốc độ tăng trưởng lợi nhuận duy trì ở mức cao,
đặc biệt năm 2016 đạt đỉnh 3,75%, phản ánh giai đoạn thị trường bất động
sản sôi động và DIG mở rộng hoạt động đầu tư hiệu quả.
- Từ năm 2018 đến 2020, mức tăng trưởng bắt đầu giảm dần, chỉ còn quanh
0,12–0,94%, cho thấy doanh nghiệp bước vào giai đoạn chững lại sau thời
kỳ tăng trưởng nóng.
- Năm 2021, DIG vẫn ghi nhận tăng trưởng dương (0,37%), tuy nhiên đến
năm 2022, lợi nhuận giảm mạnh xuống -0,81%, thể hiện sự ảnh hưởng tiêu
cực từ biến động thị trường bất động sản và chính sách kiểm soát tín
dụng.
- Hai năm 2023–2024, mức tăng trưởng vẫn ở mức thấp và dao động quanh
ngưỡng âm (-0.42% đến -0.09%), phản ánh áp lực tài chính, chi phí lãi
vay tăng cao và thanh khoản thị trường bất động sản suy giảm.
ggplot(bctc, aes(x = lai_lo_thuan_sau_thue / 1e9)) +
geom_density(fill = "skyblue", alpha = 0.5, color = "blue") +
geom_vline(aes(xintercept = mean(lai_lo_thuan_sau_thue / 1e9, na.rm = TRUE)),
color = "red", linetype = "dashed") +
labs(
title = "Phân phối mật độ lợi nhuận sau thuế (tỷ đồng)",
x = "Lợi nhuận (tỷ đồng)",
y = "Mật độ"
) +
theme_minimal()
Giải thích:
- Dùng lệnh ggplot() để trực quan hóa phân phối của biến lợi nhuận sau
thuế trong bộ dữ liệu báo cáo tài chính của công ty DIG. Biến lợi nhuân
được đổi từ đơn vị đồng sang đơn vị tỷ đồng để việc hiển thị được rõ
ràng và dễ so sánh hơn.
- Hàm geom_density() được sử dụng để vẽ đường mật độ xác suất, thể hiện
mức độ tập trung của các giá trị lợi nhuận. Vùng màu xanh nhạt (skyblue)
biểu thị diện tích dưới đường cong mật độ, với độ trong suốt alpha = 0.5
để tạo hiệu ứng mềm mại. Đường viền màu xanh đậm (blue) giúp dễ nhận
diện đường phân phối.
- Lệnh geom_vline() được thêm vào để vẽ đường thẳng đứng màu đỏ dạng
gạch đứt (linetype = “dashed”), biểu diễn giá trị trung bình của lợi
nhuận sau thuế. Tham số na.rm = TRUE được dùng để loại bỏ các giá trị
khuyết (NA) nhằm tránh sai số khi tính toán trung bình.
- Lệnh labs() đặt tiêu đề và nhãn trục, còn theme_minimal() giúp biểu đồ
hiển thị với phong cách tối giản, dễ đọc và tập trung vào dữ liệu.
Nhận xét:
- Biểu đồ thể hiện đường cong không đối xứng mà có dạng lệch phải
(right-skewed) cho thấy phần lớn các giá trị lợi nhuận tập trung ở mức
thấp đến mức trung bình, trong khi vẫn tồn tại một số năm có lợi nhuận
cao vượt trội so với trung bình.Giá trị trung bình (đường đỏ đứt đoạn)
nằm lệch về bên phải của vùng tập trung chính, chứng tỏ lợi nhuận của
DIG có sự dao động lớn giữa các năm. Một vài năm đạt lợi nhuận cao bất
thường đã kéo trung bình lên cao hơn so với phần lớn dữ liệu.
- Kết quả này phản ánh tính biến động trong hoạt động kinh doanh của DIG
công ty có thể có những giai đoạn tăng trưởng mạnh nhưng không ổn định,
dẫn đến phân phối lợi nhuận không cân xứng qua các kỳ báo cáo.
bctc_long2 <- bctc %>%
select(nam, tong_tai_san, tong_cong_nguon_von) %>%
tidyr::pivot_longer(cols = -nam, names_to = "chitieu", values_to = "giatri")
ggplot(bctc_long2, aes(x = factor(nam), y = giatri, fill = chitieu)) +
geom_col(position = position_dodge(width = 0.9), width = 0.8) +
geom_text(aes(label = round(giatri / 1e12, 1)),
position = position_dodge(width = 0.9),
vjust = -0.3,
angle = 0,
size = 3.5,
fontface = "bold") +
geom_hline(yintercept = mean(bctc$tong_tai_san, na.rm = TRUE),
color = "red", linetype = "dashed") +
labs(title = "So sánh Tổng tài sản và Tổng nguồn vốn",
x = "Năm",
y = "Giá trị (tỷ đồng)") +
theme_minimal(base_size = 13) +
theme(
plot.title = element_text(hjust = 0.5, face = "bold"),
legend.position = "top"
)
Giải thích:
- Sử dụng hàm select() để trích xuất ba biến cần thiết gồm năm (nam),
tổng tài sản và tổng nguồn vốn từ bộ dữ liệu gốc.
- Hàm pivot_longer() được áp dụng để chuyển dữ liệu từ dạng rộng sang
dạng dài, giúp mỗi dòng thể hiện giá trị của một chỉ tiêu trong từng
năm.
- Hàm ggplot() được sử dụng để khởi tạo biểu đồ với biến năm được biểu
diễn trên trục hoành và giá trị chỉ tiêu (tài sản hoặc nguồn vốn) trên
trục tung.Trong đó tham số fill = chitieu giúp phân biệt màu sắc giữa
hai chỉ tiêu, hỗ trợ việc so sánh trực quan.
- Hàm geom_col() với tùy chọn position = position_dodge(width = 0.9) và
width = 0.8 nhằm tăng khoảng cách giữa các nhóm cột và mở rộng bề ngang
cột, giúp các giá trị không bị chồng lấn và dễ quan sát hơn.
- Dùng geom_text() với nhãn được làm tròn và hiển thị theo đơn vị nghìn
tỷ đồng, các nhãn được căn chỉnh vị trí bằng tham số vjust = -0.3 để
tránh chồng lên đỉnh cột, đồng thời được giữ nằm ngang (angle = 0) nhằm
đảm bảo tính dễ đọc. Nhằm thể hiện mức trung bình của tổng tài sản qua
toàn bộ giai đoạn nên bổ sung thêm đường tham chiếu ngang bằng lệnh
geom_hline(), có màu đỏ và nét gạch đứt để dễ nhận thấy các năm có giá
trị cao hơn hoặc thấp hơn mức trung bình chung.
- Tiêu đề và nhãn trục được đặt bằng hàm labs(), đồng thời tinh chỉnh
giao diện biểu đồ bằng theme_minimal() để biểu đồ có bố cục gọn gàng, dễ
quan sát. Phần chú thích (legend) được đặt phía trên biểu đồ giúp tiết
kiệm không gian và đảm bảo bố cục cân đối.
Nhận xét: Biểu đồ “So sánh Tổng tài sản và Tổng nguồn vốn” cho thấy hai
chỉ tiêu này biến động song hành và có giá trị gần như tương đương nhau
qua các năm, phản ánh nguyên tắc cân đối tài chính trong bảng cân đối kế
toán của doanh nghiệp, theo đó tổng tài sản luôn bằng tổng nguồn vốn. Từ
năm 2015 đến năm 2024, cả hai chỉ tiêu đều có xu hướng tăng trưởng ổn
định và liên tục, thể hiện quy mô hoạt động của doanh nghiệp ngày càng
được mở rộng. Đặc biệt, giai đoạn 2020–2024 chứng kiến mức tăng mạnh mẽ,
khi tổng tài sản và tổng nguồn vốn đều vượt ngưỡng 10.000 tỷ đồng, cho
thấy sự gia tăng đáng kể về quy mô và năng lực tài chính. Đường tham
chiếu màu đỏ thể hiện mức giá trị trung bình của hai chỉ tiêu trong giai
đoạn nghiên cứu, cho thấy từ năm 2020 trở đi, cả tổng tài sản và tổng
nguồn vốn đều cao hơn mức trung bình chung, phản ánh xu hướng phát triển
tích cực và bền vững trong hoạt động của doanh nghiệp.
bctc_long12 <- bctc %>%
select(nam, tien_va_tuong_duong_tien, hang_ton_kho, tai_san_co_dinh) %>%
mutate(
tong_tai_san = tien_va_tuong_duong_tien + hang_ton_kho + tai_san_co_dinh,
tien_va_tuong_duong_tien = tien_va_tuong_duong_tien / tong_tai_san,
hang_ton_kho = hang_ton_kho / tong_tai_san,
tai_san_co_dinh = tai_san_co_dinh / tong_tai_san
) %>%
pivot_longer(cols = c(tien_va_tuong_duong_tien, hang_ton_kho, tai_san_co_dinh),
names_to = "loai_ts", values_to = "ty_trong")
ggplot(bctc_long12, aes(x = factor(nam), y = ty_trong, fill = loai_ts)) +
geom_col(position = "stack") +
scale_y_continuous(labels = scales::percent) +
geom_text(aes(label = scales::percent(ty_trong, accuracy = 0.1)),
position = position_stack(vjust = 0.5),
size = 3, color = "black") +
labs(
title = "Cơ cấu tài sản theo năm",
x = "Năm",
y = "Tỷ trọng (%)",
fill = "Loại tài sản"
) +
theme_light(base_size = 12) +
theme(
plot.title = element_text(face = "bold", size = 14, hjust = 0.5),
axis.text.x = element_text(angle = 45, vjust = 0.8),
legend.position = "top"
)
Giải thích:
- Hàm mutate() tạo biến tổng tài sản và chuẩn hóa các biến thành tỷ
trọng (dưới dạng thập phân).
- Hàm pivot_longer() chuyển dữ liệu từ dạng rộng sang dạng dài để biểu
diễn nhiều loại tài sản trong cùng một biểu đồ.
- Hàm geom_col(position = “stack”) vẽ biểu đồ cột chồng, thể hiện cơ cấu
các thành phần tài sản trong từng năm.
- Dùng scale_y_continuous(labels = scales::percent) chuyển đổi trục tung
sang định dạng phần trăm giúp dễ đọc.
- Hàm geom_text() hiển thị nhãn giá trị tỷ trọng ở giữa mỗi phần của
cột, giúp nhận biết tỷ lệ của từng loại tài sản mà không gây chồng
chéo.
- Hàm labs() gán tiêu đề, nhãn trục và chú giải; theme_light() cùng
theme() được dùng để tối ưu hóa giao diện, căn chỉnh trục, phông chữ và
chú thích.
Nhận xét: Biểu đồ “Cơ cấu tài sản theo năm” cho thấy sự thay đổi đáng kể
trong tỷ trọng các loại tài sản của DIG qua giai đoạn 2015–2024.
- Hàng tồn kho chiếm tỷ trọng lớn nhất trong tổng tài sản và có xu hướng
tăng mạnh qua các năm, đặc biệt giai đoạn sau 2020. Điều này phản ánh
đặc thù ngành bất động sản của DIG, khi phần lớn tài sản tập trung ở các
dự án dở dang, chi phí xây dựng và quỹ đất đang phát triển.
- Tài sản cố định chiếm tỷ trọng ổn định hơn, nhưng có xu hướng giảm nhẹ
trong các năm gần đây. Điều này cho thấy công ty không mở rộng mạnh mẽ
cơ sở vật chất mà tập trung vào khai thác và phát triển dự án hiện
có.
- Tiền và tương đương tiền chiếm tỷ trọng rất nhỏ và có xu hướng giảm
dần, phản ánh tình trạng thanh khoản hạn chế. Việc giảm lượng tiền mặt
cho thấy DIG đang đầu tư mạnh vào hàng tồn kho và tài sản dài hạn, có
thể làm tăng rủi ro về dòng tiền ngắn hạn.
- Tổng thể, cơ cấu tài sản của DIG nghiêng mạnh về tài sản ngắn hạn (đặc
biệt là hàng tồn kho), trong khi tài sản dài hạn chiếm tỷ lệ nhỏ. Cơ cấu
này cho thấy doanh nghiệp đang trong giai đoạn đầu tư, mở rộng và phát
triển dự án, tuy nhiên cần kiểm soát tốt khả năng thanh khoản để tránh
áp lực tài chính trong tương lai.
bctc_long13 <- bctc %>%
select(nam, lai_gop, chi_phi_tai_chinh) %>%
pivot_longer(cols = -nam, names_to = "chitieu", values_to = "giatri") %>%
mutate(
giatri_ty = giatri / 1e9,
label = round(giatri_ty, 1),
vjust = ifelse(giatri_ty >= 0, -0.35, 1.25)
)
ggplot(bctc_long13, aes(x = factor(nam), y = giatri_ty, fill = chitieu)) +
geom_col(position = position_dodge(width = 0.9), width = 0.7, alpha = 0.95) +
geom_text(aes(label = label, vjust = vjust),
position = position_dodge(width = 0.9),
size = 3.5, color = "black", show.legend = FALSE) +
scale_fill_manual(values = c("chi_phi_tai_chinh" = "darkgreen", "lai_gop" = "orange"),
labels = c("Chi phí tài chính", "Lợi nhuận gộp"),
name = "Chỉ tiêu") +
scale_y_continuous(labels = scales::comma) +
labs(title = "So sánh Lợi nhuận gộp và Chi phí tài chính",
x = "Năm", y = "Giá trị (tỷ đồng)") +
theme_classic(base_size = 12) +
theme(
plot.title = element_text(face = "bold", size = 14, hjust = 0.5),
legend.position = "top"
)
Giải thích:
- Sử dụng hàm select() để trích xuất các biến cần thiết.
- Hàm pivot_longer() giúp chuyển dữ liệu từ dạng rộng sang dạng dài ,
sau đó các chỉ tiêu được quy đổi về đơn vị tỷ đồng nhằm đảm bảo tính
trực quan và dễ so sánh .
- Hàm geom_col() được sử dụng để vẽ biểu đồ cột thể hiện giá trị của
từng chỉ tiêu theo từng năm, đồng thời geom_text() được thêm vào để hiển
thị giá trị cụ thể trên mỗi cột. Việc sử dụng position_dodge() giúp các
cột không bị chồng lấn, trong khi vjust được điều chỉnh để nhãn giá trị
nằm trên hoặc dưới cột tùy thuộc vào dấu của giá trị.
- Hàm scale_fill_manual() được sử dụng để tùy chỉnh màu sắc trong đó màu
cam biểu diễn Lợi nhuận gộp và màu xanh đậm biểu diễn Chi phí tài
chính.
- Hàm labs() và theme_classic() gán tiêu đề, nhãn trục và chú giải giúp
hiển thị với phong cách tối giản, dễ đọc và tập trung vào dữ liệu.
Nhận xét: - Biểu đồ cho thấy trong giai đoạn 2015–2018, Lợi nhuận gộp
của DIG còn ở mức thấp, trong khi Chi phí tài chính lại khá cao, phản
ánh áp lực chi phí lãi vay và đầu tư tài chính trong giai đoạn
đầu.
- Bước sang giai đoạn 2019–2022, Lợi nhuận gộp tăng trưởng mạnh mẽ, đạt
mức cao nhất vào năm 2021, cho thấy hiệu quả hoạt động kinh doanh cải
thiện đáng kể khi thị trường bất động sản phục hồi. Tuy nhiên, Chi phí
tài chính vẫn duy trì xu hướng tăng, phần nào ảnh hưởng đến lợi nhuận
sau cùng của doanh nghiệp.
- Từ năm 2023 trở đi, Lợi nhuận gộp có dấu hiệu giảm nhẹ, trong khi Chi
phí tài chính vẫn ở mức cao, cho thấy DIG đang chịu ảnh hưởng từ biến
động lãi suất và chi phí vốn trong bối cảnh kinh tế khó khăn.
- Nhìn chung, biểu đồ phản ánh xu hướng tích cực trong giai đoạn giữa kỳ
nhưng cũng cảnh báo rằng áp lực tài chính vẫn là yếu tố rủi ro đáng chú
ý đối với hoạt động kinh doanh của doanh nghiệp.
bctc_long15 <- bctc %>%
select(nam, lai_lo_thuan_sau_thue, ebit) %>%
tidyr::pivot_longer(cols = -nam, names_to = "chitieu", values_to = "giatri")
ggplot(bctc_long15, aes(x = factor(nam), y = giatri, fill = chitieu)) +
geom_col(position = position_dodge(0.9), width = 0.8) +
geom_text(aes(label = scales::comma(round(giatri, 0))),
position = position_dodge(0.9),
vjust = -0.6,
angle = 0,
size = 3.2,
check_overlap = TRUE) +
scale_fill_manual(values = c("steelblue", "gold")) +
labs(title = "So sánh EBIT và LNST",
x = "Năm",
y = "Tỷ đồng") +
theme_light() +
theme(
plot.title = element_text(hjust = 0.5, face = "bold"),
legend.title = element_blank()
)
Giải thích:
- Sử dụng hàm select() để trích xuất các biến cần thiết.
- Hàm pivot_longer() giúp chuyển dữ liệu từ dạng rộng (wide) sang dạng
dài (long), gom hai chỉ tiêu EBIT và LNST vào cùng một cột giatri, giúp
dễ dàng so sánh hai đại lượng trên cùng một biểu đồ.
- Hàm ggplot() giúp tạo biểu đồ cột với trục hoành biểu thị các năm
(factor(nam)) và trục tung biểu thị giá trị tài chính (giatri).
- Dùng geom_col(position = position_dodge(0.9)) để Tạo hai cột cạnh nhau
cho từng năm, giúp dễ dàng đối chiếu giữa EBIT và LNST.
- Dùng geom_text() hiển thị nhãn giá trị trên mỗi cột. Tham số
check_overlap = TRUE giúp tự động tránh hiện tượng chồng chéo chữ, trong
khi vjust = -0.6 điều chỉnh vị trí nhãn nằm cao hơn đầu cột.
- Hàm scale_fill_manual(values = c(“steelblue”, “gold”)) được dùng để
tùy chỉnh màu sắc cho từng chỉ tiêu: màu xanh (steelblue) đại diện cho
EBIT, và màu vàng (gold) đại diện cho LNST.
- Hàm theme_light(): Tạo nền sáng giúp biểu đồ rõ ràng, dễ đọc.
- Phần labs(): Thiết lập tiêu đề, nhãn trục hoành và trục tung cho biểu
đồ.
Nhận xét: Biểu đồ so sánh lợi nhuận thuần sau thuế và EBIT của DIG trong
giai đoạn từ 2015-2024.
- Giai đoạn 2015–2017, cả EBIT và LNST của DIG đều ở mức thấp, phản ánh
giai đoạn công ty vẫn trong quá trình tái cấu trúc và đầu tư mạnh vào
các dự án bất động sản mới, chưa ghi nhận doanh thu cao.
- Từ năm 2018 đến 2021, đặc biệt là năm 2021, EBIT và LNST tăng đột
biến, trong đó EBIT đạt mức cao nhất, cho thấy hiệu quả kinh doanh được
cải thiện mạnh mẽ.
- Tuy nhiên, sau năm 2021, lợi nhuận của DIG giảm đáng kể, cả EBIT và
LNST đều sụt mạnh vào giai đoạn 2022–2024.
- Chênh lệch giữa EBIT (lợi nhuận trước lãi vay và thuế) và LNST (lợi
nhuận sau thuế) trong các năm phản ánh mức chi phí tài chính và thuế mà
doanh nghiệp phải gánh chịu. Giai đoạn 2021–2024 cho thấy khoảng cách
giữa hai chỉ tiêu này nới rộng, chứng tỏ chi phí tài chính ngày càng
lớn, ảnh hưởng tiêu cực đến lợi nhuận ròng của công ty.
ggplot(bctc, aes(x = doanh_so_thuan, y = ebit)) +
geom_point(color = "darkblue", size = 3) +
geom_smooth(method = "lm", color = "red", se = FALSE) +
geom_text(aes(label = nam), vjust = -0.5) +
geom_hline(yintercept = mean(bctc$ebit, na.rm = TRUE), linetype = "dotted") +
labs(title = "Quan hệ giữa Doanh thu và EBIT", x = "Doanh thu", y = "EBIT") +
theme_minimal()
## `geom_smooth()` using formula = 'y ~ x'
Giải thích:
- ggplot(bctc, aes(x = doanh_so_thuan, y = ebit)): Khởi tạo biểu đồ sử
dụng bộ dữ liệu bctc, trong đó doanh số thuần là trục hoành (X) và EBIT
là trục tung (Y). Cấu trúc này giúp thể hiện mối quan hệ giữa hai biến
tài chính cốt lõi.
- geom_point(color = “darkblue”, size = 3): Vẽ các điểm dữ liệu màu xanh
đậm, mỗi điểm tương ứng với một năm trong báo cáo tài chính. Điều này
cho phép quan sát sự phân bố và mức độ thay đổi của EBIT theo doanh
thu.
- geom_smooth(method = “lm”, color = “red”, se = FALSE): Thêm đường hồi
quy tuyến tính (linear regression line) màu đỏ để biểu diễn xu hướng
quan hệ giữa hai biến. Tùy chọn se = FALSE được dùng để loại bỏ vùng sai
số (confidence interval), giúp biểu đồ rõ ràng hơn.
- geom_text(aes(label = nam), vjust = -0.5): Gắn nhãn năm lên mỗi điểm
dữ liệu giúp dễ dàng xác định giá trị EBIT và doanh thu tương ứng theo
từng giai đoạn.
- geom_hline(yintercept = mean(bctc$ebit, na.rm = TRUE), linetype =
“dotted”): Thêm đường ngang tại mức EBIT trung bình, đường nét chấm giúp
dễ nhận diện doanh nghiệp đang có EBIT cao hơn hay thấp hơn trung bình
toàn giai đoạn.
- labs(title = “Quan hệ giữa Doanh thu và EBIT”, x = “Doanh thu”, y =
“EBIT”) và theme_minimal(): Gán tiêu đề, nhãn trục X, trục Y và chọn
phong cách hiển thị tối giản.
Nhận xét: Biểu đồ thể hiện rõ mối tương quan dương giữa doanh thu thuần
và EBIT của DIG trong giai đoạn nghiên cứu. Các điểm dữ liệu cho thấy
rằng khi doanh thu tăng, EBIT cũng có xu hướng tăng tương ứng, thể hiện
hiệu quả sinh lợi được cải thiện cùng với quy mô hoạt động. Đường hồi
quy tuyến tính màu đỏ thể hiện xu hướng tăng tương đối mạnh, cho thấy
mối quan hệ tuyến tính chặt chẽ giữa hai biến. Tuy nhiên, một số năm như
2023 và 2024 nằm dưới đường xu hướng, phản ánh giai đoạn doanh nghiệp
đạt doanh thu cao nhưng hiệu quả sinh lợi (EBIT) suy giảm, có thể do chi
phí tài chính hoặc chi phí hoạt động tăng.
if (all(c("luu_chuyen_tien_thuan_tu_cac_hoat_dong_san_xuat_kinh_doanh",
"lai_lo_thuan_sau_thue") %in% names(bctc))) {
bctc$cash_ratio <- bctc$luu_chuyen_tien_thuan_tu_cac_hoat_dong_san_xuat_kinh_doanh /
bctc$lai_lo_thuan_sau_thue
}
ggplot(bctc, aes(x = factor(nam), y = cash_ratio)) +
geom_col(fill = "darkcyan") +
geom_text(aes(label = round(cash_ratio, 2)), vjust = -0.3) +
geom_hline(yintercept = 0, color = "red", linetype = "dashed") +
geom_point(color = "orange", size = 3) +
labs(title = "Hệ số lưu chuyển tiền mặt", x = "Năm", y = "Tỷ lệ") +
theme_minimal()
Giải thích:
- Tạo cột biến mới tên cash_ratio.
- Dùng hàm ggplot để trực quan hóa dữ liệu với biến năm được biểu diễn
trên trục hoành và biến hệ số lưu chuyển tiền mặt được thể hiện trên
trục tung.
- Dùng hàm ggplot() được sử dụng để trực quan hóa kết quả dưới dạng biểu
đồ cột.
- Lệnh geom_col() giúp vẽ các cột đại diện cho hệ số từng năm, đồng thời
lệnh geom_text() được dùng để hiển thị giá trị cụ thể trên đầu mỗi cột,
giúp dễ nhận biết mức độ biến động của chỉ tiêu.
- Lệnh geom_hline(yintercept = 1)) tạo một đường gạch ngang màu đỏ được
thêm vào tại mức 1 , nếu hệ số lớn hơn 1cho thấy dòng tiền thực tế từ
hoạt động kinh doanh của doanh nghiệp tốt hơn lợi nhuận ghi nhận trên sổ
sách, phản ánh chất lượng lợi nhuận cao. Ngược lại, khi hệ số nhỏ hơn 1,
doanh nghiệp có thể đang ghi nhận lợi nhuận kế toán cao nhưng dòng tiền
thực tế lại thấp, cho thấy khả năng thu hồi tiền mặt yếu hoặc chu kỳ
chuyển hóa tiền dài.
- Lệnh theme_minimal() giúp biểu đồ hiển thị theo phong cách tối giản,
rõ ràng, dễ theo dõi.
Nhận xét: Biểu đồ hệ số lưu chuyển iền mặt của công ty cổ phần Đầu tư
Phát triển Xây dựng (DIG) cho thấy hệ số này có sự biến động đáng kể qua
các năm.
- Năm 2015 ghi nhận hệ số âm sâu nhất, khoảng -26,8 lần, cho thấy dòng
tiền từ hoạt động kinh doanh bị thâm hụt nghiêm trọng so với lợi nhuận
kế toán. Điều này có thể xuất phát từ việc doanh nghiệp đầu tư lớn cho
các dự án bất động sản trong giai đoạn mở rộng hoạt động.
- Giai đoạn 2016–2021, hệ số dao động quanh mức âm nhẹ đến dương thấp
(từ khoảng -5,56 đến 1,29), phản ánh dòng tiền hoạt động tuy được cải
thiện nhưng vẫn thiếu ổn định và chưa tương xứng với lợi nhuận ghi
nhận.
- Năm 2022, hệ số giảm mạnh xuống -11,53, cho thấy doanh nghiệp gặp khó
khăn trong việc chuyển hóa lợi nhuận thành dòng tiền thực tế.
- Đáng chú ý, năm 2023 là điểm bứt phá với hệ số đạt 25,61, cao đột biến
so với các năm trước. Điều này cho thấy DIG có thể đã thu được dòng tiền
lớn từ hoạt động kinh doanh hoặc từ việc thu hồi công nợ, bàn giao dự
án.
- Tuy nhiên, năm 2024, hệ số lại quay trở về -5,2, phản ánh xu hướng sụt
giảm và cho thấy dòng tiền hoạt động kinh doanh chưa duy trì được sự ổn
định.
- Nhìn chung, hệ số lưu chuyển tiền mặt của DIG có độ biến động lớn và
thiếu tính bền vững, thể hiện rủi ro trong chất lượng lợi nhuận khi dòng
tiền thực tế không ổn định so với lợi nhuận kế toán.
ggplot(bctc, aes(x = tong_tai_san, y = roa)) +
geom_point(size = 3, color = "darkgreen") +
geom_smooth(method = "lm", color = "red", se = FALSE) +
geom_text(aes(label = nam), vjust = -0.3) +
geom_vline(xintercept = mean(bctc$tong_tai_san, na.rm = TRUE), linetype = "dotted") +
labs(title = "Quan hệ giữa Tổng tài sản và ROA", x = "Tổng tài sản", y = "ROA") +
theme_classic()
## `geom_smooth()` using formula = 'y ~ x'
Giải thích:
- Dùng ggplot(btcc, aes(x = tong_tai_san, y = roa)) để thể hiện mối
tương quan giữa tổng tài sản và ROA với biến tổng tài sản được biểu diễn
trên trục hoành và ROA được thể hiện trên trục tung.
- Dùng geom_point(size = 3, color = ‘darkgreen’) vẽ các điểm dữ liệu màu
xanh lá đậm, biểu diễn giá trị ROA tương ứng với từng mức tổng tài
sản.
- Dùng geom_smooth(method = “lm”, color = “red”, se = FALSE) tạo thêm
đường hồi quy tuyến tính (màu đỏ) biểu diễn xu hướng quan hệ giữa hai
biến và geom_text(aes(label = nam), vjust = -0.3) giúp hiển thị nhãn năm
ngay trên mỗi điểm dữ liệu, giúp người xem nhận biết thời điểm của từng
giá trị.
- Lệnh geom_vline(xintercept = mean(btcc$tong_tai_san, na.rm = TRUE),
linetype = “dotted”) để vẽ đường thẳng đứng nét chấm (dotted) tại giá
trị trung bình của tổng tài sản, hỗ trợ so sánh giữa các năm có quy mô
tài sản lớn hơn hay nhỏ hơn mức bình quân.
- Hàm labs() và theme_classic() gán tiêu đề, nhãn trục và chú giải giúp
hiển thị với phong cách tối giản, dễ đọc và tập trung vào dữ liệu.
Nhận xét: Biểu đồ thể hiện mối quan hệ giữa Tổng tài sản và ROA của Công
ty DIG giai đoạn 2015–2024.
- Đường hồi quy màu đỏ có độ dốc âm nhẹ, phản ánh mối quan hệ nghịch
chiều yếu giữa quy mô tổng tài sản và hiệu quả sinh lời (ROA).
- Trong giai đoạn 2015–2017, khi quy mô tài sản còn nhỏ, ROA dao động ở
mức thấp đến trung bình.
- Giai đoạn 2018–2021 ghi nhận ROA cao nhất, đặc biệt năm 2021 đạt đỉnh,
thể hiện việc sử dụng tài sản hiệu quả trong hoạt động đầu tư và kinh
doanh.
- Tuy nhiên, từ năm 2022 đến 2024, tổng tài sản tăng mạnh nhưng ROA lại
giảm đáng kể. Điều này có thể do tốc độ tăng tài sản vượt quá tốc độ
tăng lợi nhuận, hoặc một phần tài sản đầu tư chưa mang lại dòng thu nhập
tương xứng.
- Tổng thể, biểu đồ cho thấy rằng khi tổng tài sản của DIG mở rộng, hiệu
quả sử dụng tài sản có xu hướng giảm dần, phản ánh thách thức trong việc
quản lý tài sản quy mô lớn.
df_plot <- bctc %>%
mutate(
dt_ty = doanh_so_thuan / 1e9,
ln_ty = lai_lo_thuan_sau_thue / 1e9,
roe = roe,
roa = roa
) %>%
drop_na(dt_ty, ln_ty)
ggplot(df_plot, aes(x = dt_ty, y = ln_ty)) +
geom_point(aes(color = roe, size = roa), alpha = 0.9) +
geom_smooth(method = "lm", se = FALSE, color = "red", linewidth = 1) +
geom_density2d(color = "gray60") +
geom_vline(xintercept = mean(df_plot$dt_ty, na.rm = TRUE), linetype = "dashed", color = "blue") +
geom_hline(yintercept = mean(df_plot$ln_ty, na.rm = TRUE), linetype = "dashed", color = "green") +
geom_label(aes(label = paste0(nam, ": ROE=", round(roe, 2))), size = 2.5, alpha = 0.8, vjust = -1) +
geom_segment(aes(x = dt_ty, xend = dt_ty, y = 0, yend = ln_ty), alpha = 0.25) +
scale_color_viridis_c(option = "D", na.value = "grey50") +
labs(
title = "Tương quan Doanh thu – Lợi nhuận (kèm ROE & ROA)",
subtitle = "Điểm màu theo ROE, kích thước theo ROA; đơn vị: tỷ VND",
x = "Doanh thu thuần (tỷ VND)",
y = "Lợi nhuận sau thuế (tỷ VND)",
color = "ROE",
size = "ROA"
) +
theme_minimal()
## `geom_smooth()` using formula = 'y ~ x'
Giải thích:
- Tạo các biến dt_ty - Doanh thu thuần (quy đổi về đơn vị tỷ đồng để dễ
so sánh), ln ty - Lợi nhuận sau thuế (tỷ đồng), roe, roa - Tỷ suất sinh
lời trên vốn chủ sở hữu và tổng tài sản).
- Lệnh ggplot được sử dụng để vẽ đồ thị phân tán (scatter plot) với trục
hoành là doanh thu thuần, trục tung là lợi nhuận sau thuế.
- Dùng geom_point() biểu diễn từng năm bằng các điểm màu, trong đó màu
sắc thể hiện giá trị ROE, còn kích thước điểm thể hiện ROA.
- Dùng geom_smooth() vẽ đường xu hướng hồi quy tuyến tính (màu đỏ), cho
thấy mối tương quan tuyến tính giữa hai biến doanh thu và lợi
nhuận.
- Dùng geom_density_2d() tạo đường đồng mật độ (density lines) màu xám,
giúp nhận diện khu vực tập trung dữ liệu.
- Lệnh geom_vline() và geom_hline() thêm đường trung bình của doanh thu
(màu xanh dương) và lợi nhuận (màu xanh lá), giúp so sánh vị trí của các
điểm dữ liệu so với mức trung bình toàn kỳ.
- Lệnh geom_label() hiển thị nhãn năm và giá trị ROE tại mỗi điểm, giúp
nhận diện rõ giai đoạn có hiệu quả cao hoặc thấp.
- Phần labs() thiết lập tiêu đề và nhãn trục, kèm chú thích rõ ràng cho
ROE và ROA.
Nhận xét: Biểu đồ tương quan doanh thu và lợi nhuận kèm (ROA và ROE) của
công ty DIG trong giai đoạn 2015-2024 cho thấy.
- Giữa Doanh thu thuần và Lợi nhuận sau thuế tồn tại mối tương quan
thuận khá rõ rệt, thể hiện qua đường xu hướng hồi quy màu đỏ dốc lên,
nghĩa là khi doanh thu tăng, lợi nhuận của DIG cũng có xu hướng tăng
theo.
- Tuy nhiên, độ phân tán giữa các điểm dữ liệu khá lớn, đặc biệt giai
đoạn 2020–2023 cho thấy sự dao động mạnh trong lợi nhuận, phản ánh hiệu
quả hoạt động không ổn định dù doanh thu tăng trưởng.
- Các năm 2021–2022 có doanh thu ở mức cao nhưng lợi nhuận sau thuế
thấp, thậm chí giảm, cho thấy biên lợi nhuận suy giảm và ROE, ROA nhỏ
(thể hiện qua điểm màu lạnh – xanh dương, kích thước nhỏ).
- Ngược lại, năm 2023 nổi bật với điểm màu vàng – cam sáng, biểu thị ROE
cao và kích thước điểm lớn, tương ứng với ROA cao, chứng tỏ đây là giai
đoạn DIG có hiệu quả sinh lời vượt trội so với các năm khác.
- Các đường trung bình (màu xanh dương và xanh lá) chia biểu đồ thành
bốn vùng, cho thấy phần lớn các năm nằm dưới hoặc bên trái trung bình
lợi nhuận – doanh thu, phản ánh rằng phần lớn thời gian công ty hoạt
động dưới mức hiệu quả trung bình.
- Tổng thể, biểu đồ cho thấy DIG có mối quan hệ tích cực giữa quy mô
doanh thu và lợi nhuận, nhưng hiệu quả sinh lời (ROE, ROA) biến động
mạnh qua từng năm, thể hiện sự thiếu ổn định trong khả năng kiểm soát
chi phí và chuyển hóa doanh thu thành lợi nhuận thực.
ggplot(bctc, aes(x = factor(nam))) +
geom_col(aes(y = tien_va_tuong_duong_tien_dau_ky/1e9, fill = "Đầu kỳ"), position = "dodge") +
geom_col(aes(y = tien_va_tuong_duong_tien_cuoi_ky/1e9, fill = "Cuối kỳ"), position = "dodge") +
geom_text(aes(y = tien_va_tuong_duong_tien_cuoi_ky/1e9, label = round(tien_va_tuong_duong_tien_cuoi_ky/1e9, 1)),
vjust = -0.3, size = 3) +
geom_line(aes(y = luu_chuyen_tien_thuan_trong_ky/1e9, group = 1, color = "Lưu chuyển tiền thuần"), linewidth = 1) +
geom_point(aes(y = luu_chuyen_tien_thuan_trong_ky/1e9, color = "Lưu chuyển tiền thuần"), size = 2) +
labs(title = "Biến động dòng tiền trong kỳ", y = "Tỷ VNĐ", x = "Năm") +
theme_light()
Giải thích:
- Dùng hàm ggplot để trực quan hóa biến động của dòng tiền trong kỳ của
công ty Cổ phần Đầu tư Phát triển Xây dựng (DIG) qua các năm
2015–2024.
- Dùng geom_col() để vẽ hai cột màu để thể hiện số dư đầu kỳ và cuối kỳ,
phần (position = “dodge”) giúp dễ dàng so sánh biến động giữa hai thời
điểm.
- Dùng (geom_text()) giúp hiển thị con số tiền tương đương cuối kỳ với
đơn vị là tỷ đồng để dễ theo dõi quy mô dòng tiền của từng năm.
- Dùng lệnh geom_line() và geom_point() tạo đường nối màu đỏ nhạt biểu
diễn lưu chuyển tiền thuần trong kỳ thể hiện chênh lệch giữa đầu kỳ và
cuối kỳ, giúp nhận diện xu hướng tăng hay giảm dòng tiền thực tế hằng
năm.
- Hàm labs() và theme_light() được sử dụng để định dạng tiêu đề, trục
tọa độ và nền biểu đồ, giúp kết quả hiển thị rõ ràng, dễ đọc.
Nhận xét: Biểu đồ “Biến động dòng tiền trong kỳ” cho thấy sự thay đổi
đáng kể trong quy mô và xu hướng dòng tiền của DIG trong giai đoạn
2015–2024.
- Giai đoạn 2015–2018: quy mô tiền mặt cuối kỳ tăng đều từ khoảng 64,5
tỷ đồng lên hơn 734,8 tỷ đồng, cho thấy doanh nghiệp tích lũy dòng tiền
tốt qua các năm. Dòng tiền thuần trong kỳ duy trì ở mức dương nhẹ, phản
ánh khả năng tạo tiền từ hoạt động kinh doanh tương đối ổn định.
- Năm 2019–2020: tuy quy mô tiền cuối kỳ vẫn ở mức khá cao (593,9 tỷ và
1000,3 tỷ), nhưng dòng tiền thuần bắt đầu dao động âm – dương thất
thường, cho thấy hoạt động chi đầu tư hoặc chi tài chính tăng lên.
- Năm 2021–2022: dòng tiền thuần chuyển sang âm mạnh, đặc biệt năm 2022
xuống mức thấp nhất (âm gần 1000 tỷ đồng), kéo theo sự sụt giảm mạnh
tiền cuối kỳ, chỉ còn khoảng 245,9 tỷ đồng.
- Năm 2023 chứng kiến dòng tiền phục hồi mạnh, tiền cuối kỳ tăng vọt lên
hơn 2307 tỷ đồng, mức cao nhất trong toàn giai đoạn. Đây là tín hiệu
tích cực, cho thấy doanh nghiệp đã thu hồi dòng tiền lớn.
- Tuy nhiên, năm 2024, tiền cuối kỳ giảm mạnh xuống 785,2 tỷ đồng, cùng
với dòng tiền thuần giảm mạnh, phản ánh dòng tiền ra lớn hơn dòng tiền
vào.
- Tổng thể, dòng tiền của DIG trong 10 năm có biến động mạnh và thiếu ổn
định, xen kẽ giữa các giai đoạn tích lũy và thâm hụt tiền mặt. Mặc dù
năm 2023 là điểm sáng về khả năng tạo tiền, song sự giảm trở lại vào năm
2024 cho thấy doanh nghiệp vẫn cần tăng cường quản trị dòng tiền và cân
đối giữa chi đầu tư – tài chính – kinh doanh.
ggplot(bctc, aes(x = roa, y = roe)) +
geom_point(aes(size = tang_truong_loi_nhuan, color = tang_truong_loi_nhuan)) +
geom_smooth(method = "lm", color = "red", se = FALSE) +
geom_vline(aes(xintercept = mean(roa, na.rm = TRUE)), color = "blue", linetype = "dashed") +
geom_hline(aes(yintercept = mean(roe, na.rm = TRUE)), color = "darkgreen", linetype = "dashed") +
geom_text(aes(label = round(tang_truong_loi_nhuan, 2)), size = 2.5, vjust = -1) +
labs(title = "Mối quan hệ giữa ROA, ROE và Tăng trưởng lợi nhuận",
x = "ROA", y = "ROE") +
theme_bw()
## `geom_smooth()` using formula = 'y ~ x'
## Warning: Removed 1 row containing missing values or values outside
## the scale range (`geom_point()`).
## Warning: Removed 1 row containing missing values or values outside
## the scale range (`geom_text()`).
Giải thích:
- Dùng ggplot(btcc, aes(x = roa, y = roe)) để thể hiện mối quan hệ giữa
ROA, ROE và tăng trưởng lợi nhuận với trục hoành là ROA và trục tung là
ROE.
- Dùng geom_point(…) để vẽ các điểm dữ liệu trong đó size là tăng trưởng
lợi nhuận biểu thị kích thước điểm phụ thuộc vào tốc độ tăng trưởng lợi
nhuận, color là tăng trưởng lợi nhuận biểu thị màu sắc tương ứng với giá
trị tăng trưởng này.
- Lệnh geom_smooth(method = “lm”, color = “red”, se = FALSE) vẽ đường
hồi quy tuyến tính (màu đỏ) thể hiện mối quan hệ tuyến tính giữa ROA và
ROE.
- Dùng geom_vline() và geom_hline() lần lượt vẽ đường trung bình của ROA
(màu xanh lam, nét đứt) và đường trung bình của ROE (màu xanh lá đậm,
nét đứt). Hai đường này giúp chia biểu đồ thành bốn vùng, hỗ trợ nhận
diện vị trí tương đối của các giai đoạn tài chính so với mức trung
bình.
- Dùng lệnh geom_text(…) hiển thị giá trị cụ thể của tốc độ tăng trưởng
lợi nhuận tại từng điểm dữ liệu, giúp dễ theo dõi và đối chiếu.
- Hàm labs(…) đặt tiêu đề và nhãn cho các trục của biểu đồ và theme_bw()
để áp dụng giao diện nền trắng giúp biểu đồ dễ đọc và thể hiện rõ màu
sắc.
Nhận xét: Biểu đồ thể hiện mối quan hệ giữa tỷ suất sinh lời trên tài
sản (ROA), tỷ suất sinh lời trên vốn chủ sở hữu (ROE) và tốc độ tăng
trưởng lợi nhuận của Công ty DIG trong giai đoạn 2015 - 2024.
- Các điểm dữ liệu nằm gần đường hồi quy màu đỏ và phân bố theo xu hướng
đồng biến, tức là khi ROA tăng thì ROE cũng tăng. Điều này phản ánh sự
gắn kết chặt chẽ giữa hiệu quả sử dụng tài sản và hiệu quả sử dụng vốn
chủ sở hữu.
- Các điểm dữ liệu có màu xanh đậm và kích thước lớn biểu thị giai đoạn
tăng trưởng lợi nhuận cao, đồng thời tương ứng với ROA và ROE cao, cho
thấy doanh nghiệp hoạt động hiệu quả trong các năm này.
- Ngược lại, những điểm nhỏ và màu nhạt hơn đại diện cho các năm tăng
trưởng chậm, phản ánh giai đoạn lợi nhuận của DIG suy giảm do biến động
của thị trường bất động sản hoặc chi phí tài chính gia tăng.
- Hai đường trung bình (xanh lam và xanh lá) giúp xác định các giai đoạn
ROA và ROE vượt trung bình, từ đó nhận diện thời kỳ DIG duy trì khả năng
sinh lời tốt.
- Phần lớn các điểm nằm phía trên bên phải vùng trung bình, cho thấy
trong giai đoạn nghiên cứu, DIG nhìn chung duy trì hiệu quả sinh lời ổn
định và có xu hướng tích cực.
- Tổng thể, biểu đồ khẳng định rằng hiệu quả sử dụng tài sản (ROA) có
tác động tích cực đến hiệu quả sử dụng vốn (ROE), và cả hai yếu tố này
đều liên quan mật thiết đến tốc độ tăng trưởng lợi nhuận của doanh
nghiệp.