Proses terorganisir untuk membersihkan data

34

Dari sedikit berkecimpung dengan ilmu data menggunakan R, saya menyadari bahwa membersihkan data yang buruk adalah bagian yang sangat penting dalam mempersiapkan data untuk analisis.

Apakah ada praktik atau proses terbaik untuk membersihkan data sebelum memprosesnya? Jika demikian, apakah ada alat otomatis atau semi-otomatis yang menerapkan beberapa praktik terbaik ini?

Jay Godse
sumber
1
mungkin itu ide yang baik untuk menghapus sedikit, apa yang Anda maksud di bawah data pembersih , terlihat agak membingungkan untuk pendapat saya
MolbOrg
2
Menjelaskan lebih lanjut apa arti membersihkan data akan sangat membantu. Dalam konteks tempat saya bekerja, pembersihan tidak ada hubungannya dengan pemformatan - Saya hanya menyebutnya parsing / impor - Tetapi itu berarti berbicara data pengguna yang berisik dan memverifikasinya untuk koherensi. Teknik yang digunakan adalah dataset khusus, dari aturan statistik sederhana, hingga algoritma fuzzy, terutama ketika datanya jarang.
AdrianBR

Jawaban:

21

R berisi beberapa standar fungsi untuk manipulasi data, yang dapat digunakan untuk membersihkan data, dalam nya dasar paket ( gsub, transform, dll), serta di berbagai paket pihak ketiga, seperti stringr , membentuk kembali / reshape2 , dan plyr / dplyr . Contoh dan praktik terbaik penggunaan untuk paket ini dan fungsinya dijelaskan dalam makalah berikut: http://vita.had.co.nz/papers/tidy-data.pdf .

Selain itu, R menawarkan beberapa paket yang secara khusus berfokus pada pembersihan dan transformasi data:

Pendekatan yang komprehensif dan koheren untuk pembersihan data di R, termasuk contoh dan penggunaan editrules dan paket deducorrect , serta deskripsi alur kerja ( kerangka kerja ) pembersihan data di R, disajikan dalam makalah berikut, yang sangat saya rekomendasikan: http : //cran.r-project.org/doc/contrib/de_Jonge+van_der_Loo-Introduction_to_data_cleaning_with_R.pdf .

Aleksandr Blekh
sumber
2
Saya juga akan menambahkan dplyr, yang merupakan pengoptimalan ulang plyralat tertentu , dan data.tableyang merupakan pendekatan yang sama sekali berbeda untuk memanipulasi data. Keduanya oleh Hadley Wickham.
shadowtalker
@ssdecontrol: Saya setuju - memperbarui jawabannya. Hadley adalah penulis dplyrpaket, tetapi bukan dari paket itu data.table.
Aleksandr Blekh
16

Dari sudut pandang saya, pertanyaan ini cocok untuk jawaban dua langkah. Bagian pertama, sebut saja soft preprocessing , dapat dianggap sebagai penggunaan berbagai algoritma penambangan data untuk preproses data sedemikian rupa sehingga membuatnya cocok untuk analisis lebih lanjut. Perhatikan bahwa ini bisa menjadi analisis itu sendiri, jika tujuannya cukup sederhana untuk ditangani dalam satu tembakan.

Bagian kedua, preprocessing keras , sebenarnya datang sebelum proses lain, dan dapat diambil sebagai penggunaan alat atau skrip sederhana untuk membersihkan data, memilih konten tertentu untuk diproses. Untuk masalah ini, POSIX memberi kami seperangkat alat ajaib yang luar biasa, yang dapat digunakan untuk menyusun skrip preprocessing yang ringkas - dan sangat kuat.

Misalnya, untuk orang yang berurusan dengan data yang berasal dari situs web sosial (twitter, facebook, ...), pengambilan data biasanya menghasilkan file dengan format yang sangat spesifik - meskipun tidak selalu terstruktur dengan baik, karena mungkin berisi bidang yang hilang, dan sebagainya . Untuk kasus ini, awkskrip sederhana dapat membersihkan data, menghasilkan file input yang valid untuk diproses nanti. Dari set sihir, salah satu mungkin juga menunjukkan grep, sed, cut, join, paste, sort, dan seluruh banyak alat-alat lain.

Dalam kasus sederhana, file sumber memiliki terlalu banyak seluk-beluk, mungkin juga perlu untuk menghasilkan kumpulan metode untuk membersihkan data. Dalam kasus seperti itu, biasanya lebih baik menggunakan bahasa scripting (selain yang shell), seperti Python, Ruby, dan Perl. Ini memungkinkan untuk membangun API untuk memilih data spesifik dengan cara yang sangat mudah dan dapat digunakan kembali. API semacam itu terkadang dipublikasikan oleh penulisnya, seperti IMDbPY , Stack Exchange API , dan banyak lainnya.

