Hướng dẫn sql server python stored procedure - thủ tục lưu trữ python server sql

Bỏ qua nội dung chính

Trình duyệt này không còn được hỗ trợ.

Nâng cấp lên Microsoft Edge để tận dụng các tính năng mới nhất, cập nhật bảo mật và hỗ trợ kỹ thuật.

Hướng dẫn Python: Chạy dự đoán sử dụng Python được nhúng trong một quy trình được lưu trữ

  • Bài báo
  • 01/11/2022
  • 9 phút để đọc

Trong bài viết này

Áp dụng cho: SQL Server 2017 [14.x] và sau đó là phiên bản Azure SQL được quản lý

SQL Server 2017 [14.x] and later Azure SQL Managed Instance

Trong phần năm của loạt hướng dẫn năm phần này, bạn sẽ học cách vận hành các mô hình mà bạn đã đào tạo và lưu trong phần trước.

Trong kịch bản này, vận hành có nghĩa là triển khai mô hình để sản xuất để ghi điểm. Việc tích hợp với SQL Server giúp điều này khá dễ dàng, bởi vì bạn có thể nhúng mã Python theo quy trình được lưu trữ. Để có được dự đoán từ mô hình dựa trên các đầu vào mới, chỉ cần gọi quy trình được lưu trữ từ một ứng dụng và truyền dữ liệu mới.

Phần này của hướng dẫn cho thấy hai phương pháp để tạo dự đoán dựa trên mô hình Python: ghi điểm hàng loạt và ghi điểm theo từng hàng.

  • Ghi điểm hàng loạt: Để cung cấp nhiều hàng dữ liệu đầu vào, hãy truyền truy vấn chọn làm đối số cho quy trình được lưu trữ. Kết quả là một bảng quan sát tương ứng với các trường hợp đầu vào. To provide multiple rows of input data, pass a SELECT query as an argument to the stored procedure. The result is a table of observations corresponding to the input cases.
  • Điểm cá nhân: Truyền một tập hợp các giá trị tham số riêng lẻ làm đầu vào. Quy trình được lưu trữ trả về một hàng hoặc giá trị duy nhất. Pass a set of individual parameter values as input. The stored procedure returns a single row or value.

Tất cả các mã Python cần thiết để ghi điểm được cung cấp như một phần của các thủ tục được lưu trữ.

Trong bài viết này, bạn sẽ:

  • Tạo và sử dụng các thủ tục được lưu trữ để ghi điểm hàng loạt
  • Tạo và sử dụng các thủ tục được lưu trữ để ghi một hàng

Trong phần một, bạn đã cài đặt các điều kiện tiên quyết và khôi phục cơ sở dữ liệu mẫu.

Trong phần hai, bạn đã khám phá dữ liệu mẫu và tạo ra một số lô.

Trong phần ba, bạn đã học cách tạo các tính năng từ dữ liệu thô bằng cách sử dụng chức năng Transact-SQL. Sau đó, bạn đã gọi hàm đó từ một quy trình được lưu trữ để tạo một bảng chứa các giá trị tính năng.

Trong Phần bốn, bạn đã tải các mô -đun và được gọi là các chức năng cần thiết để tạo và đào tạo mô hình bằng quy trình lưu trữ SQL Server.

Ghi điểm hàng loạt

