Memperbaiki ketidakkonsistenan data

8

Saya mencoba menganalisis beberapa data yang saya miliki tetapi ada banyak ketidakkonsistenan dalam data saya.

Saya memiliki tabel SQL yang saya coba analisis.

Tabel tersebut adalah tabel universitas dengan struktur sebagai berikut: name:string, city:string, state:string, country:string Nama selalu ada namun kota, negara bagian, negara dapat hilang. Masalah utama saya adalah ada banyak kesalahan ketik dan deklinasi nama universitas yang berbeda. Sebagai contoh di sini adalah deklinasi Standford Unversity yang saya temukan ketika saya melakukannya 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

Mereka semua adalah universitas yang sama, tetapi beberapa memiliki kesalahan ketik, beberapa memiliki nama yang berbeda, beberapa tidak memiliki kota, beberapa memiliki kota yang salah, ... datanya tidak besar.

Jadi saya mencoba memperbaikinya. Bagaimana saya bisa menggabungkan data ini?

bl0b
sumber
2
Cari tautan catatan untuk mempelajari tentang bagaimana Anda bisa menangani catatan yang tumpang tindih sebagian. Anda dapat menangani kesalahan pengejaan dengan mencari kesamaan pada n-gram bitstrings.
Emre
2
Saya telah memilih untuk ditutup sebagai "terlalu luas" karena ada ratusan pendekatan yang mungkin dan Anda bahkan belum memberi tahu kami bahwa Anda telah mencobanya. Pencocokan
kabur
@Spacedman Saya belum mencoba apa pun untuk memperbaikinya karena saya tidak tahu apa pilihan terbaik.
bl0b
Saya pikir ini adalah pertanyaan yang sah; masalahnya adalah pendekatan mana (dari banyak yang sudah ada) yang terbaik untuk menangani masalah ini? Mengingat jumlah kecocokan potensial, mungkin lebih baik untuk mencoba pengelompokan daripada semua jenis pencocokan fuzzy / perkiraan. Namun, saya ingin mendengar pendapat orang lain.
Antonio

Jawaban:

3

Karena dataset ini sudah disusun dalam sebuah tabel, Anda dapat memanfaatkan fungsi SQL standar untuk melakukan sebagian besar pembersihan. Catatan tampaknya terdiri dari 4 bidang, misalnya:

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

Anda bisa mengikuti langkah-langkah ini untuk mendapatkan representasi yang lebih bersih dari dataset ini:

  1. Dimulai dengan level tertinggi (negara), temukan nilai-nilai unik menggunakannya untuk mengidentifikasi semua kata-kata yang terdengar serupa dengan mencantumkan pencocokan soundex dengan dirinya sendiri (membangun kueri bergabung dari tabel itu sendiri).
  2. Gunakan pencocokan serupa yang disarankan ini untuk memperbaiki semua kesalahan dengan memperbarui nama.
  3. Lanjutkan dengan cara ini sampai Anda telah memperbaiki keempat bidang.
  4. Identifikasi status hilang dengan menggunakan nama kota untuk menanyakan status yang benar dari tabel lainnya; jika negara bagian dan negara hilang untuk "leland stanford junior university", maka gunakan nama kota "stanford" untuk bergabung dengannya dan mendapatkan nama negara bagian / negara dari catatan lain dalam tabel.
  5. Untuk nama universitas, identifikasi semua singkatan menggunakan grep untuk mencari kata-kata yang berakhir dengan karakter titik. Gantilah dengan ekspansi penuh.
  6. Selanjutnya, pisahkan nama universitas menjadi kata-kata tunggal dan buang ini ke dalam tabel sementara dalam satu kolom. De-duplikat nilai dalam kolom sehingga hanya berisi nilai unik.
  7. Jalankan soundex join pencocokan pencocokan yang sama seperti pada langkah 1 untuk mengidentifikasi nama-nama yang terdengar serupa, tambahkan nama-nama serupa yang disarankan di kolom kedua dari tabel temp.
  8. Lakukan pemeriksaan kewarasan cepat secara manual atas apa yang Anda peroleh sebagai saran dan hapus semua kecocokan yang tidak valid.
  9. Tulis prosedur untuk mengganti kata-kata dalam setiap nama universitas dengan penggantian yang disarankan, dan Anda akan memiliki dataset yang jauh lebih bersih.
Sandeep S. Sandhu
sumber
1

Ini cukup sulit dilakukan tanpa terlebih dahulu menyusun dataset Anda. Ada alasan mengapa set data yang dibersihkan berharga ribuan dolar karena mereka mencoba membersihkan masalah ini untuk Anda.

Yang dapat Anda coba adalah pertama-tama menciptakan sistem taksonomi. Pertama, Anda memberikan ID "Stanford university" jenderal "umum" Sesuatu seperti "sekolah pascasarjana bisnis Stanford" akan mendapatkan ID "1.2.5", di mana "2" yang baru mengacu pada divisi sekolah pascasarjana, "5" mengacu pada kategori sekolah bisnis. Itu benar-benar tergantung pada apa tujuan akhir Anda. Singkatnya, buat daftar ID untuk kemungkinan subdivisi, "Lulusan, sarjana, dll." dan kemudian subdivisi lebih lanjut.

Untuk lokasi, biasanya Anda dapat menentukan lokasi "primer" dan "sekunder", yaitu "Palo Alto" dan "Stanford", yang dapat Anda tentukan dengan menghitung histogram untuk masing-masing dan memilih dua teratas.

Untuk mengoreksi kesalahan ejaan, Anda dapat menggunakan API pencarian google dan mengeksploitasi "Menampilkan hasil untuk ..." yang akan memberi Anda ejaan yang benar.

Alex R.
sumber