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

Загрузка и просмотр

DataFrame можно создать из CSV-текста прямо в программе или загрузить из файла. Для первых примеров удобнее использовать CSV-текст: программа получается полностью самодостаточной, и её можно сразу запустить.

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

DataFrame.FromCsvText создаёт таблицу из многострочной строки. Первая строка содержит имена столбцов, остальные строки — данные.

uses MLABC;
begin
var df := DataFrame.FromCsvText('''
Имя,Класс,Балл
Анна,8А,91
Борис,8Б,76
Вера,8А,84
''');
df.Print;
end.

Вывод:

Имя Класс Балл
Анна 8А 91
Борис 8Б 76
Вера 8А 84

В этом примере DataFrame сам создаёт три столбца: Имя, Класс и Балл.

Если данные лежат в отдельном файле, используйте DataFrame.FromCsv. Такой вариант удобен для реальных таблиц и учебных наборов данных.

uses MLABC;
begin
var df := DataFrame.FromCsv('students.csv');
df.Head(5).Print;
end.

Head выводит первые строки таблицы. Это удобно, когда файл большой и печатать всю таблицу не нужно. Если количество строк не указано, выводятся первые 10 строк.

Для просмотра последних строк используется Tail:

df.Tail(5).Print;

У Tail тоже можно указать количество строк. По умолчанию выводятся последние 10 строк.

После загрузки полезно посмотреть не только строки, но и общую информацию о таблице.

uses MLABC;
begin
var df := DataFrame.FromCsvText('''
Имя,Возраст,Балл
Анна,14,91
Борис,15,76
Вера,14,84
Глеб,15,68
''');
df.PrintInfo;
df.Describe.Print;
end.

PrintInfo показывает состав таблицы: столбцы, их типы и служебную информацию.
Describe строит краткое статистическое описание числовых столбцов: минимум, максимум, среднее значение и другие характеристики.

При загрузке CSV DataFrame может автоматически определить типы столбцов: целые числа, вещественные числа, строки, логические значения и даты.

uses MLABC;
begin
var df := DataFrame.FromCsvText('''
Дата,Товар,Количество,Цена
2024-09-01,Хлеб,2,45.50
2024-09-02,Молоко,1,72.90
2024-09-03,Яблоки,3,58.25
''');
df.PrintInfo;
end.

Здесь Дата будет распознана как дата и время, Количество — как целочисленный столбец, а Цена — как вещественный.

Иногда типы лучше задать вручную. Например, если в CSV записаны цены 120, 150, 90, автоматическое распознавание может считать столбец целочисленным, хотя по смыслу это вещественная цена.

uses MLABC;
begin
var text := '''
Товар,Цена
Хлеб,45
Молоко,72
Яблоки,58
''';
var df := DataFrame.FromCsvText(
text,
columnTypes := Dict('Цена' to ctFloat)
);
df.Print;
end.

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

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

Категориальные столбцы можно указать сразу при создании DataFrame.

uses MLABC;
begin
var df := DataFrame.FromCsvText('''
Имя,Пол,Отдел,Опыт
Анна,Ж,Аналитика,3
Борис,М,Разработка,5
Вера,Ж,Разработка,2
''',
categoricalColumns := ['Пол', 'Отдел']);
df.PrintInfo;
end.

Здесь Пол и Отдел отмечаются как категориальные столбцы. Это не меняет сами значения в таблице, но сохраняет важную информацию о смысле столбцов для дальнейшей обработки данных.

Типы и категориальные признаки можно задать вместе:

uses MLABC;
begin
var df := DataFrame.FromCsvText('''
Имя,Пол,Отдел,Опыт,Зарплата
Анна,Ж,Аналитика,3,90000
Борис,М,Разработка,5,120000
Вера,Ж,Разработка,2,85000
''',
columnTypes := Dict('Зарплата' to ColumnType.ctFloat),
categoricalColumns := ['Пол', 'Отдел']);
df.PrintInfo;
end.
  • Для учебных примеров удобно использовать DataFrame.FromCsvText.
  • Для реальных файлов используется DataFrame.FromCsv.
  • Head и Tail помогают быстро посмотреть большую таблицу.
  • PrintInfo показывает структуру таблицы и типы столбцов.
  • Типы можно распознавать автоматически или задавать явно через columnTypes.
  • Категориальные признаки стоит отмечать при загрузке через categoricalColumns.