1 Giới thiệu bộ dữ
liệu:
Bộ dữ liệu này chứa thông tin hư cấu mô phỏng thói quen chi tiêu của
1000 sinh viên thuộc các nhóm nhân khẩu học và ngành học khác nhau.
Dữ liệu bao gồm các thông tin như tuổi, giới tính, năm học, chuyên
ngành, thu nhập hàng tháng, học bổng nhận được và chi phí trong các danh
mục chi tiêu khác nhau.
Các danh mục chi tiêu bao gồm học phí, nhà ở, thực phẩm, giao thông
vận tải, sách vở & dụng cụ học tập, giải trí, chăm sóc cá nhân, công
nghệ, sức khỏe & chăm sóc sức khỏe và các chi phí khác.
Ngoài ra, bộ dữ liệu còn bao gồm phương thức thanh toán ưa thích của
từng sinh viên.
- Age: Độ tuổi của sinh viên
- Gender: Giới tính của sinh viên (Nam, Nữ, Không phân biệt nam
nữ)
- Year in School: Năm học tập (Năm nhất, Năm hai, Năm ba, Năm
cuối)
- Major: Ngành học chính
- Monthly Income: Thu nhập hàng tháng của sinh viên (đô la)
- Financial Aid: Học bổng nhận được của sinh viên (đô la)
- Tuition: Chi phí học phí (đô la)
- Housing: Chi phí nhà ở (đô la)
- Food: Chi phí ăn uống (đô la)
- Transportation: Chi phí đi lại (đô la)
- Books & Supplies: Chi phí sách vở và dụng cụ học tập (đô
la)
- Entertainment: Chi phí giải trí (đô la)
- Personal Care: Chi phí cho các vật dụng chăm sóc cá nhân (đô
la)
- Technology: Chi phí cho công nghệ (đô la)
- Health & Wellness: Chi phí cho sức khỏe và chăm sóc sức khỏe (đô
la)
- Miscellaneous: Chi phí lặt vặt (đô la)
- Preferred Payment Method: Phương thức thanh toán ưa thích (Tiền mặt,
Thẻ tín dụng/ghi nợ, Ứng dụng thanh toán di động)
library(xlsx)
library(DT)
nv5 <- read.csv( file = 'F:/Ngôn ngữ lập trình/student_spending (1).csv', header = T)
datatable(nv5)
2. Phân tích bộ dữ liệu
bằng biểu đồ
Biểu đồ 2.1: Biểu đồ
thể hiện phân bố số lượng sinh viên theo phương thức thanh toán ưa thích
được tách riêng theo ngành học chính
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.4 ✔ readr 2.1.5
## ✔ forcats 1.0.0 ✔ stringr 1.5.1
## ✔ ggplot2 3.5.0 ✔ tibble 3.2.1
## ✔ lubridate 1.9.3 ✔ tidyr 1.3.0
## ✔ purrr 1.0.2
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
nv5 %>% group_by(preferred_payment_method, major) %>% summarise(n=n()) %>%
ggplot(aes(x = preferred_payment_method,y = n)) +
geom_col(position = 'dodge', fill = 'white') +
facet_wrap(~major) +
geom_text(aes(label = n),vjust = 2, color = 'black') +
labs(x = 'Phương thức thanh toán ưa thích', y = 'Số lượng')
## `summarise()` has grouped output by 'preferred_payment_method'. You can
## override using the `.groups` argument.

- Về mặt kỹ thuật:
- group_by(preferred_payment_method, major): Nhóm dữ liệu theo hai
biến preferred_payment_method (Phương thức thanh toán ưa thích) và major
(Chuyên ngành).
- summarise(n=n()): Tính số lượng bản ghi trong mỗi nhóm và lưu trữ
trong biến n.
- ggplot: Khởi tạo một biểu đồ ggplot.
- aes(x = preferred_payment_method,y = n): Xác định trục x và trục y
của biểu đồ với dữ liệu tương ứng.
- geom_col(position = ‘dodge’): Thêm hình chữ nhật vào biểu đồ để thể
hiện số lượng cho từng phương thức thanh toán ưa thích. position =
‘dodge’ giúp các thanh xếp cạnh nhau không chồng chéo.
- fill = ‘white’ (tùy chọn màu sắc): Thiết lập này tô màu trắng cho
các cột.
- facet_wrap(~major): Chia biểu đồ thành các biểu đồ con theo từng
chuyên ngành.
- aes(label = n): Thiết lập này xác định nhãn là giá trị của cột “n”
(số lượng).
- vjust = 2 (tùy chọn căn chỉnh): Thiết lập này điều chỉnh vị trí dọc
của các nhãn, đặt chúng hơi thấp hơn so với đỉnh của các cột.
- color = ‘black’ (tùy chọn màu sắc): Thiết lập này tô màu đen cho các
nhãn.
- labs(x = ‘Phương thức thanh toán ưa thích’, y = ‘Số lượng’): Thêm
nhãn cho trục x và trục y.
- Nhận xétxét: Với tổng số 5 chuyên ngành cùng với 3 phương thức thanh
toán ưa thích, ta có thể thấy 5 biểu đồ tương ứng.
Nhìn sơ qua có thể dễ dàng nhận thấy cả 5 chuyên ngành đều có số
lượng sử dụng phương thức tiền mặt gần như thấp nhất. Thật ra các phương
thức đều có mức độ sử dụng không quá chênh lệch nhau
Tuy nhiên với ngành Biology và ngành Economics lại có sự ưa chuộng sử
dụng phương thức thanh toán bằng thẻ (Credit/Debit Card) hơn khá nhiều
so với sử dụng tiền mặt
Biểu đồ 2.2: Biểu đồ
cột thể hiện số lượng sinh viên có thu nhập tháng theo nhóm
nv5 <- nv5 %>% mutate(monin = cut(monthly_income,5, label = c('Ít', 'Khá ít','Trung bình','Khá nhiều','Nhiều')))
nv5 %>% ggplot(aes(x = monin)) +
geom_bar(fill = 'red')

