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?
r
data-cleaning
Jay Godse
sumber
sumber
Jawaban:
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 .
sumber
dplyr
, yang merupakan pengoptimalan ulangplyr
alat tertentu , dandata.table
yang merupakan pendekatan yang sama sekali berbeda untuk memanipulasi data. Keduanya oleh Hadley Wickham.dplyr
paket, tetapi bukan dari paket itudata.table
.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,
awk
skrip sederhana dapat membersihkan data, menghasilkan file input yang valid untuk diproses nanti. Dari set sihir, salah satu mungkin juga menunjukkangrep
,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.
sumber
grep
menggunakan POSIX regex dasar secara default, dan memungkinkan regex POSIX diperpanjang saat dijalankan sebagaigrep -E
, dan untuk PCRE saat dijalankan sebagaigrep -P
.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.
sumber
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.
sumber
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 .
sumber
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.
sumber
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.
sumber