Các thư viện sử dụng

library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.2.3
library(datawizard)
library(ggstats)
library(plyr)
## 
## Attaching package: 'plyr'
## The following object is masked from 'package:ggstats':
## 
##     round_any
library(tidyverse)
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.1 ──
## ✔ tibble  3.2.1     ✔ dplyr   1.1.4
## ✔ tidyr   1.2.0     ✔ stringr 1.4.0
## ✔ readr   2.1.3     ✔ forcats 0.5.1
## ✔ purrr   0.3.4
## Warning: package 'tibble' was built under R version 4.2.3
## Warning: package 'dplyr' was built under R version 4.2.3
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::arrange()   masks plyr::arrange()
## ✖ purrr::compact()   masks plyr::compact()
## ✖ dplyr::count()     masks plyr::count()
## ✖ dplyr::desc()      masks plyr::desc()
## ✖ dplyr::failwith()  masks plyr::failwith()
## ✖ dplyr::filter()    masks stats::filter()
## ✖ dplyr::id()        masks plyr::id()
## ✖ dplyr::lag()       masks stats::lag()
## ✖ dplyr::mutate()    masks plyr::mutate()
## ✖ dplyr::rename()    masks plyr::rename()
## ✖ dplyr::summarise() masks plyr::summarise()
## ✖ dplyr::summarize() masks plyr::summarize()

Nhâp dữ liệu

dt <- read.csv('https://math.ued.udn.vn/wp-content/uploads/2024/10/So_lieu.csv')

# display top 5 row
head(dt)
##        Dau_thoi_gian            Ho_va_ten Tuoi Gioi_tinh Man_kinh U_vu_ben_nao
## 1 7/27/2024 10:40:35  Kiều Thị Thanh Hiền   37        Nữ    Không         phải
## 2 7/27/2024 11:16:14        Hồ Thị Kim Sa   54        Nữ    Không         phải
## 3 7/27/2024 11:24:17           Võ Thị Nga   46        Nữ    Không         trái
## 4 7/27/2024 18:32:41 Nguyễn Thị Ngân Thảo   48        Nữ    Không         trái
## 5 7/27/2024 20:27:32     Nguyễn Thị Thuận   76        Nữ       có         trái
## 6 7/27/2024 20:31:40        Trần Thị Diện   55        Nữ    Không         trái
##     Vi_tri_u Kich_thuoc_u cT cN Giai_doan_benh             Mo_benh_hoc ER_PR
## 1 Trên ngoài          2.5  2  1            IIB Ung thư biểu mô thể ống DƯƠNG
## 2 Trên trong          2.3  2  1            IIB Ung thư biểu mô thể ống   ÂM 
## 3 Trên trong          7.0  3  2            IIB Ung thư biểu mô thể ống DƯƠNG
## 4 Trên ngoài          3.5  2  0            IIA Ung thư biểu mô thể ống DƯƠNG
## 5 Trên trong          4.0  2  1            IIB Ung thư biểu mô thể ống DƯƠNG
## 6 Trên ngoài          2.5  2  1            IIB Ung thư biểu mô thể ống DƯƠNG
##   HER2 Do_mo_hoc Phan_nhom_sinh_hoc Nam_phau_thuat
## 1   ÂM   Grade 2          Luminal B           2021
## 2   ÂM   Grade 2             Tam âm           2021
## 3   ÂM   Grade 2          Luminal B           2020
## 4   ÂM   Grade 2          Luminal B           2021
## 5   ÂM   Grade 2          Luminal B           2021
## 6   ÂM   Grade 2          Luminal B           2020
##   Phuong_phap_phau_thuat_tai_vu Phuong_phap_phau_thuat_tai_hach
## 1              Cắt vú + tái tạo                   Nạo hạch nách
## 2                       bảo tồn             Sinh thiết hạch cửa
## 3              Cắt vú + tái tạo                   Nạo hạch nách
## 4              Cắt vú triệt căn             Sinh thiết hạch cửa
## 5              Cắt vú triệt căn                   Nạo hạch nách
## 6              Cắt vú triệt căn             Sinh thiết hạch cửa
##   Bien_chung_som_sau_phau_thuat Bien_chung_muon_sau_phau_thuat
## 1                         Không                          Không
## 2                         Không                          Không
## 3                         Không              rối loạn cảm giác
## 4                         Không                          Không
## 5                         Không                          Không
## 6                         Không                          Không
##   Dieu_tri_tan_bo_tro Dieu_tri_hoa_tri_bo_tro Dieu_tri_xa_tri_bo_tro
## 1               không                      có                     có
## 2               không                      có                     có
## 3                  có                   Không                     có
## 4               không                      có                  không
## 5               không                      có                     có
## 6               không                      có                     có
##   Noi_tiet_bo_tro Hai_long_ve_phuong_phap_phau_thuat Nam_tai_phat
## 1              có                           Hài lòng            0
## 2           Không                           Hài lòng            0
## 3              có                           Hài lòng         2024
## 4              có                       Rất hài lòng            0
## 5              có                           Hài lòng            0
## 6              có                     Không hài lòng            0
##   Thoi_gian_tai_phat_sau_dieu_tri  X Nam_sinh Dia_chi
## 1                           không NA                 
## 2                           không NA                 
## 3                              36 NA                 
## 4                                 NA                 
## 5                           không NA                 
## 6                           không NA                 
##   Thoi_gian_ket_thuc_dieu_tri X.1 vi_tri_tai_phat
## 1                              NA                
## 2                              NA                
## 3                              NA      di căn xa 
## 4                              NA                
## 5                              NA                
## 6                              NA

