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.
Соответствующие требованиям входные данные могут оставаться смещёнными, плохо размеченными или непригодными для исследуемого вопроса. Это руководство охватывает структурное соответствие и явные правила; оно не удостоверяет ни репрезентативность, ни права на использование. Эти решения дополняют досье перед длительной обработкой.