Làm sạch dữ liệu là quá trình đưa dữ liệu thô về dạng nhất quán, đúng kiểu và đúng cấu trúc để phân tích được, đồng thời ghi lại mọi thay đổi để người khác tái lập. Nó gồm bốn việc lớn: sắp lại cấu trúc bảng, chuẩn hoá giá trị (đơn vị, ngày tháng, tên gọi), xử lý giá trị thiếu và trùng lặp, và kiểm tra tính hợp lý.
Dữ liệu mở đặc biệt cần làm sạch vì nó được tạo ra cho mục đích hành chính, không phải cho phân tích của bạn. Bảng có tiêu đề gộp hai tầng, dòng tổng xen giữa, ghi chú trong ô số, tên tỉnh viết ba kiểu là chuyện thường. Câu "nhà phân tích dành 80% thời gian làm sạch dữ liệu" được nhắc rất nhiều; con số chính xác không có nghiên cứu nào chốt, nhưng ai từng làm đều thấy phần này chiếm đa số công sức.
Bài này trình bày nguyên tắc dữ liệu gọn gàng, quy trình tám bước, các lỗi đặc thù với dữ liệu tiếng Việt, và cách ghi lại quá trình để kết quả không phụ thuộc vào trí nhớ của một người.
Đích đến: dữ liệu gọn gàng theo Hadley Wickham
Trước khi sửa, cần biết sửa thành hình dạng gì. Khung được dẫn nhiều nhất là dữ liệu gọn gàng (tidy data) do nhà thống kê Hadley Wickham trình bày trong bài báo năm 2014 trên Journal of Statistical Software. Ba nguyên tắc: mỗi biến là một cột, mỗi quan sát là một hàng, mỗi loại đơn vị quan sát là một bảng. Ý tưởng không mới, nó tương ứng với dạng chuẩn trong lý thuyết cơ sở dữ liệu quan hệ của Codd, nhưng Wickham diễn đạt lại cho người làm thống kê.
Vi phạm phổ biến nhất trong dữ liệu mở là đặt giá trị của một biến làm tên cột: bảng dân số có các cột 2019, 2020, 2021, 2022. Với mắt người, đó là bảng dễ đọc. Với phân tích, năm là một biến, nên bảng gọn gàng phải có ba cột: tỉnh, năm, dân số. Thao tác chuyển từ dạng rộng sang dạng dài này có trong mọi công cụ, gọi là pivot, melt hay unpivot.
Các vi phạm khác: nhiều biến trong một cột ("Nam 2020", "Nữ 2020"), một biến rải trên nhiều cột, nhiều loại đơn vị quan sát trong một bảng (thông tin tỉnh và thông tin xã trộn chung). Nhận ra đúng kiểu vi phạm giúp bạn chọn đúng thao tác thay vì sửa tay từng ô.
Quy trình tám bước từ tệp tải về đến bảng phân tích được
Thứ tự dưới đây giúp tránh làm đi làm lại. Nguyên tắc xuyên suốt: không bao giờ sửa tệp gốc, mọi thay đổi thực hiện trên bản sao hoặc bằng mã:
- Lưu bản gốc nguyên vẹn kèm ngày tải, đường dẫn nguồn, giấy phép. Đặt ở thư mục chỉ đọc.
- Đọc đúng mã hoá và dấu phân tách: xác định UTF-8 hay mã khác, dấu phẩy hay chấm phẩy, dấu thập phân là chấm hay phẩy. Sai ở bước này thì mọi bước sau đều sai.
- Khảo sát: đếm số dòng, số cột, kiểu dữ liệu từng cột, giá trị nhỏ nhất, lớn nhất, số ô trống, số giá trị khác nhau. Mục tiêu là hiểu dữ liệu trước khi sửa.
- Sửa cấu trúc: bỏ dòng tiêu đề phụ, dòng tổng, dòng ghi chú; tách ô gộp; chuyển bảng rộng thành dạng dài; mỗi cột một tên ngắn, không dấu, không khoảng trắng.
- Chuẩn hoá giá trị: đơn vị (nghìn đồng hay triệu đồng, ha hay m²), ngày tháng về một định dạng, tên đơn vị hành chính về danh mục chuẩn có mã, bỏ khoảng trắng thừa.
- Xử lý giá trị thiếu và giá trị đặc biệt: phân biệt ô trống thật, số 0, ký hiệu "-" hay ".." mang nghĩa "không có số liệu" hoặc "không áp dụng".
- Xử lý trùng lặp: trùng hoàn toàn thì bỏ; trùng khoá nhưng khác giá trị thì phải tìm hiểu lý do, không xoá bừa.
- Kiểm tính hợp lý và đối chiếu tổng: tổng các tỉnh có khớp số cả nước công bố không, tỷ lệ có nằm trong 0 đến 100 không, tăng trưởng có bất thường không.
Giá trị thiếu: đừng điền số 0 theo quán tính
Ba nghĩa của ô trống. Ô trống có thể là "không có số liệu", "bằng không" hoặc "không áp dụng" (ví dụ số học sinh lớp 12 ở trường tiểu học). Ba nghĩa này dẫn đến ba cách xử lý khác nhau. Điền 0 cho "không có số liệu" sẽ kéo trung bình xuống một cách giả tạo.
Cơ chế thiếu quan trọng hơn tỷ lệ thiếu. Lý thuyết thống kê phân biệt dữ liệu thiếu hoàn toàn ngẫu nhiên, thiếu ngẫu nhiên có điều kiện và thiếu không ngẫu nhiên, theo phân loại của Donald Rubin từ năm 1976. Nếu các xã nghèo thường không báo cáo, bỏ các dòng thiếu sẽ làm bức tranh đẹp hơn thực tế. Hãy hỏi vì sao thiếu trước khi quyết định cách xử lý.
Các lựa chọn xử lý. Bỏ dòng thiếu (đơn giản, chấp nhận được khi thiếu ít và ngẫu nhiên); điền bằng giá trị lân cận theo thời gian (hợp với chuỗi biến động chậm); điền bằng mô hình hoặc nhiều lần điền (multiple imputation) cho phân tích nghiêm túc. Dù chọn cách nào, hãy thêm một cột đánh dấu ô nào đã được điền.
Báo cáo minh bạch. Trong kết quả cuối, nêu tỷ lệ thiếu của các biến chính và cách xử lý. Người đọc chuyên môn sẽ hỏi câu đó đầu tiên.
Những lỗi đặc thù khi làm sạch dữ liệu tiếng Việt
Một số lỗi gần như chỉ gặp với dữ liệu trong nước, hoặc gặp nhiều hơn hẳn. Bảng dưới liệt kê dấu hiệu nhận biết và cách xử lý:
| Lỗi | Dấu hiệu | Cách xử lý |
|---|---|---|
| Mã hoá ký tự | Chữ có dấu thành ký tự lạ | Đọc lại với mã hoá đúng; với tệp rất cũ có thể là bảng mã TCVN3 hoặc VNI, cần công cụ chuyển mã |
| Unicode dựng sẵn và tổ hợp | Hai chữ trông giống hệt nhưng so sánh không bằng nhau | Chuẩn hoá Unicode về dạng NFC trước khi so khớp |
| Dấu thập phân | Số "1.234" bị đọc thành một phẩy hai ba bốn | Khai báo rõ dấu thập phân và dấu nghìn khi đọc tệp |
| Tên đơn vị hành chính | Cùng một tỉnh viết "TP.HCM", "Hồ Chí Minh", "Thành phố Hồ Chí Minh" | Khớp về danh mục chuẩn có mã; lưu bảng ánh xạ để dùng lại |
| Sắp xếp lại địa giới | Dữ liệu trước và sau năm 2025 dùng hai hệ đơn vị khác nhau | Tạo bảng tương ứng đơn vị cũ và mới, cẩn thận với đơn vị bị chia tách |
| Ngày tháng | Ngày 03/04 bị hiểu là 4 tháng 3 theo kiểu Mỹ | Đọc ngày với định dạng ngày trước tháng sau, kiểm bằng ngày lớn hơn 12 |
| Họ tên | Thứ tự họ đệm tên, viết hoa không đều | Không tách họ tên trừ khi bắt buộc; chuẩn hoá viết hoa cẩn thận |
Riêng với địa giới: từ ngày 1 tháng 7 năm 2025, Việt Nam còn 34 tỉnh thành và bỏ cấp huyện. Mọi chuỗi số liệu theo tỉnh kéo dài qua mốc này đều cần bảng tương ứng; với các tỉnh được hợp nhất, cộng số cũ để có chuỗi so sánh được, và ghi chú rõ cách làm.
Ghi lại quá trình: từ sửa tay sang quy trình tái lập
Sửa tay trong bảng tính nhanh cho lần đầu nhưng là món nợ về sau. Khi nguồn cập nhật số tháng mới, bạn phải làm lại mọi thao tác từ trí nhớ, và không ai kiểm được bạn đã làm gì. Nguyên tắc của nghiên cứu tái lập được là mọi biến đổi từ dữ liệu gốc đến kết quả phải được ghi lại dưới dạng chạy lại được.
Có ba mức tuỳ năng lực đội. Mức tối thiểu là nhật ký làm sạch: một tệp văn bản liệt kê từng thao tác theo thứ tự, kèm lý do. Mức giữa là dùng công cụ có ghi lịch sử thao tác, như OpenRefine (trước đây là Google Refine), cho phép xuất toàn bộ chuỗi thao tác và áp lại cho tệp mới. Mức đầy đủ là viết mã làm sạch bằng R, Python hoặc SQL, lưu trong hệ thống quản lý phiên bản cùng với dữ liệu gốc.
Một thực hành nhỏ nhưng hiệu quả: tách dữ liệu thành ba thư mục, thô (không bao giờ sửa), trung gian (do mã sinh ra, có thể xoá và tạo lại) và sạch (đầu vào cho phân tích). Bất cứ ai mở thư mục dự án cũng hiểu ngay luồng dữ liệu, và việc cập nhật trở thành chạy lại một lệnh.
Ví dụ minh hoạ: làm sạch một bảng niên giám theo tỉnh
Giả định bạn tải bảng "diện tích và sản lượng lúa theo tỉnh" từ một niên giám dạng bảng tính. Trang tính có ba dòng tiêu đề gộp: dòng một là "Diện tích (nghìn ha)" và "Sản lượng (nghìn tấn)", dòng hai là các năm, dòng ba trống. Xen giữa danh sách tỉnh là các dòng vùng như "Đồng bằng sông Hồng" in đậm, cuối bảng có dòng "Cả nước" và một dòng ghi chú "Số liệu năm cuối là sơ bộ". Đây là ví dụ giả định nhưng rất gần những gì bạn sẽ gặp.
Trình tự xử lý: bỏ ba dòng tiêu đề và đặt tên cột thủ công theo dạng biến_năm; tách các dòng vùng ra một bảng ánh xạ tỉnh với vùng, thay vì xoá, vì thông tin vùng hữu ích về sau; loại dòng "Cả nước" khỏi bảng chính nhưng giữ lại để đối chiếu tổng; chuyển bảng sang dạng dài với các cột tỉnh, năm, biến, giá trị; thêm cột đánh dấu số sơ bộ cho năm cuối; khớp tên tỉnh về danh mục có mã. Kết quả là một bảng có thể ghép với bất kỳ dữ liệu theo tỉnh nào khác.
Bước kiểm tra cuối: cộng diện tích các tỉnh từng năm so với dòng "Cả nước" đã giữ lại. Chênh lệch nhỏ do làm tròn là bình thường; chênh lớn thường có nghĩa là bạn đã vô tình xoá hoặc nhân đôi một tỉnh. Phép kiểm này mất một phút nhưng bắt được loại lỗi mà nhìn bằng mắt hầu như không thấy.
Kiểm tra cuối trước khi phân tích
Sau khi làm sạch, một vòng kiểm tra nhanh bắt được phần lớn sai sót còn sót lại:
- Số dòng sau làm sạch có khớp kỳ vọng không? Mất bao nhiêu dòng, vì lý do gì?
- Mỗi khoá (tỉnh và năm, mã doanh nghiệp và kỳ) có duy nhất không?
- Tổng theo nhóm có khớp với số tổng do nguồn công bố không?
- Phân phối các biến chính có giá trị cực đoan bất thường không? Kiểm lại từng điểm ngoại lai trong tệp gốc.
- Đơn vị có nhất quán không? Một tỉnh có giá trị gấp nghìn lần tỉnh khác thường là lỗi đơn vị.
- Mọi cột có đúng kiểu không: số là số, ngày là ngày, mã là chuỗi giữ được số 0 ở đầu?
- Bảng ánh xạ tên và nhật ký làm sạch đã lưu cùng dự án chưa?
Cột mã giữ số 0 ở đầu đáng nhắc riêng: mã số thuế, mã bưu chính, mã đơn vị hành chính bị đọc thành số sẽ mất số 0 và không bao giờ khớp được nữa. Luôn đọc các cột mã dưới dạng chuỗi ký tự.
Câu hỏi thường gặp
OpenRefine phù hợp với ai?
Với người không lập trình nhưng phải làm sạch bảng vài nghìn đến vài trăm nghìn dòng: gom nhóm giá trị gần giống để chuẩn hoá tên, tách cột, đổi kiểu, và lưu lại chuỗi thao tác để áp cho tệp mới. Với dữ liệu rất lớn hoặc quy trình cập nhật thường xuyên, viết mã sẽ bền hơn.
Có nên xoá điểm ngoại lai không?
Chỉ xoá khi chứng minh được đó là lỗi, ví dụ sai đơn vị hoặc gõ nhầm. Điểm ngoại lai thật thường là thông tin quan trọng nhất trong bộ dữ liệu. Nếu muốn giảm ảnh hưởng của chúng, dùng thống kê vững như trung vị hoặc báo cáo kết quả có và không có điểm đó.
Làm sạch có làm sai lệch dữ liệu không?
Có thể, nếu các quyết định làm sạch thiên về một kết quả mong muốn. Đó là lý do cần ghi nhật ký và quyết định quy tắc làm sạch trước khi nhìn kết quả phân tích. Trong nghiên cứu, việc đổi quy tắc sau khi thấy kết quả là một dạng của p-hacking.
Khớp tên đơn vị hành chính tự động có đáng tin không?
Khớp mờ theo độ giống chuỗi giúp tiết kiệm thời gian nhưng có thể ghép nhầm các tên gần giống nhau. Cách an toàn là để thuật toán đề xuất, người duyệt từng cặp không chắc, rồi lưu bảng ánh xạ đã duyệt để lần sau dùng lại mà không phải khớp nữa.
Dữ liệu lớn có cần làm sạch khác không?
Nguyên tắc giống nhau, nhưng không thể nhìn bằng mắt từng dòng. Thay vào đó là kiểm tra tự động: quy tắc ràng buộc về kiểu, khoảng giá trị, tính duy nhất, chạy mỗi khi dữ liệu mới về và cảnh báo khi vi phạm. Nhiều tổ chức gọi đây là kiểm thử dữ liệu.
Nên dùng Excel để làm sạch dữ liệu không?
Với bảng nhỏ, làm một lần, Excel đủ dùng nếu bạn cẩn thận với việc tự đổi kiểu dữ liệu. Rủi ro lớn nhất là Excel tự chuyển mã thành số và chuỗi thành ngày mà không báo, và thao tác tay không được ghi lại. Khi dữ liệu cập nhật định kỳ, nên chuyển sang công cụ có ghi lịch sử.