- Về mặt kỹ thuật:
- mutate() để thêm một biến mới vào đối tượng “nv5”. Biến mới có tên
“monin” được tạo ra bằng cách phân chia giá trị carat thành 5 nhóm:
“Ít”, “Khá ít”,“Trung bình”,“Khá nhiều”,“Nhiều”.
- Hàm cut() được sử dụng để thực hiện việc phân chia này.
- Tham số đầu tiên của cut() là carat, biến mà chúng ta muốn phân
chia.
- Tham số thứ hai là 5, số lượng nhóm mà chúng ta muốn tạo.
- Tham số thứ ba là label, một vector chứa tên cho các nhóm.
- ggplot(aes(x = monin)) tạo ra một khung vẽ ggplot với trục x được
xác định bởi biến “monin”.
- geom_bar(fill = ‘red’) thêm một biểu đồ hình cột vào khung vẽ. Màu
của các cột được tô màu đỏ.
- theme_classic(): Áp dụng giao diện cổ điển cho biểu đồ.
- Nhận xét: Sau khi đã chia nhỏ ra làm 5 nhóm, ta có thể thấy số lượng
sinh viên có thu nhập tháng ở nhóm “Nhiều” là chiếm cao nhất với hơn 200
sinh viên, thấp nhất là nhóm “Khá ít”. Tuy nhiên độ chênh lệch của các
nhóm còn lại ngoại trừ nhóm “Nhiều” thì không đáng kể.
Biểu đồ 2.3: Biểu đồ
histogram thể hiện số lượng sinh viên ở từng mức học phí theo năm
học
nv5 %>% ggplot(aes(x = tuition, fill = year_in_school)) +
geom_histogram(binwidth = 100)

- Về mặt kỹ thuật:
- ggplot: Hàm tạo biểu đồ ggplot2.
- aes(x = tuition, fill = year_in_school): Xác định các biến được sử
dụng cho trục hoành (x), trục tung (y) và màu tô (fill) của biểu
đồ.
- geom_histogram: Thêm hình dạng biểu đồ histogram (biểu đồ hình cột)
vào biểu đồ.
- binwidth = 500: Xác định độ rộng của mỗi cột trong biểu đồ là 100
đơn vị
- Nhận xét: Biểu đồ thể hiện mối tương quan giữa mức học phí và số
lượng sinh viên. Số lượng sinh viên cũng thay đổi theo năm học. Cụ thể
ta có thể thấy số lượng sinh viên cao nhất tại mức học phí 5900. Trong
đó số lượng sinh viên năm cuối (Sophomore) rơi vào khoảng 10 sinh viên,
sinh viên năm ba (Senior) là khoảng 15 sinh viên, sinh viên năm hai
(Junior) là khoảng 12 sinh viên, sinh viên năm nhất (Freshman) là khoảng
12 sinh viên.
Biểu đồ 2.4: Biểu đồ
mật độ thể hiện tổng số thu nhập theo tháng của sinh viên
nv5 %>% ggplot(aes(x = monthly_income)) +
geom_density(fill = 'yellow')

- Về mặt kỹ thuật:
- ggplot: là một gói R dùng để tạo đồ thị.
- aes(x = monthly_income): xác định trục x của đồ thị là biến
“monthly_income” trong dataframe nv5.
- geom_density: là một lớp hình trong ggplot2 dùng để vẽ biểu đồ mật
độ.
- fill = ‘yellow’: tô màu cho biểu đồ mật độ bằng màu vàng.
- Nhận xét:
Biểu đồ cho thấy mật độ sinh viên tập trung cao nhất ở mức thu nhập
trong khoảng 1250 đến 1400. Mật độ sinh viên giảm dần khi thu nhập tăng
hoặc giảm so với mức 1000$. Biểu đồ cho thấy thu nhập của sinh viên
không đồng đều. Phần lớn sinh viên có thu nhập tập trung ở mức trung
bình (1000-1250). Số lượng sinh viên có thu nhập cao hoặc thấp hơn mức
trung bình ít hơn đáng kể.
Biểu đồ 2.5: Biểu đồ
tròn thể hiện số lượng sinh viên có mức chi phí đi lại hơn 100$ theo
giới tính
nv5.1 <- nv5 %>% filter(transportation>(100))
nv5.1 %>% group_by(gender) %>% summarise(n = n()) %>%
ggplot(aes(x = '', y = n,fill = gender)) +
geom_col(color = 'black', width = 1) +
coord_polar('y') +
geom_text(aes(x = 1.3, label = n),position = position_stack(vjust = .5), color = 'white') +
theme_void()

