Пропущенные данные
В реальных данных часто не все ячейки заполнены. Например, ученик не сдал работу, датчик не передал измерение, пользователь не указал возраст, а часть данных потерялась при выгрузке из другой программы.
Такие пустые места называют пропусками. В CSV пропуском может быть пустая ячейка или значение NA. DataFrame хранит такой элемент как отсутствующее значение, а не как строку "NA".
С такими данными всё равно приходится работать: иногда строки с пропусками удаляют, иногда пропуски заполняют, а иногда просто не учитывают в конкретном вычислении. Главное — заметить их и решить, что с ними делать.
Посмотр пропусков
Заголовок раздела «Посмотр пропусков»MissingCount показывает число пропусков в одном столбце, а MissingCounts строит таблицу по всем столбцам.
uses MLABC;
begin var df := DataFrame.FromCsvText(''' Имя,Возраст,Балл Анна,14,91 Борис,,76 Вера,14,NA Глеб,15,68 ''');
Println('Пропусков в столбце Возраст:', df.MissingCount('Возраст')); Println('Пропусков в столбце Балл:', df.MissingCount('Балл'));
df.MissingCounts.Print;end.Вывод:
Пропусков в столбце Возраст: 1Пропусков в столбце Балл: 1Столбец Пропусков Имя 0Возраст 1 Балл 1Проверка на пропущенное значение в ячейке
Заголовок раздела «Проверка на пропущенное значение в ячейке»При фильтрации удобно проверять конкретную ячейку через IsValid:
uses MLABC;
begin var df := DataFrame.FromCsvText(''' Имя,Возраст,Балл Анна,14,91 Борис,,76 Вера,14,NA Глеб,15,68 ''');
df.Filter(row -> row['Балл'].IsValid).Print;end.row['Балл'].IsValid означает, что что значение в столбце Балл этой строки не пропущено.
Вывод:
Имя Возраст Балл Анна 14 91Борис NA 76 Глеб 15 68Удаление строк с пропусками
Заголовок раздела «Удаление строк с пропусками»Метод DropMissing удаляет строки, где есть хотя бы один пропуск:
uses MLABC;
begin var df := DataFrame.FromCsvText(''' Имя,Возраст,Балл Анна,14,91 Борис,,76 Вера,14,NA Глеб,15,68 ''');
df.DropMissing.Print;end.Вывод:
Имя Возраст БаллАнна 14 91Глеб 15 68Если важны только некоторые столбцы, укажите их явно.
df.DropMissing(['Балл']).Print;Такой вариант удалит только строки, где пропущен Балл, и не будет учитывать пропуски в других столбцах.
Заполнение пропусков
Заголовок раздела «Заполнение пропусков»На уровне DataFrame обычно достаточно найти или удалить пропуски. Для задач машинного обучения пропуски чаще заполняют на этапе подготовки данных с помощью преобразователя Imputer.
Imputer может заменить пропущенные числовые значения средним, медианой или другим правилом.
Что важно помнить
Заголовок раздела «Что важно помнить»NAи пустая ячейка считаются пропущенными значениями.MissingCountсчитает пропуски в одном столбце.MissingCountsпоказывает пропуски по всей таблице.DropMissingвозвращает новыйDataFrame.- Перед сравнением значения можно проверить с помощью
row['Столбец'].IsValid.