1. Ubah ekspektasi model menjadi kontrak data
Mulailah dari objek yang diharapkan program Anda, sebelum memilih validator. Untuk input tabular, sebutkan nama kolom, tipe, dan satuan. Untuk gambar, tentukan dimensi, kanal, dan penanganan orientasi. Untuk teks, tentukan encoding, field wajib, dan kebijakan untuk input kosong. Suatu data bisa terbaca namun tidak cocok untuk komputasi.
Pisahkan tiga keputusan: tolak, terima apa adanya, atau transformasikan menurut aturan yang terdokumentasi. Mengonversi string menjadi angka, mengganti nilai yang hilang, dan memotong input mengubah konten yang diproses. Operasi ini tidak boleh terjadi hanya karena suatu alat memilih tipe default.
Contoh dalam panduan ini bersifat pedagogis dan tidak dijalankan. Contoh ini membahas objek yang berisi pengenal dan tiga nilai numerik antara −100 dan 100. Batas ini dibuat-buat untuk mengilustrasikan kontrak, tanpa satuan fisik maupun kaitan dengan kumpulan data Kernodeck. Batas tersebut harus diganti dengan aturan proyek yang sebenarnya.
Geser tabel untuk membaca semua kolom.| Tingkat | Aturan | Kegagalan yang terdeteksi |
|---|---|---|
| Skema | Tepatnya id dan values | Field hilang atau tidak terduga. |
| Tipe | id berupa string; values berupa daftar angka | Angka disajikan sebagai teks, boolean, atau nilai yang hilang. |
| Bentuk | Tiga nilai per objek | Vektor terlalu pendek atau terlalu panjang. |
| Nilai | Angka finit dalam [−100, 100] | NaN, infinitas, atau nilai di luar domain pedagogis. |
| Korpus | Pengenal unik | Dua objek memiliki pengenal yang sama. |
2. Verifikasi pembacaan sebelum konversi
Tetapkan format dan dialeknya. Untuk CSV, dokumentasikan pemisah, encoding, dan keberadaan header. Pembaca CSV standar Python biasanya mengembalikan string; ia tidak memutuskan bahwa kolom Anda adalah bilangan bulat. Pengenal seperti 0012 dapat kehilangan maknanya jika konversi mengubahnya menjadi 12. Karena itu, pertahankan pengenal dalam tipe yang dimaksudkan.
Kontrol jumlah field dan nama kolom sebelum membuat objek bisnis. Baris yang tergeser karena pemisah tak terduga tidak boleh lolos hanya karena sebagian nilai tetap dapat dikonversi. Untuk file biner atau gambar, lakukan juga pembacaan yang sebenarnya: ekstensi yang benar tidak menjamin konten dapat didekode.
JSON yang sudah didekode belum merupakan kontrak yang tervalidasi. Modul Python secara default menerima beberapa nilai tak hingga dan nama yang berulang dalam sebuah objek. Jika format Anda melarangnya, konfigurasikan penolakan tersebut saat pendekodean, lalu terapkan aturan skema Anda. Tentukan juga batas ukuran yang sesuai sebelum memuat file lengkap ke memori.
3. Isolasi satu kesalahan per jenis aturan
Susun kumpulan kecil di mana setiap entri tidak valid hanya melanggar satu aturan penting. Dengan begitu Anda akan tahu apa yang dideteksi oleh pemeriksaan. Jika satu-satunya contoh yang salah menggabungkan identitas yang buruk, dimensi yang keliru, dan bilangan tak hingga, penolakannya tidak membuktikan bahwa ketiga aturan tersebut berfungsi.
Dalam tabel, notasi tersebut merepresentasikan objek pedagogis yang sudah dibaca. Tak hingga adalah nilai numerik yang tidak finit, bukan sintaksis JSON yang harus diadopsi. Verdict diharapkan berdasarkan penalaran dan bukan keluaran dari program yang dijalankan. Objek kedua yang membawa a diuji setelah objek a yang valid untuk memeriksa keunikan.
Simpan kasus-kasus ini bersama kontrak Anda ketika kontrak tersebut berkembang. Jika Anda memutuskan untuk menerima string numerik, buat langkah konversi eksplisit dan simpan jejak keputusan tersebut. Jangan mengubah pemeriksaan secara diam-diam untuk menghilangkan penolakan pertama dari korpus.
Geser tabel untuk membaca semua kolom.| Identitas dan nilai | Verdict yang diharapkan | Aturan yang diuji |
|---|---|---|
| a · [1, 2, 3] | Diterima | Referensi valid. |
| b · ["4", 5, 6] | Ditolak: tipe | String bukanlah angka dalam kontrak ini. |
| c · [7, 8] | Ditolak: bentuk | Dua nilai, bukan tiga. |
| d · [0, tak hingga, 1] | Ditolak: nilai | Nilai yang tidak finit tidak dapat masuk ke dalam perhitungan. |
| a · [4, 5, 6], setelah a yang pertama | Ditolak: duplikat | Keunikan pada korpus. |
4. Pertahankan validator eksplisit dan pesan yang dapat ditindaklanjuti
Cuplikan berikut menunjukkan pemeriksaan pada sebuah objek, setelah pendekodean. Cuplikan ini berhenti pada aturan pertama yang gagal dan tidak memproses file lengkap maupun semua format yang mungkin. Kontainer seen termasuk dalam penelusuran korpus: membuatnya ulang pada setiap baris akan membuat pemeriksaan duplikat menjadi tidak berguna.
Pesan yang berguna memuat aturan, file logis, dan posisi objek. Hindari menyalin seluruh isinya ke dalamnya. Untuk pengumpulan beberapa kesalahan, batasi detail yang disimpan sambil tetap mempertahankan penghitung yang lengkap. Laporan berukuran beberapa gigabyte juga tidak lebih membantu untuk menemukan penyebab pertama.
Pada array NumPy, pemeriksaan finitud per elemen dapat melengkapi pemeriksaan tipe dan bentuk. Pemeriksaan ini tidak menggantikan batas bisnis: bilangan yang finit masih bisa berupa panjang negatif atau nilai yang dinyatakan dalam satuan yang salah.
import math
def valider_objet(item, seen):
if type(item) is not dict or set(item) != {"id", "values"}:
raise ValueError("SCHEMA")
identifiant = item["id"]
if type(identifiant) is not str or not identifiant.strip():
raise ValueError("IDENTIFIANT")
if identifiant in seen:
raise ValueError("DOUBLON")
values = item["values"]
if type(values) is not list or len(values) != 3:
raise ValueError("FORME")
for value in values:
if type(value) not in (int, float):
raise ValueError("TYPE")
if not (-100 <= value <= 100) or not math.isfinite(value):
raise ValueError("VALEUR")
seen.add(identifiant)
return item5. Beralih dari sampel ke korpus lengkap
Sampel yang pendek memungkinkan perbaikan pembaca dan kontrak dengan cepat. Pilih kasus-kasus biasa dan kasus batas: masukan kosong, ukuran maksimum, karakter tidak biasa, partisi pertama dan terakhir. Pemilihan baris-baris awal saja dapat melewatkan anomali yang terletak di file yang lebih belakang atau pada kategori yang jarang.
Validasi lengkap menelusuri semua entri terkait dan menerapkan aturan global. Untuk volume besar, proses file secara bertahap dan catat identitasnya. Menyimpan semua identitas di memori cocok untuk contoh kecil, tetapi bisa menjadi terlalu mahal; pilihlah strategi keunikan yang sesuai dengan volume, tanpa melepaskan pemeriksaan.
Laporan harus mencantumkan cakupannya: sampel penyetelan, keseluruhan satu partisi, atau keseluruhan korpus yang ditentukan. Simpan jumlah yang dibaca, diterima, dan ditolak, serta aturan yang diterapkan. Jika berkas berubah setelahnya, laporan lama tidak otomatis memvalidasi entri baru.
6. Memutuskan apa yang harus dilakukan dengan data yang ditolak
Hentikan pekerjaan ketika kesalahan membuat makna perhitungan tidak valid: kolom penting tidak ada, satuan tidak kompatibel, atau pencocokan pengenal hilang. Jika tugas Anda mengizinkan pengecualian elemen yang terisolasi, tentukan kebijakan ini sebelum peluncuran, simpan penolakan, dan hitung hasil pada cakupan yang benar-benar diterima.
Penyisihan bukanlah koreksi. Jika Anda menggantikan nilai yang hilang atau menormalkan masukan, buat versi baru yang dapat diidentifikasi dan validasi ulang. Simpan transformasi dan parameternya bersama eksperimen. Jika tidak, dua percobaan dengan nama yang sama dapat menggunakan data yang berbeda.
Sebelum GPU, periksa lagi batch yang benar-benar dibangun: urutan dimensi, tipe numerik, mask yang mungkin ada, dan pencocokan dengan target. Validasi berkas mendahului transformasi; itu tidak membuktikan bahwa pipeline selanjutnya mempertahankan properti tersebut. Satu kasus yang representatif memungkinkan untuk memverifikasi batas terakhir ini.
7. Menghasilkan otorisasi peluncuran yang dapat dipahami
Keluaran yang diharapkan adalah laporan singkat yang menjawab empat pertanyaan: masukan apa, aturan apa, cakupan apa, dan keputusan apa. Status valid harus merujuk pada identitas korpus yang tepat. Status parsial harus menyebutkan apa yang masih perlu diperiksa. Penolakan harus memungkinkan untuk menemukan kembali objek terkait tanpa menyebarkan isinya secara tidak perlu.
Tambahkan pemeriksaan pada validator itu sendiri: kasus yang benar lolos, setiap kasus yang salah ditolak dengan alasan yang tepat, dan penghitungnya cocok. Lalu verifikasi satu bagian kecil di dalam aplikasi. Pemeriksaan ganda ini mencegah kekeliruan antara kepatuhan data dengan kualitas model atau ketersediaan GPU.
Masukan yang patuh tetap bisa bias, salah label, atau tidak sesuai dengan pertanyaan yang diteliti. Panduan ini mencakup kepatuhan struktural dan aturan eksplisit; panduan ini tidak menjamin keterwakilan maupun hak penggunaan. Keputusan-keputusan ini melengkapi berkas sebelum pemrosesan yang panjang.