- về mặt kỹ thuật:
- nv5.1 <-: Gán kết quả của biểu thức bên phải cho một biến mới có
tên nv5.1.
- nv5 %>%: Sử dụng toán tử %>%, thường được dùng trong các thư
viện như dplyr để thực hiện chuỗi các phép toán trên dữ liệu trong một
khung dữ liệu. Biểu thức bên trái (nv5) là khung dữ liệu gốc.
- filter(transportation>(100)): Lọc khung dữ liệu nv5 chỉ giữ lại
các dòng mà giá trị trong cột transportation lớn hơn 100.
- group_by(gender): Nhóm dữ liệu theo cột gender.
- summarise(n = n()): Tạo một cột mới tên n chứa tổng số quan sát
trong mỗi nhóm (sử dụng n() để đếm số dòng).
- ggplot(aes(x = ’’, y = n, fill = gender)): Khởi tạo biểu đồ bằng thư
viện ggplot2.
- aes(x = ’’, y = n, fill = gender): Thiết lập thẩm mỹ cho biểu đồ:
- Trục X được để trống (x = ’’).
- Trục Y thể hiện số lượng (y = n).
- Màu sắc của các cột được tô theo giới tính (fill = gender).
- color = ‘black’ : Thiết lập màu sắc của các cột là đen.
- width = 1 : Thiết lập chiều rộng của các cột là 1 đơn vị.
- coord_polar(‘y’): Chuyển hệ tọa độ thành hệ tọa độ cực, với trục Y
giữ nguyên và trục X được tạo thành các tia bắt đầu từ tâm.
- aes(x = 1.3, label = n) : Thiết lập vị trí và nội dung của nhãn
- position = position_stack(vjust = .5): Xếp chồng các nhãn lên nhau
theo thứ tự nhóm (giới tính). vjust = .5 giúp căn chỉnh nhãn ở giữa theo
chiều dọc của cột.
- color = ‘white’ : Thiết lập màu sắc của nhãn là trắng.
- theme_void(): Áp dụng chủ đề mặc định, loại bỏ các thành phần không
cần thiết trên biểu đồ (trục X, khung, v.v.).
- Nhận xét: Nữ: 219 sinh viên (chiếm 49,6%) Nam: 210 sinh viên (chiếm
47,4%) Không xác định giới tính: 228 sinh viên (chiếm 3%) Nữ sinh có tỷ
lệ chi phí đi lại cao hơn nam sinh (chênh lệch 2,2%). Số lượng sinh viên
không xác định giới tính có chi phí đi lại cao nhất (chiếm 51%).
Biểu đồ 2.6: Biểu đồ
thể hiện chi phí ăn uống và chi phí nhà ở theo phương thức thanh toán
yêu thích
nv5 %>% ggplot(aes(x = food, y = housing, color = preferred_payment_method)) +
geom_point()

- Về mặt kỹ thuật:
- ggplot(aes()): Hàm ggplot() tạo ra một biểu đồ ggplot2 mới.
- aes(): Hàm aes() thiết lập ánh xạ giữa các biến trong dữ liệu và các
thuộc tính của hình học.
- x = food: Biến food được ánh xạ đến trục x.
- y = housing: Biến housing được ánh xạ đến trục y.
- color = preferred_payment_method: Biến preferred_payment_method được
ánh xạ đến màu sắc của các điểm.
- Hàm geom_point() thêm các điểm vào biểu đồ.
- Nhận xét: Tiền mặt là phương thức thanh toán ưa thích cho cả hai
khoản mục. Thẻ tín dụng/ghi nợ được sử dụng nhiều hơn cho chi phí nhà ở
so với chi phí ăn uống. Ứng dụng thanh toán di động ít được sử dụng nhất
cho cả hai khoản mục. Chi phí nhà ở cao hơn chi phí ăn uống. Mức độ
chênh lệch giữa chi phí nhà ở và chi phí ăn uống khi thanh toán bằng
tiền mặt cao hơn so với khi thanh toán bằng thẻ tín dụng/ghi nợ hoặc ứng
dụng thanh toán di động. Có xu hướng sử dụng thẻ tín dụng/ghi nợ nhiều
hơn cho chi phí nhà ở. Có xu hướng sử dụng ứng dụng thanh toán di động
ít hơn cho cả hai khoản mục.
Biểu đồ 2.7: Biểu đồ
thể hiện xu hướng của thu nhập theo tháng và chi phí sách vở của sinh
viên
nv5 %>% ggplot(aes(x = books_supplies, y = monthly_income)) +
geom_point(color = 'red') +
geom_smooth(method = 'lm', color = 'green')
## `geom_smooth()` using formula = 'y ~ x'

