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

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

CSV — простой текстовый формат для хранения таблиц. Каждая строка файла соответствует строке таблицы, а значения в ней разделяются запятыми или другими разделителями.

Например:

Возраст,Город,Доход
25,Москва,80000
32,Казань,95000

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

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(2).Print;
end.

Вывод:

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

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

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

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

Вывод:

Строк : 4
Столбцов : 3
=================================
Имя : Str (4 без пропусков)
Возраст : Int (4 без пропусков)
Балл : Int (4 без пропусков)
Column Count Mean Std Min Max
Возраст 4 14.50 0.58 14 15
Балл 4 79.75 9.95 68 91

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.

Вывод:

Строк : 3
Столбцов : 4
=========================================
Дата : DateTime (3 без пропусков)
Товар : Str (3 без пропусков)
Количество : Int (3 без пропусков)
Цена : Float (3 без пропусков)

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

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

Явное указание типов столбцов задается через параметр columnTypes, который представляет собой словарь пар (ИмяСтолбца, Тип). Для задания типов используются константы ctInt, ctFloat, ctStr, ctBool, ctDateTime.

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

Вывод:

Товар Цена
Хлеб 45.00
Молоко 72.00
Яблоки 58.00

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

Категориальные признаки при загрузке датафрейма

Заголовок раздела «Категориальные признаки при загрузке датафрейма»

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

Подробнее о том, какие столбцы считать категориальными, см. в разделе Категориальные столбцы.

Категориальные столбцы можно указать сразу при создании 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 ctFloat),
categoricalColumns := ['Пол', 'Отдел']);
df.PrintInfo;
end.
  • Для учебных примеров удобно использовать DataFrame.FromCsvText.
  • Для реальных файлов используется DataFrame.FromCsv.
  • Print и Head помогают быстро посмотреть данные в таблице (все или часть).
  • PrintInfo показывает структуру таблицы и типы столбцов.
  • Типы можно распознавать автоматически или задавать явно через columnTypes.
  • Категориальные признаки стоит отмечать при загрузке через параметр categoricalColumns.