Načtení dat ze souborů a jiných zdrojůLoad data from files and other sources

Naučte se, jak načíst data pro zpracování a školení do ML.NET pomocí rozhraní API.Learn how to load data for processing and training into ML.NET using the API. Data se původně ukládají do souborů nebo jiných zdrojů dat, jako jsou databáze, JSON, XML nebo kolekce v paměti.The data is originally stored in files or other data sources such as databases, JSON, XML or in-memory collections.

Pokud používáte tvůrce modelů, přečtěte si téma načtení dat o školení do Tvůrce modelů.If you're using Model Builder, see Load training data into Model Builder.

Vytvoření datového modeluCreate the data model

ML.NET umožňuje definovat datové modely prostřednictvím tříd.ML.NET enables you to define data models via classes. Například s ohledem na následující vstupní data:For example, given the following input data:

Size (Sq. ft.), HistoricalPrice1 ($), HistoricalPrice2 ($), HistoricalPrice3 ($), Current Price ($)
700, 100000, 3000000, 250000, 500000
1000, 600000, 400000, 650000, 700000

Vytvořte datový model, který představuje následující fragment kódu:Create a data model that represents the snippet below:

public class HousingData
{
    [LoadColumn(0)]
    public float Size { get; set; }

    [LoadColumn(1, 3)]
    [VectorType(3)]
    public float[] HistoricalPrices { get; set; }

    [LoadColumn(4)]
    [ColumnName("Label")]
    public float CurrentPrice { get; set; }
}

Přidání poznámek k datovému modelu pomocí atributů sloupceAnnotating the data model with column attributes

Atributy poskytují ML.NET více informací o datovém modelu a zdroji dat.Attributes give ML.NET more information about the data model and the data source.

Atribut LoadColumn určuje vlastnosti indexy sloupců.The LoadColumn attribute specifies your properties' column indices.

Důležité

LoadColumn se vyžaduje jenom při načítání dat ze souboru.LoadColumn is only required when loading data from a file.

Načíst sloupce jako:Load columns as:

  • Jednotlivé sloupce, například Size a CurrentPrices ve třídě HousingData.Individual columns like Size and CurrentPrices in the HousingData class.
  • Více sloupců v čase ve formě vektoru, jako je HistoricalPrices ve třídě HousingData.Multiple columns at a time in the form of a vector like HistoricalPrices in the HousingData class.

Máte-li vlastnost Vector, použijte atribut VectorType na vlastnost v datovém modelu.If you have a vector property, apply the VectorType attribute to the property in your data model. Je důležité si uvědomit, že všechny prvky ve vektoru musí být stejného typu.It's important to note that all of the elements in the vector need to be the same type. Udržování sloupců s oddělovači umožňuje snadnou a flexibilitu funkcí, ale pro velmi velký počet sloupců, který pracuje na jednotlivých sloupcích, způsobuje vliv na rychlost školení.Keeping the columns separated allows for ease and flexibility of feature engineering, but for a very large number of columns, operating on the individual columns causes an impact on training speed.

ML.NET funguje prostřednictvím názvů sloupců.ML.NET Operates through column names. Chcete-li změnit název sloupce na jinou hodnotu než název vlastnosti, použijte atribut ColumnName .If you want to change the name of a column to something other than the property name, use the ColumnName attribute. Při vytváření objektů v paměti stále vytváříte objekty pomocí názvu vlastnosti.When creating in-memory objects, you still create objects using the property name. Pro zpracování dat a vytváření modelů strojového učení však ML.NET Přepisuje a odkazuje na vlastnost s hodnotou poskytnutou v atributu ColumnName .However, for data processing and building machine learning models, ML.NET overrides and references the property with the value provided in the ColumnName attribute.

Načtení dat z jednoho souboruLoad data from a single file