Thay thế phần để trống bằng “Không đánh giá”

dt$Hai_long_ve_phuong_phap_phau_thuat=replace(dt$Hai_long_ve_phuong_phap_phau_thuat,dt$Hai_long_ve_phuong_phap_phau_thuat=="","Không đánh giá")

Vẽ biểu đồ

b<-ggplot(dt, aes(x=Hai_long_ve_phuong_phap_phau_thuat ,y = ..count..,fill = Hai_long_ve_phuong_phap_phau_thuat))+
  geom_bar()
b
## 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.

Bổ sung nhãn tỉ lệ

b<-b+ 
  geom_text(aes( label = scales::percent((..count..)/sum(..count..))), stat= "count",vjust = -.5)
b

Thay đổi tên các trục tọa độ và nhãn

b<-b+
  labs(y = "Số lượng", x="Hài lòng về phương pháp phẫu thuật", fill="Hài lòng về phương pháp phẫu thuật")
b

Nếu muốn đếm số lượng của mỗi loại thì ta sử dụng lệnh sau

dt %>% count(Hai_long_ve_phuong_phap_phau_thuat)
##   Hai_long_ve_phuong_phap_phau_thuat   n
## 1                           Hài lòng 691
## 2                     Không hài lòng   5
## 3                     Không đánh giá  10
## 4                       Rất hài lòng 163

Phân lớp tuổi theo nhóm

dt$Nhom_tuoi<-recode_values(dt$Tuoi, list(`1`=1:39,`2`=40:60,`3`=61:100))
dt$Nhom_tuoi<-replace(dt$Nhom_tuoi,dt$Nhom_tuoi==1,"1-39")
dt$Nhom_tuoi<-replace(dt$Nhom_tuoi,dt$Nhom_tuoi==2,"40-60")
dt$Nhom_tuoi<-replace(dt$Nhom_tuoi,dt$Nhom_tuoi==3,"61-100")
ggplot(dt, aes(x=  dt$Nhom_tuoi,y = ..count..,fill = dt$Nhom_tuoi))+ theme_classic()+
  theme_classic()+
  geom_bar() +
  geom_text(aes( label = scales::percent((..count..)/sum(..count..))), stat= "count",vjust = -.5)+
  labs(y = "Số lượng", x="Nhóm tuổi", fill="Nhóm tuổi") 