- Về mặt kỹ thuật:
- ggplot(aes()): Hàm ggplot() khởi tạo một biểu đồ ggplot2.
- aes(x = books_supplies, y = monthly_income): Xác định trục x và trục
y của biểu đồ.
- x = books_supplies: Trục x sẽ hiển thị dữ liệu từ cột books_supplies
trong tập dữ liệu nv5.
- y = monthly_income: Trục y sẽ hiển thị dữ liệu từ cột monthly_income
trong tập dữ liệu nv5.
- geom_point(): Thêm các điểm dữ liệu vào biểu đồ.
- color = ‘red’: Màu của các điểm dữ liệu được đặt thành màu đỏ.
- geom_smooth: Thêm đường cong vào biểu đồ.
- method = ‘lm’: Sử dụng phương pháp hồi quy tuyến tính để tạo đường
cong.
- color = ‘green’: Màu của đường cong được đặt thành màu xanh lá
cây.
- Nhận xét: Thu nhập của sinh viên có xu hướng tăng dần, chi phí sách
vở có xu hướng biến động. Mức thu nhập cao hơn mức chi phí sách vở.
Khoảng cách giữa thu nhập và chi phí có xu hướng thu hẹp.
Biểu đồ 2.8: Biểu đồ
violin thể hiện sự phân bố của thu nhập cho từng phương thức thanh
toán.
library(tidyr)
library(forcats)
library(hrbrthemes)
library(viridis)
## Loading required package: viridisLite
library(ggplot2)
nv5 %>% ggplot(aes(x=preferred_payment_method, y=monthly_income, fill=preferred_payment_method, color=preferred_payment_method)) +
geom_violin(width=2.1, linewidth=0.2) +
scale_fill_viridis(discrete=TRUE) +
scale_color_viridis(discrete=TRUE) +
theme_ft_rc() +
theme(
legend.position="none"
) +
coord_flip() +
xlab("") +
ylab("")

- Về mặt kỹ thuật:
- library(tidyr):Câu lệnh này tải thư viện tidyr được sử dụng để
chuyển đổi dữ liệu giữa các dạng khác nhau, giúp phân tích dữ liệu dễ
dàng hơn.
- library(forcats): Thư viện forcats cung cấp các hàm để xử lý các
biến yếu tố (categorical variables) trong R.
- library(hrbrthemes): Thư viện hrbrthemes cung cấp các chủ đề đẹp mắt
để tùy chỉnh biểu đồ trong R.
- library(viridis): Thư viện viridis cung cấp bảng màu đẹp và được tối
ưu hóa cho việc phân biệt màu sắc.
- library(ggplot2): Thư viện ggplot2 là thư viện chính để tạo ra các
biểu đồ hình violin trong R.
- aes(): Xác định trục x và trục y của biểu đồ.
- x = preferred_payment_method: Trục hoành biểu diễn phương thức thanh
toán ưa thích.
- y = monthly_income: Trục tung biểu diễn thu nhập hàng tháng.
- fill = preferred_payment_method: Màu tô của violin phụ thuộc vào
phương thức thanh toán.
- color = preferred_payment_method: Màu đường viền của violin phụ
thuộc vào phương thức thanh toán.
- geom_violin(width=2.1, linewidth=0.2): Thêm hình violin vào biểu đồ
với độ rộng 2.1 và độ dày đường viền là 0.2.
- scale_fill_viridis(discrete=TRUE): Sử dụng bảng màu viridis để tô
cho các violin theo phương thức thanh toán (discrete = TRUE vì đây là
biến yếu tố).
- scale_color_viridis(discrete=TRUE): Sử dụng bảng màu viridis cho
đường viền của violin theo phương thức thanh toán.
- theme_ft_rc(): Áp dụng chủ đề mặc định của hrbrthemes cho biểu
đồ.
- theme(legend.position=“none”): Xóa bỏ phần chú giải (legend) vì có
thể không cần thiết trong biểu đồ violin.
- coord_flip(): Đảo chiều trục hoành và trục tung để thu nhập hàng
tháng (y) nằm trên trục ngang và phương thức thanh toán (x) nằm trên
trục dọc.
- xlab(““) + ylab(”“): Xóa bỏ nhãn mặc định của trục hoành và trục
tung (có thể thêm nhãn tùy chỉnh sau).
- Nhận xét:
- Ứng dụng thanh toán di động: Phân bố thu nhập tương đối đồng đều,
tập trung ở mức trung bình (khoảng 1000 - 1250). Tuy nhiên, cũng có một
số người có thu nhập cao hơn (trên 1500$) và thấp hơn (dưới 750) sử dụng
phương thức thanh toán này.
- Thẻ tín dụng/ghi nợ: Phân bố thu nhập rộng hơn so với ứng dụng thanh
toán di động, với nhiều người có thu nhập cao hơn (trên 1250$). Tuy
nhiên, vẫn có một số người có thu nhập thấp sử dụng phương thức thanh
toán này.
- Tiền mặt: Phân bố thu nhập tập trung ở mức thấp (dưới 1000). Rất ít
người sử dụng tiền mặt để thanh toán cho các khoản thu nhập cao
Biểu đồ 2.9: Biểu đồ
mô tả mối quan hệ giữa chi phí ăn uống và độ tuổi của sinh viên
m <- head(nv5,50)
m %>% ggplot(aes_string(x = "food", y = "age")) +
geom_line(color="#69b3a2", size=1) +
theme_update() +
labs(x = "Chi phí ăn uống", y = "Độ tuổi của sinh viên")
## Warning: `aes_string()` was deprecated in ggplot2 3.0.0.
## ℹ Please use tidy evaluation idioms with `aes()`.
## ℹ See also `vignette("ggplot2-in-packages")` for more information.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
## 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.