Hai quy trình được lưu trữ đầu tiên được tạo bằng cách sử dụng các tập lệnh sau minh họa cú pháp cơ bản để gói cuộc gọi dự đoán Python trong một quy trình được lưu trữ. Cả hai thủ tục được lưu trữ đều yêu cầu một bảng dữ liệu làm đầu vào.

  • Tên của mô hình để sử dụng được cung cấp làm tham số đầu vào cho quy trình được lưu trữ. Quy trình được lưu trữ tải mô hình tuần tự hóa từ Bảng cơ sở dữ liệu ________ 8. Có thể sử dụng câu lệnh CHỌN trong quy trình được lưu trữ.

  • Mô hình nối tiếp được lưu trữ trong biến Python mod để xử lý thêm bằng cách sử dụng Python.

  • Các trường hợp mới cần được tính điểm được lấy từ truy vấn Transact-SQL được chỉ định trong ____10. Khi dữ liệu truy vấn được đọc, các hàng được lưu trong khung dữ liệu mặc định,

    DROP PROCEDURE IF EXISTS PredictTipRxPy;
    GO
    
    CREATE PROCEDURE [dbo].[PredictTipRxPy] [@model varchar[50], @inquery nvarchar[max]]
    AS
    BEGIN
    DECLARE @lmodel2 varbinary[max] = [select model from nyc_taxi_models where name = @model];
    EXEC sp_execute_external_script 
      @language = N'Python',
      @script = N'
    import pickle;
    import numpy;
    from sklearn import metrics
    from revoscalepy.functions.RxPredict import rx_predict;
    
    mod = pickle.loads[lmodel2]
    X = InputDataSet[["passenger_count", "trip_distance", "trip_time_in_secs", "direct_distance"]]
    y = numpy.ravel[InputDataSet[["tipped"]]]
    
    probArray = rx_predict[mod, X]
    probList = probArray["tipped_Pred"].values 
    
    probArray = numpy.asarray[probList]
    fpr, tpr, thresholds = metrics.roc_curve[y, probArray]
    aucResult = metrics.auc[fpr, tpr]
    print ["AUC on testing data is: " + str[aucResult]]
    
    OutputDataSet = pandas.DataFrame[data = probList, columns = ["predictions"]]
    ',
      @input_data_1 = @inquery,
      @input_data_1_name = N'InputDataSet',
      @params = N'@lmodel2 varbinary[max]',
      @lmodel2 = @lmodel2
    WITH RESULT SETS [[Score float]];
    END
    GO
    
    1.

  • Cả hai quy trình được lưu trữ đều sử dụng các hàm từ

    DROP PROCEDURE IF EXISTS PredictTipRxPy;
    GO
    
    CREATE PROCEDURE [dbo].[PredictTipRxPy] [@model varchar[50], @inquery nvarchar[max]]
    AS
    BEGIN
    DECLARE @lmodel2 varbinary[max] = [select model from nyc_taxi_models where name = @model];
    EXEC sp_execute_external_script 
      @language = N'Python',
      @script = N'
    import pickle;
    import numpy;
    from sklearn import metrics
    from revoscalepy.functions.RxPredict import rx_predict;
    
    mod = pickle.loads[lmodel2]
    X = InputDataSet[["passenger_count", "trip_distance", "trip_time_in_secs", "direct_distance"]]
    y = numpy.ravel[InputDataSet[["tipped"]]]
    
    probArray = rx_predict[mod, X]
    probList = probArray["tipped_Pred"].values 
    
    probArray = numpy.asarray[probList]
    fpr, tpr, thresholds = metrics.roc_curve[y, probArray]
    aucResult = metrics.auc[fpr, tpr]
    print ["AUC on testing data is: " + str[aucResult]]
    
    OutputDataSet = pandas.DataFrame[data = probList, columns = ["predictions"]]
    ',
      @input_data_1 = @inquery,
      @input_data_1_name = N'InputDataSet',
      @params = N'@lmodel2 varbinary[max]',
      @lmodel2 = @lmodel2
    WITH RESULT SETS [[Score float]];
    END
    GO
    
    2 để tính toán một số liệu chính xác, AUC [khu vực dưới đường cong]. Các số liệu độ chính xác như AUC chỉ có thể được tạo nếu bạn cũng cung cấp nhãn đích [cột có đầu]. Dự đoán không cần nhãn đích [biến
    DROP PROCEDURE IF EXISTS PredictTipRxPy;
    GO
    
    CREATE PROCEDURE [dbo].[PredictTipRxPy] [@model varchar[50], @inquery nvarchar[max]]
    AS
    BEGIN
    DECLARE @lmodel2 varbinary[max] = [select model from nyc_taxi_models where name = @model];
    EXEC sp_execute_external_script 
      @language = N'Python',
      @script = N'
    import pickle;
    import numpy;
    from sklearn import metrics
    from revoscalepy.functions.RxPredict import rx_predict;
    
    mod = pickle.loads[lmodel2]
    X = InputDataSet[["passenger_count", "trip_distance", "trip_time_in_secs", "direct_distance"]]
    y = numpy.ravel[InputDataSet[["tipped"]]]
    
    probArray = rx_predict[mod, X]
    probList = probArray["tipped_Pred"].values 
    
    probArray = numpy.asarray[probList]
    fpr, tpr, thresholds = metrics.roc_curve[y, probArray]
    aucResult = metrics.auc[fpr, tpr]
    print ["AUC on testing data is: " + str[aucResult]]
    
    OutputDataSet = pandas.DataFrame[data = probList, columns = ["predictions"]]
    ',
      @input_data_1 = @inquery,
      @input_data_1_name = N'InputDataSet',
      @params = N'@lmodel2 varbinary[max]',
      @lmodel2 = @lmodel2
    WITH RESULT SETS [[Score float]];
    END
    GO
    
    3], nhưng tính toán số liệu chính xác thì có.

    Do đó, nếu bạn không có nhãn đích để dữ liệu được ghi, bạn có thể sửa đổi quy trình được lưu trữ để xóa các tính toán AUC và chỉ trả về xác suất đầu từ các tính năng [biến

    DROP PROCEDURE IF EXISTS PredictTipRxPy;
    GO
    
    CREATE PROCEDURE [dbo].[PredictTipRxPy] [@model varchar[50], @inquery nvarchar[max]]
    AS
    BEGIN
    DECLARE @lmodel2 varbinary[max] = [select model from nyc_taxi_models where name = @model];
    EXEC sp_execute_external_script 
      @language = N'Python',
      @script = N'
    import pickle;
    import numpy;
    from sklearn import metrics
    from revoscalepy.functions.RxPredict import rx_predict;
    
    mod = pickle.loads[lmodel2]
    X = InputDataSet[["passenger_count", "trip_distance", "trip_time_in_secs", "direct_distance"]]
    y = numpy.ravel[InputDataSet[["tipped"]]]
    
    probArray = rx_predict[mod, X]
    probList = probArray["tipped_Pred"].values 
    
    probArray = numpy.asarray[probList]
    fpr, tpr, thresholds = metrics.roc_curve[y, probArray]
    aucResult = metrics.auc[fpr, tpr]
    print ["AUC on testing data is: " + str[aucResult]]
    
    OutputDataSet = pandas.DataFrame[data = probList, columns = ["predictions"]]
    ',
      @input_data_1 = @inquery,
      @input_data_1_name = N'InputDataSet',
      @params = N'@lmodel2 varbinary[max]',
      @lmodel2 = @lmodel2
    WITH RESULT SETS [[Score float]];
    END
    GO
    
    4 trong quy trình được lưu trữ].