Jadi, menjawab pertanyaan: apakah ada praktik terbaik? Biasanya tergantung pada tugas Anda. Jika Anda akan selalu berurusan dengan format data yang sama, biasanya yang terbaik adalah menulis skrip terorganisir untuk memprosesnya; sedangkan, jika Anda hanya memerlukan pembersihan sederhana dan cepat pada beberapa dataset, mengandalkan alat POSIX untuk skrip shell ringkas yang akan melakukan keseluruhan pekerjaan lebih cepat daripada skrip Python, atau lebih. Karena pembersihan tergantung pada dataset dan pada tujuan Anda, sulit untuk melakukan semuanya. Namun, ada banyak API yang menempatkan Anda di tengah jalan dengan masalah.

Rubens
sumber
hm - dapatkan data, format data (awk sed grep stuff), hapus noise sebagai langkah pertama, lalu masuk lebih dalam. jadi tidak sulit preprocessing pada awalnya, jika menggunakan therms Anda
MolbOrg
@ MolbOrg Ya, itulah yang saya maksud. Aku menelepon keras preprocessing yang side scripting , dan lembut preprocessing penggunaan algoritma data mining yang umumnya mengurangi ukuran dari masalah (membersihkan up database). Saya juga mencatat bahwa bagian kedua, preprocessing keras, sebenarnya datang sebelum proses lain . Jika tidak terlalu jelas dengan istilah seperti itu, saya dengan senang hati akan mempertimbangkan saran lain untuk meningkatkan jawabannya.
Rubens
1
ah ya, tidak membayar perhatian yang cukup, preprocessing data mentah . Atm yang diuji - ya perl oneliner 3 kali lebih lambat daripada grep) untuk string 3.5kb dalam 300MB, untuk perl butuh 1,1 detik, untuk grep 0,31 detik. Saya melihat artikel di mana poin perl regexp lambat, jauh lebih lambat dari itu mungkin dalam praktek, (saya curiga itu juga untuk grep juga) http://swtch.com/~rsc/regexp/regexp1.html
MolbOrg
@ MolbOrg Referensi yang bagus! AFAIK, grepmenggunakan POSIX regex dasar secara default, dan memungkinkan regex POSIX diperpanjang saat dijalankan sebagai grep -E, dan untuk PCRE saat dijalankan sebagai grep -P.
Rubens
1
Ini adalah posting yang sangat bagus. R sangat baik untuk manipulasi data tetapi bisa sangat rumit dengan pembersihan data karena sintaksis verbose untuk manipulasi string dan kepatuhan yang cukup kaku terhadap daftar dan matriks untuk struktur data.
shadowtalker
11

Salah satu alasan mengapa pembersihan data jarang sepenuhnya otomatis adalah karena ada begitu banyak penilaian yang diperlukan untuk mendefinisikan apa arti "bersih" mengingat masalah, metode, dan tujuan khusus Anda.

Ini mungkin sesederhana memasukkan nilai untuk data yang hilang, atau mungkin rumit seperti mendiagnosis kesalahan entri data atau kesalahan transformasi data dari proses otomatis sebelumnya (mis. Pengkodean, sensor, transformasi). Dalam dua kasus terakhir ini, data terlihat bagus dengan penampilan luar tetapi benar-benar keliru. Diagnosis semacam itu sering membutuhkan analisis dan inspeksi manual, dan juga informasi out-of-band seperti informasi tentang sumber data dan metode yang mereka gunakan.

Juga, beberapa metode analisis data bekerja lebih baik ketika data yang salah atau hilang dibiarkan kosong (atau N / A) daripada dibebankan atau diberi nilai default. Ini benar ketika ada representasi eksplisit dari ketidakpastian dan ketidaktahuan, seperti fungsi Dempster-Shafer Belief.

Akhirnya, penting untuk memiliki diagnostik dan metrik khusus untuk proses pembersihan. Nilai yang hilang atau salah didistribusikan secara acak atau mereka terkonsentrasi dengan cara apa pun yang dapat mempengaruhi hasil analisis. Ini berguna untuk menguji efek dari strategi pembersihan alternatif atau algoritma untuk melihat apakah mereka mempengaruhi hasil akhir.

