Udostępnij za pomocą


Szybki start: funkcje języka Python z uczeniem maszynowym SQL

Dotyczy: SQL Server 2017 (14.x) i nowsze wersje usługi Azure SQL Managed Instance

Z tego przewodnika Szybki start dowiesz się, jak używać funkcji matematycznych i narzędziowych języka Python z usługami SQL Server Machine Learning Services, Azure SQL Managed Instance Machine Learning Services lub klastrami danych big data programu SQL Server. Funkcje statystyczne są często skomplikowane do zaimplementowania w języku T-SQL, ale można to zrobić w języku Python z zaledwie kilkoma wierszami kodu.

Wymagania wstępne

Aby uruchomić szybki start, potrzebne są następujące prerekwizyty.

Utworzyć procedurę składowaną w celu wygenerowania liczb losowych

Dla uproszczenia użyjemy pakietu języka Python numpy , który jest instalowany i ładowany domyślnie. Pakiet zawiera setki funkcji dla typowych zadań statystycznych, wśród nich random.normal funkcję, która generuje określoną liczbę liczb losowych przy użyciu rozkładu normalnego, biorąc pod uwagę odchylenie standardowe i średnią.

Na przykład poniższy kod w języku Python zwraca 100 liczb o średniej 50, przy odchyleniu standardowym wynoszącym 3.

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

Aby wywołać ten wiersz języka Python z języka T-SQL, dodaj funkcję języka Python w parametrze skryptu języka Python .sp_execute_external_script Dane wyjściowe powinny być w formie ramki danych, więc użyj pandas aby je przekonwertować.

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));

Co zrobić, jeśli chcesz ułatwić generowanie innego zestawu liczb losowych? Definiujesz procedurę składowaną, która pobiera argumenty od użytkownika, a następnie przekazuje te argumenty do skryptu języka Python jako zmienne.

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));
  • Pierwszy wiersz definiuje każdy z parametrów wejściowych SQL, które są wymagane podczas wykonywania procedury składowanej.

  • Wiersz rozpoczynający się od @params definiuje wszystkie zmienne używane przez kod Pythona oraz odpowiadające im typy danych SQL.

  • Wiersze, które bezpośrednio następują po mapowaniu nazw parametrów SQL do odpowiednich nazw zmiennych Pythona.

Teraz, gdy funkcja języka Python została opakowana w procedurę składowaną, możesz łatwo wywołać funkcję i przekazać różne wartości w następujący sposób:

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

Rozwiązywanie problemów przy użyciu funkcji narzędzi języka Python

Pakiety języka Python udostępniają różne funkcje narzędzi do badania bieżącego środowiska języka Python. Te funkcje mogą być przydatne, jeśli znajdziesz rozbieżności w sposobie wykonywania kodu w języku Python w programie SQL Server i w środowiskach zewnętrznych.

Na przykład możesz użyć funkcji chronometrażu systemu w time pakiecie, aby zmierzyć czas używany przez procesy języka Python i analizować problemy z wydajnością.

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' ;';

Dalsze kroki

Aby utworzyć model uczenia maszynowego przy użyciu języka Python w połączeniu z uczeniem maszynowym SQL, wykonaj czynności opisane w tym przewodniku szybkiego startu: