Перейти к содержимому

Класс DataFrame

DataFrame — это таблица данных. В ней строки описывают объекты или записи, а столбцы хранят отдельные свойства этих объектов.

В ML PascalABC.NET DataFrame используется как основной тип для работы с табличными данными: их можно загружать из CSV, просматривать, фильтровать, сортировать, группировать, объединять и готовить для моделей машинного обучения.

Структура DataFrame

Строка — это одна запись в таблице. Например, один человек, один товар, одна продажа или одно измерение.

Столбец — это одно поле данных: имя, возраст, город, цена, дата, результат измерения. У каждого столбца есть имя и тип данных.

Ячейка находится на пересечении строки и столбца и содержит конкретное значение.

В DataFrame столбцы типизированы. Это значит, что столбец с возрастом хранит числа, столбец с датой — даты, а столбец с названием товара — строки.

Основные типы:

  • Integer — целые числа;
  • Real — вещественные числа;
  • String — строки;
  • Boolean — логические значения;
  • DateTime — дата и время.

При загрузке и просмотре данных типы обычно определяются автоматически, но при необходимости их можно задать явно.

Некоторые строковые столбцы содержат не произвольный текст, а категории: город, отдел, класс, пол, тип товара.

Такие столбцы важны для анализа данных и машинного обучения. Например, перед обучением модели категории часто нужно преобразовать в числа. Это рассматривается в разделе кодирование категорий.

Большинство операций с DataFrame возвращают новую таблицу. Исходная таблица остаётся прежней.

var adults := df.Filter(row -> row['Возраст'] >= 18);

Здесь adults — новая таблица только со взрослыми людьми, а исходный df не изменился.

Такой подход делает цепочки операций понятнее: результат каждого шага можно сохранить в отдельную переменную или сразу передать дальше.

Обычная работа с таблицей выглядит так:

  1. Загрузить и посмотреть данные.
  2. Выбрать, добавить или изменить столбцы.
  3. Отфильтровать и отсортировать строки.
  4. Посчитать статистику.
  5. Сгруппировать данные.
  6. Объединить несколько таблиц.
  7. Обработать дату и время.
  8. Разобраться с пропущенными данными.
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-текста, затем добавляется новый столбец Сумма, строки фильтруются по сумме покупки и сортируются по убыванию.