Dự đoánCikitpy

Chạy các câu lệnh T-SQL sau để tạo quy trình được lưu trữ

DROP PROCEDURE IF EXISTS PredictTipRxPy;
GO

CREATE PROCEDURE [dbo].[PredictTipRxPy] [@model varchar[50], @inquery nvarchar[max]]
AS
BEGIN
DECLARE @lmodel2 varbinary[max] = [select model from nyc_taxi_models where name = @model];
EXEC sp_execute_external_script 
  @language = N'Python',
  @script = N'
import pickle;
import numpy;
from sklearn import metrics
from revoscalepy.functions.RxPredict import rx_predict;

mod = pickle.loads[lmodel2]
X = InputDataSet[["passenger_count", "trip_distance", "trip_time_in_secs", "direct_distance"]]
y = numpy.ravel[InputDataSet[["tipped"]]]

probArray = rx_predict[mod, X]
probList = probArray["tipped_Pred"].values 

probArray = numpy.asarray[probList]
fpr, tpr, thresholds = metrics.roc_curve[y, probArray]
aucResult = metrics.auc[fpr, tpr]
print ["AUC on testing data is: " + str[aucResult]]

OutputDataSet = pandas.DataFrame[data = probList, columns = ["predictions"]]
',
  @input_data_1 = @inquery,
  @input_data_1_name = N'InputDataSet',
  @params = N'@lmodel2 varbinary[max]',
  @lmodel2 = @lmodel2
WITH RESULT SETS [[Score float]];
END
GO
5. Quy trình được lưu trữ này yêu cầu một mô hình dựa trên gói scikit-learn, bởi vì nó sử dụng các chức năng cụ thể cho gói đó.

Khung dữ liệu chứa các đầu vào được truyền đến hàm

DROP PROCEDURE IF EXISTS PredictTipRxPy;
GO

CREATE PROCEDURE [dbo].[PredictTipRxPy] [@model varchar[50], @inquery nvarchar[max]]
AS
BEGIN
DECLARE @lmodel2 varbinary[max] = [select model from nyc_taxi_models where name = @model];
EXEC sp_execute_external_script 
  @language = N'Python',
  @script = N'
import pickle;
import numpy;
from sklearn import metrics
from revoscalepy.functions.RxPredict import rx_predict;

mod = pickle.loads[lmodel2]
X = InputDataSet[["passenger_count", "trip_distance", "trip_time_in_secs", "direct_distance"]]
y = numpy.ravel[InputDataSet[["tipped"]]]