## Warning: Use of `dt$Nhom_tuoi` is discouraged.
## ℹ Use `Nhom_tuoi` instead.
## Use of `dt$Nhom_tuoi` is discouraged.
## ℹ Use `Nhom_tuoi` instead.
## Use of `dt$Nhom_tuoi` is discouraged.
## ℹ Use `Nhom_tuoi` instead.
## Use of `dt$Nhom_tuoi` is discouraged.
## ℹ Use `Nhom_tuoi` instead.

Phân lớp kích thước u theo nhóm

dt$Nhom_kich_thuoc_u=as.numeric(dt$Kich_thuoc_u)
dt$Nhom_kich_thuoc_u=replace(dt$Nhom_kich_thuoc_u,dt$Nhom_kich_thuoc_u<=2,1)
dt$Nhom_kich_thuoc_u=replace(dt$Nhom_kich_thuoc_u,(dt$Nhom_kich_thuoc_u>2)&(dt$Nhom_kich_thuoc_u<=5),2)
dt$Nhom_kich_thuoc_u=replace(dt$Nhom_kich_thuoc_u,dt$Nhom_kich_thuoc_u>5,3)
dt$Nhom_kich_thuoc_u=replace(dt$Nhom_kich_thuoc_u,dt$Nhom_kich_thuoc_u==1,"0-2")
dt$Nhom_kich_thuoc_u=replace(dt$Nhom_kich_thuoc_u,dt$Nhom_kich_thuoc_u==2,"2-5")
dt$Nhom_kich_thuoc_u=replace(dt$Nhom_kich_thuoc_u,dt$Nhom_kich_thuoc_u==3,">5")
ggplot(dt, aes(x=  Nhom_kich_thuoc_u,y = ..count..,fill = Nhom_kich_thuoc_u))+ 
  geom_bar() +
  geom_text(aes( label = scales::percent((..count..)/sum(..count..))), stat= "count",vjust = -.5)+
  labs(y = "Số lượng", x="Nhóm kích thước u", fill="Nhóm kích thước u") 

Barplot theo thời gian và theo nhóm

dt %>% count(Nam_phau_thuat,Phuong_phap_phau_thuat_tai_vu)->phau_thuat_tai_vu_theo_nam

ggplot(phau_thuat_tai_vu_theo_nam) +
  aes(x = Nam_phau_thuat, fill = Phuong_phap_phau_thuat_tai_vu, weight = n, by = Nam_phau_thuat) +
  geom_bar(position = "fill") +
  geom_text(aes(label = scales::percent(after_stat(prop), accuracy = 0.1)),stat = "prop", position = position_fill(.5))+
  labs(y = "Tỉ lệ", x="Năm phẫu thuật", fill="Phương pháp phẫu thuật tại vú") +
  scale_y_continuous(labels = scales::percent)
## Warning: The following aesthetics were dropped during statistical transformation: by.
## ℹ This can happen when ggplot fails to infer the correct grouping structure in
##   the data.
## ℹ Did you forget to specify a `group` aesthetic or to convert a numerical
##   variable into a factor?

Vẽ biểu đồ điểm

group_by(phau_thuat_tai_vu_theo_nam,Nam_phau_thuat)%>% mutate(ti_le = 100*round(n/sum(n),3))->phau_thuat_tai_vu_theo_nam

ggplot(phau_thuat_tai_vu_theo_nam, aes(x=Nam_phau_thuat, y=ti_le, group=Phuong_phap_phau_thuat_tai_vu, color=Phuong_phap_phau_thuat_tai_vu)) +
  theme_classic()+geom_line()+geom_point()+
  labs(y = "Tỉ lệ", x="Năm phẫu thuật", color ="Phương pháp phẫu thuật tại vú")