Chcete-li načíst data ze souboru, použijte metodu LoadFromTextFile společně s datovým modelem pro načtení dat.To load data from a file use the LoadFromTextFile method along with the data model for the data to be loaded. Vzhledem k tomu, že parametr separatorChar je ve výchozím nastavení oddělený tabulátorem, změňte ho podle potřeby na datový soubor.Since separatorChar parameter is tab-delimited by default, change it for your data file as needed. Pokud má soubor záhlaví, nastavte parametr hasHeader na true tak, aby ignoroval první řádek v souboru a začal načíst data z druhého řádku.If your file has a header, set the hasHeader parameter to true to ignore the first line in the file and begin to load data from the second line.

//Create MLContext
MLContext mlContext = new MLContext();

//Load Data
IDataView data = mlContext.Data.LoadFromTextFile<HousingData>("my-data-file.csv", separatorChar: ',', hasHeader: true);

Načtení dat z více souborůLoad data from multiple files

V případě, že jsou vaše data uložená ve více souborech, pokud je schéma dat stejné, ML.NET umožňuje načíst data z několika souborů, které jsou buď ve stejném adresáři, nebo ve více adresářích.In the event that your data is stored in multiple files, as long as the data schema is the same, ML.NET allows you to load data from multiple files that are either in the same directory or multiple directories.

Načtení ze souborů v jednom adresářiLoad from files in a single directory

Pokud jsou všechny datové soubory ve stejném adresáři, použijte zástupné znaky v metodě LoadFromTextFile .When all of your data files are in the same directory, use wildcards in the LoadFromTextFile method.

//Create MLContext
MLContext mlContext = new MLContext();

//Load Data File
IDataView data = mlContext.Data.LoadFromTextFile<HousingData>("Data/*", separatorChar: ',', hasHeader: true);

Načtení ze souborů ve více adresáříchLoad from files in multiple directories

