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)

Chương 1. PHÂN TÍCH VÀ TRỰC QUAN HÓA DỮ LIỆU NGƯỜI DÙNG ANIME

1. Giới thiệu bộ dữ liệu

1.1 Đọc dữ liệu từ excel

dataset <- read_excel("C:/Users/DELL/Downloads/AA.xlsx")

1.2 Kiểm tra các dòng đầu của dữ liệu

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ự).

1.3 Kiểm tra kích thước dữ liệu

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 đó).

1.4 Tên các biến

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.

1.5 Kiểm tra và lưu cấu trúc dữ liệu

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.

1.6 Tóm tắt nhanh

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.

1.7 Kiểm tra bản ghi trùng lặp

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.

1.8 Đếm số biến định lượ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.

1.9 Đếm số biến định tính

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ê.

1.10 Tên các biến định lượng

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,…

1.11 Tên các biến định tính

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.

1.12 Giải thích ý nghĩa các biến

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ở.

2. Xử lý dữ liệu thô, mã hóa dữ liệu

2.1 Chuẩn hóa tên cột

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.

2.2 Chuyển những cột numeric lưu dưới dạng text (có dấu phẩy) sang numeric

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.

2.3 Loại bỏ khoảng trắng thừa và chuẩn hóa chữ cho cột text

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.

2.4 Mã hóa biến phân loại (categorical) thành factor (ví dụ type, rating)

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.

2.5 Chuẩn hóa giới tính (viết hoa chữ cái đầu)

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.

2.6 Tạo cột genre_list nếu có cột genre chứa nhiều thể loại trong 1 ô

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.

2.7 Impute NA cho numeric bằng median (giữ trung vị tránh ảnh hưởng outliers)

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.

