Tuyến Trần, MD
Lập trình & Phân tích

Kết hợp Python và R bằng reticulate cho nghiên cứu lâm sàng

Kết hợp Python và R bằng reticulate giúp bạn chạy thống kê trong R và gọi mô hình AI bằng Python trong cùng một tệp, không cần chuyển cửa sổ.

Kết hợp Python và R bằng reticulate nghĩa là bạn gọi trực tiếp một đoạn Python ngay trong R Markdown hoặc Quarto, dùng chung một biến, một tệp dữ liệu, mà không cần mở hai chương trình riêng. Mình dùng cách này gần một năm nay cho một nghiên cứu tổng quan hệ thống và phân tích gộp đang trong giai đoạn phản biện, vì hai công việc chính lại đòi hỏi hai công cụ khác hẳn nhau.

Vì sao không chọn hẳn một bên, R hoặc Python?

Phần thống kê, hồi quy, forest plot, mình vẫn làm bằng R vì hệ sinh thái meta, metafor, gtsummary quá tiện, code ngắn, kết quả ra bảng đúng chuẩn báo. Nhưng phần sàng lọc tiêu đề và tóm tắt của vài trăm bài báo, gọi API của mô hình ngôn ngữ để phân loại nhanh, thì thư viện Python lại phong phú hơn hẳn. Viết lại toàn bộ phần đó bằng R được, nhưng chậm và dễ lỗi hơn so với dùng thẳng thư viện Python đã có sẵn.

Ban đầu mình xử lý kiểu chắp vá: chạy script Python riêng, xuất ra file CSV, rồi mở R đọc lại. Cách này chạy được nhưng mỗi lần đổi tiêu chí sàng lọc là phải quay lại cả hai cửa sổ, dễ quên đồng bộ phiên bản dữ liệu.

reticulate hoạt động thế nào trong một tệp R Markdown?

Gói reticulate cho phép bạn chèn một khối code Python ngay dưới một khối R, trong cùng một tệp .Rmd hoặc .qmd. Biến tạo ra ở khối R có thể đọc lại trong khối Python qua đối tượng r.ten_bien, và ngược lại, biến Python đọc lại trong R qua py$ten_bien.

Ba dòng cài đặt cơ bản:

install.packages("reticulate")
library(reticulate)
use_python("/usr/bin/python3")

Sau đó bạn có thể viết một khối R để đọc và làm sạch dữ liệu, một khối Python ngay bên dưới để gọi mô hình phân loại, rồi quay lại R để vẽ biểu đồ kết quả. Tất cả nằm trong một tệp, chạy một lần từ trên xuống, không phải copy dán thủ công giữa hai chương trình.

Ba điều mình học được sau khi dùng thật, không chỉ đọc tài liệu

Thứ nhất, môi trường Python phải cố định rõ ràng. Nếu máy có nhiều bản Python, reticulate có thể tự chọn nhầm bản không cài thư viện bạn cần, và lỗi báo ra rất khó hiểu với người không quen dòng lệnh. Mình dùng reticulate::py_install() để cài gói trực tiếp từ trong R, tránh phải nhảy ra terminal.

Thứ hai, tốc độ truyền dữ liệu qua lại không miễn phí. Với bảng vài nghìn dòng thì không sao, nhưng nếu bạn đẩy qua lại một tập dữ liệu lớn ở mỗi lần chạy lại tệp, thời gian chờ cộng dồn khá rõ. Mình chỉ truyền phần dữ liệu cần thiết, không đẩy cả bảng gốc.

Thứ ba, kết quả từ mô hình phân loại bên Python vẫn cần người đọc lại một lượt trước khi đưa vào bảng phân tích chính. Mô hình giúp mình rút ngắn thời gian đọc tiêu đề và tóm tắt, nhưng quyết định một bài có đủ tiêu chuẩn đưa vào phân tích gộp hay không vẫn là việc của người, không giao hẳn cho máy.

Khi nào nên dùng cách này, khi nào không cần?

Nếu công việc của bạn chỉ dừng ở thống kê mô tả, kiểm định, vẽ Bảng 1, thì không cần thêm Python làm gì, R một mình đã đủ. Cách kết hợp Python và R bằng reticulate chỉ đáng công khi bạn có một tác vụ cụ thể mà thư viện Python làm tốt hơn hẳn, ví dụ xử lý văn bản số lượng lớn hoặc gọi mô hình ngôn ngữ, và bạn muốn kết quả đó nằm chung trong tài liệu phân tích chính thay vì rải rác nhiều tệp.

Với một nghiên cứu tổng quan hệ thống có vài trăm bài cần sàng lọc, mình thấy việc gộp hai công cụ vào một tệp giúp dễ theo dõi lại từng bước hơn, và khi cần giải trình cách làm với người phản biện, mọi thứ nằm trong cùng một tài liệu có thể chạy lại từ đầu.

Nếu bạn đang dùng R cho phân tích lâm sàng và tò mò Python giúp được gì thêm, bài Python cho bác sĩ, khi nào cần học thêm sau khi đã có R đi sâu hơn vào việc nên học Python ở mức nào là đủ. Còn nếu bạn cần một công cụ giúp tài liệu phân tích chạy lại được từ đầu đến cuối, kể cả khi có nhiều người cùng xem lại, bài Quarto và R Markdown cho paper, khi nào cần bản phân tích tái lập được là bước tiếp theo hợp lý.

Bắt đầu từ đâu nếu bạn mới học R

Trước khi ghép thêm Python, bạn cần R chạy vững cho phần thống kê chính đã. Khoá Làm chủ R cùng AI đi từ nhập dữ liệu, dọn dữ liệu bằng dplyr, đến vẽ forest plot và bảng đăng báo, với dữ liệu lâm sàng thật, có phần học miễn phí để thử trước.