Tái lập phân tích Python nghĩa là một người khác, dùng máy khác, có thể dựng lại môi trường, chạy mã của bạn và nhận về đúng các bảng, hình đã đưa vào luận văn. Để đạt được điều đó, bạn cần soát bốn nhóm việc: quản lý môi trường, lưu mã nguồn, kiểm tra đường dẫn dữ liệu và viết hướng dẫn chạy lại.

Bài viết trình bày từng nhóm dưới dạng các mục kiểm tra cụ thể, kèm bảng tự kiểm tổng hợp ở cuối để bạn đánh dấu trước khi gửi giảng viên hoặc nộp phụ lục. Nội dung áp dụng cho cả dự án dùng Jupyter Notebook lẫn dự án gồm các file .py thuần.

Tóm tắt nhanh: một dự án tái lập được có môi trường ảo riêng, danh sách thư viện kèm phiên bản, mã được quản lý bằng Git và đường dẫn tương đối.

Bước kiểm tra cuối cùng luôn là dựng môi trường mới từ đầu rồi chạy toàn bộ mã, không dựa vào máy đang làm việc.

Vì sao cần kiểm tra khả năng tái lập phân tích Python?

Python thay đổi nhanh. Một hàm của pandas có thể đổi giá trị mặc định giữa hai phiên bản, khiến cùng một dòng lệnh cho kết quả khác hoặc báo lỗi. Nếu không ghi lại môi trường, chính bạn cũng có thể không chạy lại được notebook của mình sau vài tháng, đúng lúc hội đồng yêu cầu chỉnh sửa.

Minh bạch quy trình phân tích còn là một phần của nghiên cứu có trách nhiệm, như tài liệu về thực hành nghiên cứu có trách nhiệm của APA đã nêu. Người kiểm tra tin vào kết quả hơn khi họ tự chạy lại được.

Nhóm 1: Quản lý môi trường

Môi trường gồm phiên bản Python, các thư viện và phiên bản của chúng. Mục tiêu của nhóm này là để môi trường trên máy người nhận giống môi trường bạn đã dùng khi tạo ra kết quả.

Dùng môi trường ảo riêng cho dự án

Mỗi dự án luận văn nên có một môi trường ảo riêng, tạo bằng mô-đun venv có sẵn hoặc bằng conda. Cách làm này tránh xung đột với thư viện của môn học khác và giúp bạn biết chính xác dự án phụ thuộc vào gói nào. Hướng dẫn tạo môi trường ảo có trong tài liệu Python chính thức.

Khóa phiên bản thư viện

Sau khi phân tích ổn định, hãy xuất danh sách thư viện ra file. Với pip, lệnh pip freeze ghi toàn bộ gói kèm phiên bản vào requirements.txt. Với conda, lệnh xuất môi trường tạo file environment.yml; thêm tùy chọn from-history giúp file gọn và dễ cài trên hệ điều hành khác.

  • Ghi rõ phiên bản Python, ví dụ 3.11, ngay đầu README.
  • Kiểm tra file danh sách không chứa gói thừa từ các lần thử nghiệm cũ.
  • Chỉ cập nhật thư viện khi cần, và chạy lại toàn bộ mã sau mỗi lần cập nhật.

Cố định hạt giống ngẫu nhiên

Bất kỳ bước nào có yếu tố ngẫu nhiên, như chia mẫu, bootstrap hay mô phỏng, đều cần hạt giống cố định. Với numpy, hãy tạo bộ sinh số bằng default_rng() kèm một số nguyên cố định; với scikit-learn, truyền tham số random_state cho từng hàm có ngẫu nhiên. Ghi giá trị hạt giống vào README để người khác dùng đúng.

Nhóm 2: Lưu mã nguồn

Mã nguồn là bằng chứng cho từng con số trong luận văn. Nhóm này đảm bảo mã được lưu có phiên bản, gọn và chạy được từ đầu đến cuối mà không cần thao tác tay.

Quản lý bằng Git và file .gitignore

Git giúp bạn quay lại phiên bản mã ứng với bản luận văn đã nộp, thay vì lưu hàng loạt file có đuôi cuoi, cuoi2, cuoi-that. Hãy gắn nhãn (tag) cho commit tương ứng với bản nộp hội đồng. File .gitignore nên loại trừ:

  • Thư mục dữ liệu gốc có thông tin định danh người tham gia.
  • Thư mục .ipynb_checkpoints và môi trường ảo.
  • File .env chứa khóa truy cập hoặc mật khẩu.
  • Các file đầu ra lớn có thể tạo lại bằng mã.

Notebook chạy được từ đầu đến cuối

Notebook phải chạy tuần tự trên kernel mới mà không lỗi. Bạn có thể kiểm tra tự động bằng nbconvert với tùy chọn execute, công cụ này chạy toàn bộ notebook ngoài giao diện và dừng ngay khi gặp lỗi. Cách tổ chức các phần bên trong notebook được trình bày trong bài cấu trúc notebook phân tích dữ liệu Python.

Khi dự án có nhiều notebook, hãy đánh số theo thứ tự chạy, ví dụ 01_lam_sach, 02_mo_ta, 03_hoi_quy. Hàm dùng chung nên chuyển sang file .py riêng, tránh sao chép cùng một đoạn mã vào nhiều notebook rồi sửa không đồng bộ.

Nhóm 3: Kiểm tra đường dẫn dữ liệu

Phần lớn lỗi khi chạy trên máy khác bắt nguồn từ đường dẫn. Nhóm này giúp mã tìm đúng file dữ liệu dù dự án được giải nén ở đâu và trên hệ điều hành nào.

Đường dẫn tương đối với pathlib

Thay vì ghi đường dẫn bắt đầu bằng ổ đĩa, hãy xác định thư mục gốc dự án rồi nối các thư mục con bằng pathlib. Đối tượng Path xử lý được khác biệt về dấu phân cách giữa Windows, macOS và Linux. Tên file và thư mục nên viết thường, không dấu, không khoảng trắng, vì Linux phân biệt chữ hoa và chữ thường.

Kiểm chứng file dữ liệu bằng mã băm

Một rủi ro ít được để ý là người nhận chạy mã trên phiên bản dữ liệu khác với bạn. Thư viện hashlib tính mã băm SHA-256 của file đầu vào; bạn ghi mã này vào README và thêm một ô kiểm tra ở đầu notebook. Nếu mã băm không khớp, người chạy biết ngay dữ liệu đã thay đổi trước khi tốn thời gian so kết quả.

Khi đọc file, luôn khai báo bảng mã, thường là UTF-8, để tiếng Việt hiển thị đúng trên mọi máy. Quy trình tạo file dữ liệu sạch từ file gốc nên nằm trọn trong mã, như hướng dẫn trong bài làm sạch dữ liệu khảo sát Python.

Nhóm 4: Ghi hướng dẫn tái lập

README là file đầu tiên người nhận mở ra khi muốn tái lập phân tích Python của bạn. Một README tốt trả lời được mọi câu hỏi ban đầu mà không cần nhắn tin hỏi lại bạn. Nội dung tối thiểu gồm:

  1. Tên đề tài và mục đích của bộ mã.
  2. Phiên bản Python và lệnh dựng môi trường từ requirements.txt hoặc environment.yml.
  3. Vị trí đặt dữ liệu, mã băm của từng file và cách xin quyền nếu dữ liệu bị hạn chế.
  4. Thứ tự chạy notebook hoặc script, kèm thời gian chạy ước tính.
  5. Bảng đối chiếu giữa file đầu ra và số bảng, số hình trong luận văn.

Chạy thử trên môi trường hoàn toàn mới

Hãy tạo một môi trường ảo trống, cài thư viện từ file danh sách, sao chép dự án sang thư mục khác rồi chạy theo đúng README. So các file đầu ra với bảng trong bản thảo; với bảng lưu dạng CSV, hàm assert_frame_equal() của pandas giúp phát hiện chênh lệch nhỏ nhất. Nếu có điều kiện, nhờ một bạn cùng lớp làm thử trên máy của họ.

Kinh nghiệm từ Luận Văn 360: khi dựng lại môi trường từ requirements.txt học viên gửi, chúng tôi thường gặp danh sách hàng trăm gói xuất từ môi trường chung của cả máy, trong đó có gói không cài được trên hệ điều hành khác.

Một môi trường ảo riêng cho luận văn ngay từ đầu giúp tránh hoàn toàn tình huống này.

Nếu bạn muốn có người chạy thử độc lập trước hạn nộp, dịch vụ hỗ trợ phân tích dữ liệu Python của Luận Văn 360 có thể dựng lại môi trường, thử tái lập phân tích Python của bạn theo checklist này và gửi danh sách điểm cần sửa. Bạn tự hoàn thiện và chịu trách nhiệm về mã cũng như kết quả.

Bảng tự kiểm tái lập phân tích Python

Bảng dưới đây gom các mục quan trọng nhất của bốn nhóm. Hãy đánh dấu từng dòng trước khi gửi dự án đi.

NhómMục kiểm traCách kiểm tra nhanhĐạt yêu cầu khi
Môi trườngCó môi trường ảo riêng và file danh sách thư việnMở requirements.txt hoặc environment.ymlChỉ chứa gói dự án thật sự dùng, có phiên bản
Môi trườngBước ngẫu nhiên có hạt giống cố địnhChạy hai lần liên tiếpKết quả giống hệt nhau
Mã nguồnMã được quản lý bằng Git, có nhãn bản nộpXem lịch sử commitTìm được đúng phiên bản ứng với bản luận văn
Mã nguồnNotebook chạy tuần tự không lỗiChạy bằng nbconvert trên kernel mớiKhông dừng giữa chừng
Dữ liệuKhông còn đường dẫn tuyệt đốiTìm chuỗi tên ổ đĩa trong mãMọi đường dẫn tính từ gốc dự án
Dữ liệuDữ liệu đầu vào được kiểm chứngSo mã băm với READMEMã băm khớp
Hướng dẫnREADME đủ thứ tự chạy và bảng đối chiếu đầu raNhờ người khác đọc và làm theoChạy lại được mà không cần hỏi thêm

Câu hỏi thường gặp

Dữ liệu không được chia sẻ thì tái lập thế nào?

Bạn vẫn chia sẻ mã, file danh sách thư viện và một bộ dữ liệu giả lập có cùng cấu trúc cột, ghi rõ kết quả sẽ không trùng với luận văn. Mã băm của dữ liệu thật giúp chứng minh bạn đã chạy trên đúng file đã mô tả.

Có cần Docker cho luận văn?

Thường là không. Với luận văn và khóa luận, môi trường ảo kèm file danh sách thư viện đã đủ. Docker phù hợp hơn khi dự án phụ thuộc phần mềm hệ thống phức tạp hoặc tạp chí yêu cầu môi trường đóng gói.

Kết luận

Tái lập phân tích Python dựa trên bốn nhóm việc: môi trường ảo có khóa phiên bản, mã nguồn được quản lý bằng Git và chạy được từ đầu, đường dẫn tương đối kèm dữ liệu được kiểm chứng, và README rõ ràng. Lần chạy thử trên môi trường mới là phép thử cuối cùng cho cả bốn nhóm.

Nếu mô hình chính của bạn là hồi quy, hãy soát lại phần chẩn đoán theo bài hồi quy OLS với statsmodels trước khi đóng gói dự án. Nếu làm song song với R, bài checklist mã phân tích R có thể tái lập giúp bạn đối chiếu. Khi cần một lượt chạy thử độc lập, hãy tìm hiểu dịch vụ phân tích dữ liệu Python của Luận Văn 360.