Từ điển dữ liệu là một bảng, mỗi dòng mô tả một biến: tên biến, nhãn đầy đủ, kiểu dữ liệu, đơn vị, khoảng giá trị hợp lệ, ý nghĩa từng mã, cách ghi giá trị thiếu và câu hỏi gốc. Có nó, người khác đọc được bảng của bạn mà không phải hỏi lại.
Thiếu từ điển là lý do số một khiến dữ liệu đã công khai vẫn không ai dùng được. Một cột tên q7_3 chứa các số 1 đến 5 có thể là mức độ đồng ý, có thể là số con, có thể là mã tỉnh. Chính người thu thập, sau hai năm, cũng thường quên. Bài này đưa ra cấu trúc cột, ví dụ cụ thể cho dữ liệu khảo sát và cách sinh từ điển tự động từ tệp dữ liệu.
Các cột nên có trong từ điển dữ liệu
Không phải bộ dữ liệu nào cũng cần đủ mọi cột, nhưng bốn cột đầu là tối thiểu.
| Cột | Nội dung | Ví dụ |
|---|---|---|
ten_bien | Tên biến đúng như trong tệp dữ liệu | thu_nhap_thang |
nhan | Mô tả đầy đủ bằng lời | Tổng thu nhập hộ trong tháng trước khảo sát |
kieu | Số nguyên, số thực, chuỗi, ngày, phân loại | Số nguyên |
don_vi | Đơn vị đo | Nghìn đồng |
gia_tri_hop_le | Khoảng hoặc danh sách giá trị cho phép | 0 đến 500000 |
ma_gia_tri | Ý nghĩa từng mã với biến phân loại | 1 = Nam; 2 = Nữ |
ma_thieu | Các mã thể hiện thiếu và lý do | -8 = Không biết; -9 = Từ chối trả lời |
cau_hoi_goc | Số câu và nguyên văn câu hỏi trong bảng hỏi | Câu C12 |
nguon | Thu trực tiếp, tính toán từ biến khác, ghép từ nguồn ngoài | Tính bằng tổng C12a đến C12f |
ghi_chu | Những điều bất thường: đổi câu hỏi giữa đợt, lỗi đã biết | Đợt 1 hỏi theo năm, đã quy về tháng |
Ví dụ: ghi từ điển cho một bộ khảo sát hộ gia đình
Biến phân loại một lựa chọn
Câu hỏi nghề nghiệp chính có bảy phương án. Từ điển ghi đủ bảy mã kèm nhãn, kể cả mã “Khác” và cột phụ chứa câu trả lời mở đi kèm. Nếu sau khi làm sạch bạn gộp phương án 6 và 7, ghi rõ trong cột ghi chú và lưu cả biến trước khi gộp.
Câu hỏi chọn nhiều phương án
Câu hỏi nhiều lựa chọn thường được tách thành nhiều biến nhị phân, mỗi phương án một biến 0 và 1. Từ điển cần cho biết các biến này thuộc cùng một câu, ví dụ đặt tên theo gốc chung c15_1 đến c15_8 và ghi câu hỏi gốc giống nhau ở cột cau_hoi_goc.
Thang đo Likert
Ghi rõ chiều của thang: 1 là hoàn toàn không đồng ý hay hoàn toàn đồng ý. Nếu có câu đảo chiều đã được mã hoá lại, ghi tên biến gốc và biến đã đảo, kèm công thức. Đây là chỗ người dùng lại hay tính sai điểm tổng nhất.
Biến tính toán
Thu nhập bình quân đầu người, chỉ số tài sản, điểm tổng thang đo đều là biến tính từ biến khác. Cột nguon ghi công thức hoặc trỏ tới tên tệp mã xử lý tạo ra biến đó.
Giá trị thiếu: chỗ dễ làm hỏng phân tích nhất
Phân biệt các loại thiếu. Không biết, từ chối, không áp dụng vì bị bỏ qua theo bước nhảy, lỗi nhập. Mỗi loại một mã riêng, vì ý nghĩa thống kê khác nhau.
Dùng mã không thể trùng giá trị thật. Mã 99 cho tuổi là nguy hiểm vì có người 99 tuổi. Mã âm như -8, -9 an toàn hơn cho biến số lượng.
Ghi rõ trong bản CSV dùng gì. Có bộ dữ liệu để ô trống, có bộ ghi NA, có bộ giữ mã âm. Chọn một kiểu và viết trong README lẫn từ điển. Người dùng R đọc ô trống thành NA, còn mã -9 sẽ thành số thật nếu không khai báo, làm trung bình lệch hẳn.
Kiểm tra bước nhảy. Người không có con thì các câu về con phải là mã không áp dụng, không phải số 0. Từ điển nên ghi điều kiện để một biến được hỏi.
Dựng từ điển tự động từ tệp dữ liệu
Bằng R
Nếu dữ liệu đến từ SPSS hoặc Stata, đọc bằng haven::read_sav() hoặc haven::read_dta(), nhãn biến và nhãn giá trị đi theo. Hàm labelled::generate_dictionary() trả về bảng có tên biến, nhãn, kiểu và nhãn giá trị; ghi ra CSV bằng write.csv() hoặc readr::write_csv(). Gói skimr với hàm skim() cho thêm số giá trị thiếu, trung bình, phân vị của từng biến, ghép vào thành cột thống kê tóm tắt.
Bằng Python
Với pandas, khung dữ liệu cơ bản lấy từ df.dtypes cho kiểu, df.isna().sum() cho số ô thiếu, df.describe() cho thống kê. Ghép các phần này thành một bảng mới rồi to_csv(). Đọc tệp SPSS kèm nhãn thì dùng gói pyreadstat, đối tượng siêu dữ liệu trả về có column_names_to_labels và variable_value_labels.
Phần máy không làm được
Máy sinh được khung, nhưng nhãn đầy đủ, đơn vị, điều kiện bước nhảy, công thức biến tính toán thì phải do người hiểu dữ liệu điền. Cách làm hiệu quả là sinh khung một lần, rồi điền tay các cột còn trống, rồi giữ từ điển trong cùng thư mục với mã xử lý để cập nhật khi thêm biến.
Định dạng và nơi đặt từ điển
Từ điển nên ở dạng máy đọc được trước, đẹp sau:
- Lưu thành
codebook.csvhoặcdata_dictionary.csv, cùng mã hoá UTF-8 với tệp dữ liệu. - Nếu cần bản để in hoặc nộp kèm hồ sơ, xuất thêm PDF từ cùng một nguồn, không duy trì hai bản gõ tay.
- Đặt ở thư mục gốc của bộ dữ liệu, tên tệp được nhắc trong README.
- Khi dữ liệu có nhiều bảng, mỗi bảng một từ điển hoặc thêm cột
bangđể phân biệt. - Với khảo sát lớn, cân nhắc chuẩn DDI để kho dữ liệu và công cụ tìm kiếm đọc được tự động.
Từ điển cho dữ liệu nhiều đợt và nhiều bảng
Khảo sát lặp lại nhiều đợt
Khi cùng một bảng hỏi được dùng ở nhiều đợt, câu hỏi thường bị sửa nhẹ: thêm phương án, đổi thời gian hồi tưởng, đổi đơn vị. Thêm cột dot_ap_dung cho biết biến có ở đợt nào, và ghi mọi thay đổi ở cột ghi chú. Nếu một biến đổi ý nghĩa giữa các đợt, tốt nhất tách thành hai biến có tên khác nhau thay vì giữ cùng tên.
Nhiều bảng nối với nhau
Dữ liệu hộ gia đình thường có bảng hộ và bảng thành viên, nối với nhau qua mã hộ. Từ điển cần chỉ rõ khoá nối: biến nào là mã duy nhất của mỗi bảng, biến nào dùng để ghép. Người dùng lại hay ghép sai khi mã hộ trong hai bảng có kiểu khác nhau, ví dụ một bên là số, một bên là chuỗi có số 0 ở đầu.
Dữ liệu nhập từ biểu mẫu trực tuyến
Biểu mẫu trực tuyến thường tự đặt tên cột bằng nguyên văn câu hỏi rất dài. Đổi sang tên biến ngắn ngay từ đầu, lưu ánh xạ giữa tên cũ và tên mới thành một cột trong từ điển. Như vậy vẫn truy lại được câu hỏi gốc mà mã phân tích gọn hơn nhiều.
Kiểm từ điển bằng chính dữ liệu
Từ điển ghi khoảng giá trị hợp lệ thì có thể dùng nó để kiểm dữ liệu tự động. Viết một đoạn mã ngắn đọc từ điển, với mỗi biến số lượng thì đếm số dòng nằm ngoài khoảng cho phép, với mỗi biến phân loại thì liệt kê các mã xuất hiện trong dữ liệu mà không có trong danh sách mã. Kết quả thường lộ ra lỗi nhập liệu, như tuổi 250 hay mã tỉnh không tồn tại.
Cách làm này biến từ điển từ một tài liệu mô tả thành một công cụ kiểm tra chất lượng. Mỗi lần nhận thêm dữ liệu, chạy lại bước kiểm trước khi phân tích.
Lỗi hay gặp khi viết từ điển
Viết từ điển sau khi đã làm sạch xong. Lúc đó đã quên các quyết định giữa chừng. Mở từ điển ngay từ khi nhập liệu và ghi theo.
Từ điển và dữ liệu lệch tên biến. Đổi tên biến trong mã mà không sửa từ điển. Thêm một bước kiểm đơn giản: so danh sách tên biến hai bên, báo nếu khác.
Ghi đơn vị ở tiêu đề cột. Tên cột như “Thu nhập (triệu)” gây lỗi khi đọc bằng máy. Để đơn vị ở từ điển, tên biến chỉ dùng chữ không dấu, số và gạch dưới.
Câu hỏi thường gặp
Từ điển dữ liệu khác bảng hỏi ở chỗ nào?
Bảng hỏi là công cụ thu thập, từ điển mô tả dữ liệu sau khi thu: tên biến, kiểu, mã, giá trị thiếu, biến tính toán. Hai thứ nên đi cùng nhau và dẫn chiếu sang nhau qua số câu hỏi.
Có mẫu từ điển dữ liệu chuẩn để dùng không?
Chưa có một mẫu bắt buộc chung. Nhiều kho dữ liệu và thư viện đại học có mẫu gợi ý, và các cột trong bài là phần giao nhau phổ biến. Khảo sát lớn có thể theo chuẩn DDI.
Ô trống và mã -9 nên chọn cái nào?
Nên giữ mã riêng cho từng loại thiếu trong bản gốc vì mang thông tin. Bản chia sẻ có thể giữ mã hoặc đổi thành ô trống, miễn là ghi rõ trong từ điển và README.
Dữ liệu định tính có cần từ điển không?
Cần ở dạng khác: danh sách tệp phỏng vấn, mã người tham gia, thuộc tính như vai trò, địa bàn, ngày phỏng vấn, và bảng mã chủ đề kèm định nghĩa từng mã.
Từ điển dữ liệu nên đặt tên tệp thế nào?
Đặt tên rõ như codebook.csv hoặc data_dictionary.csv, ở cùng thư mục với dữ liệu và được nhắc tới trong README để người tải về biết mở tệp nào trước.