Начало работы с DataFrame

Узнайте, как приступить к работе с DataFrame— это двумерные структуры данных для хранения и управления данными. DataFrame способствуют подготовке данных для модели машинного обучения. DataFrame также можно использовать для обработки данных, не связанной с машинным обучением.

Установка Microsoft.Data.Analysis

В большинстве случаев получить доступ к DataFrame так же просто, как сослаться на пакет NuGet Microsoft.Data.Analysis.

dotnet add package Microsoft.Data.Analysis

Или в .NET 10+:

dotnet package add Microsoft.Data.Analysis

Загрузка данных

Кадры данных упрощают загрузку табличных данных. Создайте разделенный запятыми файл с именем housing-prices.csv со следующими данными.

Id,Size,HistoricalPrice,CurrentPrice
1,600f,100000,170000
2,1000f,200000,225000
3,1000f,126000,195000
4,850f,150000,205000
5,900f,155000,210000
6,550f,99000,180000

Начните с загрузки данных в датафрейм.

using System.IO;
using System.Linq;
using Microsoft.Data.Analysis;

// Define data path
var dataPath = Path.GetFullPath(@"housing-prices.csv");

// Load the data into the data frame
var dataFrame = DataFrame.LoadCsv(dataPath);

Проверка данных

DataFrame хранят данные в виде коллекции столбцов. Это упрощает взаимодействие с данными.

Чтобы получить предварительный просмотр типов данных столбцов, выполните Info().

dataFrame.Info();

Чтобы получить сводку по данным, выполните Description().

dataFrame.Description();

Преобразование данных

Существуют различные варианты преобразования данных. Классы DataFrame и DataFrameColumn предоставляют ряд полезных API, включая двоичные операции, вычисления, соединения, слияния и обработку отсутствующих значений.

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

dataFrame["ComputedPrices"] = dataFrame["HistoricalPrice"].Multiply(2);

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

var sortedDataFrame = dataFrame.GroupBy("Size");

Данные можно фильтровать на основе различных метрик равенства. В этом примере используется функция равенства ElementWise, а затем выполняется фильтрация по столбцу с логическими результатами, чтобы получить новый DataFrame, содержащий только подходящие значения.

PrimitiveDataFrameColumn<bool> boolFilter = dataFrame["CurrentPrice"].ElementwiseGreaterThan(200000);
DataFrame filteredDataFrame = dataFrame.Filter(boolFilter);

Объединение источников данных

Рассмотрим следующие необработанные данные:

Id, Bedrooms
1, 1
2, 2
3, 3
4, 2
5, 3
6, 1

DataFrame'ы можно создать из отдельных столбцов данных. Создайте DataFrame из списка необработанных данных.

var ids = new List<Single>() {1,2,3,4,5,6};
var bedrooms = new List<Single>() {1, 2, 3, 2, 3, 1};

var idColumn = new SingleDataFrameColumn("Id", ids);
var bedroomColumn = new SingleDataFrameColumn("BedroomNumber", bedrooms);
var dataFrame2 = new DataFrame(idColumn, bedroomColumn);

Два DataFrame можно объединить на основе значения Id. Функция слияния принимает фреймы данных и объединяет строки на основе их значением Id.

dataFrame = dataFrame.Merge(dataFrame2, new string[] {"Id"}, new string[] {"Id"});

Сохранение таблиц данных

Результаты можно сохранить обратно в .csv формате.

DataFrame.SaveCsv(dataFrame, "result.csv", ',');

Использование DataFrame вместе с ML.NET

DataFrame работают напрямую с ML.NET. DataFrame реализует IDataView и может использоваться для обучения модели.