Bối cảnh và vấn đề nghiên cứu
Trong bối cảnh khoa học dữ liệu và tính toán phân tích phát triển mạnh mẽ, dịch thuật học thuật đóng vai trò là cầu nối tri thức giúp người học và nhà nghiên cứu vượt qua rào cản ngôn ngữ để tiếp cận các tài liệu chuyên sâu. Đề tài "Biên dịch sách tài liệu Python for Data Analysis" được nhóm sinh viên ngành Kinh tế thực hiện trong khuôn khổ dự án kết thúc học phần môn Trực quan hoá và Hệ thống thông tin địa lý tại Trường Đại học Kinh tế TP.HCM (UEH), dưới sự hướng dẫn của giảng viên Nguyễn Khánh Duy.
Nguyên tác được lựa chọn để biên dịch là cuốn sách "Python for Data Analysis: Data Wrangling with Pandas, Numpy, and IPython" của tác giả Wes McKinney – người sáng lập thư viện pandas. Cuốn sách tập trung vào các kỹ thuật nền tảng về thao tác, xử lý, làm sạch và định hình dữ liệu có cấu trúc bằng ngôn ngữ lập trình Python.
Mục tiêu và nhiệm vụ nghiên cứu của dự án được xác định cụ thể bao gồm:
- Chuyển ngữ có hệ thống và chính xác 4 chương trọng tâm từ nguyên tác tiếng Anh sang tiếng Việt nhằm phục vụ học tập và nghiên cứu thực hành phân tích dữ liệu.
- Hệ thống hóa các cấu trúc dữ liệu, thư viện cốt lõi, tham số hàm và quy trình nhập/xuất dữ liệu từ nhiều nguồn lưu trữ khác nhau.
- Trình bày chi tiết các giải pháp kỹ thuật trong việc kết hợp, làm sạch, biến đổi dữ liệu và ứng dụng phân tích chuỗi thời gian trong lĩnh vực kinh tế - tài chính.
Phạm vi nghiên cứu của đề tài tập trung vào 4 chương được tuyển chọn trong tác phẩm của Wes McKinney:
- Chương 1: Mở đầu sơ bộ (Tổng quan về Python trong phân tích dữ liệu, hệ sinh thái thư viện và môi trường cài đặt).
- Chương 6: Tải dữ liệu, lưu trữ và định dạng tập tin (Xử lý các định dạng tệp văn bản, nhị phân, Web API và cơ sở dữ liệu).
- Chương 7: Sắp xếp dữ liệu: Làm sạch, chuyển đổi, hợp nhất, định hình lại (Các thuật toán kết hợp, căn chỉnh và chuẩn hóa cấu trúc dữ liệu).
- Chương 11: Các ứng dụng dữ liệu tài chính và kinh tế (Phân tích dữ liệu chuỗi thời gian, nhóm yếu tố rủi ro và các ứng dụng định lượng).
Thời gian hoàn thành dự án được ghi nhận vào ngày 28 tháng 12 năm 2023 tại Thành phố Hồ Chí Minh.
Cơ sở lý thuyết và phương pháp
Dự án biên dịch dựa trên nền tảng lý thuyết về tính toán khoa học và xử lý dữ liệu có cấu trúc (Structured Data). Dữ liệu có cấu trúc theo định nghĩa của tác giả bao gồm: mảng đa chiều (ma trận), dữ liệu dạng bảng/bảng tính có nhiều kiểu dữ liệu khác nhau trên từng cột, các bảng dữ liệu có quan hệ khóa (khóa chính, khóa ngoại) và chuỗi thời gian cách đều hoặc không đều.
Hệ thống lý thuyết và các khái niệm kỹ thuật được khảo sát bao gồm:
- Kiến trúc thông dịch và rào cản tính toán: Đánh giá đặc tính của trình thông dịch CPython, cơ chế Khóa phiên dịch toàn cầu (Global Interpreter Lock - GIL) đối với các ứng dụng đa luồng ràng buộc CPU, cùng giải pháp tích hợp mã nguồn cấp thấp (C, C++, Fortran) thông qua dự án Cython hoặc OpenMP.
- Hệ sinh thái thư viện khoa học: Khảo sát các công cụ cốt lõi gồm NumPy (cung cấp mảng đa chiều
ndarray và các phép toán đại số tuyến tính), pandas (cung cấp cấu trúc Series, DataFrame cho thao tác dạng bảng), matplotlib (trực quan hóa 2D), IPython (môi trường thực thi tương tác và sổ ghi chép notebook) và SciPy (các mô-đun giải tích, tích phân, tối ưu hóa và thống kê).
- Quy trình Munging/Wrangling: Khái niệm mô tả toàn bộ chuỗi thao tác xử lý dữ liệu phi cấu trúc hoặc dữ liệu lộn xộn thành định dạng có cấu trúc rõ ràng phục vụ mô hình hóa.
Phương pháp thực hiện dự án kết hợp các kỹ thuật sau:
- Phương pháp biên dịch chuyên ngành: Đối chiếu ngữ nghĩa thuật ngữ lập trình và thống kê sang tiếng Việt, đồng thời giữ nguyên các từ khóa cú pháp, tên hàm và quy ước đặt tên chuẩn trong cộng đồng Python.
- Phương pháp tổng hợp và chuẩn hóa cú pháp: Hệ thống hóa các bảng tham số của hàm phân tích dữ liệu trong pandas thành các bảng tra cứu trực quan.
- Nguồn dữ liệu thực nghiệm: Sử dụng các bộ dữ liệu mẫu do tác giả Wes McKinney cung cấp công khai trên kho lưu trữ GitHub (
pydata/pydata-book), cùng các nguồn dữ liệu thực tế như dữ liệu giao dịch quyền chọn Yahoo! Finance, dữ liệu vận hành giao thông của Cơ quan Giao thông Đô thị New York (MTA), dữ liệu thành phần dinh dưỡng của Bộ Nông nghiệp Hoa Kỳ (USDA) và dữ liệu API mạng xã hội Twitter.
Nội dung chính theo từng chương
Chương 1: Mở đầu sơ bộ
Chương 1 cung cấp cái nhìn tổng quan về vai trò của Python trong nền tảng tính toán khoa học hiện đại. Tác giả chỉ ra rằng Python đóng vai trò là "chất kết dính" hữu hiệu nhờ khả năng tích hợp trơn tru với các phần mềm kế thừa viết bằng C, C++ và Fortran. Điều này giúp giải quyết bài toán "Hai ngôn ngữ" trong các tổ chức, nơi các nhà nghiên cứu thường tạo nguyên mẫu bằng R hoặc MATLAB nhưng kỹ sư phải viết lại hệ thống sản xuất bằng C++ hoặc Java.
Bên cạnh các ưu điểm, chương này phân tích các trường hợp Python kém phù hợp hơn:
- Các hệ thống yêu cầu độ trễ cực thấp (như giao dịch tài chính tần số cao).
- Các ứng dụng đa luồng liên kết với CPU do sự tồn tại của cơ chế GIL trong CPython.
Chương 1 cũng hệ thống hóa các thư viện thiết yếu và hướng dẫn quy trình thiết lập môi trường thông qua bản phân phối EPDFree hoặc Python(x,y) trên hệ điều hành Windows, Apple OS X và GNU/Linux (Ubuntu/Debian), đồng thời giới thiệu các môi trường phát triển tích hợp phổ biến như Eclipse với PyDev, Python Tools for Visual Studio, PyCharm, Spyder và Komodo IDE.
Chương 6: Tải dữ liệu, lưu trữ và định dạng tập tin
Chương 6 trình bày các cơ chế nhập và xuất dữ liệu giữa bộ nhớ và các hệ thống lưu trữ bên ngoài. pandas cung cấp nhiều hàm chuyên dụng để chuyển đổi dữ liệu văn bản thành đối tượng DataFrame.
| Hàm phân tích cú pháp |
Mô tả chức năng |
read_csv |
Tải dữ liệu được phân tách từ tệp hoặc đối tượng dạng tệp, sử dụng dấu phẩy làm dấu phân cách mặc định. |
read_table |
Tải dữ liệu được phân tách, sử dụng ký tự tab (\t) làm dấu phân cách mặc định. |
read_fwf |
Đọc dữ liệu ở định dạng cột có chiều rộng cố định (không có ký tự phân tách). |
read_clipboard |
Phiên bản của read_table đọc dữ liệu trực tiếp từ bộ nhớ tạm (clipboard), hữu ích cho việc sao chép bảng từ trang web. |
Các hàm phân tích cú pháp văn bản được điều khiển bởi tập hợp nhiều đối số kỹ thuật:
- Lập chỉ mục và đặt tên:
header, names, index_col.
- Xử lý ngoại lệ và giá trị khuyết:
skiprows, skip_footer, na_values, comment.
- Chuyển đổi kiểu dữ liệu:
parse_dates, converters, dayfirst.
- Đọc tệp dung lượng lớn:
nrows, chunksize và đối tượng TextParser hỗ trợ lặp từng khối.
Ngoài định dạng văn bản, chương 6 hướng dẫn chi tiết:
- Xử lý tệp phân tách thủ công: Sử dụng mô-đun
csv tích hợp, lớp cấu hình csv.Dialect và các tham số (delimiter, lineterminator, quotechar, quoting, doublequote, escapechar).
- Dữ liệu JSON: Chuyển đổi qua lại giữa chuỗi JSON và đối tượng Python bằng
json.loads và json.dumps.
- Dữ liệu XML và HTML: Sử dụng thư viện
lxml.html kết hợp biểu thức XPath để quét dữ liệu bảng từ Yahoo! Finance và lxml.objectify để xử lý dữ liệu XML phân cấp từ Cơ quan Giao thông MTA.
- Định dạng nhị phân và HDF5: Kỹ thuật tuần tự hóa qua
pickle, lưu trữ mảng lớn qua định dạng HDF5 (PyTables, h5py, HDFStore) và đọc bảng tính Excel bằng ExcelFile (sử dụng xlrd và openpyxl).
- Nguồn dữ liệu mạng và Cơ sở dữ liệu: Truy vấn Web API thông qua thư viện
requests, tích hợp cơ sở dữ liệu quan hệ SQL bằng sqlite3 và pandas.sql.read_frame, kết nối cơ sở dữ liệu NoSQL tài liệu MongoDB thông qua trình điều khiển pymongo.
Chương 7: Sắp xếp dữ liệu: Làm sạch, chuyển đổi, hợp nhất, định hình lại
Chương 7 tập trung vào các thuật toán chuẩn bị và tái cấu trúc dữ liệu trước khi đưa vào mô hình phân tích.
Kết hợp và hợp nhất dữ liệu
pandas hỗ trợ ba phương thức kết hợp dữ liệu chính:
pandas.merge: Nối các hàng trong DataFrame dựa trên một hoặc nhiều khóa tương tự như các thao tác trong cơ sở dữ liệu quan hệ (hỗ trợ các kiểu nối: inner, outer, left, right và tích Cartesian cho phép nối nhiều-nhiều).
pandas.concat: Dán hoặc xếp chồng các đối tượng Series hoặc DataFrame dọc theo một trục xác định (axis=0 cho hàng hoặc axis=1 cho cột), hỗ trợ tạo chỉ mục phân cấp và kiểm tra tính toàn vẹn khóa qua verify_integrity.
combine_first: Vá dữ liệu bị thiếu trong một đối tượng bằng các giá trị tương ứng từ một đối tượng khác có chỉ mục trùng lặp.
Tham số của hàm merge |
Ý nghĩa kỹ thuật |
left, right |
Các đối tượng DataFrame tham gia hợp nhất ở vế trái và vế phải. |
how |
Phương thức nối: 'inner' (mặc định), 'outer', 'left', 'right'. |
on |
Tên cột dùng làm khóa chung, phải xuất hiện trong cả hai DataFrame. |
left_on, right_on |
Các cột làm khóa tương ứng trong DataFrame bên trái và bên phải khi tên cột không đồng nhất. |
left_index, right_index |
Cờ boolean chỉ định việc sử dụng chỉ mục hàng làm khóa hợp nhất. |
suffixes |
Bộ giá trị chuỗi nối vào tên cột bị trùng lặp (mặc định là ('_x', '_y')). |
Định hình lại và xoay vòng dữ liệu
Thao tác tái cấu trúc cấu trúc bảng được thực hiện linh hoạt nhờ chỉ mục phân cấp (Hierarchical Indexing) thông qua hai hàm chính:
stack: Xoay chuyển dữ liệu từ các cột thành các hàng, tạo ra đối tượng có chỉ mục đa cấp.
unstack: Xoay chuyển dữ liệu ngược lại từ hàng vào cột.
Chương này cũng bao gồm các kỹ thuật biến đổi dữ liệu chuyên sâu: loại bỏ bản ghi trùng lặp, chuyển đổi dữ liệu bằng hàm/ánh xạ, thay thế giá trị sentinel, rời rạc hóa dữ liệu định lượng thành các khoảng (binning), phát hiện và lọc các giá trị ngoại lệ, lấy mẫu ngẫu nhiên, tạo biến giả (dummy variables), xử lý chuỗi ký tự bằng biểu thức chính quy (regex) và các hàm chuỗi vector hóa trên pandas áp dụng trên tập dữ liệu thực phẩm USDA.
Chương 11: Các ứng dụng dữ liệu tài chính và kinh tế
Chương 11 trình bày việc áp dụng các công cụ tính toán của pandas vào các bài toán cụ thể trong kinh tế và tài chính định lượng:
- Kỹ thuật xử lý chuỗi thời gian: Sắp xếp chuỗi thời gian và dữ liệu mặt cắt ngang, căn chỉnh dữ liệu có tần số khác nhau, thao tác dựa trên chu kỳ (period) thay cho dấu thời gian cố định (timestamp), và kỹ thuật chọn dữ liệu thời điểm ("as of").
- Phân tích nhóm và rủi ro: Phân chia nhóm yếu tố rủi ro, phân tích phân phối dữ liệu dựa trên phân vị thập phân (deciles) và tứ phân vị (quartiles), cùng kỹ thuật tính toán chỉ số tỷ suất sinh lợi tích lũy.
- Mô hình tài chính nâng cao: Phân tích biên giới tín hiệu, xử lý chuỗi hợp đồng tương lai luân chuyển (rolling futures), tính toán hệ số tương quan luân chuyển (rolling correlation) và ước lượng mô hình hồi quy tuyến tính luân chuyển.
Kết quả và đóng góp
Dự án biên dịch đã hoàn thành đầy đủ các nhiệm vụ đặt ra theo yêu cầu của học phần Trực quan hoá và Hệ thống thông tin địa lý. Toàn bộ nội dung của 4 chương trọng tâm đã được chuyển ngữ sát nghĩa, giữ vững cấu trúc ví dụ mã lệnh và hệ thống bảng tra cứu của nguyên tác.
Bảng phân công nhiệm vụ và mức độ hoàn thành của các thành viên được ghi nhận như sau:
| Họ và tên thành viên |
Mã số sinh viên (MSSV) |
Nội dung công việc đảm nhiệm |
Mức độ hoàn thành |
| Trần Ngọc Tuyền |
31221023605 |
Trang bìa, Lời mở đầu, Chương 1 và Chương 11 |
100% |
| Huỳnh Bảo Ngọc Vy |
31221021378 |
Mục lục, Chương 6 và Chương 7, Kết luận, Tài liệu tham khảo |
100% |
Đóng góp của dự án bao gồm:
- Cung cấp một tài liệu tham khảo kỹ thuật bằng tiếng Việt có hệ thống cho sinh viên và người học tiếp cận các thao tác nền tảng của pandas, NumPy và IPython.
- Chuẩn hóa hệ thống bảng tra cứu các đối số của các hàm nhập xuất dữ liệu (
read_csv, read_table), tùy chọn phương ngữ CSV (csv.Dialect) và các hàm ghép nối dữ liệu (merge, concat).
- Đóng góp nguồn tư liệu phục vụ học tập trực tiếp cho môn học Trực quan hoá và Hệ thống thông tin địa lý tại Trường Đại học Kinh tế TP.HCM.
Hạn chế và hướng nghiên cứu tiếp
Dự án có các hạn chế được nhóm tác giả tự ghi nhận:
- Phạm vi nội dung: Dự án chỉ mới biên dịch có chọn lọc 4 chương (1, 6, 7 và 11) phục vụ môn học, chưa bao hàm toàn bộ các chương còn lại của tác phẩm gốc.
- Rào cản dịch thuật chuyên ngành: Do biên dịch tài liệu công nghệ thông tin là một trải nghiệm mới đối với nhóm sinh viên kinh tế, bản dịch có thể còn tồn tại những hạn chế nhất định khi chuyển ngữ các thuật ngữ kỹ thuật chuyên sâu.
Hướng phát triển tiếp theo của đề tài:
- Tiếp tục mở rộng biên dịch các chương còn lại của cuốn sách, đặc biệt là các chương về NumPy nâng cao và trực quan hóa chuyên sâu.
- Rà soát, chuẩn hóa hệ thống thuật ngữ khoa học dữ liệu tiếng Việt để nâng cao độ chính xác học thuật của bản dịch.
Giá trị tham khảo
Bản biên dịch là tài liệu tham khảo thiết thực cho:
- Sinh viên các ngành Kinh tế, Hệ thống thông tin quản lý, Thống kê kinh doanh và Khoa học dữ liệu đang theo học các học phần liên quan đến lập trình Python hoặc trực quan hóa dữ liệu.
- Các nhà nghiên cứu và phân tích dữ liệu cần tài liệu hướng dẫn kỹ thuật tra cứu nhanh về cú pháp thao tác dữ liệu dạng bảng, xử lý tệp văn bản/dữ liệu nhị phân và các hàm ghép nối trong thư viện pandas.
Các phần có giá trị tra cứu cao nhất bao gồm:
- Hệ thống bảng tham số của các hàm
read_csv, read_table, merge, concat và các thuộc tính cấu hình csv.Dialect.
- Các đoạn mã ví dụ về quy trình trích xuất dữ liệu từ các định dạng JSON, XML (
lxml.objectify), HDF5 và cơ sở dữ liệu quan hệ/NoSQL.
Câu hỏi thường gặp
1. Tác giả nguyên tác cuốn sách "Python for Data Analysis" là ai và có vai trò gì trong hệ sinh thái Python?
Tác giả nguyên tác là Wes McKinney, chính là người đã sáng tạo ra thư viện pandas – một trong những thư viện nền tảng và quan trọng nhất cho việc xử lý và phân tích dữ liệu có cấu trúc trong Python.
2. Khóa phiên dịch toàn cầu (GIL) ảnh hưởng như thế nào đến việc thực thi ứng dụng trong Python theo phân tích của tài liệu?
Cơ chế GIL (Global Interpreter Lock) ngăn chặn trình thông dịch CPython thực hiện nhiều hơn một lệnh mã byte Python cùng một lúc. Do đó, Python không phải là môi trường lý tưởng cho các ứng dụng đa luồng có tính đồng bộ cao gắn liền với CPU, trừ khi sử dụng các giải pháp mở rộng tiến trình hoặc tích hợp mã C/OpenMP thông qua Cython.
3. Đối tượng TextParser trong hàm read_csv có vai trò gì khi xử lý tập tin dữ liệu?
TextParser là một đối tượng trình lặp (iterator) được trả về khi chỉ định tham số chunksize hoặc iterator=True trong read_csv. Nó cho phép người dùng đọc và xử lý các tập tin dữ liệu có kích thước rất lớn theo từng khối (chunk) tùy ý mà không cần nạp toàn bộ tệp vào bộ nhớ.
4. Điểm khác biệt cơ bản giữa hai phương thức stack và unstack trong tái cấu trúc dữ liệu là gì?
Phương thức stack thực hiện xoay chuyển dữ liệu từ dạng cột sang dạng hàng để tạo ra cấu trúc chỉ mục phân cấp, trong khi phương thức unstack thực hiện thao tác ngược lại, chuyển đổi dữ liệu từ các mức chỉ mục hàng sang thành các cột.
5. Bản phân phối Python nào được tác giả sử dụng làm chuẩn hướng dẫn cài đặt trong tài liệu?
Tác giả sử dụng bản phân phối EPDFree (thuộc Enthought Python Distribution) với nền tảng Python 2.7 để làm hướng dẫn cài đặt tiêu chuẩn trên các hệ điều hành Windows, Apple OS X và GNU/Linux.
Kết luận
Dự án kết thúc học phần của nhóm sinh viên Trần Ngọc Tuyền và Huỳnh Bảo Ngọc Vy đã chuyển ngữ thành công 4 chương quan trọng trong tác phẩm "Python for Data Analysis" của Wes McKinney sang tiếng Việt. Báo cáo cung cấp một hệ thống lý thuyết và hướng dẫn thực hành chi tiết về các công cụ tính toán khoa học, quy trình xử lý định dạng tệp và các thuật toán làm sạch, hợp nhất dữ liệu trong pandas. Đây là tài liệu tham khảo hữu ích cho sinh viên và người làm công tác phân tích dữ liệu kinh tế - xã hội tại Trường Đại học Kinh tế TP.HCM.