probArray = rx_predict[mod, X]
probList = probArray["tipped_Pred"].values 

probArray = numpy.asarray[probList]
fpr, tpr, thresholds = metrics.roc_curve[y, probArray]
aucResult = metrics.auc[fpr, tpr]
print ["AUC on testing data is: " + str[aucResult]]

OutputDataSet = pandas.DataFrame[data = probList, columns = ["predictions"]]
',
  @input_data_1 = @inquery,
  @input_data_1_name = N'InputDataSet',
  @params = N'@lmodel2 varbinary[max]',
  @lmodel2 = @lmodel2
WITH RESULT SETS [[Score float]];
END
GO
6 của mô hình hồi quy logistic, mod. Hàm
DROP PROCEDURE IF EXISTS PredictTipRxPy;
GO

CREATE PROCEDURE [dbo].[PredictTipRxPy] [@model varchar[50], @inquery nvarchar[max]]
AS
BEGIN
DECLARE @lmodel2 varbinary[max] = [select model from nyc_taxi_models where name = @model];
EXEC sp_execute_external_script 
  @language = N'Python',
  @script = N'
import pickle;
import numpy;
from sklearn import metrics
from revoscalepy.functions.RxPredict import rx_predict;

mod = pickle.loads[lmodel2]
X = InputDataSet[["passenger_count", "trip_distance", "trip_time_in_secs", "direct_distance"]]
y = numpy.ravel[InputDataSet[["tipped"]]]

probArray = rx_predict[mod, X]
probList = probArray["tipped_Pred"].values 

probArray = numpy.asarray[probList]
fpr, tpr, thresholds = metrics.roc_curve[y, probArray]
aucResult = metrics.auc[fpr, tpr]
print ["AUC on testing data is: " + str[aucResult]]

OutputDataSet = pandas.DataFrame[data = probList, columns = ["predictions"]]
',
  @input_data_1 = @inquery,
  @input_data_1_name = N'InputDataSet',
  @params = N'@lmodel2 varbinary[max]',
  @lmodel2 = @lmodel2
WITH RESULT SETS [[Score float]];
END
GO
6 [
DROP PROCEDURE IF EXISTS PredictTipRxPy;
GO

CREATE PROCEDURE [dbo].[PredictTipRxPy] [@model varchar[50], @inquery nvarchar[max]]
AS
BEGIN
DECLARE @lmodel2 varbinary[max] = [select model from nyc_taxi_models where name = @model];
EXEC sp_execute_external_script 
  @language = N'Python',
  @script = N'
import pickle;
import numpy;
from sklearn import metrics
from revoscalepy.functions.RxPredict import rx_predict;

mod = pickle.loads[lmodel2]
X = InputDataSet[["passenger_count", "trip_distance", "trip_time_in_secs", "direct_distance"]]
y = numpy.ravel[InputDataSet[["tipped"]]]

probArray = rx_predict[mod, X]
probList = probArray["tipped_Pred"].values 

probArray = numpy.asarray[probList]
fpr, tpr, thresholds = metrics.roc_curve[y, probArray]
aucResult = metrics.auc[fpr, tpr]
print ["AUC on testing data is: " + str[aucResult]]

OutputDataSet = pandas.DataFrame[data = probList, columns = ["predictions"]]
',
  @input_data_1 = @inquery,
  @input_data_1_name = N'InputDataSet',
  @params = N'@lmodel2 varbinary[max]',
  @lmodel2 = @lmodel2
WITH RESULT SETS [[Score float]];
END
GO
9] trả về một phao đại diện cho xác suất mà một mẹo [của bất kỳ số tiền nào] sẽ được đưa ra.float that represents the probability that a tip [of any amount] will be given.

DROP PROCEDURE IF EXISTS PredictTipSciKitPy;
GO

CREATE PROCEDURE [dbo].[PredictTipSciKitPy] [@model varchar[50], @inquery nvarchar[max]]
AS
BEGIN
DECLARE @lmodel2 varbinary[max] = [select model from nyc_taxi_models where name = @model];
EXEC sp_execute_external_script
  @language = N'Python',
  @script = N'
import pickle;
import numpy;
from sklearn import metrics

mod = pickle.loads[lmodel2]
X = InputDataSet[["passenger_count", "trip_distance", "trip_time_in_secs", "direct_distance"]]
y = numpy.ravel[InputDataSet[["tipped"]]]

probArray = mod.predict_proba[X]
probList = []
for i in range[len[probArray]]:
  probList.append[[probArray[i]][1]]