2.8 Thay NA cho factor bằng level ‘unknown’ (giữ thông tin 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.

2.9 Loại bỏ duplicate theo cặp (title, release_year) nếu hai cột tồn tại

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ế.

2.10 Tạo biến tầng popularity_bucket theo quantiles

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.

3. Thống kê mô tả

3.1 Chọn ra các biến định lượng để thống kê

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ố.

3.2 Thống kê cơ bản

3.2.1 Xem tổng quan dữ liệu định lượng

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.

3.2.2 Trung bình(Mean)

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.

3.2.3 Trung vị (Median)

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.

3.2.4 Giá trị nhỏ nhất(Min)

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ý.

3.2.5 Giá trị lớn nhất

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.

3.2.6 Độ lệch chuẩn (Standard Deviation)

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.

3.2.7 Phương sai (Variance)

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.

3.2.8 Khoảng biến thiên (Range)

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.

3.2.9 Khoảng tứ phân vị (IQR)

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.

3.2.10 Các tứ phân vị cụ thể

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ể.

3.2.11 Độ lệch (Skewness)

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.

3.2.12 Độ nhọn (Kurtosis)

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.

3.2.13 Hệ số biến thiên (Coefficient of Variation)

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.

3.3 Tổng hợp và kiểm tra chất lượng dữ liệu

3.3.1 Tổng giá trị

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.

3.3.2 Đếm số lượng quan sát hợp lệ (Valid Observations)

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.

3.3.3 Kiểm tra tổng số giá trị thiếu 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 đó.

3.3.4 Hệ số tương quan giữa Days Watched và Mean Score

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ể.

3.3.5 Ma trận tương quan giữa các biến định lượng

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.

3.3.6 Thống kê mô tả tổng hợp bằng hàm describe()

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.

4. Trực quan hóa dữ liệu

4.1 Phân bố điểm trung bình theo giới tính

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.

4.2 Phân bố số ngày xem phim

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.

4.3 Quan hệ giữa số ngày xem phim và số tập đã xem

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.

4.4 Biểu đồ cột so sánh số anime đang xem theo giới tính

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.

4.5 Điểm trung bình theo số lần xem lại (rewatched)

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ả.

4.6 Tương quan giữa tổng số anime và điểm trung bình

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.

4.7 Phân bố điểm trung bình theo giới tính (violin)

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á.

4.8 Quan hệ giữa số tập và ngày xem theo số lần xem lại

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.

4.9 Điểm trung bình theo số anime đã hoàn thành

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.

4.10 So sánh tổng số các trạng thái xem 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.

4.11 Histogram số anime đang tạm dừng (on_hold)

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.

4.12 Histogram số anime bị bỏ (dropped)

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.

4.13 Histogram số anime lên kế hoạch xem (plan_to_watch)

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í.

4.14 Histogram tổng số anime (total_entries)

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.

4.15 Histogram số ngày xem phim theo giới tính

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.

4.16 Histogram số lần xem lại anime (rewatched)

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.

4.17 Bar chart: Tình trạng phim đang xem

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.

4.18 Line chart: Số lượng phim theo trạng thái (minh họa xu hướng)

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.

4.19 Histogram log-scale số tập phim

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.

4.20 Bar chart: Trung bình mean_score theo giới tính

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ữ.

4.21 Boxplot điểm trung bình theo giới tính

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.

4.22 Biểu đồ phân phối số tập phim đã xem

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í.

Chương 2. PHÂN TÍCH MÔ TẢ VÀ TRỰC QUAN HÓA DỮ LIỆU TÀI CHÍNH TRONG ĐÁNH GIÁ HIỆU QUẢ KINH DOANH CỦA DIG

1. Giới thiệu bộ dữ liệu

1.1 Đọc dữ liệu từ excel

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`

1.2 Kiểm tra các dòng đầu của dữ liệu

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ự).

1.3 Kiểm tra kích thước dữ liệu

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.

1.4 Tên các biến

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.

1.5 Kiểm tra cấu trúc dữ liệu

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.

1.6 Tóm tắt nhanh

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.

1.7 Kiểm tra bản ghi trùng lặp

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.

1.8 Đếm số biến định lượ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.

1.9 Đếm số biến định tính

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ê.

1.10 Tên các biến định lượng

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,…

1.11 Tên các biến định tính

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ê.

2. Xử lý dữ liệu thô, mã hóa dữ liệu

2.1 Loại bỏ khoảng trắng thừa ở tên cột

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.

2.2 Chuẩn hóa chữ thường cho tên cột

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.

2.3 Loại bỏ dấu tiếng Việt

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.

2.4 Thay khoảng trắng bằng dấu cách

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.

2.5 Chuẩn hóa dữ liệu văn bản (loại bỏ khoảng trắng thừa trong nội dung)

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.

2.6 Đặt tên “nam” cho cột đầu tiên

colnames(bctc)[1] <- "nam"

2.7 Điền giá trị thiếu bằng trung vị cho cột số

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.

2.8 Tạo log của doanh thu

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.

2.9 Tạo biến “Ty_le_no_vonchu” = Nợ phải trả / Vốn chủ sở hữu

bctc <- bctc %>% 
  mutate(ty_le_no_von_chu = no_phai_tra / von_chu_so_huu)

2.10 Thêm cột tăng trưởng lợi nhuận sau thuế

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))

2.11 Thêm cột tăng trưởng doanh thu năm sau so với năm trước

bctc <- bctc %>%
  arrange(nam) %>%
  mutate(tang_truong_doanh_thu = (doanh_so_thuan / lag(doanh_so_thuan) - 1) * 100)

2.12 Tỷ suất sinh lời trên vốn chủ sở hữu (ROE)

bctc <- bctc %>%
  mutate(roe = lai_lo_thuan_sau_thue / von_chu_so_huu)

2.13 Tỷ suất sinh lời trên tài sản (ROA)

bctc <- bctc %>%
  mutate(roa = lai_lo_thuan_sau_thue / tong_tai_san)

3. Thống kê mô tả

3.1 Thống kê mô tả chung cho các biến

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.

3.2 Trung bình doanh thu thuần

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.

3.3 Trung vị doanh thu thuần

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.

3.4 Giá trị nhỏ nhất của doanh thu thuần

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.

3.5 Giá trị lớn nhất của doanh thu thuầ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.

3.6 Độ lệch chuẩn (Standard Deviation) doanh thu thuần

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.

3.7 Phương sai (Variance) doanh thu thuần

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.

3.8 Trung bình lợi nhuận sau thuế

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.

3.9 Giá trị nhỏ nhất và lớn nhất lợi nhuận sau thuế

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.

3.10 Số năm lỗ (lợi nhuận < 0)

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ỗ.

3.11 Phân vị (25%,50%,75%) của tổng nguồn vốn

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.

3.12 Hệ số tương quan doanh thu thuần vs lợi nhuận sau thuế

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.

3.13 Hệ số tương quan ma trận cho các biến tài chính

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ý.

3.14 Kiểm tra năm có doanh số cao nhất và thấp nhất

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.

3.15 Tính trung bình ROE

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ế.

3.16 Tính trung bình ROA

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.

3.17 Số năm có tỷ lệ nợ/vốn > 1

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.

3.18 Tính hệ số biến động (CV) của doanh thu

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.

3.19 Kiểm tra phân phối của ROE bằng skewness và kurtosis

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.

3.20 Thống kê kết hợp của lợi nhuận theo nhóm tỷ lệ nợ

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.

3.21 Phân tích trung vị theo năm

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.

4. Trực quan hóa dữ liệu

4.1 Doanh thu thuần theo năm

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.

4.2 Lợi nhuận sau thuế theo năm

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.

4.3 Tổng tài sản theo năm

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.

4.4 So sánh doanh thu và lợi nhuận theo năm

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.

4.5 ROA theo năm

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.

4.6 ROE theo năm

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.

4.7 Tỷ lệ nợ trên vốn chủ (Debt-to-Equity)

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.

4.8 So sánh tỷ lệ nợ và ROE

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.

4.9 Tăng trưởng lợi nhuận qua các nă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.

4.10 Phân phối lợi nhuận sau thuế

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.

4.11 So sánh tổng tài sản và tổng nguồn vốn

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.

4.12 Cơ cấu tài sản ngắn hạn và dài hạn

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.

4.13 Lợi nhuận gộp và chi phí tài chính

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.

4.14 So sánh LNST và EBIT

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.

4.15 Quan hệ giữa doanh thu và EBIT

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.

4.16 Hệ số lưu chuyển tiền mặt

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.

4.17 Tương quan giữa tổng tài sản và ROA

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.

4.18 Phân tích tương quan 3 biến tài chính chính

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.

4.19 Tỷ trọng dòng tiền cuối kỳ so với đầu kỳ

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.

4.20 Mối quan hệ giữa ROA, ROE và tăng trưởng lợi nhuận

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.