- Về mặt kỹ thuật:
- m: Tên biến để lưu trữ kết quả.
- head(nv5,50): Lấy 50 hàng đầu tiên của tập dữ liệu nv5.
- ggplot: Hàm tạo biểu đồ ggplot2.
- aes_string(x = “food”, y = “age”): Xác định trục x và y cho biểu
đồ.
- aes_string: Hàm ánh xạ các biến thành chuỗi.
- “food”: Tên cột dữ liệu cho trục x.
- “age”: Tên cột dữ liệu cho trục y.
- geom_line: Thêm một lớp hình dạng đường vào biểu đồ.
- color=“#69b3a2”: Xác định màu sắc cho đường.
- size=1: Xác định độ dày cho đường.
- theme_update: Cập nhật giao diện của biểu đồ
- labs: Thêm nhãn cho trục x và y.
- x = “Chi phí ăn uống”: Nhãn cho trục x.
- y = “Độ tuổi của sinh viên”: Nhãn cho trục y.
- Nhận xét: Sinh viên 18 tuổi: Chi phí ăn uống trung bình thấp nhất,
dao động trong khoảng 100-200. Sinh viên 20-22 tuổi: Chi phí ăn uống
tăng lên, tập trung ở mức 200-300. Sinh viên 24 tuổi: Chi phí ăn uống
cao nhất, với phần lớn nằm trên mức 300.
Biểu đồ 2.10: Biểu
đồ động thể hiện mối quan hệ giữa chi phí cho các vật dụng chăm sóc cá
nhân và thu nhập hàng tháng của sinh viên theo phương thức thanh toán ưa
thích
library(revealjs)
library(gganimate)
library(magick)
## Linking to ImageMagick 6.9.12.98
## Enabled features: cairo, freetype, fftw, ghostscript, heic, lcms, pango, raw, rsvg, webp
## Disabled features: fontconfig, x11
m %>% ggplot(aes(x = monthly_income , y = personal_care, color = preferred_payment_method)) +
geom_line() +
geom_point(size=2) +
transition_reveal(monthly_income, keep_last = F)
## `geom_line()`: Each group consists of only one observation.
## ℹ Do you need to adjust the group aesthetic?
## `geom_line()`: Each group consists of only one observation.
## ℹ Do you need to adjust the group aesthetic?

- Về mặt kỹ thuật:
- library(gganimate): Thêm thư viện gganimate cho phép tạo hiệu ứng
chuyển động trong biểu đồ ggplot.
- library(magick): Thêm thư viện magick để xử lý hình ảnh (có thể cần
thiết cho việc tạo biểu đồ động).
- m %>% ggplot(aes(x = monthly_income , y = personal_care, color =
preferred_payment_method)): Khởi tạo một biểu đồ ggplot với trục hoành
là thu nhập hàng tháng, trục dọc là chi tiêu cho các vật dụng chăm sóc
cá nhân, và màu sắc được phân biệt theo phương thức thanh toán.
- geom_line(): Thêm một đường thẳng vào biểu đồ để thể hiện xu hướng
của chi tiêu linh tinh theo thu nhập hàng tháng.
- geom_point(size=2): Thêm các điểm dữ liệu vào biểu đồ với kích thước
2.
- transition_reveal(monthly_income, keep_last = F): Đây là lệnh quan
trọng của thư viện gganimate. Nó tạo hiệu ứng chuyển động cho biểu đồ
theo từng giá trị của thu nhập hàng tháng (monthly_income). Tham số
- keep_last=F đảm bảo rằng các điểm dữ liệu cũ biến mất khi giá trị
thu nhập tăng.
Biểu đồ 2.11: Biểu
đồ cột thể hiện số lượng sinh viên ở các mức thu nhập theo giới
tính
tgmn <- nv5 %>%
group_by(monin, gender) %>%
summarise(n = n())
## `summarise()` has grouped output by 'monin'. You can override using the
## `.groups` argument.
tgmn %>%
ggplot(aes(x = monin, y = n, fill = gender)) +
geom_col(position = position_dodge())

- Về mặt kỹ thuật:
- group_by(monin, gender): Nhóm dữ liệu theo hai biến monin và
gender.
- summarise(n = n()): Tính tổng số lượng (n) cho mỗi nhóm được tạo ra
bởi group_by.
- ggplot(aes(x = monin, y = n, fill = gender)): Tạo biểu đồ ggplot2
với:
- Trục x: Biến monin
- Trục y: Biến n
- Màu sắc: Biến gender
- geom_col(position = position_dodge()): Thêm hình chữ nhật (geom_col)
cho mỗi nhóm, sử dụng position_dodge để tránh chồng chéo.
- Nhận xét: Ta có thể thấy hầu như tại các mức thu nhập hàng tháng,
thì số lượng sinh viên nam đều cao hơn sinh viên nữ. Độ chênh lệch giữa
các sinh viên là không quá lớn
Biểu đồ 2.12: Biểu
đồ hiển thị số lượng người dùng theo từng phương thức thanh toán, được
phân chia theo giới tính (nam - đỏ, nữ - xanh).
nv5.2 <- nv5 %>% group_by(preferred_payment_method, gender) %>% summarise(n = n())
## `summarise()` has grouped output by 'preferred_payment_method'. You can
## override using the `.groups` argument.
nv5.2 %>% ggplot(aes(x = preferred_payment_method, y = n)) +
geom_col(data = nv5.2 %>% filter(gender == 'Male'), fill = 'red') +
geom_col(data = nv5.2 %>% filter(gender == 'Female'), fill = 'blue')