probArray = numpy.asarray[probList]
fpr, tpr, thresholds = metrics.roc_curve[y, probArray]
aucResult = metrics.auc[fpr, tpr]
print ["AUC on testing data is: " + str[aucResult]]

OutputDataSet = pandas.DataFrame[data = probList, columns = ["predictions"]]
',	
  @input_data_1 = @inquery,
  @input_data_1_name = N'InputDataSet',
  @params = N'@lmodel2 varbinary[max]',
  @lmodel2 = @lmodel2
WITH RESULT SETS [[Score float]];
END
GO

Dự đoánTipRXPy

Chạy các câu lệnh T-SQL sau để tạo quy trình được lưu trữ

DECLARE @query_string nvarchar[max] -- Specify input query
  SET @query_string='
  select tipped, fare_amount, passenger_count, trip_time_in_secs, trip_distance,
  dbo.fnCalculateDistance[pickup_latitude, pickup_longitude,  dropoff_latitude, dropoff_longitude] as direct_distance
  from nyctaxi_sample_testing'
EXEC [dbo].[PredictTipSciKitPy] 'SciKit_model', @query_string;
0. Quy trình được lưu trữ này sử dụng các đầu vào tương tự và tạo ra cùng một loại điểm với quy trình được lưu trữ trước đó, nhưng nó sử dụng các chức năng từ gói Revoscalepy được cung cấp với máy chủ SQL.revoscalepy package provided with SQL Server machine learning.

DROP PROCEDURE IF EXISTS PredictTipRxPy;
GO

CREATE PROCEDURE [dbo].[PredictTipRxPy] [@model varchar[50], @inquery nvarchar[max]]
AS
BEGIN
DECLARE @lmodel2 varbinary[max] = [select model from nyc_taxi_models where name = @model];
EXEC sp_execute_external_script 
  @language = N'Python',
  @script = N'
import pickle;
import numpy;
from sklearn import metrics
from revoscalepy.functions.RxPredict import rx_predict;

mod = pickle.loads[lmodel2]
X = InputDataSet[["passenger_count", "trip_distance", "trip_time_in_secs", "direct_distance"]]
y = numpy.ravel[InputDataSet[["tipped"]]]

probArray = rx_predict[mod, X]
probList = probArray["tipped_Pred"].values 

probArray = numpy.asarray[probList]
fpr, tpr, thresholds = metrics.roc_curve[y, probArray]
aucResult = metrics.auc[fpr, tpr]
print ["AUC on testing data is: " + str[aucResult]]

OutputDataSet = pandas.DataFrame[data = probList, columns = ["predictions"]]
',
  @input_data_1 = @inquery,
  @input_data_1_name = N'InputDataSet',
  @params = N'@lmodel2 varbinary[max]',
  @lmodel2 = @lmodel2
WITH RESULT SETS [[Score float]];
END
GO

Chạy ghi điểm hàng loạt bằng cách sử dụng truy vấn chọn

Các quy trình được lưu trữ dự đoánTipScikitpy và PredictTipRxPy yêu cầu hai tham số đầu vào:PredictTipSciKitPy and PredictTipRxPy require two input parameters:

  • Truy vấn lấy dữ liệu để ghi điểm
  • Tên của một mô hình được đào tạo

Bằng cách chuyển các đối số đó cho quy trình được lưu trữ, bạn có thể chọn một mô hình cụ thể hoặc thay đổi dữ liệu được sử dụng để ghi điểm.

  1. Để sử dụng mô hình scikit-learn để ghi điểm, hãy gọi thủ tục dự đoán dự đoáncikitpy, chuyển tên mô hình và chuỗi truy vấn làm đầu vào.scikit-learn model for scoring, call the stored procedure PredictTipSciKitPy, passing the model name and query string as inputs.

    DECLARE @query_string nvarchar[max] -- Specify input query
      SET @query_string='
      select tipped, fare_amount, passenger_count, trip_time_in_secs, trip_distance,
      dbo.fnCalculateDistance[pickup_latitude, pickup_longitude,  dropoff_latitude, dropoff_longitude] as direct_distance
      from nyctaxi_sample_testing'
    EXEC [dbo].[PredictTipSciKitPy] 'SciKit_model', @query_string;
    

    Quy trình được lưu trữ trả về xác suất dự đoán cho mỗi chuyến đi được thông qua như một phần của truy vấn đầu vào.

    Nếu bạn đang sử dụng SSMS [SQL Server Management Studio] để chạy truy vấn, xác suất sẽ xuất hiện dưới dạng bảng trong khung kết quả. Các khung thông báo xuất ra số liệu chính xác [AUC hoặc khu vực theo đường cong] với giá trị khoảng 0,56.Results pane. The Messages pane outputs the accuracy metric [AUC or area under curve] with a value of around 0.56.

  2. Để sử dụng mô hình RevoscalePy để ghi điểm, hãy gọi thủ tục dự đoán dự đoán, truyền tên mô hình và chuỗi truy vấn làm đầu vào.revoscalepy model for scoring, call the stored procedure PredictTipRxPy, passing the model name and query string as inputs.

    DECLARE @query_string nvarchar[max] -- Specify input query
      SET @query_string='
      select tipped, fare_amount, passenger_count, trip_time_in_secs, trip_distance,
      dbo.fnCalculateDistance[pickup_latitude, pickup_longitude,  dropoff_latitude, dropoff_longitude] as direct_distance
      from nyctaxi_sample_testing'
    EXEC [dbo].[PredictTipRxPy] 'revoscalepy_model', @query_string;
    

