Partilhar via


Guia de início rápido: funções Python com aprendizado de máquina SQL

Aplica-se a: SQL Server 2017 (14.x) e versões posteriores Instância Gerenciada SQL do Azure

Neste início rápido, você aprenderá a usar funções matemáticas e utilitárias do Python com os Serviços de Aprendizado de Máquina do SQL Server, os Serviços de Aprendizado de Máquina de Instância Gerenciada do SQL do Azure ou os Clusters de Big Data do SQL Server. As funções estatísticas são muitas vezes complicadas de implementar em T-SQL, mas podem ser feitas em Python com apenas algumas linhas de código.

Pré-requisitos

Você precisa dos seguintes pré-requisitos para executar este início rápido.

Criar um procedimento armazenado para gerar números aleatórios

Para simplificar, vamos usar o pacote Python numpy , que é instalado e carregado por padrão. O pacote contém centenas de funções para tarefas estatísticas comuns, entre elas a random.normal função, que gera um número especificado de números aleatórios usando a distribuição normal, dado um desvio padrão e média.

Por exemplo, o código Python a seguir retorna 100 números em uma média de 50, dado um desvio padrão de 3.

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

Para chamar esta linha de Python a partir de T-SQL, adicione a função Python no parâmetro de script Python em sp_execute_external_script. A saída espera um quadro de dados, então use pandas para convertê-lo.

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

E se você quiser facilitar a geração de um conjunto diferente de números aleatórios? Você define um procedimento armazenado que obtém os argumentos do usuário e, em seguida, passa esses argumentos para o script Python como variáveis.

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));
  • A primeira linha define cada um dos parâmetros de entrada SQL que são necessários quando o procedimento armazenado é executado.

  • A linha que começa com @params define todas as variáveis usadas pelo código Python e os tipos de dados SQL correspondentes.

  • As linhas que se seguem imediatamente mapeiam os nomes dos parâmetros SQL para os nomes de variáveis Python correspondentes.

Agora que você envolveu a função Python em um procedimento armazenado, você pode facilmente chamar a função e passar valores diferentes, como este:

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

Use funções do utilitário Python para solução de problemas

Os pacotes Python fornecem uma variedade de funções utilitárias para investigar o ambiente Python atual. Essas funções podem ser úteis se você estiver encontrando discrepâncias na maneira como seu código Python é executado no SQL Server e em ambientes externos.

Por exemplo, você pode usar funções de temporização do time sistema no pacote para medir a quantidade de tempo usada pelos processos Python e analisar problemas de desempenho.

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

Próximos passos

Para criar um modelo de aprendizado de máquina usando Python com aprendizado de máquina SQL, siga este início rápido: