1. Перетворіть очікування моделі на контракт даних
Почніть з об'єкта, який очікує ваша програма, перш ніж обирати валідатор. Для табличного входу назвіть стовпці, типи та одиниці. Для зображення вкажіть розміри, канали та обробку орієнтацій. Для тексту визначте кодування, обов'язкові поля та політику щодо порожніх входів. Дані можуть бути читабельними, але не придатними для обчислення.
Розділіть три рішення: відхилити, прийняти як є або перетворити за документованим правилом. Перетворення рядка на число, заміна відсутнього значення та обрізання входу змінюють оброблюваний вміст. Ці операції не повинні відбуватися лише тому, що інструмент обирає тип за замовчуванням.
Приклад у цьому посібнику є навчальним і не виконується. Він стосується об'єктів, що містять ідентифікатор і три числові значення в діапазоні від −100 до 100. Ці межі вигадані для ілюстрації контракту, без фізичної одиниці чи зв'язку з набором даних Kernodeck. Їх слід замінити правилами реального проєкту.
Прокрутіть таблицю, щоб побачити всі стовпці.| Рівень | Правило | Помітний збій |
|---|---|---|
| Схема | Рівно id і values | Відсутнє або неочікуване поле. |
| Тип | id — рядок; values — список чисел | Число подано як текст, булеве значення або відсутнє значення. |
| Форма | Три значення на об'єкт | Вектор закороткий або задовгий. |
| Значення | Скінченні числа в [−100, 100] | NaN, нескінченність або значення поза навчальним діапазоном. |
| Корпус | Унікальні ідентифікатори | Два об'єкти мають однаковий ідентифікатор. |
2. Перевірте читання перед перетвореннями
Зафіксуйте формат та його діалект. Для CSV задокументуйте роздільник, кодування та наявність заголовка. Стандартний читач CSV у Python зазвичай повертає рядки; він не вирішує, що ваш стовпець є цілим числом. Ідентифікатор як-от 0012 може втратити сенс, якщо перетворення зробить із нього 12. Тому зберігайте ідентифікатори в їхньому передбаченому типі.
Перевірте кількість полів і назви стовпців перед створенням об'єктів бізнес-логіки. Рядок, зсунутий через неочікуваний роздільник, не повинен пройти лише тому, що деякі значення залишаються конвертованими. Для бінарних файлів чи зображень також виконуйте реальне читання: правильне розширення не гарантує декодований вміст.
Декодований JSON — це ще не валідований контракт. Модуль Python за замовчуванням приймає деякі нечислові значення та повторювані імена в об'єкті. Якщо ваш формат їх забороняє, налаштуйте відхилення під час декодування, а потім застосуйте правила схеми. Також визначте відповідне обмеження розміру, перш ніж завантажувати повний файл у пам'ять.
3. Ізолюйте одну помилку на кожен тип правила
Створіть невеликий набір, де кожен невалідний запис порушує лише одне важливе правило. Так ви знатимете, що саме виявляє перевірка. Якщо єдиний неправильний приклад поєднує хибний ідентифікатор, неправильний розмір і нескінченне число, його відхилення не доводить, що всі три правила працюють.
У таблиці позначення представляють навчальні об'єкти, які вже прочитано. Нескінченність — це нечислове значення, а не синтаксис JSON, який слід застосовувати. Вердикти очікуються шляхом міркування і не є виводом виконаної програми. Другий об'єкт з a перевіряється після валідного об'єкта a, щоб перевірити унікальність.
Зберігайте ці випадки разом зі своїм контрактом, коли він змінюється. Якщо ви вирішите приймати числові рядки, створіть явний етап перетворення та збережіть слід цього рішення. Не змінюйте перевірки мовчки, щоб зникло перше відхилення в корпусі.
Прокрутіть таблицю, щоб побачити всі стовпці.| Ідентифікатор і значення | Очікуваний вердикт | Перевірене правило |
|---|---|---|
| a · [1, 2, 3] | Прийнято | Валідний еталон. |
| b · ["4", 5, 6] | Відхилено: тип | Рядок не є числом у цьому контракті. |
| c · [7, 8] | Відхилено: форма | Два значення замість трьох. |
| d · [0, нескінченність, 1] | Відхилено: значення | Нечислове значення не може брати участь в обчисленні. |
| a · [4, 5, 6], після першого a | Відхилено: дублікат | Унікальність у корпусі. |
4. Зберігайте явний валідатор і зрозумілі повідомлення
Наступний фрагмент показує перевірки об'єкта після декодування. Він зупиняється на першому невдалому правилі й не обробляє ні повний файл, ні всі його можливі формати. Контейнер seen належить до обходу корпусу: повторне його створення для кожного рядка зробило б перевірку дублікатів марною.
Корисне повідомлення містить правило, логічний файл і позицію об'єкта. Не копіюйте до нього весь його вміст. Для збору кількох помилок обмежте деталі, які зберігаються, зберігаючи при цьому повні лічильники. Звіт розміром у кілька гігабайтів так само не допомагає знайти першу причину.
Для масиву NumPy перевірка скінченності поелементно може доповнити перевірки типу та форми. Вона не замінює бізнес-меж: скінченне число все ще може бути від'ємною довжиною або значенням, вираженим у неправильній одиниці.
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. Від зразка до повного корпусу
Короткий зразок дозволяє швидко виправити читач і контракт. Виберіть звичайні випадки та межі: порожній ввід, максимальний розмір, незвичайний символ, перший і останній розділ. Вибірка лише перших рядків може пропустити аномалію, розташовану в пізнішому файлі або в рідкісній категорії.
Повна валідація проходить усі відповідні записи та застосовує глобальні правила. Для великих обсягів обробляйте файли поступово та фіксуйте їхню ідентичність. Набір усіх ідентифікаторів у пам'яті підходить для малого прикладу, але може стати занадто дорогим; тоді виберіть стратегію унікальності, що відповідає обсягу, не відмовляючись від перевірки.
Звіт має вказувати свій периметр: вибірку для налагодження, усю партицію чи весь визначений корпус. Збережіть кількість прочитаних, прийнятих і відхилених записів, а також застосовані правила. Якщо файли згодом зміняться, старий звіт не підтверджує автоматично новий вступ.
6. Вирішити, що робити з відхиленими даними
Зупиніть роботу, коли помилки спотворюють сенс обчислення: відсутній ключовий стовпець, несумісні одиниці або втрачено відповідність ідентифікаторів. Якщо ваше завдання дозволяє виключення окремих елементів, визначте цю політику до запуску, зберігайте відхилення та обчислюйте результати на фактично прийнятому периметрі.
Відсунення — це не виправлення. Якщо ви замінюєте пропущені значення або нормалізуєте вхідні дані, створіть нову ідентифіковану версію та повторно її перевірте. Зберігайте перетворення та його параметри разом з експериментом. Інакше два запуски з однаковою назвою можуть використовувати різні дані.
Перед GPU перевірте ще й фактично сформований батч: порядок вимірів, числовий тип, можливу маску та відповідність цілям. Перевірка файлу передує перетворенням; вона не доводить, що конвеєр згодом зберігає ці властивості. Репрезентативний випадок дає змогу перевірити цю останню межу.
7. Створити зрозумілий дозвіл на запуск
Очікуваний результат — короткий звіт, який відповідає на чотири запитання: який вхід, які правила, який периметр і яке рішення. Статус «валідний» має посилатися на точну ідентичність корпусу. Статус «частковий» має називати те, що ще потрібно перевірити. Відхилення має дозволяти знайти відповідні об'єкти, не поширюючи зайво їхній вміст.
Додайте перевірку самого валідатора: правильний випадок проходить, кожен неправильний відхиляється з належної причини, а лічильники збігаються. Потім перевірте невеликий фрагмент у застосунку. Ця подвійна перевірка допомагає не сплутати відповідність даних з якістю моделі чи доступністю GPU.
Відповідні вхідні дані можуть усе одно бути упередженими, погано розміченими або непридатними для досліджуваного питання. Цей посібник охоплює структурну відповідність і явні правила; він не засвідчує ні репрезентативність, ні права на використання. Ці рішення доповнюють справу перед тривалою обробкою.