Ghi điểm đơn hàng

Đôi khi, thay vì ghi điểm hàng loạt, bạn có thể muốn vượt qua trong một trường hợp, nhận được các giá trị từ một ứng dụng và trả về một kết quả duy nhất dựa trên các giá trị đó. Ví dụ: bạn có thể thiết lập bảng tính Excel, ứng dụng web hoặc báo cáo để gọi quy trình được lưu trữ và chuyển vào đầu vào nó được gõ hoặc chọn bởi người dùng.

Trong phần này, bạn sẽ học cách tạo dự đoán đơn bằng cách gọi hai quy trình được lưu trữ:

  • PredictTipSingLemodeScikitpy được thiết kế để ghi điểm một hàng bằng cách sử dụng mô hình Scikit-learn. is designed for single-row scoring using the scikit-learn model.
  • PredictTipSingLemoderXPy được thiết kế để ghi điểm một hàng bằng cách sử dụng mô hình RevoscalePy. is designed for single-row scoring using the revoscalepy model.
  • Nếu bạn chưa đào tạo một mô hình, hãy quay lại phần năm!

Cả hai mô hình lấy làm đầu vào một loạt các giá trị đơn, chẳng hạn như số lượng hành khách, khoảng cách chuyến đi, v.v. Hàm có giá trị bảng,

DECLARE @query_string nvarchar[max] -- Specify input query
  SET @query_string='
  select tipped, fare_amount, passenger_count, trip_time_in_secs, trip_distance,
  dbo.fnCalculateDistance[pickup_latitude, pickup_longitude,  dropoff_latitude, dropoff_longitude] as direct_distance
  from nyctaxi_sample_testing'
EXEC [dbo].[PredictTipSciKitPy] 'SciKit_model', @query_string;
1, được sử dụng để chuyển đổi các giá trị vĩ độ và kinh độ từ đầu vào thành một tính năng mới, khoảng cách trực tiếp. Phần bốn chứa một mô tả về hàm có giá trị bảng này.

Cả hai thủ tục được lưu trữ đều tạo ra một điểm dựa trên mô hình Python.

Ghi chú

Điều quan trọng là bạn cung cấp tất cả các tính năng đầu vào theo yêu cầu của mô hình Python khi bạn gọi quy trình được lưu trữ từ một ứng dụng bên ngoài. Để tránh lỗi, bạn có thể cần chuyển hoặc chuyển đổi dữ liệu đầu vào thành kiểu dữ liệu Python, ngoài việc xác thực kiểu dữ liệu và độ dài dữ liệu.

Dự đoánTipsingLemodescikitpy

Quy trình được lưu trữ sau đây

DECLARE @query_string nvarchar[max] -- Specify input query
  SET @query_string='
  select tipped, fare_amount, passenger_count, trip_time_in_secs, trip_distance,
  dbo.fnCalculateDistance[pickup_latitude, pickup_longitude,  dropoff_latitude, dropoff_longitude] as direct_distance
  from nyctaxi_sample_testing'
EXEC [dbo].[PredictTipSciKitPy] 'SciKit_model', @query_string;
2 thực hiện ghi điểm bằng mô hình Scikit-learn.scikit-learn model.

DROP PROCEDURE IF EXISTS PredictTipSingleModeSciKitPy;
GO

