Sdílet prostřednictvím


Ukázková data Iris pro kurzy Pythonu a R s využitím strojového učení SQL

Platí pro: SQL Server 2016 (13.x) a novější verze Azure SQL Managed Instance

V tomto cvičení vytvořte databázi pro ukládání dat ze sady dat Iris flower a modelů založených na stejných datech. Data Iris jsou součástí distribuce R i Pythonu a používají se v kurzech strojového učení pro strojové učení SQL.

K dokončení tohoto cvičení byste měli mít SQL Server Management Studio (SSMS) nebo jiný nástroj, který může spouštět dotazy T-SQL.

Návody a rychlé starty využívající tuto datovou sadu zahrnují následující:

Vytvoření databáze

  1. Spusťte aplikaci SQL Server Management Studio a otevřete nové okno dotazu .

  2. Vytvořte novou databázi pro tento projekt a změňte kontext okna dotazu tak, aby používal novou databázi.

    CREATE DATABASE irissql
    GO
    USE irissql
    GO
    
  3. Přidejte několik prázdných tabulek: jednu pro uložení dat a druhou pro uložení natrénovaných modelů. Tabulka iris_models slouží k ukládání serializovaných modelů generovaných v jiných cvičeních.

    Následující kód vytvoří tabulku pro trénovací data.

    DROP TABLE IF EXISTS iris_data;
    GO
    CREATE TABLE iris_data (
      id INT NOT NULL IDENTITY PRIMARY KEY
      , "Sepal.Length" FLOAT NOT NULL, "Sepal.Width" FLOAT NOT NULL
      , "Petal.Length" FLOAT NOT NULL, "Petal.Width" FLOAT NOT NULL
      , "Species" VARCHAR(100) NOT NULL, "SpeciesId" INT NOT NULL
    );
    
  4. Spuštěním následujícího kódu vytvořte tabulku použitou k uložení natrénovaného modelu. Pokud chcete uložit modely Pythonu (nebo R) na SQL Serveru, musí být serializovány a uloženy ve sloupci typu varbinary(max).

    DROP TABLE IF EXISTS iris_models;
    GO
    
    CREATE TABLE iris_models (
      model_name VARCHAR(50) NOT NULL DEFAULT('default model') PRIMARY KEY,
      model VARBINARY(MAX) NOT NULL
    );
    GO
    

    Kromě obsahu modelu byste obvykle také přidali sloupce pro další užitečná metadata, jako je název modelu, datum, kdy byl natrénován, zdrojový algoritmus a parametry, zdrojová data atd. Prozatím to budeme mít jednoduché a použijeme jenom název modelu.

Naplnění tabulky

Integrovaná data Iris můžete získat z R nebo Pythonu. Data můžete načíst do datového rámce pomocí Pythonu nebo R a pak je vložit do tabulky v databázi. Přesun tréninkových dat z externí relace do tabulky je vícekrokový proces:

  • Navrhněte uloženou proceduru, která získává požadovaná data.
  • Spusťte uloženou proceduru, abyste skutečně získali data.
  • Vytvořte příkaz INSERT, který určuje, kam mají být načtená data uložena.
  1. V systémech s integrací Pythonu vytvořte následující uloženou proceduru, která k načtení dat používá kód Pythonu.

    CREATE PROCEDURE get_iris_dataset
    AS
    BEGIN
    EXEC sp_execute_external_script @language = N'Python', 
    @script = N'
    from sklearn import datasets
    iris = datasets.load_iris()
    iris_data = pandas.DataFrame(iris.data)
    iris_data["Species"] = pandas.Categorical.from_codes(iris.target, iris.target_names)
    iris_data["SpeciesId"] = iris.target
    ', 
    @input_data_1 = N'', 
    @output_data_1_name = N'iris_data'
    WITH RESULT SETS (("Sepal.Length" float not null, "Sepal.Width" float not null, "Petal.Length" float not null, "Petal.Width" float not null, "Species" varchar(100) not null, "SpeciesId" int not null));
    END;
    GO
    

    Po spuštění tohoto kódu by se měla zobrazit zpráva "Příkazy byly úspěšně dokončeny". To znamená, že uložená procedura byla vytvořena podle vašich specifikací.

  2. Případně v systémech s integrací jazyka R vytvořte proceduru, která místo toho používá R.

    CREATE PROCEDURE get_iris_dataset
    AS
    BEGIN
    EXEC sp_execute_external_script @language = N'R', 
    @script = N'
    library(RevoScaleR)
    data(iris)
    iris$SpeciesID <- c(unclass(iris$Species))
    iris_data <- iris
    ', 
    @input_data_1 = N'', 
    @output_data_1_name = N'iris_data'
    WITH RESULT SETS (("Sepal.Length" float not null, "Sepal.Width" float not null, "Petal.Length" float not null, "Petal.Width" float not null, "Species" varchar(100) not null, "SpeciesId" int not null));
    END;
    GO
    
  3. Pokud chcete tabulku skutečně naplnit, spusťte uloženou proceduru a zadejte tabulku, do které se mají data zapisovat. Při spuštění spustí uložená procedura kód Pythonu nebo R, který načte integrovanou datovou sadu Iris a potom vloží data do tabulky iris_data .

    INSERT INTO iris_data ("Sepal.Length", "Sepal.Width", "Petal.Length", "Petal.Width", "Species", "SpeciesId")
    EXEC dbo.get_iris_dataset;
    

    Pokud s T-SQL teprve začínáte, mějte na paměti, že příkaz INSERT přidává pouze nová data; Nezkontroluje existující data ani neodstraní a znovu sestaví tabulku. Chcete-li zabránit získání více kopií stejných dat v tabulce, můžete nejprve spustit tento příkaz: TRUNCATE TABLE iris_data. Příkaz T-SQL TRUNCATE TABLE odstraní existující data, ale zachová strukturu tabulky beze změny.

Vytváření dotazů na data

Jako ověřovací krok spusťte dotaz, abyste potvrdili, že se data nahrála.

  1. V Průzkumníku objektů klikněte v části Databáze pravým tlačítkem myši na databázi irissql a spusťte nový dotaz.

  2. Spusťte několik jednoduchých dotazů:

    SELECT TOP(10) * FROM iris_data;
    SELECT COUNT(*) FROM iris_data;
    

Další kroky

V následujícím rychlém startu vytvoříte model strojového učení a uložíte ho do tabulky a pak ho použijete k vygenerování predikovaných výsledků.