Chcete-li načíst data z více adresářů, vytvořte TextLoaderpomocí metody CreateTextLoader .To load data from multiple directories, use the CreateTextLoader method to create a TextLoader. Pak použijte metodu TextLoader.Load a určete jednotlivé cesty k souboru (zástupné znaky nelze použít).Then, use the TextLoader.Load method and specify the individual file paths (wildcards can't be used).

//Create MLContext
MLContext mlContext = new MLContext();

// Create TextLoader
TextLoader textLoader = mlContext.Data.CreateTextLoader<HousingData>(separatorChar: ',', hasHeader: true);

// Load Data
IDataView data = textLoader.Load("DataFolder/SubFolder1/1.txt", "DataFolder/SubFolder2/1.txt");

Načtení dat z relační databázeLoad data from a relational database

ML.NET podporuje načítání dat z nejrůznějších relačních databází, které podporuje System.Data , které zahrnují SQL Server, Azure SQL Database, Oracle, SQLite, PostgreSQL, pokrok, IBM DB2 a mnoho dalších.ML.NET supports loading data from a variety of relational databases supported by System.Data that include SQL Server, Azure SQL Database, Oracle, SQLite, PostgreSQL, Progress, IBM DB2, and many more.

Poznámka

Pokud chcete použít DatabaseLoader, odkazujte na balíček NuGet System. data. SqlClient .To use DatabaseLoader, reference the System.Data.SqlClient NuGet package.

Pro databázi s tabulkou s názvem House a následujícím schématem:Given a database with a table named House and the following schema:

CREATE TABLE [House] (
    [HouseId] INT NOT NULL IDENTITY,
    [Size] INT NOT NULL,
    [NumBed] INT NOT NULL,
    [Price] REAL NOT NULL
    CONSTRAINT [PK_House] PRIMARY KEY ([HouseId])
);

Data je možné modelovat podle třídy, jako je HouseData.The data can be modeled by a class like HouseData.

public class HouseData
{
    public float Size { get; set; }

    public float NumBed { get; set; }

    public float Price { get; set; }
}

Potom v rámci aplikace vytvořte DatabaseLoader.Then, inside of your application, create a DatabaseLoader.

MLContext mlContext = new MLContext();

DatabaseLoader loader = mlContext.Data.CreateDatabaseLoader<HouseData>();

Definujte připojovací řetězec a příkaz SQL, který se má spustit v databázi, a vytvořte instanci DatabaseSource.Define your connection string as well as the SQL command to be executed on the database and create a DatabaseSource instance. V této ukázce se používá databáze LocalDB SQL Server s cestou k souboru.This sample uses a LocalDB SQL Server database with a file path. DatabaseLoader však podporuje jakýkoli jiný platný připojovací řetězec pro databáze v místním prostředí i v cloudu.However, DatabaseLoader supports any other valid connection string for databases on-premises and in the cloud.

string connectionString = @"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=<YOUR-DB-FILEPATH>;Database=<YOUR-DB-NAME>;Integrated Security=True;Connect Timeout=30";

string sqlCommand = "SELECT Size, CAST(NumBed as REAL) as NumBed, Price FROM House";

DatabaseSource dbSource = new DatabaseSource(SqlClientFactory.Instance, connectionString, sqlCommand);

Číselná data, která nejsou typu Real musí být převedena na Real.Numerical data that is not of type Real has to be converted to Real. Typ Real je reprezentován jako hodnota s jednoduchou přesností a plovoucí desetinnou čárkou, nebo Single, vstupní typ očekávaný algoritmem ml.NET.The Real type is represented as a single-precision floating-point value or Single, the input type expected by ML.NET algorithms. V této ukázce je sloupec NumBed v databázi celé číslo.In this sample, the NumBed column is an integer in the database. Pomocí CAST integrované funkce se převede na Real.Using the CAST built-in function, it's converted to Real. Vzhledem k tomu, že vlastnost Price je již typu Real je načtena tak, jak je.Because the Price property is already of type Real it is loaded as is.

K načtení dat do IDataViewpoužijte metodu Load.Use the Load method to load the data into an IDataView.

IDataView data = loader.Load(dbSource);

Načtení dat z jiných zdrojůLoad data from other sources

Kromě načítání dat uložených v souborech podporuje ML.NET načítání dat ze zdrojů, které zahrnují, ale nejsou omezeny na:In addition to loading data stored in files, ML.NET supports loading data from sources that include but are not limited to:

  • Kolekce v pamětiIn-memory collections
  • JSON/XMLJSON/XML

Všimněte si, že při práci se zdroji streamování očekává ML.NET, že vstup bude ve formě kolekce v paměti.Note that when working with streaming sources, ML.NET expects input to be in the form of an in-memory collection. Proto při práci se zdroji, jako je JSON nebo XML, nezapomeňte data formátovat do kolekce v paměti.Therefore, when working with sources like JSON/XML, make sure to format the data into an in-memory collection.

S ohledem na následující kolekci v paměti:Given the following in-memory collection:

HousingData[] inMemoryCollection = new HousingData[]
{
    new HousingData
    {
        Size =700f,
        HistoricalPrices = new float[]
        {
            100000f, 3000000f, 250000f
        },
        CurrentPrice = 500000f
    },
    new HousingData
    {
        Size =1000f,
        HistoricalPrices = new float[]
        {
            600000f, 400000f, 650000f
        },
        CurrentPrice=700000f
    }
};

Načtěte kolekci v paměti do IDataView s metodou LoadFromEnumerable :Load the in-memory collection into an IDataView with the LoadFromEnumerable method:

Důležité

LoadFromEnumerable předpokládá, že IEnumerable , ze kterého se načítá, je bezpečný pro přístup z více vláken.LoadFromEnumerable assumes that the IEnumerable it loads from is thread-safe.

// Create MLContext
MLContext mlContext = new MLContext();

//Load Data
IDataView data = mlContext.Data.LoadFromEnumerable<HousingData>(inMemoryCollection);

Další krokyNext steps