ML.NET IDataView обратно в CSV - PullRequest
       29

ML.NET IDataView обратно в CSV

0 голосов
/ 05 июня 2019

Предположим, у меня есть этот пример данных:

Sample.csv:

Dog,25
Cat,23
Cat,20
Dog,0

И я хочу загрузить его в IDataView, преобразовать его, чтобы он был готов к ML (без строк и т. Д.), Затем снова сохранить его как .csv, скажем, для анализа с помощью другого инструмента или языков.

// Load data:
var sampleCsv = Path.Combine("Data", "Sample.csv");
var columns = new[]
{
    new TextLoader.Column("type", DataKind.String, 0),
    new TextLoader.Column("age", DataKind.Int16, 1),
};
var mlContext = new MLContext(seed: 0);
var dataView = mlContext.Data.LoadFromTextFile(sampleCsv, columns,',');

// Transform
var pipeline =
    mlContext.Transforms.Categorical.OneHotEncoding("type",
        // This outputKind will add just one column, while others will add some:
        outputKind: OneHotEncodingEstimator.OutputKind.Key);
var transformedDataView = pipeline.Fit(dataView).Transform(dataView);
//  transformedDataView:
//  Dog,1,25
//  Cat,2,23
//  Cat,2,20
//  Dog,1,0

Как получить два числовых столбца и записать их в файл .csv?

1 Ответ

0 голосов
/ 05 июня 2019

Вы можете создать class для ваших выходных данных:

class TempOutput
{
    // Note that the types should be the same from the DataView
    public UInt32 type { get; set; }
    public Int16 age { get; set; }
}

Затем используйте CreateEnumerable<>, чтобы прочитать все строки из DataView и распечатать их в `.csv. Файл:

File.WriteAllLines(sampleCsv + ".output",
    mlContext.Data.CreateEnumerable<TempOutput>(transformedDataView, false)
    .Select(t => string.Join(',', t.type, t.age)));
...