Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Go
Code

Membersihan Data Anda Dengan Go: Bagian 2

by
Difficulty:IntermediateLength:MediumLanguages:
This post is part of a series called Cleaning Up Your Data With Go.
Cleaning Up Your Data With Go: Part 1

Indonesian (Bahasa Indonesia) translation by Muhammad Gufron (you can also view the original English article)

Ikhtisar

Ini adalah bagian dua dari dua dalam seri membersihkan data menggunakan pergi. Pada bagian satu, kita membahas fasilitas teks dasar pergi dan bekerja dengan file CSV. Dalam tutorial ini, kita akan menyelam ke dalam pembersihan data aktual.

Kita akan mulai dengan memahami masalah berantakan dan datang dengan strategi, dan kemudian kita akan melihat ke dalam memverifikasi masing-masing bidang, memperbaiki data di mana mungkin dan memutuskan apa yang harus dilakukan tentang nilai-nilai yang hilang.

Strategi Pembersihan Data

Strategi untuk membersihkan data harus menentukan apa yang harus dilakukan ketika menghadapi data tidak valid, berantakan, parsial atau hilang. Itu juga harus menentukan apa tingkat pelaporan yang diperlukan tentang proses pembersihan.

Data kita berfokus di sini adalah tabel data, di mana setiap baris independen. Ada tidak ada hirarki bersarang atau hubungan antara berbeda baris data. Banyak dari dunia nyata dataset memiliki properti yang bagus.

Hapus

Pendekatan yang sederhana untuk menangani data tidak valid adalah untuk menghapusnya. Jika bidang hilang atau berisi data tidak valid, hanya menyingkirkan seluruh baris. Ini sangat mudah, dan kadang-kadang itu adalah hal yang tepat untuk dilakukan. Jika bidang yang bermasalah penting dan Anda tidak memiliki cara untuk memulihkan itu kemudian semua dapat Anda lakukan adalah drop seluruh catatan.

Memperbaiki

Solusi terbaik adalah memperbaiki bidang buruk. Dalam beberapa kasus, sangat mudah untuk mendeteksi masalah dan memperbaikinya. Dalam dataset penampakan UFO, bidang negara dapat menjadi salah satu dari 52 negara Amerika Serikat.

Jika nilai harus semua huruf besar dan beberapa baris berisi huruf kecil, Anda bisa saja membuat mereka huruf besar.

Laporan

Pelaporan pada baris yang tidak valid, menjatuhkan atau tetap, penting. Organisasi dapat memutuskan untuk membiarkan orang-orang yang mencoba untuk memperbaiki data menjatuhkan. Mungkin perlu tetap data yang dijalankan oleh QA untuk memastikan perbaikan otomatis tidak memperkenalkan data tidak valid.

Statistik

Mengumpulkan statistik pada proses pembersihan diperlukan untuk mengevaluasi kualitas sumber data dan kadang-kadang untuk menentukan apakah data Clean up bahkan layak pengolahan. Statistik dapat mencakup jumlah turun dan tetap baris dan jumlah kolom yang buruk dan hilang untuk setiap kolom.

Hidup pembersihan

Sejauh ini saya sudah dijelaskan pendekatan pra-pemrosesan untuk pembersihan data. Namun, mungkin untuk melakukan pembersihan selama pemrosesan. Setiap baris akan diperiksa sebelum diproses. Hal ini kadang-kadang berguna, jika tidak ada gunanya pra-pemrosesan karena tidak ada yang dapat memperbaiki data yang buruk terlebih dahulu untuk kemudian analisis atau jika pengolahan sensitif terhadap waktu.

Dalam skenario ini, tujuan utama dari pembersihan adalah untuk memastikan baris data yang buruk tidak mematahkan pipa seluruh proses dan dapat melewatkan atau tetap diperlukan.

Memverifikasi bidang

Bagaimana Anda pergi tentang memverifikasi bidang? Anda harus tahu persis apa jenis data yang seharusnya berada di sana dan kadang-kadang apa nilai-nilai. Berikut adalah beberapa contoh.

Memverifikasi bidang numerik

Kolom angka sangat umum di set data. Luar jenis nomor (integer, nyata, kompleks), beberapa bidang lebih khusus. Sebagai contoh, sebuah field harga mungkin memerlukan tepat dua titik desimal dan positif. Berikut adalah fungsi yang memeriksa jika sebuah string yang mewakili Harga:

Memverifikasi bidang URL

Kadang-kadang Anda harus pergi di atas dan di luar. Jika Anda perlu untuk memverifikasi bahwa URL berlaku kemudian ada dua pendekatan:

  1. Parse URL.
  2. Coba dan mendapatkan (atau setidaknya mendapatkan header).

Jika Anda hanya jika URL dibentuk kemudian pendekatan pertama bekerja. Tetapi jika Anda ingin memastikan bahwa URL sebenarnya menunjuk ke tujuan nyata, Anda perlu menggunakan pendekatan yang kedua. Karena pendekatan yang kedua adalah superset dari pendekatan pertama, mari kita hanya menggunakannya:

Verifikasi Custom Format Fields

Jika nilai-nilai harus menghormati custom format, Anda bisa biasanya kedua cocok menggunakan fungsi string sederhana seperti Split() atau dalam kasus yang lebih kompleks menggunakan string biasa. Misalnya, jika dataset mengandung nomor jaminan sosial (saya harap tidak) dalam format XXX-XX-XXXX maka Anda dapat membagi oleh "-" dan memastikan ada tiga token mana yang pertama adalah tiga digit panjang, yang kedua adalah dua digit panjang, dan yang ketiga adalah empat digit panjang. Tapi itu lebih ringkas untuk menggunakan regex seperti ^ \d{3}-?\d{2}-?\d{4}$.

Memperbaiki nilai-nilai yang tidak valid

Memperbaiki nilai-nilai yang valid adalah bukan hal yang sepele. Jika Anda memperbaiki metode tidak benar, Anda dapat berakhir dengan korup data. Anda harus mempertimbangkan dengan hati-hati pentingnya bidang, macam mungkin nilai yang valid, dan seberapa yakin Anda bahwa Anda dapat benar-benar memperbaiki nilai valid secara otomatis.

Memperbaiki kasus

Ini adalah memperbaiki cukup aman. Jika kolom teks seharusnya semua huruf besar, Anda dapat memperbaikinya tanpa risiko banyak, karena yang karakter yang awalnya huruf kecil tidak sepotong informasi penting. Ada tidak perlu untuk menulis kode khusus sebagai string paket memiliki fungsi ToUpper(). Ada juga ToLower() dan bahkan ToTitle() dan ToTitleSpecific() fungsi untuk memanfaatkan teks dengan benar.

Pengupasan karakter yang tidak diinginkan

Lain umum mudah memperbaiki adalah mengeluarkan terkemuka dan trailing spasi. Anda akan terkejut betapa banyak orang menambahkan ruang atau baris baru ketika memasukkan data. Paket string memiliki pilihan TrimXXX() fungsi yang bisa mengurus kebanyakan situasi:

  • Trim()
  • TrimFunc()
  • TrimLeft()
  • TrimLeftFunc()
  • TrimPrefix()
  • TrimRight()
  • TrimRightFunc()
  • TrimSpace()
  • TrimSuffix()

Menjatuhkan karakter tidak valid

Dalam beberapa kasus, it's OK untuk menjatuhkan karakter yang tidak valid. Saya sarankan hanya melakukannya untuk bidang-bidang non-kritis dan opsional. Misalnya, Anda mungkin memiliki Deskripsi atau bidang catatan yang berisi teks gratis, dan Anda ingin memastikan tidak berisi simbol-simbol tertentu seperti kutipan atau tanda kutip ganda. Berikut adalah cara untuk melakukannya:

Memperbaiki nilai numerik

Nilai-nilai numerik sering mudah untuk memperbaiki. Jika Anda membutuhkan ketepatan dua angka desimal, Anda dapat memotong atau bulat tambahan angka. Dalam cara yang sama, sangat mudah untuk mengkonversi bilangan bulat ke angka floating-point.