- Về mặt kỹ thuật:
- group_by(preferred_payment_method, gender): Nhóm dữ liệu theo hai
trường “preferred_payment_method” (phương thức thanh toán ưa thích) và
“gender” (giới tính).
- summarise(n = n()): Tạo ra một cột mới tên là “n” chứa số lượng các
dòng dữ liệu trong mỗi nhóm (sử dụng hàm n() để đếm).
- aes(x = preferred_payment_method, y = n): ánh xạ lên trục hoành (x)
biểu diễn “preferred_payment_method” và trục tung (y) biểu diễn số lượng
(n).
- data = nv5.2 %>% filter(gender == ‘Male’): Lọc dữ liệu của nam
giới (gender == ‘Male’) từ nv5.2.
- fill = ‘red’: Tô màu đỏ cho các cột đại diện cho nam giới.
- Lặp lại tương tự với geom_col thứ hai để thêm các cột cho nữ giới
(gender == ‘Female’) và tô màu xanh (fill = ‘blue’).
- Nhận xét:
- Tiền mặt: Đây là phương thức thanh toán ít phổ biến nhất, tuy nhiên
tỷ lệ sử dụng ở cả nam và nữ đang dần tăng lên.
- Thẻ tín dụng/ghi nợ: Nam giới có xu hướng sử dụng thẻ tín dụng/ghi
nợ nhiều hơn nữ giới.
- Ứng dụng thanh toán di động: Dù là nam hay nữ, thì đây cũng là
phương thức thanh toán được sử dụng phổ biến nhất, chiếm tỷ lệ cao nhất
trong tất cả các phương thức.
- Và tất cả các phương thức thanh toán đều cho thấy số lượng sinh viên
nam cũng chiếm ưu thế hơn sinh viên nữ.
Biểu đồ 2.13: Biểu
đồ diện tích hiển thị mối quan hệ giữa biến transportation (Chi tiêu đi
lại) và biến major (Ngành học chính)
nv5 %>% ggplot(aes(x = transportation , y = major)) +
geom_area(fill = "pink") +
labs(x = "Chi tiêu đi lại", y = "Ngành học chính")

- Về mặt kỹ thuật:
- ggplot(aes(x = transportation, y = major)): Khởi tạo một biểu đồ
ggplot2 với trục x là biến transportation và trục y là biến major.
- geom_area: Thêm hình dạng khu vực vào biểu đồ.
- fill = “pink”: Tô màu khu vực bằng màu hồng.
- abs(x = “Chi tiêu đi lại”, y = “Ngành học chính”): Thêm nhãn cho
trục x là “Chi tiêu đi lại” và trục y là “Ngành học chính”.
- Nhận xét: Có mối tương quan tích cực giữa chi tiêu đi lại và ngành
học chính. Ngành học có chi phí đi lại cao thường thu hút sinh viên từ
xa, dẫn đến nhu cầu đi lại nhiều hơn. Ngành học có chi phí đi lại thấp
thường thu hút sinh viên địa phương, dẫn đến nhu cầu đi lại ít hơn.
Biểu đồ 2.14: Biểu
đồ thể hiện mật độ sinh viên theo từng ngành học và mức học bổng nhận
được.
nv5 %>% ggplot( aes(x = financial_aid, y = major)) +
geom_bin_2d() +
labs( x = "Học bổng nhận được của sinh viên", y = "Ngành học chính")

- Về mặt kỹ thuật:
- ggplot: Hàm để tạo biểu đồ ggplot2.
- aes: Hàm để ánh xạ các biến trong bộ dữ liệu với các trục x và y của
biểu đồ.
- x = financial_aid: Biến “financial_aid” được ánh xạ với trục x.
- y = major: Biến “major” được ánh xạ với trục y.
- geom_bin_2d: Hàm để tạo biểu đồ 2D dạng ô vuông, thể hiện mật độ của
dữ liệu theo hai biến.
- labs: Hàm để chỉnh sửa nhãn cho các trục x và y.
- x = “Học bổng nhận được của sinh viên”: Nhãn cho trục x được thay
đổi thành “Học bổng nhận được của sinh viên”.
- y = “Ngành học chính”: Nhãn cho trục y được thay đổi thành “Ngành
học chính”.
- Nhận xét: Nhìn chung, các ngành học có mật độ sinh viên cao thường
có mức học bổng thấp hơn. Ví dụ: Tâm lý học có mật độ sinh viên cao nhất
nhưng mức học bổng thấp nhất. Ngược lại, các ngành học có mật độ sinh
viên thấp thường có mức học bổng cao hơn. Ví dụ: Kỹ thuật có mật độ sinh
viên thấp nhất nhưng mức học bổng cao nhất.
Biểu đồ 2.15: Biểu
đồ thể hiện mật độ phân bố của “Phương thức thanh toán ưa thích” theo
từng mức “Học phí”.
nv5 %>% ggplot(aes(x = tuition, y = preferred_payment_method)) +
geom_violin(fill = "#43766C") +
labs(x = "Học phí",
y = "Phương thức thanh toán ưa thích")