Mengingat masalah ini, saya sangat curiga terhadap metode atau proses apa pun yang memperlakukan pembersihan data dengan cara yang dangkal, angkuh, atau otomatis penuh. Ada banyak iblis yang bersembunyi di detail itu dan membayar untuk memberi mereka perhatian serius.

MrMeritology
sumber
1
Sebagai komentar sampingan: Saya pikir melihat data yang keliru yang disebabkan oleh beberapa masalah lebih lanjut di jalur pipa adalah keterampilan emas. Sering kali saya bertanya-tanya mengapa analisis saya menghasilkan hasil yang aneh dan ketika saya melihat pipa, saya menemukan beberapa jenis kesalahan. Misalnya: Saya bertanya-tanya mengapa semua data saya di mana sangat condong ke harga tinggi - keluar dari model mental saya. Ketika saya bertanya sekitar, saya menemukan bahwa beberapa subkontraktor salah memahami briefing dan mengirimkan data untuk kelompok berpenghasilan tinggi, sementara kami meraup data campuran ...
Christian Sauer
Iya nih! Kesalahan data sering merupakan tanda-tanda masalah proses. Mengetahui di mana dalam proses kesalahan diperkenalkan dan juga mekanismenya, akan sangat membantu dengan proses pembersihan. Tetapi yang lebih baik adalah memperbaiki masalah proses sehingga mereka menghasilkan data yang bersih (atau lebih bersih).
MrMeritology
5

Tentang pembersihan otomatis: Anda benar-benar tidak dapat membersihkan data secara otomatis, karena jumlah kesalahan dan definisi kesalahan sering tergantung pada data. Misalnya: "Penghasilan" kolom Anda mungkin berisi nilai negatif, yang merupakan kesalahan - Anda harus melakukan sesuatu tentang kasus tersebut. Di sisi lain, kolom "tabungan bulanan" dapat berisi nilai negatif secara wajar.

Kesalahan semacam itu sangat tergantung pada domain - jadi untuk menemukannya, Anda harus memiliki pengetahuan domain, sesuatu yang menjadi keunggulan manusia, proses otomatis tidak begitu banyak.

Di mana Anda dapat dan harus mengotomatisasi proyek yang berulang. Misalnya laporan yang harus diproduksi bulanan. Jika Anda menemukan kesalahan, Anda harus menempatkan beberapa proses otomatis yang dapat menemukan kesalahan semacam ini di bulan-bulan berikutnya, membebaskan waktu Anda.

Sauer Kristen
sumber
5

Saya pikir tidak ada teknik universal untuk "membersihkan" data sebelum melakukan penelitian yang sebenarnya. Di sisi lain, saya bertujuan melakukan sebanyak mungkin penelitian yang dapat direproduksi . Dengan melakukan penelitian yang dapat direproduksi, jika Anda menggunakan teknik pembersihan dengan bug atau dengan parameter / asumsi yang buruk, itu bisa dilihat oleh orang lain.

Ada rajutan paket R bagus yang banyak membantu dalam penelitian yang dapat direproduksi.

Tentu saja, tidak semua penelitian dapat direproduksi sepenuhnya (misalnya data Twitter langsung), tetapi setidaknya Anda dapat mendokumentasikan langkah-langkah pembersihan, pemformatan, dan preprocessing dengan mudah.

Anda dapat memeriksa penilaian saya yang disiapkan untuk kursus Penelitian Reproducible di Coursera .

Damian Melniczuk
sumber
3

OpenRefine (sebelumnya Google Refine) adalah alat yang hebat di mana Anda dapat melakukan pembersihan dan transformasi data secara interaktif. Hasil akhir Anda dapat diekspor ke berbagai format standar (json, csv) atau format khusus apa pun (misalnya: wiki).

Duplikat yang tepat dapat ditangani di OpenRefine dengan menyortir + menggunakan fitur "blank down". Juga memiliki fitur pengelompokan string (fuzzy) perkiraan di mana Anda dapat mengelompokkan duplikat yang mirip seperti nama perusahaan atau alamat. Fitur ini sendiri membuatnya luar biasa.

Thyag
sumber
1
Ini adalah alat yang fantastis dan belum dilaporkan.
thanks_in_advance
2

Ada seluruh kursus yang ditujukan untuk ini di Coursera. Anda mungkin ingin membahas teknik yang mereka sebutkan dan yang penting adalah untuk mengetahui kapan harus menggunakan apa.

https://www.coursera.org/learn/data-cleaning

Itu selalu lebih baik untuk melakukannya secara manual daripada mengotomatisasi karena setiap dataset memiliki masalah dan masalah sendiri dan tidak semua langkah berlaku untuk semua dataset.

Ram
sumber