Kadang-kadang, ada berbagai nilai-nilai yang berlaku, dan Anda dapat membawa angka-angka yang terlalu besar atau terlalu kecil untuk muat kisaran. Fungsi berikut mengambil string dan serangkaian bilangan bulat dan mengembalikan sebuah string yang mewakili integer dalam jangkauan. Nilai-nilai yang terlalu besar menjadi nilai maksimum, dan terlalu kecil menjadi nilai minimum.

Memperbaiki nilai-nilai URL

URL sering dapat diperbaiki dengan aman oleh mencoba skema yang berbeda ("http" atau "https") atau menambahkan atau menjatuhkan "www" sub-domain. Menggabungkan pilihan dengan mencoba untuk menjemput calon dapat memberikan keyakinan bahwa perbaikan adalah benar.

Berurusan dengan nilai-nilai yang hilang

Nilai-nilai yang hilang sangat umum saat menelan data yang nyata. Jika nilai hilang diperlukan, ada dua cara utama untuk menangani itu (tanpa menolak baris sama sekali) — menggunakan nilai default atau memulihkan nilai dari sumber alternatif.

Menerapkan nilai-nilai Default

Nilai default berguna karena kode pengolahan tidak harus memeriksa apakah nilai hadir atau tidak. Data membersihkan kode memastikan bahwa selalu ada nilai di tempat. Dalam banyak kasus, default begitu umum bahwa itu adalah juga seorang penolong untuk data input mana Anda tidak perlu memasukkan nilai default yang sama lagi dan lagi.

Menggunakan Data alternatif

Pendekatan ini sedikit lebih terlibat. Idenya adalah untuk berkonsultasi dengan sumber data lainnya yang memiliki informasi yang diminta. Misalnya, jika Anda memiliki email pengguna, tetapi nama pertama dan terakhir hilang, Anda dapat berkonsultasi database pengguna Anda dan ekstrak nama pengguna. Ini menghemat kode pengolahan dari mengakses DB atau bahkan menyadari ketergantungan ini.

Menempatkan semuanya bersama-sama

Mari kita membersihkan sedikit dataset produk. Bidang yang:

Nama kolom Deskripsi kolom
Id PRD-XXXX-XXXX (di mana X adalah digit)
Name sampai dengan 40 karakter
Price bidang numerik tetap presisi (dua desimal poin)
Description hingga 500 karakter (opsional)

Berikut adalah dataset dalam bentuk yang dapat dibaca (spasi akan dipangkas selama pembersihan):

Dua produk berlaku. Ketiga produk, 'PRD-1234-666', adalah kehilangan digit di id nya. Produk berikutnya, 'PRD-1234-7777', tidak ada harga. Produk akhir, 'prd-1234-8888', memiliki id produk tidak valid, tetapi dapat diperbaiki dengan aman (membuat huruf besar).

Kode berikut akan membersihkan data, memperbaiki apa yang bisa diperbaiki, menjatuhkan baris yang tidak dapat diperbaiki, dan menghasilkan dataset bersih dan laporan yang dapat digunakan untuk mengoreksi data tidak valid secara manual. 

Untuk memverifikasi id produk dan harganya, saya akan menggunakan ekspresi reguler. Berikut adalah dua fungsi penolong: 

Setelah data dibersihkan dan semua baris data yang tidak valid telah dijatuhkan, fungsi berikut akan menulis data bersih ke file CSV baru yang disebut 'clean.csv' dan mencetaknya ke layar.

Fungsi main() melakukan sebagian besar pekerjaan. Ini iterates atas dataset asli, menghilangkan spasi redundan, memperbaiki apa yang bisa, melacak baris data yang jatuh, menulis data bersih ke file, dan akhirnya melaporkan pada garis jatuh.

Kesimpulan

Go memiliki paket yang dirancang dengan baik untuk pemrosesan teks. Tidak seperti di sebagian besar bahasa, objek string benar-benar hanya sepotong byte. Semua logika penanganan string dalam paket terpisah seperti 'string' dan 'strconv'.

Di bagian kedua dari tutorial, kami menggunakan banyak konsep untuk menyelesaikan tugas nyata dunia nyata untuk membersihkan kumpulan data CSV yang diformat sebelum analisis.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.