次の方法で共有


DataFrames の概要

データを保存および操作するための 2 次元データ構造である DataFrames の使用方法を学習します。 DataFrame は、機械学習モデル用にデータを準備するのに役立ちます。 DataFrame は、機械学習とは関係のないデータ操作にも使用できます。

Microsoft.Data.Analysis をインストールする

ほとんどの場合、DataFrame へのアクセスは、Microsoft.Data.Analysis NuGet パッケージを参照する場合と同様に簡単です。

dotnet add package Microsoft.Data.Analysis

.NET 10+ の場合は次のようになります:

dotnet package add Microsoft.Data.Analysis

データの読み込み

DataFrame を使うと、表形式のデータを簡単に読み込むことができます。 次のデータを含む 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

まず、DataFrame にデータを読み込みます。

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);

データを検査する

DataFrames は、データを列のコレクションとして格納します。 これにより、データを簡単に操作できます。

列のデータ型のプレビューを取得するには、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);

2 つの DataFrame を Id 値に基づいて結合することもできます。 merge 関数は両方の DataFrame を受け取り、Id 値に基づいて行を結合します。

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

DataFrame を保存する

結果を .csv 形式で保存できます。

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

ML.NET で DataFrame を使用する

DataFrame は ML.NET で直接動作します。 DataFrame は IDataView を実装しており、モデルのトレーニングに使用できます。