Kiểm tra dữ liệu cần thiết


93

Trong vai trò công việc của mình, tôi thường làm việc với các bộ dữ liệu của người khác, những người không phải là chuyên gia mang đến cho tôi dữ liệu lâm sàng và tôi giúp họ tóm tắt và thực hiện các xét nghiệm thống kê.

Vấn đề tôi gặp phải là các bộ dữ liệu tôi mang theo hầu như luôn bị đánh vần bởi lỗi chính tả, sự không nhất quán và tất cả các loại vấn đề khác. Tôi muốn biết liệu những người khác có các bài kiểm tra tiêu chuẩn mà họ làm để cố kiểm tra bất kỳ bộ dữ liệu nào đi vào hay không.

Tôi đã từng vẽ biểu đồ của từng biến chỉ để có một cái nhìn nhưng bây giờ tôi nhận ra có rất nhiều lỗi khủng khiếp có thể tồn tại trong bài kiểm tra này. Ví dụ, tôi đã có một bộ dữ liệu đo lặp đi lặp lại vào một ngày khác, trong đó, đối với một số cá nhân, biện pháp lặp lại giống hệt ở lần 2 như lúc 1. Điều này sau đó đã được chứng minh là không chính xác, như bạn mong đợi. Một bộ dữ liệu khác có một cá nhân đã bị rối loạn rất nghiêm trọng (đại diện bởi điểm cao) đến không có vấn đề, được đại diện bởi 0 trên bảng. Điều này là không thể, mặc dù tôi không thể chứng minh điều đó một cách dứt khoát.

Vì vậy, những bài kiểm tra cơ bản nào tôi có thể chạy trên mỗi tập dữ liệu để đảm bảo rằng chúng không có lỗi chính tả và chúng không chứa các giá trị không thể?

Cảm ơn trước!


3
Câu hỏi tuyệt vời. Tôi nghi ngờ sẽ rất khó để đưa ra câu trả lời chung vì việc kiểm tra sẽ phụ thuộc vào chi tiết cụ thể của bộ dữ liệu.
đánh dấu999

2
@ mark999 Tôi đồng ý. Tôi sẽ quan tâm để đọc câu trả lời cho câu hỏi này. Có một số chiến lược chung, nhưng tôi thấy rằng rất nhiều kiểm tra là về việc xây dựng các kỳ vọng cụ thể của miền, cả về dữ liệu sẽ như thế nào và một số lỗi phổ biến có thể phát sinh.
Jeromy Anglim

1
Độc giả ở đây cũng sẽ quan tâm đến chủ đề sau: Hướng dẫn đảm bảo chất lượng và kiểm soát chất lượng (qa / qc) cho cơ sở dữ liệu .
gung

Câu trả lời:


77

Nó giúp hiểu cách dữ liệu được ghi lại.

Hãy để tôi chia sẻ một câu chuyện . Một lần, từ lâu, nhiều bộ dữ liệu chỉ được lưu trữ trong bản cứng mờ dần. Trong những ngày đen tối đó, tôi đã ký hợp đồng với một tổ chức (có phả hệ và quy mô lớn; nhiều bạn có thể sở hữu cổ phiếu của nó) để vi tính hóa khoảng 10 ^ 5 hồ sơ dữ liệu giám sát môi trường tại một trong các nhà máy sản xuất của nó. Để làm điều này, cá nhân tôi đã đánh dấu một kệ các báo cáo trong phòng thí nghiệm (để hiển thị dữ liệu ở đâu), tạo các biểu mẫu nhập dữ liệu và ký hợp đồng với một cơ quan tạm thời để biết chữcông nhân để nhập dữ liệu vào các biểu mẫu. (Có, bạn phải trả thêm tiền cho những người có thể đọc.) Do giá trị và độ nhạy cảm của dữ liệu, tôi đã tiến hành quy trình này song song với hai công nhân tại một thời điểm (những người thường thay đổi từ ngày này sang ngày khác). Phải mất một vài tuần. Tôi đã viết phần mềm để so sánh hai bộ mục, xác định một cách có hệ thống và sửa tất cả các lỗi xuất hiện.

