Sửa lỗi không thống nhất dữ liệu


8

Tôi đang cố gắng phân tích một số dữ liệu tôi có nhưng có rất nhiều sự không nhất quán trong dữ liệu của tôi.

Tôi có một bảng SQL mà tôi đang cố gắng phân tích.

Bảng này là một bảng các trường đại học với cấu trúc như sau: name:string, city:string, state:string, country:string Tên luôn có mặt tuy nhiên thành phố, tiểu bang, quốc gia có thể bị thiếu. Vấn đề chính của tôi là có rất nhiều lỗi chính tả và sự suy giảm khác nhau của một tên trường đại học. Ví dụ ở đây là sự suy giảm của Standford Unversity tôi tìm thấy khi tôi làm SELECT "universities".* FROM "perm_universities" WHERE (name like '%stanford%'):

stanford university - stanford - ca - united states of america
the leland stanford junior university - stanford - ca - united states of america
leland stanford jr. university - stanford - ca - united states of america
stanford university graduate school of business - stanford - ca - united states of america
the leland stanford junior university (stanford university) - stanford - ca - united states of america
leland stanford junior university - stanford - ca - united states of america
stanford university - stanford -  -
leland stanford jr. university, graduate school of business - stanford - ca - united states of america
stanford law school - stanford - ca - united states of america
stanford - stanford - ca - united states of america
stanford university, graduate school of business - stanford - ca - united states of america
stanford graduate school of business - stanford - ca - united states of america
stanford univerity - stanford - ca - united states of america
stanford university (the leland stanford junior university) - stanford - ca - united states of america
the leland stanford jr. university - palo alto - ca - united states of america
leland stanford junior university, school of law - stanford - ca / n/a - united states of america
stanford universit - stanford - ca - united states of america
the leland stanford university - stanford - ca - united states of america
leland standford stanford junior university - stanford - ca - united states of america
stanford university - cambridge - ma - united states of america
the leland stanford junior university 'stanford university' - stanford - ca - united states of america
stanford university school of law - stanford - ca - united states of america
stanford univresity - stanford - ca - united states of america
the leland stanford jr. university (stanford university) - stanford - ca - united states of america
leeland stanford junior university - stanford - ca - united states of america
leland stanford junion university -  - ca - united states of america
leland stanford junior university (stanford university) - stanford - ca - united states of america
the leland stanford junior university - stanford -  -
stanford university - graduate school of business - stanford - ca - united states of america
graduate school of business, stanford university - stanford - ca - united states of america
stanford universoty - stanford - ca - united states of america
leland stanford junior university - stanford -  -
stanford univeristy - palo alto - ca - united states of america
leland stanford university - palo alto - ca - united states of america
stanford university - stanford - ca / n/a - united states of america
the leland stanford junior university, stanford university - stanford - ca - united states of america
the leland stanford junior university graduate school of business - stanford - ca - united states of america
stanford universtiy - stanford - ca - united states of america
stanford univerisity - stanford - ca - united states of america
stanford university - stanford - ct - united states of america
stanford law scool - stanford - ca - united states of america
mba: stanford university - stanford - ca - united states of america

Họ đều là cùng một trường đại học, nhưng một số có lỗi chính tả, một số có tên khác, một số không có thành phố, một số có thành phố sai, ... Dữ liệu không tuyệt vời.

Vì vậy, tôi đang cố gắng sửa nó. Làm thế nào tôi có thể hợp nhất dữ liệu này?


2
Tra cứu liên kết bản ghi để tìm hiểu về cách bạn có thể xử lý các bản ghi chồng chéo một phần. Bạn có thể xử lý các lỗi chính tả bằng cách tương tự tìm kiếm các bitstr n-gram .
Emre

2
Tôi đã bỏ phiếu để đóng là "quá rộng" vì có hàng trăm cách tiếp cận có thể và thậm chí bạn chưa từng nói với chúng tôi rằng bạn đã thử. Kết hợp mờ, khớp từ khóa, phân cụm, học máy ...
Spacesman

@Spacesman Tôi chưa thử bất cứ điều gì để khắc phục vì tôi không biết đâu là lựa chọn tốt nhất.
bl0b

