← Маршрут ML-инженерии

Урок · 2 мин чтения · упражнения и самопроверка

NumPy, pandas и качество данных

После урока: объяснить формы массивов и выполнить упражнение «Проверить схему и порядок признаков реального набора», обосновав выбранный подход..

Перед началом

Примеры выполняются локально: скачайте лабораторию и установите зависимости по README. Онлайн-редактор алгоритмических задач не содержит ML-библиотеки.

Массив и таблица

NumPy ndarray хранит многомерные числовые данные. Форма (n, d) означает n объектов с d признаками; axis=0 обычно агрегирует по объектам, axis=1 — по признакам строки. Неверная ось может дать массив допустимой формы с неправильным смыслом. Всегда подпишите, что означают строки и столбцы.

pandas DataFrame добавляет имена колонок и индекс. Выбор frame[columns] задаёт порядок признаков, а .loc обращается по меткам, .iloc — по позициям. При объединении таблиц проверьте ключ и кардинальность: дубликаты ключей с обеих сторон способны размножить строки. Число строк после join — отдельная проверка качества данных.

Аудит до обучения

Для каждого поля зафиксируйте имя, тип, допустимые значения и момент появления. Посчитайте пропуски, повторяющиеся объекты, распределение целевого класса. Проверьте единицы: миллиграммы и граммы могут выглядеть как одно числовое поле, но давать разные предсказания. Не используйте уникальный ID как содержательный признак без обоснования.

В Wine готовые данные конечны и не содержат пропусков, но это свойство конкретного набора, а не любого CSV. Обработка отсутствующих значений всё равно должна быть частью контракта будущего проекта. Предположение «в примере не было NaN» не заменяет проверку входов.

Данные и обучение преобразований

Описательный просмотр схемы помогает понять данные. Вычисление параметров обработки для модели — уже обучение: средние для заполнения пропусков и масштабирования определяются только на train. Не удаляйте строки или колонки, ориентируясь на итоговые оценки test. Отделение test рассматривается в следующем блоке.

В примере выбор двух именованных колонок сохраняет ясный порядок. Суммарное число пропусков получается двумя суммами: сначала по колонкам, затем общий итог. Числа в примере — результат чтения реального набора, а не заранее составленная витрина.

Пошаговый пример

python
from sklearn.datasets import load_wine
frame = load_wine(as_frame=True).data
selected = frame[["alcohol", "malic_acid"]]
print(selected.shape)
print(int(frame.isna().sum().sum()))

Ожидаемый вывод

text
(178, 2)
0

Выбраны две колонки из 13. В исходных наблюдениях Wine пропусков нет.

Сделайте самостоятельно

Выберите три колонки по именам, проверьте их порядок, число строк и конечность значений. Объясните риск случайной перестановки колонок на inference.

Ответ и критерии проверки

Список selected.columns должен совпасть с заданным списком; строк 178. Проверка np.isfinite(selected.to_numpy()).all() должна быть истинной. Перестановка колонок без согласования меняет смысл входов модели.

Проверьте понимание

1. Что означает форма X = (178, 13)?
2. Почему нужно проверять количество строк после join?