- Về mặt kỹ thuật:
- aes(x = tuition, y = preferred_payment_method): Xác định các biến
được sử dụng cho trục x và y của biểu đồ.
- eom_violin: Thêm lớp biểu đồ violin vào ggplot object.
- fill = “#43766C”: Xác định màu tô cho các violin
- labs(x = “Học phí”, y = “Phương thức thanh toán ưa thích”): Thêm
tiêu đề cho trục x và y.
- Nhận xét:
Biểu đồ cho thấy mối tương quan giữa học phí và phương thức thanh toán
ưa thích của sinh viên. Thẻ tín dụng/ghi nợ là phương thức thanh toán
phổ biến nhất, nhưng ví điện tử thanh toán và tiền mặt cũng được sử dụng
ở một mức độ nhất định.
Biểu đồ 2.16: Biểu
đồ mật độ 2D thể hiện mối tương quan giữa thu nhập hàng tháng
(monthly_income) và chi tiêu cho công nghệ (technology).
m %>%
ggplot(aes(x = monthly_income, y = technology))+
stat_density2d()+
geom_point()+
theme_minimal()

- Về mặt kỹ thuật:
- aes(x = monthly_income, y = technology): Xác định các biến được sử
dụng cho trục x và y của biểu đồ.
- geom_point: là một lớp (layer) trong ggplot2 dùng để hiển thị các
điểm dữ liệu trên đồ thị.
- stat_density2d: là một lớp (layer) trong ggplot2 dùng để hiển thị
mật độ phân bố của dữ liệu.
- theme_minimal: là một chủ đề (theme) được thiết kế sẵn trong ggplot2
giúp tạo đồ thị với giao diện tối giản.
- Nhận xét: Mật độ điểm dữ liệu không đồng đều. Có một số khu vực tập
trung nhiều điểm dữ liệu hơn, cho thấy sự phổ biến của các mức thu nhập
và chi tiêu công nghệ nhất định. Hầu hết các điểm dữ liệu tập trung ở
khu vực thu nhập thấp và chi tiêu công nghệ thấp. Điều này cho thấy rằng
phần lớn người tiêu dùng có thu nhập thấp và chi tiêu ít cho công
nghệ.
Biểu đồ 2.17: Biểu
đồ tán xạ với các điểm thể hiện mối quan hệ giữa hai biến
“books_supplies” và “gender”
nv5 %>%ggplot(aes(x = books_supplies, y = gender)) +
geom_jitter()

- về mặt kỹ thuật:
- aes(x = books_supplies, y = gender): Xác định các biến được sử dụng
cho trục x và y của biểu đồ.
- geom_jitter tạo biểu đồ dạng “jitter plot”
- Nhận xét: Hầu hết các điểm dữ liệu nằm trong vùng có chi tiêu từ 100
đến 300 cho sách vở. Có một số điểm dữ liệu nằm ngoài vùng này, cho thấy
có một số người chi tiêu cho sách vở nhiều hơn hoặc ít hơn mức trung
bình. Có một số điểm dữ liệu chồng chéo nhau, cho thấy có những người
thuộc cả hai giới tính có mức chi tiêu tương tự cho sách vở.
Biểu đồ 2.18: Biểu
đồ hộp hiển thị sự phân bố tuổi (age) theo phương thức thanh toán ưa
thích (preferred_payment_method) và theo tháng (monin)
nv5 %>%
ggplot( aes(x=monin, y=age, fill=preferred_payment_method)) +
geom_boxplot() +
scale_fill_viridis(discrete = TRUE, alpha=0.6, option="A") +
theme_ipsum() +
theme(
legend.position="none",
plot.title = element_text(size=11)
) +
xlab("")

