Bộ dữ liệu STB_2015-2024 chứa các chỉ số tài chính của Ngân hàng Thương mại Cổ phần Sài Gòn Thương Tín (STB) từ năm 2015 đến 2024. Dữ liệu bao gồm Bảng cân đối kế toán (tài sản và nguồn vốn) và Báo cáo kết quả kinh doanh. Phân tích này nhằm mục đích đánh giá tình hình hoạt động, sự tăng trưởng và hiệu quả kinh doanh của ngân hàng qua các năm.
library(readxl)
library(dplyr)
library(knitr)
# Đọc dữ liệu
data_stb <- read_excel("C:/Users/adminn/OneDrive - UFM/STB_2015-2024.xlsx",
sheet = "Sheet1" )
# Đổi tên các cột quan trọng dựa trên vị trí thực tế
names(data_stb)[1] <- "Year"
names(data_stb)[6] <- "Loans"
names(data_stb)[10] <- "Total_Assets"
names(data_stb)[33] <- "Net_Profit"
# Chọn chỉ các cột quan trọng và chuyển đổi kiểu dữ liệu
data_stb <- data_stb %>%
select(Year, Loans, Total_Assets, Net_Profit) %>%
mutate(
Year = as.integer(Year),
Loans = as.numeric(Loans),
Total_Assets = as.numeric(Total_Assets),
Net_Profit = as.numeric(Net_Profit)
) %>%
filter(!is.na(Year)) # Loại bỏ dòng không có năm
# Kiểm tra cấu trúc cơ bản của dataset
cat("=== THÔNG TIN CƠ BẢN VỀ BỘ DỮ LIỆU ===\n")## === THÔNG TIN CƠ BẢN VỀ BỘ DỮ LIỆU ===
## Số quan sát (dòng): 10
## Số biến (cột): 4
## Số quan sát trùng lặp: 0
## DỮ LIỆU THIẾU THEO TỪNG CỘT:
## Year Loans Total_Assets Net_Profit
## 0 0 0 0
# Giải thích ý nghĩa các biến trong dữ liệu
thong_tin_bien <- data.frame(
"Tên Biến" = c("Year", "Loans", "Total_Assets", "Net_Profit"),
"Mô Tả" = c(
"Năm báo cáo",
"Dư nợ cho vay và cho thuê tài chính khách hàng (Triệu VND)",
"Tổng tài sản (Triệu VND)",
"Lợi nhuận sau thuế (Triệu VND)"
)
)
cat("=== Ý NGHĨA MỘT SỐ BIẾN QUAN TRỌNG TRONG DATASET ===\n")## === Ý NGHĨA MỘT SỐ BIẾN QUAN TRỌNG TRONG DATASET ===
| Tên.Biến | Mô.Tả |
|---|---|
| Year | Năm báo cáo |
| Loans | Dư nợ cho vay và cho thuê tài chính khách hàng (Triệu VND) |
| Total_Assets | Tổng tài sản (Triệu VND) |
| Net_Profit | Lợi nhuận sau thuế (Triệu VND) |
## === CẤU TRÚC DỮ LIỆU ===
## tibble [10 × 4] (S3: tbl_df/tbl/data.frame)
## $ Year : int [1:10] 2024 2023 2022 2021 2020 2019 2018 2017 2016 2015
## $ Loans : num [1:10] 4.73e+08 4.38e+08 4.05e+08 3.70e+08 3.35e+08 ...
## $ Total_Assets: num [1:10] 7.27e+08 6.74e+08 5.89e+08 5.53e+08 4.93e+08 ...
## $ Net_Profit : num [1:10] 4135 3719 2593 1414 1248 ...
##
## === THỐNG KÊ MÔ TẢ ===
## Year Loans Total_Assets Net_Profit
## Min. :2015 Min. :183660021 Min. :292032736 Min. : 49.0
## 1st Qu.:2017 1st Qu.:228423342 1st Qu.:377861780 1st Qu.: 611.2
## Median :2020 Median :313456646 Median :473048543 Median :1188.5
## Mean :2020 Mean :316763578 Mean :488744528 Mean :1606.6
## 3rd Qu.:2022 3rd Qu.:396365711 3rd Qu.:579669366 3rd Qu.:2298.2
## Max. :2024 Max. :473456903 Max. :727016711 Max. :4135.0
# **DATA CLEANING & TRANSFORMATION**
# Tạo các biến mới phục vụ phân tích
data_stb <- data_stb %>%
arrange(Year) %>%
mutate(
# Tỷ lệ cho vay trên tổng tài sản
loan_to_assets_ratio = Loans / Total_Assets,
# Tỷ suất lợi nhuận trên tổng tài sản (ROA)
roa = Net_Profit / Total_Assets,
# Tăng trưởng dư nợ so với năm trước
loan_growth = (Loans - lag(Loans)) / lag(Loans) * 100,
# Tăng trưởng tổng tài sản so với năm trước
assets_growth = (Total_Assets - lag(Total_Assets)) / lag(Total_Assets) * 100,
# Tăng trưởng lợi nhuận so với năm trước
profit_growth = (Net_Profit - lag(Net_Profit)) / lag(Net_Profit) * 100
)
# Kiểm tra lại cấu trúc sau khi chuyển đổi
cat("=== CẤU TRÚC DỮ LIỆU SAU KHI CHUYỂN ĐỔI ===\n")## === CẤU TRÚC DỮ LIỆU SAU KHI CHUYỂN ĐỔI ===
## tibble [10 × 9] (S3: tbl_df/tbl/data.frame)
## $ Year : int [1:10] 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024
## $ Loans : num [1:10] 1.84e+08 1.96e+08 2.20e+08 2.53e+08 2.92e+08 ...
## $ Total_Assets : num [1:10] 2.92e+08 3.32e+08 3.68e+08 4.06e+08 4.54e+08 ...
## $ Net_Profit : num [1:10] 444 49 555 780 1129 ...
## $ loan_to_assets_ratio: num [1:10] 0.629 0.592 0.598 0.623 0.644 ...
## $ roa : num [1:10] 1.52e-06 1.48e-07 1.51e-06 1.92e-06 2.49e-06 ...
## $ loan_growth : num [1:10] NA 6.95 12.1 14.94 15.39 ...
## $ assets_growth : num [1:10] NA 13.7 11 10.2 11.7 ...
## $ profit_growth : num [1:10] NA -89 1032.7 40.5 44.7 ...
##
## === DỮ LIỆU 10 NĂM ===
## # A tibble: 10 × 9
## Year Loans Total_Assets Net_Profit loan_to_assets_ratio roa loan_growth
## <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 2015 1.84e8 292032736 444 0.629 1.52e-6 NA
## 2 2016 1.96e8 332023043 49 0.592 1.48e-7 6.95
## 3 2017 2.20e8 368468840 555 0.598 1.51e-6 12.1
## 4 2018 2.53e8 406040598 780 0.623 1.92e-6 14.9
## 5 2019 2.92e8 453581057 1129 0.644 2.49e-6 15.4
## 6 2020 3.35e8 492516029 1248 0.680 2.53e-6 14.7
## 7 2021 3.70e8 552748211 1414 0.670 2.56e-6 10.6
## 8 2022 4.05e8 588643085 2593 0.688 4.41e-6 9.32
## 9 2023 4.38e8 674374966 3719 0.650 5.51e-6 8.25
## 10 2024 4.73e8 727016711 4135 0.651 5.69e-6 7.99
## # ℹ 2 more variables: assets_growth <dbl>, profit_growth <dbl>
# Phân loại năm theo mức tăng trưởng lợi nhuận
filtered_data <- data_stb %>% filter(!is.na(profit_growth))
total_years <- nrow(filtered_data)
profit_growth_summary <- filtered_data %>%
mutate(profit_growth_group = case_when(
profit_growth > 20 ~ "Tăng trưởng cao (>20%)",
profit_growth > 0 ~ "Tăng trưởng vừa (0-20%)",
profit_growth > -20 ~ "Suy giảm nhẹ (-20%-0%)",
TRUE ~ "Suy giảm mạnh (<-20%)"
)) %>%
group_by(profit_growth_group) %>%
summarise(
So_Nam = n(),
Ty_Le = So_Nam / total_years * 100,
LNST_Trung_Binh = mean(Net_Profit, na.rm = TRUE),
.groups = 'drop'
)
cat("=== PHÂN TỔ THEO NHÓM TĂNG TRƯỞNG LỢI NHUẬN ===\n")## === PHÂN TỔ THEO NHÓM TĂNG TRƯỞNG LỢI NHUẬN ===
| profit_growth_group | So_Nam | Ty_Le | LNST_Trung_Binh |
|---|---|---|---|
| Suy giảm mạnh (<-20%) | 1 | 11.11 | 49.00 |
| Tăng trưởng cao (>20%) | 5 | 55.56 | 1755.20 |
| Tăng trưởng vừa (0-20%) | 3 | 33.33 | 2265.67 |
# Phân tổ theo quy mô tổng tài sản
assets_size_summary <- data_stb %>%
mutate(assets_size = case_when(
Total_Assets < 400000000 ~ "Quy mô nhỏ (<400,000 tỷ)",
Total_Assets < 600000000 ~ "Quy mô trung bình (400,000-600,000 tỷ)",
TRUE ~ "Quy mô lớn (>600,000 tỷ)"
)) %>%
group_by(assets_size) %>%
summarise(
So_Nam = n(),
Ty_Le = n() / nrow(data_stb) * 100, # Sửa thành tổng số năm trong dataset
LNST_Trung_Binh = mean(Net_Profit, na.rm = TRUE),
Cho_Vay_Trung_Binh = mean(Loans, na.rm = TRUE),
.groups = 'drop'
)
cat("=== PHÂN TỔ THEO QUY MÔ TỔNG TÀI SẢN ===\n")## === PHÂN TỔ THEO QUY MÔ TỔNG TÀI SẢN ===
| assets_size | So_Nam | Ty_Le | LNST_Trung_Binh | Cho_Vay_Trung_Binh |
|---|---|---|---|---|
| Quy mô lớn (>600,000 tỷ) | 2 | 20 | 3927.00 | 455934136 |
| Quy mô nhỏ (<400,000 tỷ) | 3 | 30 | 349.33 | 200095283 |
| Quy mô trung bình (400,000-600,000 tỷ) | 5 | 50 | 1432.80 | 331096333 |
library(ggplot2)
library(scales)
# Bảng tần số và tần suất cho dư nợ cho vay
loan_intervals <- cut(data_stb$Loans,
breaks = c(0, 200000000, 400000000, 600000000, Inf),
labels = c("0-200,000", "200,000-400,000", "400,000-600,000", ">600,000"),
right = FALSE)
frequency_table <- table(loan_intervals)
percentage_table <- prop.table(frequency_table) * 100
loan_distribution <- data.frame(
Khoang_Du_No = names(frequency_table),
Tan_So = as.numeric(frequency_table),
Tan_Suat = as.numeric(percentage_table)
)
cat("=== BẢNG TẦN SỐ VÀ TẦN SUẤT DƯ NỢ CHO VAY ===\n")## === BẢNG TẦN SỐ VÀ TẦN SUẤT DƯ NỢ CHO VAY ===
| Khoang_Du_No | Tan_So | Tan_Suat |
|---|---|---|
| 0-200,000 | 2 | 20 |
| 200,000-400,000 | 5 | 50 |
| 400,000-600,000 | 3 | 30 |
| >600,000 | 0 | 0 |
## === THỐNG KÊ MÔ TẢ BIẾN DƯ NỢ CHO VAY ===
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 183660021 228423342 313456646 316763578 396365711 473456903
# Biểu đồ xu hướng dư nợ qua các năm
ggplot(data_stb, aes(x = Year, y = Loans)) +
geom_line(color = "blue", size = 1.5) +
geom_point(color = "blue", size = 3) +
scale_y_continuous(labels = comma) +
labs(title = "XU HƯỚNG DƯ NỢ CHO VAY QUA CÁC NĂM",
subtitle = "Đơn vị: Triệu VND",
x = "Năm",
y = "Dư nợ cho vay") +
theme_minimal() +
theme(plot.title = element_text(hjust = 0.5, face = "bold"))