1 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 2. Phân tích bộ dữ liệu bằng biểu đồ

2.1 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

library(tidyverse)
## ── 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

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

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

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

2.5 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%).

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

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

2.8 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

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

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

2.11 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

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

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

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

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

2.16 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ệ.

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

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

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

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