- Về mặt kỹ thuật:
- aes(x=monin, y=age): Xác định trục hoành (x) theo biến “monin” và
trục tung (y) theo biến “age” trong bộ dữ liệu.
- fill=preferred_payment_method: Quy định màu sắc của các hộp theo
biến “preferred_payment_method”.
- geom_boxplot(): Thêm hình hộp (boxplot) vào biểu đồ để hiển thị sự
phân bố của dữ liệu theo từng nhóm (xác định bởi biến “monin”).
- scale_fill_viridis: Sử dụng bảng màu “viridis” mặc định của
ggplot2.
- discrete = TRUE: Xác định đây là dữ liệu rời rạc (categorical) dựa
trên các phương thức thanh toán khác nhau.
- alpha=0.6: Thiết lập độ mờ cho màu sắc (0 là trong suốt hoàn toàn, 1
là hoàn toàn đục).
- option=“A”: Có thể là tùy chọn bổ sung cho bảng màu “viridis”, cần
tham khảo tài liệu của ggplot2 để biết chi tiết (tùy thuộc vào phiên
bản).
- theme_ipsum(): Áp dụng chủ đề mặc định của ggplot2 (gồm kiểu font
chữ, chú thích,…).
- legend.position=“none”: Ẩn đi phần chú giải (legend) vì màu sắc hộp
đã thể hiện theo “preferred_payment_method”.
- plot.title = element_text(size=11): Thiết lập kích thước chữ (size)
của tiêu đề biểu đồ thành 11.
- xlab(““): Xóa bỏ nhãn mặc định của trục hoành (có thể do trục hoành
đã được xác định bằng biến”monin” ở trên).
- Nhận xét:
Biểu đồ hộp cho thấy mối tương quan giữa tuổi tác, phương thức thanh
toán ưa thích và thu nhập hàng tháng. Nhìn chung, người trẻ tuổi có xu
hướng sử dụng các phương thức thanh toán hiện đại như ví điện tử, trong
khi người lớn tuổi có xu hướng sử dụng các phương thức thanh toán truyền
thống như tiền mặt. Mức thu nhập cũng ảnh hưởng đến phương thức thanh
toán ưa thích, với những người có thu nhập cao hơn có xu hướng sử dụng
thẻ tín dụng và ví điện tử nhiều hơn.
Biểu đồ 2.19: Biểu
đồ thể hiện số lượng sinh viên tại các mức thu nhập
nv5 %>% group_by(monin) %>% summarise(n = n()) %>%
ggplot(aes(x = '', y = n,fill = monin)) +
geom_col() +
geom_text(aes(label = n),position = position_stack(vjust = 1),color = "white")

- Về mặt kỹ thuật:
- aes(x = ’’, y = n,fill = monin):
- x = ’’: Gán giá trị rỗng cho trục x (không hiển thị)
- y = n: Gán giá trị n (số lượng quan sát) cho trục y
- fill = monin: Tô màu cho các thanh theo giá trị của cột monin
- geom_col(): Thêm biểu đồ dạng cột
- geom_text(aes(label = n)): Thêm nhãn cho các cột, hiển thị giá trị
n
- position = position_stack(vjust = 1): Vị trí các nhãn được đặt ở
trên cùng của mỗi cột
- color = “white”: Màu sắc của nhãn là trắng
- Nhận xét: Biểu đồ cho thấy sự phân bố không đồng đều số lượng sinh
viên theo mức thu nhập. Nhóm sinh viên có mức thu nhập khá chiếm số
lượng cao nhất, cho thấy đây là nhóm có khả năng tiếp cận giáo dục cao
hơn. Nhóm sinh viên có mức thu nhập thấp và cao có số lượng thấp hơn,
cho thấy đây là nhóm có thể gặp khó khăn trong việc tiếp cận giáo
dục.
Biểu đồ 2.20: Biểu
đồ cột thể hiện số lượng sinh viên theo phương thức thanh toán ưa
thích
nv5 %>% group_by(preferred_payment_method) %>% summarise(n = n()) %>%
ggplot(aes(preferred_payment_method,n)) +
geom_col(fill='#C69774') +
geom_text(aes(label = n),vjust = -2, color = '#637E76') +
labs(x = 'Phương thức thanh toán ưa thích', y = 'Số lượng') +
coord_flip()

- Về mặt kỹ thuật:
- group_by(preferred_payment_method): Nhóm dữ liệu trong nv5 theo biến
preferred_payment_method (phương thức thanh toán ưa thích). summarise(n
= n()): Tạo một cột mới tên n chứa số lượng phần tử trong mỗi nhóm (sử
dụng hàm n() để đếm số lượng).
- geom_col(): Thêm hình dạng cột vào biểu đồ.
- aes(): ánh xạ biến preferred_payment_method lên trục x, n lên trục
y
- fill=‘#C69774’: Thiết lập màu sắc cho các cột là #C69774 (có thể
thay bằng tên màu hoặc mã màu khác).
- geom_text(): Thêm nhãn (số lượng) vào mỗi cột.
- aes(label = n): Thiết lập nội dung nhãn là giá trị của biến n.
- vjust = -2: Điều chỉnh vị trí của nhãn, dịch xuống 2 đơn vị so với
vị trí mặc định trên đỉnh cột.
- color = ‘#637E76’: Thiết lập màu sắc cho nhãn là #637E76 (có thể
thay bằng tên màu hoặc mã màu khác).
- labs(): Thiết lập nhãn cho các trục.
- x = ‘Loại’: Nhãn cho trục x là “Loại” (phương thức thanh toán).
- y = ‘Số lượng’: Nhãn cho trục y là “Số lượng” (số người chọn phương
thức thanh toán).
- Nhận xét: Biểu đồ cho thấy rằng sinh viên ngày càng ưa chuộng các
phương thức thanh toán không dùng tiền mặt như ứng dụng thanh toán di
động và thẻ tín dụng/ghi nợ. Tuy nhiên, tiền mặt vẫn là một phương thức
thanh toán phổ biến với sinh viên.