CREATE PROCEDURE [dbo].[PredictTipSingleModeSciKitPy] [@model varchar[50], @passenger_count int = 0,
  @trip_distance float = 0,
  @trip_time_in_secs int = 0,
  @pickup_latitude float = 0,
  @pickup_longitude float = 0,
  @dropoff_latitude float = 0,
  @dropoff_longitude float = 0]
AS
BEGIN
  DECLARE @inquery nvarchar[max] = N'
  SELECT * FROM [dbo].[fnEngineerFeatures][ 
    @passenger_count,
    @trip_distance,
    @trip_time_in_secs,
    @pickup_latitude,
    @pickup_longitude,
    @dropoff_latitude,
    @dropoff_longitude]
    '
DECLARE @lmodel2 varbinary[max] = [select model from nyc_taxi_models where name = @model];
EXEC sp_execute_external_script 
  @language = N'Python',
  @script = N'
import pickle;
import numpy;

# Load model and unserialize
mod = pickle.loads[model]

# Get features for scoring from input data
X = InputDataSet[["passenger_count", "trip_distance", "trip_time_in_secs", "direct_distance"]]

# Score data to get tip prediction probability as a list [of float]
probList = []
probList.append[[mod.predict_proba[X][0]][1]]

# Create output data frame
OutputDataSet = pandas.DataFrame[data = probList, columns = ["predictions"]]
',
  @input_data_1 = @inquery,
  @params = N'@model varbinary[max],@passenger_count int,@trip_distance float,
    @trip_time_in_secs int ,
    @pickup_latitude float ,
    @pickup_longitude float ,
    @dropoff_latitude float ,
    @dropoff_longitude float',
    @model = @lmodel2,
    @passenger_count =@passenger_count ,
    @trip_distance=@trip_distance,
    @trip_time_in_secs=@trip_time_in_secs,
    @pickup_latitude=@pickup_latitude,
    @pickup_longitude=@pickup_longitude,
    @dropoff_latitude=@dropoff_latitude,
    @dropoff_longitude=@dropoff_longitude
WITH RESULT SETS [[Score float]];
END
GO

Dự đoánTipSingLemoderXPy

Quy trình được lưu trữ sau đây

DECLARE @query_string nvarchar[max] -- Specify input query
  SET @query_string='
  select tipped, fare_amount, passenger_count, trip_time_in_secs, trip_distance,
  dbo.fnCalculateDistance[pickup_latitude, pickup_longitude,  dropoff_latitude, dropoff_longitude] as direct_distance
  from nyctaxi_sample_testing'
EXEC [dbo].[PredictTipSciKitPy] 'SciKit_model', @query_string;
3 thực hiện ghi điểm bằng mô hình RevoscalePy.revoscalepy model.

DROP PROCEDURE IF EXISTS PredictTipSingleModeRxPy;
GO

CREATE PROCEDURE [dbo].[PredictTipSingleModeRxPy] [@model varchar[50], @passenger_count int = 0,
  @trip_distance float = 0,
  @trip_time_in_secs int = 0,
  @pickup_latitude float = 0,
  @pickup_longitude float = 0,
  @dropoff_latitude float = 0,
  @dropoff_longitude float = 0]
AS
BEGIN
DECLARE @inquery nvarchar[max] = N'
  SELECT * FROM [dbo].[fnEngineerFeatures][ 
    @passenger_count,
    @trip_distance,
    @trip_time_in_secs,
    @pickup_latitude,
    @pickup_longitude,
    @dropoff_latitude,
    @dropoff_longitude]
  '
DECLARE @lmodel2 varbinary[max] = [select model from nyc_taxi_models where name = @model];
EXEC sp_execute_external_script 
  @language = N'Python',
  @script = N'
import pickle;
import numpy;
from revoscalepy.functions.RxPredict import rx_predict;

# Load model and unserialize
mod = pickle.loads[model]

# Get features for scoring from input data
X = InputDataSet[["passenger_count", "trip_distance", "trip_time_in_secs", "direct_distance"]]

# Score data to get tip prediction probability as a list [of float]

probArray = rx_predict[mod, X]

probList = []
probList = probArray["tipped_Pred"].values