Tôi nghĩ rằng đây là một câu hỏi chính đáng; vấn đề là cách tiếp cận nào (trong số nhiều phương pháp hiện có) sẽ là tốt nhất để xử lý vấn đề này? Với số lượng các kết quả khớp tiềm năng, có thể tốt hơn để thử phân cụm hơn bất kỳ loại kết hợp mờ / gần đúng nào. Tuy nhiên, tôi muốn nghe ý kiến ​​của người khác.
Antonio

Câu trả lời:


3

Vì bộ dữ liệu này đã được tổ chức trong một bảng, bạn có thể tận dụng các hàm SQL tiêu chuẩn để thực hiện một phần lớn công việc dọn dẹp. Một bản ghi dường như bao gồm 4 trường, ví dụ:

university name, city, state, country
stanford law school - stanford - ca - united states of america

Bạn có thể làm theo các bước sau để có được đại diện sạch hơn của bộ dữ liệu này:

  1. Bắt đầu với mức cao nhất (quốc gia), tìm các giá trị duy nhất sử dụng nó để xác định tất cả các từ phát âm tương tự bằng cách liệt kê các kết quả khớp âm thanh với chính nó (xây dựng một truy vấn nối của bảng với chính nó).
  2. Sử dụng các kết quả tương tự được đề xuất này để sửa tất cả các lỗi bằng cách cập nhật tên.
  3. Tiếp tục theo cách này cho đến khi bạn đã sửa tất cả bốn trường.
  4. Xác định các trạng thái bị thiếu bằng cách sử dụng tên thành phố để truy vấn trạng thái chính xác từ phần còn lại của bảng; nếu tiểu bang và quốc gia bị thiếu trong "trường đại học cơ sở leland stanford", thì hãy sử dụng tên thành phố "stanford" để tham gia với chính nó và lấy tên tiểu bang / quốc gia từ các hồ sơ khác trong bảng.
  5. Đối với tên trường đại học, xác định tất cả các chữ viết tắt bằng grep để tìm kiếm các từ kết thúc bằng ký tự dấu chấm. Thay thế chúng với mở rộng đầy đủ.
  6. Tiếp theo, chia tên trường đại học thành các từ riêng lẻ và đổ chúng vào một bảng tạm thời trong một cột duy nhất. Khử trùng lặp các giá trị trong cột để nó chỉ chứa các giá trị duy nhất.
  7. Chạy cùng một truy vấn nối âm phù hợp như trong bước 1 để xác định các tên âm tương tự, nối các tên tương tự được đề xuất này vào cột thứ hai của bảng tạm thời.
  8. Kiểm tra thủ công nhanh chóng những gì bạn đã nhận được dưới dạng đề xuất và xóa mọi kết quả khớp không hợp lệ.
  9. Viết một quy trình để thay thế các từ trong mỗi tên trường đại học bằng các thay thế được đề xuất, và bạn sẽ có một bộ dữ liệu sạch hơn nhiều.

1

Điều này khá khó thực hiện nếu không có cấu trúc dữ liệu đầu tiên của bạn. Có một lý do bộ dữ liệu được làm sạch có giá hàng ngàn đô la vì họ cố gắng làm sạch những vấn đề này cho bạn.

Những gì bạn có thể thử trước tiên là tạo ra một hệ thống phân loại. Trước tiên, bạn cung cấp cho "trường đại học Stanford" một ID "1". Một cái gì đó giống như "trường kinh doanh tốt nghiệp Stanford" sẽ nhận được ID "1.2.5", trong đó "2" mới đề cập đến phân chia trường sau đại học, "5" đề cập đến danh mục trường kinh doanh. Nó thực sự phụ thuộc vào mục tiêu cuối cùng của bạn là gì. Nói tóm lại, hãy thiết lập một danh sách ID cho các phân ngành có thể, "Tốt nghiệp, đại học, v.v." và sau đó phân chia thêm.

Đối với các vị trí, thông thường bạn có thể xác định vị trí "chính" và "phụ", tức là "Palo Alto" và "Stanford", bạn có thể xác định bằng cách đếm biểu đồ cho từng vị trí và chọn hai vị trí trên cùng.

Để sửa lỗi chính tả, bạn có thể sử dụng API tìm kiếm của google và khai thác "Hiển thị kết quả cho ..." sẽ cung cấp cho bạn chính tả chính xác.

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.