Cậu bé đã có lỗi! Cái mà có thể sai lầm? Một cách tốt để mô tả và đo lường lỗi là ở cấp độ của hồ sơ cơ bản , trong tình huống này là mô tả về một kết quả phân tích duy nhất (nồng độ của một số hóa chất, thường) cho một mẫu cụ thể thu được tại một điểm giám sát nhất định trên một ngày đã cho. Khi so sánh hai bộ dữ liệu, tôi thấy:

  • Lỗi thiếu sót : một bộ dữ liệu sẽ bao gồm một bản ghi, một bộ khác thì không. Điều này thường xảy ra bởi vì (a) một hoặc hai dòng sẽ bị bỏ qua ở cuối trang hoặc (b) toàn bộ trang sẽ bị bỏ qua.

  • Lỗi rõ ràng của thiếu sót thực sự là lỗi nhập dữ liệu. Một bản ghi được xác định bởi tên điểm giám sát, ngày tháng và "chất phân tích" (thường là tên hóa học). Nếu bất kỳ lỗi nào trong số này có lỗi đánh máy, nó sẽ không được khớp với các bản ghi khác có liên quan. Trong thực tế, bản ghi chính xác biến mất và một bản ghi không chính xác xuất hiện.

  • Sao chép giả . Các kết quả tương tự có thể xuất hiện trong nhiều nguồn, được sao chép nhiều lần và dường như là các biện pháp lặp lại thực sự khi không. Các bản sao rất đơn giản để phát hiện, nhưng việc quyết định xem chúng có sai hay không phụ thuộc vào việc biết liệu các bản sao thậm chí có xuất hiện trong tập dữ liệu hay không. Đôi khi bạn không thể biết.

  • Lỗi nhập dữ liệu Frank . Những cái "tốt" rất dễ bị bắt bởi vì chúng thay đổi loại mốc: sử dụng chữ "O" cho chữ số "0", ví dụ, biến một số thành số không. Các lỗi tốt khác thay đổi giá trị rất nhiều, nó có thể dễ dàng được phát hiện bằng các kiểm tra thống kê. (Trong một trường hợp, chữ số hàng đầu trong "1.000,010 mg / Kg" đã bị cắt, để lại giá trị 10. Đó là một thay đổi lớn khi bạn nói về nồng độ thuốc trừ sâu!) Các lỗi xấu rất khó bắt vì chúng thay đổi một giá trị thành một giá trị phù hợp (sắp xếp) với phần còn lại của dữ liệu, chẳng hạn như gõ "80" cho "50". (Loại lỗi này xảy ra với phần mềm OCR mọi lúc.)

  • Chuyển vị . Các giá trị đúng có thể được nhập nhưng được liên kết với các khóa bản ghi sai. Điều này là xảo quyệt, bởi vì các đặc điểm thống kê toàn cầu của bộ dữ liệu có thể vẫn không thay đổi, nhưng sự khác biệt giả có thể được tạo ra giữa các nhóm. Có lẽ chỉ có một cơ chế như nhập kép thậm chí có khả năng phát hiện các lỗi này.

Khi bạn nhận thức được các lỗi này và biết hoặc có một lý thuyết về cách chúng xảy ra, bạn có thể viết các tập lệnh để troll bộ dữ liệu của bạn cho sự hiện diện có thể của các lỗi đó và gắn cờ chúng để được chú ý thêm. Bạn không thể luôn giải quyết chúng, nhưng ít nhất bạn có thể bao gồm trường "bình luận" hoặc "cờ chất lượng" để đi kèm với dữ liệu trong suốt quá trình phân tích sau này.

