Tài liệu này là một tấm bản đồ tổng quan về những gì ngôn ngữ R có thể làm trong công việc phân tích dữ liệu, được viết cho người lần đầu tiếp cận. Mục tiêu của nó không phải là dạy bạn thành thạo từng kỹ thuật, mà là giúp bạn nhìn thấy toàn cảnh: R được dùng vào những việc gì, mỗi việc cần công cụ nào, và bạn nên học theo trình tự ra sao. Khi đã có bản đồ này trong đầu, bạn sẽ biết mình đang đứng ở đâu và cần đi tiếp về hướng nào.
Cách tiếp cận của tài liệu là đi từ bức tranh lớn đến từng nhánh cụ thể. Phần đầu thiết lập nền tảng tối thiểu để bạn khởi động. Phần giữa tập trung vào việc viết và xuất bản tài liệu, vì đây là kỹ năng giúp bạn biến phân tích thành sản phẩm chia sẻ được. Phần sau lần lượt giới thiệu năm lĩnh vực ứng dụng chính của R, mỗi lĩnh vực kèm một ví dụ đặt trong tình huống thực tế để bạn thấy được giá trị ứng dụng chứ không chỉ là cú pháp. Những phần chuyên sâu của từng lĩnh vực sẽ được trình bày trong các tài liệu riêng về sau; ở đây ta chỉ vẽ bản đồ.
Về cách trình bày code. Phần lớn đoạn code trong tài liệu được trình bày để minh họa và không tự chạy khi kết xuất, nhằm đảm bảo tài liệu xuất bản trơn tru. Một số ví dụ trực quan hóa cốt lõi sử dụng dữ liệu có sẵn trong R sẽ chạy thật để bạn thấy kết quả. Khi áp dụng vào dự án của mình, bạn sẽ chạy chúng trong một phiên làm việc thực tế.
Nhiều người mới lầm tưởng R chỉ là một công cụ thống kê. Thực ra R là một nền tảng hoàn chỉnh cho cả vòng đời của dữ liệu, từ lúc thu thập đến lúc trình bày. Có thể hình dung năng lực của R trải trên năm lĩnh vực, và toàn bộ tài liệu này được tổ chức quanh chúng.
Lĩnh vực thứ nhất là nghiên cứu định lượng học thuật, nơi R thực hiện các kiểm định thống kê, phân tích nhân tố và mô hình cấu trúc. Lĩnh vực thứ hai là phân tích kinh doanh và dữ liệu, tập trung vào việc khám phá dữ liệu và trực quan hóa để rút ra hiểu biết. Lĩnh vực thứ ba là dashboard tương tác, biến phân tích tĩnh thành ứng dụng web cho người dùng tự khám phá. Lĩnh vực thứ tư là data engineering, nơi R kết nối cơ sở dữ liệu, xử lý dữ liệu lớn và xây dựng các quy trình tự động. Lĩnh vực thứ năm là trình bày và truyền đạt, gồm việc tạo báo cáo, trang web và trình chiếu trực tiếp từ code.
Một điều quan trọng cần nhận ra ngay là cả năm lĩnh vực này đều chia sẻ chung một nền tảng: cùng một ngôn ngữ, cùng một bộ công cụ xử lý dữ liệu, và cùng một triết lý về tính tái lập. Vì vậy, công sức bạn bỏ ra học phần nền tảng sẽ được dùng lại ở mọi lĩnh vực. Đó là lý do tài liệu này dành ưu tiên cho phần nền trước khi đi vào từng nhánh.
R là ngôn ngữ và môi trường thực hiện mọi phép tính. RStudio là môi trường làm việc tích hợp bao quanh R, cung cấp giao diện thuận tiện để viết code, xem kết quả và quản lý dự án. Bạn cài R trước rồi cài RStudio sau, và trong thực tế hằng ngày bạn luôn mở RStudio chứ không mở R trực tiếp. Một cách ví von quen thuộc, R là động cơ còn RStudio là khoang lái.
Khi mở RStudio, màn hình được chia thành các khung có vai trò riêng. Khung Source là nơi bạn viết và lưu code thành tệp. Khung Console là nơi R thực thi lệnh và in kết quả. Khung Environment liệt kê các đối tượng dữ liệu đang nằm trong bộ nhớ. Khung còn lại gom các thẻ tiện ích như xem biểu đồ, quản lý gói và tra cứu trợ giúp. Nguyên tắc làm việc lành mạnh là viết code ở khung Source rồi cho chạy, thay vì gõ trực tiếp vào Console, bởi mọi thứ gõ thẳng vào Console sẽ mất khi đóng phần mềm.
Về cú pháp, chỉ cần nắm vài ký hiệu là đủ để bắt đầu. Ký hiệu
<- dùng để gán giá trị vào một tên. Lời gọi hàm có dạng
tên hàm theo sau bởi cặp ngoặc chứa đối số. Ký hiệu $ truy
cập một cột trong bảng dữ liệu. Cặp ngoặc vuông trích xuất theo hàng và
cột. Mọi nội dung sau dấu # là ghi chú cho người đọc.
Bản thân R chỉ cung cấp các chức năng cơ bản. Mọi năng lực chuyên sâu
đến từ các gói, là những phần mở rộng do cộng đồng phát triển. Bạn cài
một gói một lần duy nhất bằng install.packages, nhưng phải
nạp nó vào mỗi phiên làm việc bằng library. Việc phân biệt
hai thao tác này giúp tránh lỗi phổ biến nhất của người mới, đó là gọi
một hàm trước khi nạp gói chứa nó.
Trong số hàng nghìn gói của R, có một bộ đặc biệt quan trọng tên là
tidyverse. Theo R for Data Science của Wickham và cộng sự,
tidyverse là một tập hợp các gói được thiết kế để phối hợp với nhau, dựa
trên một triết lý chung về cấu trúc dữ liệu gọn gàng. Nhờ triết lý nhất
quán này, khi đã quen một gói trong tidyverse bạn sẽ học các gói còn lại
dễ dàng hơn nhiều. Các thành phần thường dùng gồm dplyr để
biến đổi dữ liệu, ggplot2 để vẽ biểu đồ, tidyr
để sắp xếp dữ liệu, và readr cùng readxl để
nhập dữ liệu.
Một đặc trưng của tidyverse là toán tử ống dẫn, viết là
|> hoặc %>%, cho phép nối các bước xử lý
thành một chuỗi đọc từ trái sang phải như một câu văn. Thay vì lồng
nhiều hàm vào nhau khó đọc, bạn diễn đạt ý tưởng theo trình tự tự nhiên:
lấy dữ liệu này, rồi lọc, rồi nhóm, rồi tóm tắt.
Để không bị lạc giữa vô số hàm và kỹ thuật, bạn cần một khung tư duy về trình tự công việc. R for Data Science đề xuất một mô hình đã trở thành chuẩn mực, gồm sáu bước nối tiếp nhau. Trước hết là nhập dữ liệu vào R. Tiếp theo là làm cho dữ liệu gọn gàng, nghĩa là sắp xếp sao cho mỗi biến là một cột và mỗi quan sát là một hàng. Sau đó là biến đổi dữ liệu, gồm lọc, tạo biến mới và tính toán tóm tắt. Kế đến là trực quan hóa để khám phá, rồi mô hình hóa để trả lời câu hỏi nghiên cứu. Cuối cùng là truyền đạt kết quả cho người khác.
Hai bước trực quan hóa và mô hình hóa là phần thú vị nhất, nhưng
chúng chỉ thực hiện được sau khi dữ liệu đã sạch và gọn. Trên thực tế,
người làm dữ liệu thường dành phần lớn thời gian cho các bước nhập, làm
sạch và biến đổi. Đoạn code dưới đây minh họa một chuỗi xử lý điển hình
trên dữ liệu mtcars có sẵn trong R, trả lời câu hỏi thực
tế: trung bình, các xe có số xi-lanh khác nhau tiêu hao nhiên liệu ra
sao?
mtcars |>
group_by(cyl) |> # nhóm theo số xi-lanh
summarise(
so_xe = n(),
mpg_trung_binh = round(mean(mpg), 1), # mpg = số dặm mỗi gallon
trong_luong_tb = round(mean(wt), 2)
) |>
arrange(desc(mpg_trung_binh))Kết quả cho thấy một quy luật rõ ràng và có ý nghĩa thực tiễn: xe càng nhiều xi-lanh thì càng nặng và càng tốn nhiên liệu. Đây chính là tinh thần của khoa học dữ liệu, biến một bảng số thô thành một phát biểu mà người ra quyết định có thể dùng được.
Đối với người mới, kỹ năng đọc thông báo lỗi quan trọng không kém
việc viết code. Thông báo lỗi trong R là một câu mô tả vấn đề, không
phải một lời quở trách. Nguyên tắc là luôn đọc dòng bắt đầu bằng chữ
Error, vì nó nói thẳng cái gì đang sai. Chẳng hạn, thông
báo cho biết đường dẫn không tồn tại nghĩa là R không tìm thấy tệp ở vị
trí bạn chỉ định; thông báo không tìm thấy hàm nghĩa là bạn chưa nạp gói
chứa hàm đó. Cũng cần phân biệt lỗi với cảnh báo: lỗi làm dừng chương
trình và buộc phải sửa, còn cảnh báo chỉ nhắc nhở trong khi code vẫn
chạy.
Về tổ chức công việc, công cụ then chốt là R Project. Khi bạn tạo một R Project, RStudio tự đặt thư mục làm việc bằng thư mục chứa dự án, nhờ đó bạn không phải khai báo đường dẫn thủ công và mọi đường dẫn tương đối đều hoạt động ổn định. Một cấu trúc thư mục hợp lý nên tách riêng dữ liệu gốc, code và kết quả đầu ra, đồng thời không bao giờ chỉnh sửa dữ liệu gốc bằng tay mà luôn xử lý qua code.
Đằng sau những thực hành này là một nguyên tắc lớn gọi là tính tái lập. Một phân tích được xem là đáng tin khi người khác có thể chạy lại đúng quy trình của bạn và thu được cùng kết quả. Điều này đòi hỏi code phải tự chạy được từ đầu đến cuối mà không phụ thuộc vào trạng thái đã lưu sẵn trong bộ nhớ. Vì lý do đó, bạn nên tắt tính năng tự lưu môi trường khi thoát RStudio, để mỗi phiên làm việc đều bắt đầu từ một môi trường sạch.
Khi đã có kết quả phân tích, bạn cần một cách trình bày sao cho phần diễn giải và phần kết quả luôn nhất quán với nhau. Đây là lúc các công cụ tài liệu tái lập phát huy vai trò. Chúng cho phép bạn trộn ba thành phần trong cùng một tệp: văn bản giải thích, code thực thi được, và kết quả cùng biểu đồ do code sinh ra. Khi kết xuất, toàn bộ được dệt thành một báo cáo hoàn chỉnh.
Có hai công cụ cho việc này, và việc hiểu mối quan hệ giữa chúng rất quan trọng. R Markdown là công cụ ra đời trước, đã là nền tảng của nghiên cứu tái lập trong R hơn một thập kỷ. Quarto là công cụ mới hơn, ra mắt năm 2022, và được Posit định vị là bản kế nhiệm chính thức của R Markdown. Theo tài liệu so sánh của cộng đồng, Quarto được khuyến nghị cho các dự án mới vì được phát triển tích cực, hỗ trợ nhiều ngôn ngữ và nhiều định dạng đầu ra hơn, đồng thời tích hợp sẵn nhiều tính năng mà R Markdown phải cài thêm gói. Tuy vậy, R Markdown không hề biến mất; hàng triệu tài liệu vẫn đang dùng nó và sẽ tiếp tục hoạt động.
Lời khuyên thực tế là như sau. Nếu bạn đang học mới hoàn toàn và hướng đến tương lai, hãy ưu tiên Quarto. Nếu bạn đã có một luồng làm việc với R Markdown chạy ổn định, chẳng hạn việc kết xuất và xuất bản đã quen tay, thì không cần vội chuyển đổi. Điều đáng mừng là hai công cụ có cấu trúc rất giống nhau, nên kỹ năng học được ở công cụ này gần như chuyển thẳng sang công cụ kia.
Về cấu trúc, cả hai loại tài liệu đều gồm ba phần. Phần đầu là khối
cấu hình YAML nằm giữa hai dòng ba dấu gạch ngang, khai báo tiêu đề và
định dạng đầu ra. Tiếp theo là các đoạn văn bản viết bằng cú pháp
Markdown. Cuối cùng là các khối code, gọi là chunk. Điểm khác biệt dễ
thấy nhất nằm ở cú pháp khai báo. R Markdown dùng trường
output với giá trị như html_document, trong
khi Quarto dùng trường format với giá trị như
html. Quarto cũng thay cách đặt tùy chọn cho từng chunk
bằng cú pháp gắn nhãn rõ ràng hơn.
Một sức mạnh lớn của tài liệu tái lập là cùng một nội dung nguồn có thể được kết xuất ra nhiều định dạng khác nhau, tùy mục đích sử dụng. Định dạng HTML cho ra một trang web có mục lục động, hiển thị đẹp, hỗ trợ yếu tố tương tác và rất dễ chia sẻ qua đường liên kết; đây là lựa chọn mặc định nên dùng trong hầu hết trường hợp. Định dạng Word phù hợp khi người nhận cần chỉnh sửa tiếp hoặc khi quy định nộp bài yêu cầu tệp Word. Định dạng PDF thích hợp cho bản in trang trọng, nhưng đòi hỏi cài đặt thêm một hệ thống soạn thảo nên thường phức tạp hơn với người mới.
Để đổi định dạng, với R Markdown bạn sửa trường output
trong YAML, còn với Quarto bạn sửa trường format. Một thực
hành hữu ích là khai báo nhiều định dạng cùng lúc, khi đó công cụ sẽ tạo
ra đường dẫn tải các định dạng khác ngay trong bản HTML.
Sau khi kết xuất, bước cuối cùng là đưa tác phẩm lên mạng để chia sẻ. Có vài kênh phổ biến, mỗi kênh phục vụ một nhu cầu khác nhau.
Kênh đơn giản nhất cho người mới là RPubs, một dịch vụ miễn phí của Posit. Quy trình đúng diễn ra như sau: trước hết bạn kết xuất tài liệu thành công ra HTML; trên khung xem trước, ở góc trên bên phải xuất hiện nút Publish; khi nhấn vào, bạn chọn RPubs; trình duyệt sẽ mở để bạn đăng nhập hoặc tạo tài khoản miễn phí, rồi điền tiêu đề và xác nhận để nhận đường liên kết chia sẻ. Có hai điều cần lưu ý để tránh lỗi thường gặp. Thứ nhất, tệp nguồn phải nằm trong một thư mục con cụ thể chứ không đặt ngay tại gốc ổ đĩa, vì khi xuất bản phần mềm cần tạo thư mục phụ cạnh tệp. Thứ hai, cần phân biệt RPubs với các dịch vụ doanh nghiệp như Posit Connect; cửa sổ kết nối tài khoản với các dịch vụ đó không phải là nơi dùng để publish lên RPubs.
Ngoài RPubs còn có những kênh khác đáng biết. Quarto đi kèm dịch vụ Quarto Pub với quy trình tương tự, dành riêng cho tài liệu Quarto. Với người muốn lưu trữ miễn phí và kiểm soát nhiều hơn, GitHub Pages cho phép đăng tải tài liệu như một trang web tĩnh. Đối với các ứng dụng tương tác cần máy chủ, sẽ được nói đến ở phần dashboard, bạn cần đến những nền tảng chuyên dụng hơn.
Khuyến nghị cho tài liệu này. Nếu bạn đang viết bằng R Markdown và muốn xuất bản nhanh, RPubs là con đường ít trở ngại nhất. Nếu bạn chuyển sang Quarto cho các dự án sau, Quarto Pub là lựa chọn tự nhiên đi kèm.
Đây là lĩnh vực truyền thống và mạnh mẽ nhất của R, nơi nó được dùng
để kiểm định giả thuyết và xây dựng mô hình thống kê trong nghiên cứu
khoa học xã hội, y học, kinh tế và nhiều ngành khác. Quy trình tiêu biểu
của một nghiên cứu khảo sát gồm việc kiểm định độ tin cậy thang đo bằng
hệ số Cronbach’s Alpha, phân tích nhân tố khám phá và khẳng định để kiểm
tra cấu trúc đo lường, rồi kiểm định các quan hệ giả thuyết bằng hồi quy
hoặc mô hình cấu trúc tuyến tính. Các gói chủ lực gồm psych
cho thống kê mô tả và phân tích nhân tố, lavaan cho phân
tích nhân tố khẳng định và mô hình cấu trúc, cùng car cho
chẩn đoán hồi quy.
Để thấy tinh thần của lĩnh vực này, hãy xét một câu hỏi nghiên cứu cụ
thể trên dữ liệu mtcars: sau khi đã tính đến công suất động
cơ, liệu trọng lượng xe có còn ảnh hưởng đến mức tiêu hao nhiên liệu
không? Đây đúng là dạng câu hỏi mà hồi quy bội được sinh ra để trả
lời.
mo_hinh <- lm(mpg ~ wt + hp, data = mtcars) # mpg phụ thuộc trọng lượng và mã lực
summary(mo_hinh) # hệ số, p-value, R-squared
Call:
lm(formula = mpg ~ wt + hp, data = mtcars)
Residuals:
Min 1Q Median 3Q Max
-3.941 -1.600 -0.182 1.050 5.854
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 37.22727 1.59879 23.285 < 2e-16 ***
wt -3.87783 0.63273 -6.129 1.12e-06 ***
hp -0.03177 0.00903 -3.519 0.00145 **
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 2.593 on 29 degrees of freedom
Multiple R-squared: 0.8268, Adjusted R-squared: 0.8148
F-statistic: 69.21 on 2 and 29 DF, p-value: 9.109e-12
Bảng kết quả cho biết mỗi hệ số, sai số chuẩn, giá trị p và mức độ giải thích của mô hình. Cách đọc có ý nghĩa nghiên cứu là: nếu hệ số của trọng lượng vẫn âm và có ý nghĩa thống kê ngay cả khi đã có công suất trong mô hình, ta kết luận trọng lượng có tác động độc lập đến mức tiêu hao nhiên liệu. Phần phân tích định lượng chuyên sâu, bao gồm toàn bộ chuỗi Cronbach, EFA, CFA và mô hình cấu trúc với biến trung gian, được trình bày trong bộ tài liệu nghiên cứu riêng của bạn.
Trong bối cảnh kinh doanh, R được dùng để khám phá dữ liệu và biến nó
thành hiểu biết hỗ trợ quyết định. Công việc tiêu biểu là phân tích khám
phá, trong đó nhà phân tích đặt câu hỏi, cắt lát dữ liệu theo nhiều
chiều, và trực quan hóa để phát hiện quy luật. Công cụ trung tâm là
ggplot2, được xây trên một triết lý gọi là grammar of
graphics, theo đó mọi biểu đồ được tạo bằng cách xếp chồng các lớp: dữ
liệu, ánh xạ thẩm mỹ, và hình học biểu diễn.
Hãy xét một tình huống thực tế. Giả sử bạn phụ trách một đội xe và muốn hiểu yếu tố nào liên quan đến hiệu quả nhiên liệu, đồng thời trình bày phát hiện một cách trực quan cho ban lãnh đạo. Biểu đồ dưới đây thể hiện quan hệ giữa trọng lượng và mức tiêu hao, phân biệt theo số xi-lanh.
ggplot(mtcars, aes(x = wt, y = mpg, color = factor(cyl))) +
geom_point(size = 2.5, alpha = 0.8) + # mỗi điểm là một mẫu xe
geom_smooth(method = "lm", se = FALSE, linewidth = 0.8) + # đường xu hướng
labs(
title = "Xe càng nặng càng tốn nhiên liệu, theo từng nhóm xi-lanh",
x = "Trọng lượng (1000 lbs)", y = "Mức tiêu hao (dặm/gallon)",
color = "Số xi-lanh"
) +
theme_minimal()Biểu đồ này có giá trị thực tiễn rõ rệt: nó không chỉ khẳng định xu
hướng giảm của hiệu quả nhiên liệu theo trọng lượng, mà còn cho thấy
quan hệ đó đúng trong từng nhóm xi-lanh. Bên cạnh ggplot2,
hệ sinh thái phân tích kinh doanh còn có dplyr để tổng hợp
số liệu, gói gt hoặc gtsummary để tạo bảng
trình bày đẹp, và plotly để biến biểu đồ tĩnh thành biểu đồ
tương tác cho phép rê chuột xem giá trị.
Đôi khi một báo cáo tĩnh là chưa đủ; người dùng muốn tự chọn bộ lọc,
tự khám phá dữ liệu theo nhu cầu của họ. Khi đó R cho phép xây dựng
dashboard tương tác mà không cần biết phát triển web. Có hai cấp độ. Gói
flexdashboard cho phép sắp xếp nhiều biểu đồ và chỉ số
thành một bố cục bảng điều khiển chỉ bằng cú pháp R Markdown. Khi cần
tương tác thực sự, framework shiny bổ sung khả năng phản
ứng, cho phép người dùng thay đổi tham số và thấy kết quả cập nhật ngay
lập tức.
Theo R Markdown: The Definitive Guide, việc thêm Shiny vào một dashboard biến một báo cáo tĩnh thành một tài liệu tương tác; điểm cần lưu ý là tài liệu tương tác phải được triển khai lên một máy chủ Shiny để chia sẻ rộng rãi, trong khi báo cáo tĩnh là một trang web độc lập có thể gửi kèm email. Hãy hình dung một tình huống kinh doanh: đội bán hàng muốn một bảng điều khiển cho phép chọn vùng và xem ngay doanh thu của vùng đó. Khung xương của một dashboard như vậy trông như sau.
# Tệp .Rmd với phần YAML khai báo dashboard tương tác:
# ---
# title: "Bảng điều khiển doanh thu"
# output: flexdashboard::flex_dashboard
# runtime: shiny
# ---
# Cột bên trái chứa bộ lọc cho người dùng chọn:
selectInput("vung", "Chọn vùng:",
choices = c("Miền Bắc", "Miền Trung", "Miền Nam"))
# Cột bên phải hiển thị biểu đồ phản ứng theo lựa chọn:
renderPlot({
du_lieu |>
filter(vung == input$vung) |> # lọc theo vùng người dùng chọn
ggplot(aes(x = thang, y = doanh_thu)) +
geom_col()
})Điểm cốt lõi cần nắm là cơ chế phản ứng: một ô nhập liệu như
selectInput tạo ra giá trị mà các hàm render
theo dõi; mỗi khi người dùng thay đổi lựa chọn, phần hiển thị tự động vẽ
lại. Đây là nền tảng của mọi ứng dụng Shiny, từ bảng KPI nội bộ đến công
cụ khám phá dữ liệu công khai.
Một hiểu lầm phổ biến là R chỉ làm việc được với dữ liệu nhỏ nằm gọn
trong bộ nhớ. Thực tế R có một hệ sinh thái data engineering trưởng
thành, cho phép kết nối cơ sở dữ liệu, xử lý dữ liệu vượt quá bộ nhớ, và
xây dựng quy trình tự động. Khi dữ liệu nằm trong một cơ sở dữ liệu, gói
DBI cung cấp kết nối chuẩn, còn dbplyr cho
phép bạn viết câu lệnh bằng cú pháp dplyr quen thuộc rồi tự
động dịch sang SQL. Theo tài liệu R for Data Science, điều này có nghĩa
là bạn thao tác trên một bảng trong cơ sở dữ liệu y như thao tác trên
một bảng trong R, mà phần lớn việc tính toán diễn ra ngay trong cơ sở dữ
liệu.
Hãy xét tình huống thực tế: bảng giao dịch của công ty có hàng chục triệu dòng, quá lớn để tải hết vào R. Bạn chỉ muốn lấy về phần tổng hợp.
library(DBI); library(dbplyr)
con <- dbConnect(RSQLite::SQLite(), "duong_dan/giao_dich.sqlite") # kết nối CSDL
# Viết bằng cú pháp dplyr, nhưng phép tính chạy TRONG cơ sở dữ liệu:
tong_hop <- tbl(con, "giao_dich") |>
filter(nam == 2025) |>
group_by(vung) |>
summarise(tong_doanh_thu = sum(gia_tri, na.rm = TRUE))
tong_hop |> show_query() # xem câu SQL mà dplyr tự sinh ra
ket_qua <- tong_hop |> collect() # chỉ đến đây mới kéo KẾT QUẢ về RĐiểm tinh tế và quan trọng nằm ở hàm collect: mọi bước
phía trên chỉ xây dựng câu truy vấn chứ chưa kéo dữ liệu về; chỉ khi gọi
collect, phần kết quả đã được tổng hợp gọn nhẹ mới được đưa
vào R. Nhờ đó bạn xử lý được dữ liệu lớn hơn nhiều so với bộ nhớ máy.
Khi dữ liệu nằm trong các tệp lớn thay vì cơ sở dữ liệu, các gói hiện
đại như arrow và duckdb đóng vai trò tương tự
với hiệu năng cao. Cuối cùng, để tự động hóa và đảm bảo tính tái lập của
cả một quy trình nhiều bước, gói targets cho phép định
nghĩa các bước phụ thuộc lẫn nhau và chỉ chạy lại những bước có thay
đổi, một ý tưởng rất giá trị khi quy trình phân tích trở nên phức
tạp.
Khi mục tiêu không còn là giải thích mà là dự báo, R bước vào địa hạt
máy học. Hệ sinh thái hiện đại cho việc này là tidymodels,
một bộ gói áp dụng cùng triết lý nhất quán của tidyverse vào quy trình
mô hình hóa. Quy trình điển hình gồm việc chia dữ liệu thành tập huấn
luyện và tập kiểm tra, định nghĩa các bước tiền xử lý, huấn luyện mô
hình, rồi đánh giá hiệu năng trên dữ liệu mà mô hình chưa từng thấy.
Hãy xét một bài toán phân loại thực tế: dựa trên các đặc điểm hình thể, liệu ta có thể dự đoán loài của một con chim cánh cụt hay không? Đây là dạng câu hỏi mà mô hình phân loại giải quyết.
library(tidymodels)
# Chia dữ liệu: 75% để huấn luyện, 25% để kiểm tra
phan_chia <- initial_split(penguins, prop = 0.75, strata = species)
train <- training(phan_chia)
test <- testing(phan_chia)
# Định nghĩa một mô hình phân loại (random forest)
mo_hinh <- rand_forest() |>
set_engine("ranger") |>
set_mode("classification")
# Huấn luyện rồi đánh giá trên tập kiểm tra
fit_mh <- mo_hinh |> fit(species ~ bill_length_mm + flipper_length_mm, data = train)
predict(fit_mh, test) |> bind_cols(test) |> accuracy(truth = species, .pred_class)Ý tưởng cốt lõi cần nắm là việc tách tập huấn luyện và kiểm tra: ta dạy mô hình trên một phần dữ liệu, rồi kiểm tra khả năng tổng quát hóa của nó trên phần còn lại mà nó chưa từng thấy. Đây là điểm phân biệt căn bản giữa mô hình hóa để dự báo và mô hình hóa để giải thích trong nghiên cứu hàn lâm.
Cuối cùng, R cho phép tạo cả bài trình chiếu trực tiếp từ code, nghĩa là biểu đồ và bảng trên slide luôn khớp với phân tích mới nhất mà không phải sao chép thủ công. Theo tài liệu chính thức của Quarto, định dạng trình chiếu mạnh nhất là revealjs, cho ra slide dạng web có thể trình bày trực tiếp hoặc in ra PDF, và nó được tích hợp sẵn trong Quarto mà không cần cài thêm gói. Trong slide, mỗi tiêu đề cấp hai tạo ra một slide mới, nên việc soạn slide gần như giống hệt việc viết một tài liệu thông thường.
# Một bài trình chiếu Quarto tối giản (.qmd):
# ---
# title: "Kết quả phân tích"
# format: revealjs
# ---
#
# ## Slide đầu tiên
# - Mỗi tiêu đề cấp hai là một slide mới
# - Gạch đầu dòng cho nội dung
#
# ## Slide có biểu đồ
# ```{r}
# ggplot(mtcars, aes(wt, mpg)) + geom_point()
# ```Với người vẫn dùng R Markdown, slide phổ biến nhất được tạo bằng gói
xaringan. Tuy nhiên, vì Quarto tích hợp sẵn revealjs và
đang là hướng phát triển chính, người mới bắt đầu nên ưu tiên học làm
slide bằng Quarto. Một mẹo thực dụng từ kinh nghiệm cộng đồng là nên
hiểu kích thước mặc định của một slide để căn chỉnh biểu đồ và khối code
cho vừa khung hình.
Vì hệ sinh thái R rất rộng, bạn không nên cố học mọi thứ cùng lúc. Tùy mục tiêu nghề nghiệp, trình tự ưu tiên sẽ khác nhau, dù tất cả đều chia sẻ chung phần nền tảng ở các mục đầu tài liệu này.
Nếu hướng đến nghiên cứu học thuật, sau phần nền bạn nên đi sâu vào
thống kê và mô hình cấu trúc với psych và
lavaan, đồng thời thành thạo việc viết báo cáo tái lập bằng
R Markdown hoặc Quarto. Nếu hướng đến vai trò nhà phân tích kinh doanh,
hãy ưu tiên dplyr và ggplot2 cho khám phá và
trực quan hóa, rồi học flexdashboard và shiny
để xây bảng điều khiển. Nếu hướng đến data engineering, trọng tâm là kết
nối cơ sở dữ liệu với DBI và dbplyr, xử lý dữ
liệu lớn với arrow và duckdb, và tự động hóa
quy trình với targets. Nếu hướng đến khoa học dữ liệu, sau
phần nền hãy tập trung vào tidymodels cùng các kỹ thuật mô
hình hóa và đánh giá.
Dù theo hướng nào, kỹ năng giao tiếp kết quả, tức là viết tài liệu và trình chiếu, đều có giá trị xuyên suốt. Một phân tích xuất sắc nhưng không truyền đạt được sẽ không tạo ra tác động.
Để đào sâu từng lĩnh vực, dưới đây là những nguồn nền tảng và đáng tin cậy nhất, đều miễn phí trên mạng.
Về kiến thức tổng quát và quy trình khoa học dữ liệu, cuốn R for Data Science phiên bản thứ hai của Hadley Wickham, Mine Çetinkaya-Rundel và Garrett Grolemund là điểm khởi đầu tốt nhất, có tại địa chỉ r4ds.hadley.nz. Về viết tài liệu, trang chính thức của Quarto tại quarto.org và cuốn R Markdown: The Definitive Guide của Yihui Xie là hai nguồn tham chiếu đầy đủ. Về mô hình hóa và máy học, cuốn Tidy Modeling with R của Max Kuhn và Julia Silge là tài liệu chính thức cho tidymodels. Về trực quan hóa, cuốn ggplot2: Elegant Graphics for Data Analysis trình bày sâu triết lý grammar of graphics. Ngoài ra, trang opensource.posit.co tập hợp tài liệu chính thức của các gói trong hệ sinh thái.
Bảng dưới đây tóm tắt mối liên hệ giữa nhu cầu công việc và công cụ tương ứng, dùng làm tra cứu nhanh.
| Bạn muốn làm gì | Công cụ / gói chính |
|---|---|
| Biến đổi, làm sạch dữ liệu | dplyr, tidyr |
| Nhập dữ liệu từ Excel, CSV | readxl, readr |
| Vẽ biểu đồ tĩnh | ggplot2 |
| Vẽ biểu đồ tương tác | plotly |
| Bảng trình bày đẹp | gt, gtsummary, DT |
| Viết báo cáo tái lập | R Markdown, Quarto |
| Phân tích thống kê, nhân tố | psych |
| Mô hình cấu trúc, CFA, SEM | lavaan |
| Chẩn đoán hồi quy | car |
| Dashboard tĩnh | flexdashboard |
| Ứng dụng tương tác | shiny |
| Kết nối cơ sở dữ liệu | DBI, dbplyr |
| Dữ liệu lớn hơn bộ nhớ | arrow, duckdb |
| Quy trình tự động, tái lập | targets |
| Máy học, dự báo | tidymodels |
| Trình chiếu | Quarto revealjs, xaringan |
Tài liệu này đã phác họa toàn cảnh những gì R có thể làm, từ nền tảng ngôn ngữ và quy trình khoa học dữ liệu, qua việc viết và xuất bản tài liệu tái lập, đến năm lĩnh vực ứng dụng lớn là nghiên cứu học thuật, phân tích kinh doanh, dashboard tương tác, data engineering, khoa học dữ liệu và trình chiếu. Điều quan trọng nhất cần mang theo không phải là chi tiết của từng gói, mà là tấm bản đồ tổng thể: hiểu rằng mọi lĩnh vực đều dựng trên một nền chung, và việc đầu tư vào nền tảng cùng kỹ năng giao tiếp kết quả sẽ sinh lợi ở mọi hướng đi. Từ bản đồ này, bạn có thể chọn một nhánh phù hợp với mục tiêu của mình và tìm đến các tài liệu chuyên sâu để đi xa hơn.