分享方式:


使用 SQL 機器學習的 Python 和 R 教學課程鳶尾花示範資料

適用於:SQL Server 2016 (13.x) 和更新版本 Azure SQL 受控執行個體

在此練習中,請建立資料庫,以根據相同的資料,儲存來自 Iris flower data set (鳶尾花資料集) 和模型的資料。 鳶尾花資料包含在 R 和 Python 發行版本中,並用於 SQL 機器學習的機器學習教學課程。

若要完成此練習,您應該具備 SQL Server Management Studio 或可執行 T-SQL 查詢的其他工具。

使用此資料集的教學課程和快速入門包括下列內容:

建立資料庫

  1. 啟動 SQL Server Management Studio,然後開啟新的 [查詢] 視窗。

  2. 為此專案建立一個新的資料庫,並變更 [查詢] 視窗的內容,以使用新的資料庫。

    CREATE DATABASE irissql
    GO
    USE irissql
    GO
    
  3. 加入一些空白資料表:一個用來儲存資料,一個用來儲存定型的模型。 iris_models 資料表用於儲存在其他練習中產生的序列化模型。

    下列程式碼會建立定型資料的資料表。

    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. 執行下列程式碼,以建立用於儲存定型模型的資料表。 若要在 SQL Server 中儲存 Python (或 R) 模型,必須將其序列化,並儲存在 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
    

    除了模型內容以外,您通常也會為其他有用的中繼資料新增資料行,例如模型的名稱、定型的日期、來源演算法和參數、來源資料等等。 我們現在會保持其簡單性,只使用模型名稱。

填入資料表

您可以從 R 或 Python 取得內建的鳶尾花資料。 您可以使用 Python 或 R,將資料載入資料框架,然後將其插入資料庫中的資料表。 將定型資料從外部工作階段移至資料表是多步驟的處理序:

  • 設計可取得所需資料的預存程序。
  • 執行預存程序以實際取得資料。
  • 建立 INSERT 陳述式,以指定擷取資料應該儲存的位置。
  1. 在具有 Python 整合的系統上,建立以下使用 Python 程式碼來載入資料的預存程序。

    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
    

    當您執行此程式碼時,應該會收到「命令已成功完成」訊息。這表示已根據您的規格建立預存程序。

  2. 或者,在具有 R 整合的系統上,改為建立使用 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. 若要實際填入資料表,請執行預存程序,並指定應該在其中寫入資料的資料表。 執行時,預存程序會執行 Python 或 R 程式碼,以載入內建的鳶尾花資料集,然後將資料插入 iris_data 資料表中。

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

    如果您不熟悉 T-SQL,請注意 INSERT 陳述式只會新增新的資料;它不會檢查現有的資料,也不會刪除和重建資料表。 若要避免在資料表中取得多個相同資料的複本,您可以先執行此陳述式:TRUNCATE TABLE iris_data。 T-SQL TRUNCATE TABLE 陳述式會刪除現有的資料,但完整資料表的結構會保持不變。

查詢資料

執行查詢以確認資料已上傳,作為驗證步驟。

  1. 在 [物件總管] 的 [資料庫] 下,以滑鼠右鍵按一下 irissql 資料庫,然後開始新的查詢。

  2. 執行一些簡單的查詢:

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

後續步驟

在下列快速入門中,您將建立機器學習模型,並將其儲存至資料表,然後使用模型以產生預測的結果。