1. Trasformare le attese del modello in un contratto dei dati
Parti dall'oggetto che il tuo programma si aspetta, prima di scegliere un validatore. Per un input tabellare, nomina le colonne, i tipi e le unità. Per un'immagine, specifica dimensioni, canali e gestione degli orientamenti. Per un testo, definisci la codifica, i campi obbligatori e la politica sugli input vuoti. Un dato può essere leggibile senza essere adatto al calcolo.
Separa tre decisioni: rifiutare, accettare così com'è o trasformare secondo una regola documentata. Convertire una stringa in numero, sostituire un valore mancante e troncare un input cambiano il contenuto trattato. Queste operazioni non devono avvenire semplicemente perché uno strumento sceglie un tipo predefinito.
L'esempio di questa guida è didattico e non eseguito. Riguarda oggetti contenenti un identificatore e tre valori numerici compresi tra −100 e 100. Questi limiti sono inventati per illustrare un contratto, senza unità fisica né legame con un dataset Kernodeck. Devono essere sostituiti dalle regole del progetto reale.
Scorri la tabella per leggere tutte le colonne.| Livello | Regola | Errore individuabile |
|---|---|---|
| Schema | Esattamente id e values | Campo mancante o inatteso. |
| Tipo | id stringa; values lista di numeri | Numero presentato come testo, booleano o valore mancante. |
| Forma | Tre valori per oggetto | Vettore troppo corto o troppo lungo. |
| Valore | Numeri finiti in [−100, 100] | NaN, infinito o valore fuori dal dominio didattico. |
| Corpus | Identificatori unici | Due oggetti portano lo stesso identificatore. |
2. Verificare la lettura prima delle conversioni
Fissa il formato e il suo dialetto. Per un CSV, documenta separatore, codifica e presenza dell'intestazione. Il lettore CSV standard di Python restituisce normalmente stringhe; non decide che la tua colonna è un intero. Un identificatore come 0012 può perdere il suo significato se una conversione lo trasforma in 12. Conserva quindi gli identificatori nel loro tipo previsto.
Controlla il numero di campi e i nomi delle colonne prima di creare gli oggetti di business. Una riga sfalsata da un separatore inatteso non deve passare solo perché alcuni valori restano convertibili. Per i file binari o le immagini, esegui anche la lettura reale: un'estensione corretta non garantisce un contenuto decodificabile.
Un JSON decodificato non è ancora un contratto validato. Il modulo Python accetta per impostazione predefinita alcuni valori non finiti e nomi ripetuti in un oggetto. Se il tuo formato li vieta, configura questo rifiuto in fase di decodifica, poi applica le tue regole di schema. Definisci anche un limite di dimensione adeguato prima di caricare un file completo in memoria.
3. Isolare un errore per tipo di regola
Costruisci un piccolo insieme in cui ogni voce non valida viola una sola regola importante. Saprai così cosa rileva il controllo. Se l'unico esempio errato cumula un identificatore sbagliato, una dimensione errata e un numero infinito, il suo rifiuto non dimostra che le tre regole funzionano.
Nella tabella, le notazioni rappresentano oggetti didattici già letti. L'infinito è un valore numerico non finito, non una sintassi JSON da adottare. I verdetti sono attesi per ragionamento e non sono output di un programma eseguito. Un secondo oggetto con a si testa dopo l'oggetto a valido per verificare l'unicità.
Conserva questi casi insieme al tuo contratto quando questo evolve. Se decidi di accettare stringhe numeriche, crea uno step di conversione esplicito e conserva traccia di questa decisione. Non modificare silenziosamente i controlli per far sparire il primo rifiuto del corpus.
Scorri la tabella per leggere tutte le colonne.| Identificatore e valori | Verdetto atteso | Regola esercitata |
|---|---|---|
| a · [1, 2, 3] | Accettato | Riferimento valido. |
| b · ["4", 5, 6] | Rifiutato: tipo | Una stringa non è un numero in questo contratto. |
| c · [7, 8] | Rifiutato: forma | Due valori invece di tre. |
| d · [0, infinito, 1] | Rifiutato: valore | Un valore non finito non può entrare nel calcolo. |
| a · [4, 5, 6], dopo il primo a | Rifiutato: duplicato | Unicità sul corpus. |
4. Mantenere un validatore esplicito e messaggi utilizzabili
L'estratto seguente mostra i controlli su un oggetto, dopo la decodifica. Si ferma alla prima regola in errore e non tratta né il file completo né tutti i suoi formati possibili. Il contenitore seen appartiene al percorso del corpus: ricrearlo a ogni riga renderebbe inutile il controllo dei duplicati.
Un messaggio utile contiene la regola, il file logico e la posizione dell'oggetto. Evita di ricopiarvi tutto il suo contenuto. Per una raccolta di più errori, limita i dettagli conservati mantenendo comunque contatori completi. Un report di diversi gigabyte non aiuta di più a localizzare la prima causa.
Su un array NumPy, un controllo di finitezza elemento per elemento può integrare i controlli di tipo e di forma. Non sostituisce i limiti di dominio: un numero finito può ancora essere una lunghezza negativa o un valore espresso nell'unità sbagliata.
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. Passare dal campione al corpus completo
Un campione breve permette di correggere rapidamente il lettore e il contratto. Scegli casi ordinari e casi limite: input vuoto, dimensione massima, carattere insolito, prima e ultima partizione. Una selezione delle sole prime righe può mancare un'anomalia situata in un file più tardivo o in una categoria rara.
La validazione completa percorre tutte le voci interessate e applica le regole globali. Per grandi volumi, elabora i file progressivamente e registrane l'identità. Un insieme di tutti gli identificatori in memoria va bene per il piccolo esempio, ma può diventare troppo oneroso; scegli allora una strategia di unicità adatta al volume, senza rinunciare al controllo.
Il rapporto deve indicare il suo ambito: campione di messa a punto, totalità di una partizione o totalità del corpus definito. Conserva il numero letto, accettato e rifiutato, nonché le regole applicate. Se in seguito dei file cambiano, il vecchio rapporto non convalida automaticamente la nuova entrata.
6. Decidere cosa fare dei dati rifiutati
Interrompi il lavoro quando gli errori invalidano il senso del calcolo: colonna essenziale mancante, unità incompatibili o corrispondenza degli identificatori persa. Se il tuo compito autorizza l'esclusione di elementi isolati, definisci questa politica prima del lancio, conserva i rifiuti e calcola i risultati sull'ambito effettivamente accettato.
Un accantonamento non è una correzione. Se sostituisci i valori mancanti o normalizzi le entrate, produci una nuova versione identificabile e rivalidala. Conserva la trasformazione e i suoi parametri insieme all'esperimento. Altrimenti, due prove con lo stesso nome possono utilizzare dati diversi.
Prima della GPU, controlla ancora il batch effettivamente costruito: ordine delle dimensioni, tipo numerico, maschera eventuale e corrispondenza con i target. La validazione del file precede le trasformazioni; non prova che la pipeline conservi poi queste proprietà. Un caso rappresentativo permette di verificare quest'ultima frontiera.
7. Produrre un'autorizzazione al lancio comprensibile
L'output atteso è un rapporto breve che risponde a quattro domande: quale input, quali regole, quale ambito e quale decisione. Uno stato valido deve rimandare a un'identità di corpus precisa. Uno stato parziale deve nominare ciò che resta da controllare. Un rifiuto deve permettere di ritrovare gli oggetti interessati senza diffonderne inutilmente il contenuto.
Aggiungi un controllo del validatore stesso: un caso corretto passa, ogni caso scorretto viene rifiutato per il motivo giusto, e i contatori si riconciliano. Poi verifica un piccolo passaggio nell'applicazione. Questo doppio controllo evita di confondere la conformità dei dati con la qualità del modello o la disponibilità della GPU.
Dati conformi possono comunque restare distorti, mal etichettati o inadeguati alla questione studiata. Questa guida copre la conformità strutturale e regole esplicite; non certifica né la rappresentatività né i diritti d'uso. Queste decisioni completano il dossier prima di un'elaborazione lunga.