瞭解如何開始使用 DataFrames,這是用來儲存和作數據的二維數據結構。 DataFrame 有助於準備機器學習模型的數據。 資料框架也可用於處理與機器學習無關的數據。
安裝 Microsoft.Data.Analysis
在大部分情況下,存取 DataFrame 就像參考 Microsoft.Data.Analysis NuGet 套件一樣簡單。
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);
這兩個資料框可以根據Id
值來合併。 合併函式會採用兩個數據框,並根據它們 Id
欄位的值來合併行。
dataFrame = dataFrame.Merge(dataFrame2, new string[] {"Id"}, new string[] {"Id"});
儲存數據框架
結果可以儲存回 .csv 格式。
DataFrame.SaveCsv(dataFrame, "result.csv", ',');
搭配 ML.NET 使用 DataFrame
DataFrames 會直接使用 ML.NET。 DataFrame 會實作 IDataView ,並可用來定型模型。