Condividi tramite


Avvio rapido: Funzioni Python con Machine Learning in SQL

Si applica a: SQL Server 2017 (14.x) e versioni successive Istanza gestita di SQL di Azure

Questo argomento di avvio rapido descrive come usare funzioni matematiche e di utilità Python con Machine Learning Services per SQL Server, Machine Learning Services per Istanza gestita di SQL di Azure o cluster Big Data di SQL Server. Le funzioni statistiche sono spesso complesse da implementare in T-SQL, ma possono essere eseguite in Python con poche righe di codice.

Prerequisiti

Per completare questo argomento di avvio rapido è necessario soddisfare i prerequisiti seguenti.

Creare una stored procedure per generare numeri casuali

Per semplicità, si userà il pacchetto numpy Python, che viene installato e caricato per impostazione predefinita. Il pacchetto contiene centinaia di funzioni per le attività statistiche comuni, tra cui la funzione random.normal, che genera una quantità specificata di numeri casuali usando la distribuzione normale, in base a una deviazione e a una media standard.

Ad esempio, il codice Python seguente restituisce 100 numeri, in una media di 50, in base alla deviazione standard 3.

numpy.random.normal(size=100, loc=50, scale=3)

Per chiamare questa riga di codice Python da T-SQL, aggiungere la funzione Python nel parametro di script Python di sp_execute_external_script. L'output prevede un frame di dati, che può essere convertito con pandas.

EXECUTE sp_execute_external_script @language = N'Python'
    , @script = N'
import numpy
import pandas
OutputDataSet = pandas.DataFrame(numpy.random.normal(size=100, loc=50, scale=3));
'
    , @input_data_1 = N'   ;'
WITH RESULT SETS(([Density] FLOAT NOT NULL));

Si vuole semplificare la generazione di un set diverso di numeri casuali? Si definisce una stored procedure che ottiene gli argomenti dall'utente e quindi si passano tali argomenti nello script Python come variabili.

CREATE PROCEDURE MyPyNorm (
      @param1 INT
    , @param2 INT
    , @param3 INT
    )
AS
EXECUTE sp_execute_external_script @language = N'Python'
    , @script = N'
import numpy
import pandas
OutputDataSet = pandas.DataFrame(numpy.random.normal(size=mynumbers, loc=mymean, scale=mysd));
'
    , @input_data_1 = N'   ;'
    , @params = N' @mynumbers int, @mymean int, @mysd int'
    , @mynumbers = @param1
    , @mymean = @param2
    , @mysd = @param3
WITH RESULT SETS(([Density] FLOAT NOT NULL));
  • La prima riga definisce ognuno dei parametri di input SQL necessari quando viene eseguita la stored procedure.

  • La riga che inizia con @params definisce tutte le variabili usate dal codice Python e i tipi di dati SQL corrispondenti.

  • Le righe immediatamente successive eseguono il mapping dei nomi dei parametri SQL ai nomi delle variabili Python corrispondenti.

Dopo aver eseguito il wrapping della funzione Python in una stored procedure, è possibile chiamare facilmente la funzione e passare valori diversi, in questo modo:

EXECUTE MyPyNorm @param1 = 100,@param2 = 50, @param3 = 3

Usare funzioni di utilità Python per la risoluzione dei problemi

I pacchetti Python forniscono un'ampia gamma di funzioni di utilità per l'analisi dell'ambiente Python corrente. Queste funzioni possono essere utili se si riscontrano discrepanze nell'esecuzione del codice Python in SQL Server e in ambienti esterni.

È possibile, ad esempio, usare le funzioni di calcolo del tempo di sistema disponibili nel pacchetto di time per misurare la quantità di tempo usata dai processi Python e analizzare i problemi di prestazioni.

EXECUTE sp_execute_external_script
      @language = N'Python'
    , @script = N'
import time
start_time = time.time()

# Run Python processes

elapsed_time = time.time() - start_time
'
    , @input_data_1 = N' ;';

Passaggi successivi

Per creare un modello di Machine Learning usando Python con Machine Learning in SQL, seguire questo argomento di avvio rapido: