Làm sạch dữ liệu khảo sát Python là quá trình dùng thư viện pandas để đọc file phiếu trả lời, phát hiện lỗi nhập, xử lý ô trống, chuẩn hóa thang đo và lưu một bộ dữ liệu sẵn sàng phân tích. Mọi thao tác đều nằm trong mã nên bạn có thể chạy lại hoặc giải trình từng quyết định khi được hỏi.

Bài viết đi qua sáu bước theo đúng thứ tự nên làm, với ví dụ minh họa là một bảng hỏi về ý định mua sắm trực tuyến thu qua Google Forms. Mỗi bước nêu hàm cần dùng, điều cần kiểm tra và những quyết định bạn phải ghi lại để đưa vào chương phương pháp.

Sáu bước chính gồm:

  1. Đọc file và kiểm tra cấu trúc.
  2. Loại bản ghi trùng lặp.
  3. Xử lý giá trị thiếu.
  4. Chuẩn hóa tên biến và mã hóa thang đo.
  5. Lọc phiếu trả lời không hợp lệ.
  6. Kiểm tra lại và ghi nhật ký xử lý.

Đọc và kiểm tra dữ liệu khảo sát

Bước đầu tiên không phải sửa dữ liệu mà là hiểu dữ liệu đang ở trạng thái nào. Hãy luôn giữ nguyên file gốc trong thư mục riêng, mọi thao tác chỉ thực hiện trên bản sao được nạp vào bộ nhớ.

Đọc file đúng định dạng và bảng mã

File CSV xuất từ Google Forms thường dùng bảng mã UTF-8, nên khai báo tham số encoding khi gọi read_csv() để tiếng Việt không bị lỗi phông. Nếu dữ liệu nằm trong Excel nhiều sheet, dùng read_excel() với tham số sheet_name. Cột thời gian nộp phiếu nên được chuyển sang kiểu ngày giờ ngay từ đầu.

Kiểm tra nhanh cấu trúc

Ba lệnh cho bạn bức tranh tổng quát trong vài giây. Hàm info() cho biết số dòng, kiểu dữ liệu và số ô có giá trị của từng cột. Hàm describe() cho thấy giá trị nhỏ nhất, lớn nhất, giúp phát hiện điểm 6 xuất hiện trong thang năm mức. Hàm duplicated() đánh dấu những dòng bị lặp hoàn toàn.

Với dữ liệu khảo sát trực tuyến, phiếu trùng thường do người trả lời bấm gửi hai lần. Hãy kiểm tra trùng theo cột email hoặc mã người trả lời nếu có, sau đó dùng drop_duplicates() và ghi lại số phiếu bị loại. Tài liệu đầy đủ về các hàm này có trên trang pandas documentation.

Xử lý giá trị thiếu trong bảng hỏi

Giá trị thiếu là phần cần cân nhắc kỹ nhất, vì mỗi cách xử lý đều ảnh hưởng tới cỡ mẫu và kết quả. Hãy đếm số ô trống của từng cột bằng isna().sum() và số ô trống trên từng dòng trước khi quyết định.

Nhận diện các dạng thiếu ẩn

Không phải ô trống nào cũng hiện là NaN. Một số bảng hỏi dùng mã 99 cho câu “không trả lời”, hoặc người nhập gõ dấu cách, dấu gạch ngang. Hãy dùng replace() chuyển các mã này về giá trị thiếu chuẩn trước khi đếm, nếu không chúng sẽ bị tính như điểm số thật.

Chọn cách xử lý phù hợp

Bảng dưới đây so sánh các phương án thường gặp khi làm sạch dữ liệu khảo sát Python. Lựa chọn cụ thể cần dựa trên tỷ lệ thiếu, cơ chế thiếu và yêu cầu của giảng viên hướng dẫn.

Phương ánHàm pandasKhi nào cân nhắcRủi ro
Loại cả phiếudropna() theo dòngPhiếu bỏ trống phần lớn câu hỏi chínhGiảm cỡ mẫu, có thể gây lệch mẫu
Loại theo từng phân tíchChọn cột rồi dropna()Thiếu rải rác ở vài biếnCỡ mẫu khác nhau giữa các bảng
Điền trung vị của biếnfillna()Thiếu rất ít, biến định lượngThu hẹp độ biến thiên
Giữ nguyên và báo cáoKhông xử lýBiến phụ, không vào mô hìnhCần ghi chú rõ trong bảng

Khi nào không nên điền giá trị thiếu

Nếu một nhân tố bị thiếu nhiều ở một nhóm đáp viên cụ thể, việc điền trung bình có thể che giấu một vấn đề của thiết kế bảng hỏi. Khi đó hãy báo cáo tỷ lệ thiếu và thảo luận với giảng viên. Tuyệt đối không tự điền giá trị để đạt cỡ mẫu tối thiểu, vì đó là ngụy tạo dữ liệu.

Chuẩn hóa biến và mã hóa thang đo

Sau khi xử lý ô trống, bạn đưa dữ liệu về dạng thống nhất để các bước phân tích sau không phải sửa lại. Đây cũng là lúc tạo từ điển biến, ghi rõ tên cột mới ứng với câu hỏi nào trong bảng hỏi.

Đổi tên cột ngắn gọn

Google Forms dùng nguyên văn câu hỏi làm tên cột, rất dài và có dấu. Hãy tạo một từ điển ánh xạ rồi dùng rename() để đổi thành mã ngắn như TT1, TT2 cho nhân tố tin tưởng. Mã nên khớp với ký hiệu trong bảng thang đo ở chương 3 để người đọc dễ đối chiếu.

Mã hóa đáp án dạng chữ sang số

Nếu phiếu ghi “Hoàn toàn đồng ý” thay vì số 5, dùng map() với một từ điển ánh xạ năm mức sang số từ 1 đến 5. Sau khi ánh xạ, kiểm tra lại bằng value_counts(). Nếu xuất hiện giá trị thiếu mới, nhiều khả năng một đáp án bị viết khác chính tả hoặc thừa dấu cách.

Đảo chiều câu hỏi nghịch

Các câu hỏi phát biểu theo hướng ngược lại cần được đảo điểm trước khi tính trung bình nhân tố. Với thang năm mức, điểm mới bằng 6 trừ điểm cũ. Hãy tạo cột mới thay vì ghi đè, đặt tên có hậu tố r, để còn kiểm tra lại khi cần.

Lọc phiếu trả lời không hợp lệ

Khảo sát trực tuyến dễ gặp phiếu trả lời qua loa. Việc loại phiếu phải dựa trên tiêu chí đặt ra từ trước, không phải dựa vào việc phiếu đó làm kết quả xấu đi. Một số tiêu chí phổ biến:

  • Câu hỏi kiểm tra sự chú ý trả lời sai, ví dụ câu yêu cầu chọn mức 2.
  • Chọn cùng một mức cho toàn bộ câu hỏi, kể cả câu đảo chiều.
  • Thời gian hoàn thành ngắn bất thường so với độ dài bảng hỏi.
  • Không thuộc đối tượng khảo sát theo câu hỏi sàng lọc.

Kinh nghiệm từ Luận Văn 360: nhiều học viên chỉ ghi “loại bỏ phiếu không hợp lệ” mà không nói tiêu chí, khiến hội đồng nghi ngờ việc chọn lọc mẫu.

Hãy viết tiêu chí loại phiếu thành mã, in số phiếu bị loại theo từng tiêu chí và đưa con số đó vào chương phương pháp.

Khi bảng hỏi phức tạp hoặc dữ liệu ghép từ nhiều đợt thu, dịch vụ hỗ trợ phân tích dữ liệu bằng Python của Luận Văn 360 có thể cùng bạn rà soát từng bước làm sạch. Bạn giữ toàn quyền quyết định tiêu chí xử lý và tự kiểm tra bộ dữ liệu cuối cùng.

Kiểm tra dữ liệu sau xử lý và lưu nhật ký

Bộ dữ liệu sạch cần được kiểm tra lại trước khi chuyển sang phân tích. Hãy chạy lại describe() để chắc rằng mọi biến thang đo nằm trong khoảng 1 đến 5, rồi so sánh số dòng trước và sau từng bước. Cuối cùng, lưu file bằng to_csv() vào thư mục dữ liệu đã xử lý, tách biệt với file gốc.

Nhật ký xử lý dữ liệu

Nhật ký là một bảng ngắn ghi từng bước, số dòng bị ảnh hưởng và lý do. Bạn có thể đặt nó ngay trong notebook dưới dạng ô Markdown, theo khung trong bài tổ chức notebook Jupyter cho luận văn. Nhật ký giúp bạn trả lời nhanh khi hội đồng hỏi vì sao mẫu cuối nhỏ hơn số phiếu thu về.

Nếu bạn từng làm sạch dữ liệu trên SPSS, bài các bước xử lý phiếu khảo sát trên SPSS giúp đối chiếu hai cách làm. Khi dữ liệu có thông tin định danh như email hay số điện thoại, hãy xóa các cột đó trước khi chia sẻ, theo nguyên tắc trong bài ẩn danh dữ liệu cá nhân người trả lời.

Lỗi thường gặp khi làm sạch dữ liệu khảo sát Python

Ghi đè lên file gốc

Lưu dữ liệu đã xử lý trùng tên file gốc khiến bạn mất khả năng quay lại. Hãy đặt file gốc ở chế độ chỉ đọc và luôn lưu kết quả sang thư mục khác.

Sửa dữ liệu thủ công trong Excel

Sửa vài ô trong Excel rồi mới nạp vào pandas làm đứt chuỗi tái lập. Mọi chỉnh sửa, dù nhỏ, nên được viết thành mã kèm chú thích lý do.

Đảo chiều câu hỏi hai lần

Chạy lại ô đảo điểm trên cùng một cột sẽ đưa điểm về như cũ mà không báo lỗi. Tạo cột mới với hậu tố riêng là cách đơn giản để tránh sai sót này.

Kết luận

Quy trình làm sạch dữ liệu khảo sát Python gồm đọc và kiểm tra cấu trúc, loại trùng, xử lý giá trị thiếu, chuẩn hóa thang đo, lọc phiếu không hợp lệ và ghi nhật ký. Điểm mấu chốt là mọi quyết định đều nằm trong mã và có lý do rõ ràng.

Khi đã có bộ dữ liệu sạch, bước tiếp theo là mô tả mẫu và các biến, được hướng dẫn trong bài phân tích thống kê mô tả bằng Python. Nếu cần người cùng soát lại quy trình xử lý, hãy tham khảo dịch vụ phân tích dữ liệu Python của Luận Văn 360.