Kể từ đó, tôi đã chú ý đến các vấn đề về chất lượng dữ liệu và đã có nhiều cơ hội hơn để thực hiện kiểm tra toàn diện các bộ dữ liệu thống kê lớn. Không có gì là hoàn hảo; tất cả họ đều được hưởng lợi từ việc kiểm tra chất lượng Một số nguyên tắc tôi đã phát triển trong nhiều năm để thực hiện điều này bao gồm

  1. Bất cứ khi nào có thể, hãy tạo sự dư thừa trong quy trình nhập dữ liệu và sao chép dữ liệu: tổng kiểm tra, tổng số, các mục lặp lại: bất cứ điều gì để hỗ trợ kiểm tra tính nhất quán nội bộ tự động.

  2. Nếu có thể, hãy tạo và khai thác một cơ sở dữ liệu khác mô tả dữ liệu sẽ trông như thế nào: đó là siêu dữ liệu có thể đọc được trên máy tính. Chẳng hạn, trong một thí nghiệm về thuốc bạn có thể biết trước rằng mọi bệnh nhân sẽ được nhìn thấy ba lần. Điều này cho phép bạn tạo một cơ sở dữ liệu với tất cả các bản ghi chính xác và số nhận dạng của chúng với các giá trị đang chờ để điền vào. Điền chúng vào dữ liệu được cung cấp cho bạn và sau đó kiểm tra trùng lặp, thiếu sót và dữ liệu không mong muốn.

  3. Luôn bình thường hóa dữ liệu của bạn (cụ thể, đưa chúng vào ít nhất là dạng bình thường thứ tư ), bất kể bạn định định dạng dữ liệu để phân tích như thế nào. Điều này buộc bạn phải tạo các bảng của mọi thực thể riêng biệt về mặt khái niệm mà bạn đang lập mô hình. . Để làm như vậy, bạn tạo ra nhiều kiểm tra hiệu quả về chất lượng và tính nhất quán của dữ liệu và xác định nhiều giá trị có khả năng bị thiếu hoặc trùng lặp hoặc không nhất quán.

    Nỗ lực này (đòi hỏi kỹ năng xử lý dữ liệu tốt nhưng đơn giản) có hiệu quả đáng kinh ngạc. Nếu bạn mong muốn phân tích các bộ dữ liệu lớn hoặc phức tạp và không có kiến ​​thức làm việc tốt về cơ sở dữ liệu quan hệ và lý thuyết của họ, hãy thêm nó vào danh sách những điều cần học càng sớm càng tốt. Nó sẽ trả cổ tức trong suốt sự nghiệp của bạn.

  4. Luôn thực hiện càng nhiều kiểm tra "ngu ngốc" nhất có thể . Đây là những xác minh tự động về những điều hiển nhiên như ngày rơi vào thời kỳ dự kiến ​​của họ, số bệnh nhân (hoặc hóa chất hoặc bất cứ điều gì) luôn luôn cộng chính xác, rằng các giá trị luôn hợp lý (ví dụ: độ pH phải nằm trong khoảng từ 0 đến 14 và có thể trong phạm vi hẹp hơn nhiều, ví dụ, chỉ số pH máu), v.v ... Đây là nơi chuyên môn về miền có thể giúp ích nhiều nhất: nhà thống kê có thể hỏi những câu hỏi ngu ngốc của các chuyên gia và khai thác câu trả lời để kiểm tra dữ liệu.

Tất nhiên nhiều hơn có thể nói - chủ đề đáng giá một cuốn sách - nhưng điều này là đủ để kích thích ý tưởng.



2
Một câu hỏi tiếp theo - chủ đề đáng giá một cuốn sách - có một cuốn sách?
Chris Beeley

5
+1 - câu trả lời tuyệt vời whuber. Tôi ước bạn có một blog :) (Tôi rất thích thêm bài viết của bạn vào r-bloggers.com)
Tal Galili

2
Bạn nên viết cuốn sách mà chủ đề có giá trị!
Zach

1
Điều này phức tạp đến mức nhiều công ty tư vấn chuyên về "truy xuất / làm sạch / lưu trữ dữ liệu".
Lucas Reis

25

@whuber đưa ra gợi ý tuyệt vời; Tôi sẽ chỉ thêm điều này: Lô, lô, lô, lô. Scatterplots, histograms, boxplots, lineplots, Heatmap và bất cứ điều gì khác mà bạn có thể nghĩ đến. Tất nhiên, như bạn đã thấy có những lỗi không thể thấy rõ trên bất kỳ lô nào nhưng chúng là một nơi tốt để bắt đầu. Chỉ cần đảm bảo rằng bạn rõ ràng về cách phần mềm của bạn xử lý dữ liệu bị thiếu, v.v.

Tùy thuộc vào bối cảnh bạn có thể sáng tạo. Một điều tôi muốn làm Với dữ liệu đa biến là phù hợp với một số loại mô hình nhân tố / PCA xác suất (một cái gì đó sẽ thực hiện nhiều lần cho dữ liệu bị thiếu) và xem xét điểm số cho càng nhiều thành phần càng tốt. Điểm dữ liệu đạt điểm cao trên các thành phần / yếu tố ít quan trọng hơn thường vượt trội hơn bạn có thể không thấy khác.


5
+1 Âm mưu là để thống kê những gì bỏ phiếu cho Chicago: điều mà mọi người đều làm sớm và thường xuyên. ;-)
whuber

15