# Create output data frame
OutputDataSet = pandas.DataFrame[data = probList, columns = ["predictions"]]
',
  @input_data_1 = @inquery,
  @params = N'@model varbinary[max],@passenger_count int,@trip_distance float,
    @trip_time_in_secs int ,
    @pickup_latitude float ,
    @pickup_longitude float ,
    @dropoff_latitude float ,
    @dropoff_longitude float',
    @model = @lmodel2,
    @passenger_count =@passenger_count ,
    @trip_distance=@trip_distance,
    @trip_time_in_secs=@trip_time_in_secs,
    @pickup_latitude=@pickup_latitude,
    @pickup_longitude=@pickup_longitude,
    @dropoff_latitude=@dropoff_latitude,
    @dropoff_longitude=@dropoff_longitude
WITH RESULT SETS [[Score float]];
END
GO

Tạo điểm số từ các mô hình

Sau khi các quy trình được lưu trữ đã được tạo ra, thật dễ dàng để tạo điểm số dựa trên một trong hai mô hình. Mở cửa sổ Truy vấn mới và cung cấp các tham số cho từng cột tính năng.Query window and provide parameters for each of the feature columns.

Bảy giá trị bắt buộc cho các cột tính năng này, theo thứ tự:

  • passenger_count
  • trip_distance
  • TRIP_TIME_IN_SECS
  • pickup_latitude
  • pickup_longitude
  • dropoff_latitude
  • dropoff_longitude

Ví dụ:

  • Để tạo dự đoán bằng cách sử dụng mô hình RevoscalePy, hãy chạy câu lệnh này:revoscalepy model, run this statement:

    EXEC [dbo].[PredictTipSingleModeRxPy] 'revoscalepy_model', 1, 2.5, 631, 40.763958,-73.973373, 40.782139,-73.977303
    
  • Để tạo điểm số bằng cách sử dụng mô hình Scikit-LEARN, hãy chạy câu lệnh này:scikit-learn model, run this statement:

    EXEC [dbo].[PredictTipSingleModeSciKitPy] 'SciKit_model', 1, 2.5, 631, 40.763958,-73.973373, 40.782139,-73.977303
    

Đầu ra từ cả hai thủ tục là xác suất của một mẹo được trả tiền cho chuyến đi taxi với các tham số hoặc tính năng được chỉ định.

Sự kết luận

Trong loạt hướng dẫn này, bạn đã học được cách làm việc với mã Python được nhúng trong các quy trình được lưu trữ. Việc tích hợp với Transact-SQL giúp triển khai các mô hình Python dễ dàng hơn nhiều để dự đoán và kết hợp đào tạo lại mô hình như là một phần của quy trình công việc dữ liệu doanh nghiệp.

Bước tiếp theo

Trong bài viết này, bạn:

  • Đã tạo và sử dụng các thủ tục lưu trữ để ghi điểm hàng loạt
  • Đã tạo và sử dụng các thủ tục được lưu trữ để ghi một hàng

Để biết thêm thông tin về Python, hãy xem Tiện ích mở rộng Python trong SQL Server.

Nhận xét

Gửi và xem phản hồi cho

Làm thế nào sử dụng thủ tục được lưu trữ trong SQL trong Python?

Các bước để thực hiện thủ tục lưu trữ MySQL trong Python..
Kết nối với MySQL từ Python.....
Nhận đối tượng con trỏ từ kết nối.....
Thực hiện thủ tục được lưu trữ.....
Kết quả tìm nạp.....
Đóng đối tượng đối tượng con trỏ và đối tượng cơ sở dữ liệu ..

Chúng ta có thể viết các thủ tục được lưu trữ trong Python không?

Chọn để tạo một quy trình được lưu trữ với mã nội tuyến hoặc với mã được tải lên từ một giai đoạn.Như trường hợp của Python UDFS, bạn có thể tạo một quy trình được lưu trữ nội tuyến hoặc quy trình được lưu trữ với mã được tải lên từ một giai đoạn.you can either create an in-line stored procedure or a stored procedure with code uploaded from a stage.

Làm thế nào để Python lưu trữ dữ liệu trong SQL Server?

Các bước để chèn các giá trị vào bảng SQL Server bằng Python..
Bước 1: Cài đặt gói PYODBC.....
Bước 2: Kết nối Python với SQL Server.....
Bước 3: Chèn các giá trị vào bảng SQL Server bằng Python.....
Bước 4: Xác minh kết quả ..

Tôi có thể sử dụng Python với SQL Server không?

Microsoft cung cấp một số gói Python được cài đặt sẵn các dịch vụ học máy trong SQL Server 2016 [13.x], SQL Server 2017 [14.x] và SQL Server 2019 [15.x]. x], SQL Server 2017 [14. x], and SQL Server 2019 [15. x].

Bài Viết Liên Quan

Chủ Đề