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

Pandas và tidyverse: mình đổi công cụ phân tích ra sao

Pandas và tidyverse đều mạnh nhưng phục vụ hai mục đích khác nhau. Mình kể lại lý do đổi công cụ giữa một dự án, và cái giá phải trả.

Pandas và tidyverse không cạnh tranh nhau như nhiều người nghĩ. Mình dùng cả hai, mỗi cái cho một loại việc, và câu trả lời ngắn cho câu hỏi "nên học cái nào" là: học tidyverse trước nếu bạn làm thống kê lâm sàng, học thêm pandas khi dự án của bạn bắt đầu cần xử lý văn bản hoặc gọi mô hình AI ở quy mô lớn.

Mình vừa hoàn tất bản thảo cho một bài báo khoa học đang chờ phản biện, nội dung nói về rủi ro khi AI can thiệp sâu vào quá trình nghiên cứu khoa học. Phần chuẩn bị dữ liệu cho bài đó buộc mình rời khỏi vùng quen thuộc của tidyverse và chuyển hẳn sang pandas, dù trước đó mọi phân tích thống kê của mình đều làm bằng R.

Vì sao mình đổi công cụ giữa một dự án

Trước bài báo đó, toàn bộ công việc thống kê của mình, từ dọn dữ liệu, kiểm định, đến vẽ biểu đồ cho một nghiên cứu tổng hợp y văn, đều nằm trong R. dplyr xử lý dữ liệu dạng bảng rất gọn, ggplot2 vẽ biểu đồ chuẩn tạp chí chỉ với vài dòng.

Nhưng dự án mới cần một việc khác: xử lý một lượng lớn đoạn văn bản, gọi mô hình ngôn ngữ lớn để phân loại và trích xuất nội dung, rồi ghép kết quả vào bảng dữ liệu để phân tích tiếp. Gọi mô hình AI từ R vẫn được, nhưng phải đi qua các gói không chính thức hoặc gọi thẳng vào giao diện lập trình. Trong Python, gần như mọi hãng AI đều cung cấp bộ công cụ chính thức, tài liệu đầy đủ, cộng đồng hỗ trợ đông hơn hẳn. Mình chuyển sang pandas không phải vì nó hơn dplyr, mà vì phần còn lại của quy trình cần Python.

Khác cú pháp, giống tư duy

Nếu bạn đã quen dplyr, học pandas không mất nhiều thời gian như học một ngôn ngữ mới hoàn toàn. Cả hai đều thao tác trên dữ liệu dạng bảng, khái niệm cột và hàng giống nhau, chỉ khác cách viết lệnh.

Việc cần làm tidyverse (R) pandas (Python)
Đọc file CSV read_csv() pd.read_csv()
Lọc dòng theo điều kiện filter() df[df.col == val]
Tạo cột mới mutate() df['col'] = ...
Nhóm và tính tổng hợp group_by() %>% summarize() df.groupby().agg()
Nối chuỗi lệnh %>% .pipe() hoặc gọi tuần tự

Khác biệt lớn nhất không nằm ở cú pháp mà ở triết lý viết lệnh. dplyr khuyến khích viết một chuỗi bước nối tiếp, đọc gần như một câu tiếng Anh. Pandas cho phép viết theo nhiều kiểu, linh hoạt hơn nhưng cũng dễ viết ra đoạn mã khó đọc lại nếu không có kỷ luật đặt tên biến rõ ràng.

Cái mình mất và cái mình được

Cái mất rõ nhất là tốc độ viết. Với thống kê lâm sàng, một dòng lệnh dplyr nối gtsummary ra bảng đặc điểm bệnh nhân chuẩn tạp chí trong vài phút. Làm việc tương đương bằng pandas và một thư viện vẽ bảng khác mất nhiều dòng mã hơn, và kết quả xuất ra thường phải chỉnh tay nhiều hơn mới đạt định dạng công bố.

Cái được là khả năng nối dữ liệu bảng với các bước xử lý văn bản và gọi mô hình AI trong cùng một tập lệnh, không phải nhảy qua lại giữa hai ngôn ngữ. Khi bạn cần một quy trình chạy từ đầu đến cuối, từ đọc văn bản thô đến bảng kết quả cuối cùng, giữ mọi thứ trong Python giúp gỡ lỗi dễ hơn nhiều so với ghép hai ngôn ngữ lại với nhau.

Một điều mình nhận ra sau khi đổi: pandas không thay thế R trong công việc thống kê thuần túy. Các gói thống kê y sinh của R vẫn trưởng thành hơn hẳn, kiểm định đủ loại, biểu đồ sinh tồn, phân tích tổng hợp đều có sẵn và được cộng đồng thống kê y khoa kiểm chứng lâu năm. Mình vẫn quay lại R mỗi khi cần chạy phân tích cho một bài báo lâm sàng thuần thống kê.

Khi nào bạn thật sự cần học pandas

Nếu công việc nghiên cứu của bạn dừng ở mức làm sạch dữ liệu, thống kê mô tả, kiểm định, hồi quy và viết báo, tidyverse là đủ, không cần học thêm pandas. Việc học một công cụ mới chỉ có ý nghĩa khi nó giải quyết một việc cụ thể mà công cụ cũ làm chậm hoặc không làm được.

Bạn nên cân nhắc học pandas khi dự án của bạn chạm vào ít nhất một trong ba việc: gọi mô hình ngôn ngữ lớn để xử lý văn bản y khoa số lượng lớn, phân tích ảnh chụp CT hoặc MRI, hoặc xây một quy trình tự động chạy trên hàng nghìn tài liệu. Nếu chưa chạm đến những việc đó, thời gian học pandas nên dành cho việc học sâu hơn R, ví dụ mô hình hỗn hợp hoặc phân tích sống còn nâng cao.

Nếu bạn chưa vững R, nền tảng đó vẫn nên đi trước. Bài lộ trình tự học R cho bác sĩ đưa bạn từ con số 0 đến chạy được phân tích cho một bài báo trong tám tuần. Nếu bạn còn phân vân giữa R và một công cụ quen thuộc hơn, bài SPSS hay R cho bác sĩ lâm sàng so sánh trực tiếp hai lựa chọn đó.

Với người mới bắt đầu, mình vẫn khuyên học R trước bằng khoá Làm chủ R cùng AI, một khoá mười ba bài đi từ dplyr, ggplot2 đến phân tích tổng hợp và biểu đồ rừng trên dữ liệu lâm sàng thật, với các đoạn mã dán vào là chạy được ngay. Học pandas sau, khi bạn thật sự cần nó, sẽ nhanh hơn nhiều so với học cả hai cùng lúc.