Những điều lớn tôi có xu hướng kiểm tra:

  1. Loại biến - để thấy rằng một số là số và không phải là yếu tố / ký tự (có thể chỉ ra một số vấn đề với dữ liệu đã được nhập)
  2. Các mức giá trị nhất quán - để thấy rằng một biến có tên "t1" không tìm thấy nó một lần nữa với tên "t1" hoặc "t 1"
  3. Outliers - thấy rằng phạm vi của giá trị có ý nghĩa. (bạn có nhận được giá trị huyết áp bằng 0? hoặc trừ đi không?). Ở đây đôi khi chúng tôi phát hiện ra rằng ai đó đã mã hóa -5 là giá trị bị thiếu hoặc một cái gì đó tương tự.
  4. Hạn chế tuyến tính. Tôi không sử dụng điều đó, nhưng một số người thấy rằng họ muốn có sự hạn chế về sự phụ thuộc của một số cột (cột A, B phải thêm vào C hoặc đại loại như thế). Đối với điều này, bạn có thể xem gói khấu trừ (tôi đã gặp người nói, Mark van der Loo, trong hội nghị useR vừa qua - và rất ấn tượng với gói của anh ấy)
  5. quá ít ngẫu nhiên. Đôi khi các giá trị phải được làm tròn thành một số giá trị hoặc bị cắt ngắn tại một số điểm. Những loại điều này thường rõ ràng hơn trong các ô phân tán.
  6. Thiếu giá trị - đảm bảo rằng phần thiếu không liên quan đến một số biến khác (thiếu ngẫu nhiên). Nhưng tôi không có một quy tắc nào để đưa ra ở đây.
  7. Hàng trống hoặc hàng có hầu hết không có giá trị. Chúng nên (thường) được tìm thấy và bỏ qua.

Câu hỏi tuyệt vời BTW - Tôi hy vọng sẽ đọc được kinh nghiệm của người khác về vấn đề này.


10

Khi bạn có các biện pháp theo thời gian (" dữ liệu theo chiều dọc "), việc kiểm tra độ dốc cũng như phân phối biên sẽ rất hữu ích . Độ dốc này có thể được tính toán ở các tỷ lệ khác nhau. Nói chung, bạn có thể thực hiện các chuyển đổi có ý nghĩa trên dữ liệu của mình (fourier, wavelet) và kiểm tra phân phối biên của dữ liệu được chuyển đổi.


7

Một số ít tôi luôn luôn trải qua:

  1. Có số lượng hồ sơ được cho là? Ví dụ: nếu bạn lấy dữ liệu của mình từ một nguồn khác hoặc tập hợp con của dữ liệu của ai đó, thì các số của bạn có vẻ hợp lý không. Bạn sẽ nghĩ rằng điều này sẽ được bảo hiểm, nhưng bạn ... sẽ ngạc nhiên.
  2. Có phải tất cả các biến của bạn ở đó? Các giá trị của các biến đó có ý nghĩa không? Ví dụ: nếu biến Có / Không / Thiếu được mã hóa là "1,2,3" - điều đó có nghĩa là gì?
  3. Giá trị còn thiếu của bạn ở đâu? Có một số biến có vẻ quá tải với thông tin bị thiếu? Có một số đối tượng nhất định với số lượng lớn các giá trị bị thiếu.

Đó là những bước đầu tiên tôi trải qua để đảm bảo một bộ dữ liệu thậm chí đã sẵn sàng cho một cái gì đó như phân tích dữ liệu khám phá. Chỉ cần ngồi xuống, chuyển vùng về dữ liệu sẽ xuất hiện "Điều đó ... có vẻ đúng không?"


1

Tôi sẽ sử dụng phương pháp lấy mẫu chấp nhận cho mỗi cột (nó đưa ra số giới hạn để bạn có thể vẽ ranh giới giữa chất lượng cao và chất lượng thấp), có một máy tính trực tuyến cho điều đó.


3
điều này sẽ phù hợp hơn với tư cách là một nhận xét hơn là một câu trả lời như hiện tại. vui lòng giải thích một chút, cung cấp liên kết đến các tài nguyên hoặc tài liệu tham khảo, v.v.
Antoine

1
Thật khó để thấy nhiều trường hợp trong đó điều này sẽ hiệu quả và dễ dàng tìm thấy nhiều trường hợp mà nó hoàn toàn không hoạt động (chẳng hạn như chuỗi hoặc dữ liệu danh nghĩa khác) hoặc là khủng khiếp (vì nó hoàn toàn bỏ qua tất cả các mối quan hệ đa biến). Điều này cũng có vẻ tùy tiện, vì ngoại trừ chuỗi thời gian (và một số dữ liệu liên quan), không có thứ tự vốn có trong các bản ghi của bảng dữ liệu, trong khi nhiều phương pháp lấy mẫu chấp nhận (nếu không phải tất cả) phụ thuộc vào chuỗi.
whuber

Vâng, đây là máy tính để sử dụng: sqconline.com/ ( Miễn là bạn sử dụng lấy mẫu chấp nhận ngẫu nhiên có thể được sử dụng. Nếu bạn muốn làm phức tạp nó, bạn có thể sử dụng kỹ thuật lấy mẫu có hệ thống, sau đó sử dụng lấy mẫu chấp nhận trên mỗi phân đoạn
Tareq Shahwan
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.