Класс DataFrame
DataFrame — это таблица данных. В ней строки описывают объекты или записи, а столбцы хранят отдельные свойства этих объектов.
В ML PascalABC.NET DataFrame используется как основной тип для работы с табличными данными: их можно загружать из файла или текста в CSV-формате, просматривать, фильтровать, сортировать, группировать, объединять и готовить для моделей машинного обучения.
Строки, столбцы и ячейки
Заголовок раздела «Строки, столбцы и ячейки»Строка — это одна запись в таблице. Например, один человек, один товар, одна продажа или одно измерение. В машинном обучении такую запись часто называют объектом.
Столбец — это одно поле данных: имя, возраст, город, цена, дата, результат измерения. У каждого столбца есть имя и тип данных. В машинном обучении столбцы, которые используются для анализа и построения модели, называют признаками (features).
Ячейка находится на пересечении строки и столбца и содержит значение одного признака для конкретного объекта.
Типы столбцов
Заголовок раздела «Типы столбцов»В DataFrame каждый столбец имеет определённый тип. Тип столбца показывает, какие значения могут в нём храниться.
Например, столбец с возрастом хранит числа, столбец с датой — даты, а столбец с названием товара — строки.
Основные типы:
Int— целые числа;Float— вещественные числа;Str— строки;Bool— логические значения;DateTime— дата и время.
Это типы столбцов библиотеки, а не типы данных PascalABC.NET. Например, типу столбца Int соответствует тип PascalABC.NET integer, типу Float — real, типу Str — string, а типу Bool — boolean. Тип DateTime в библиотеке ML называется так же, как соответствующий тип в PascalABC.NET.
При загрузке и просмотре данных типы обычно определяются автоматически, но при необходимости их можно задать явно.
Категориальные столбцы
Заголовок раздела «Категориальные столбцы»Категориальный столбец показывает, к какой группе относится каждый объект. Его значения выбираются из определённого набора категорий и обычно повторяются.
Например:
- город: Москва, Казань, Самара;
- отдел: Продажи, Бухгалтерия, Разработка;
- уровень: младший, средний, старший.
Не каждый строковый столбец является категориальным. Например, название отдела — категория, а комментарий покупателя — обычный текст. Имена, адреса и уникальные номера также обычно не считают категориями, даже если они записаны строками.
Категории бывают:
- номинальные — между ними нет заданного порядка: Москва, Казань;
- порядковые — категории можно расположить по порядку: младший, средний, старший.
Перед обучением модели категории обычно преобразуют в числа. Подробнее — в разделе Кодирование категорий.
Неизменность DataFrame
Заголовок раздела «Неизменность DataFrame»Большинство операций с DataFrame возвращают новую таблицу. Исходная таблица после совершения операции не изменяется.
var adults := df.Filter(row -> row['Возраст'] >= 18);Здесь adults — новая таблица только со взрослыми людьми, а исходный df не изменился.
Такой подход делает цепочки операций понятнее: результат каждого шага можно сохранить в отдельную переменную или сразу передать дальше.
Что обычно делают с DataFrame
Заголовок раздела «Что обычно делают с DataFrame»Обычная работа с таблицей выглядит так:
- Загрузить и посмотреть данные.
- Выбрать, добавить или изменить столбцы.
- Отфильтровать и отсортировать строки.
- Посчитать статистику.
- Сгруппировать данные.
- Объединить несколько таблиц.
- Обработать дату и время.
- Разобраться с пропущенными данными.
Пример работы с DataFrame
Заголовок раздела «Пример работы с DataFrame»uses MLABC;
begin var df := DataFrame.FromCsvText(''' Товар,Категория,Количество,Цена Хлеб,Продукты,2,45.50 Молоко,Продукты,1,72.90 Блокнот,Канцтовары,3,120 ''');
var res := df .WithColumnFloat('Сумма', row -> row['Количество'] * row['Цена']) .Filter(row -> row['Сумма'] > 100) .SortByDescending('Сумма');
res.Print;end.В этом примере таблица создаётся из CSV-текста, затем добавляется новый столбец Сумма, строки фильтруются по сумме покупки и сортируются по убыванию.