O machine learning do SQL se baseia no pacote Pandas do Python, que é ótimo para trabalhar usando dados tabulares. No entanto, você não pode passar um escalar do Python para o seu banco de dados e esperar que ele simplesmente funcione. Neste início rápido, você examinará algumas definições básicas de estrutura de dados, a fim de se preparar para problemas adicionais que pode enfrentar ao passar dados tabulares entre o Python e o banco de dados.
Os conceitos que se deve conhecer de antemão incluem:
Uma estrutura de dados é uma tabela com várias colunas.
Uma coluna única de uma estrutura de dados é um objeto semelhante a uma lista, chamado série.
Um valor único de uma estrutura de dados é chamado de célula e é acessado pelo índice.
Como você faria para expor o único resultado de um cálculo como uma estrutura de dados, se uma variável data.frame exigisse uma estrutura de tabela? Uma resposta possível é representar o valor escalar único como uma série, que pode ser convertida facilmente em uma estrutura de dados.
Observação
Ao retornar datas, o Python no SQL usa DATETIME, que tem um intervalo de datas restrito de 1753-01-01(-53690) a 9999-12-31 (2958463).
Pré-requisitos
Para executar este início rápido, você precisará dos pré-requisitos a seguir.
Uma ferramenta para executar consultas SQL que contenham scripts Python. Este início rápido usa o Azure Data Studio.
Valor escalar como uma série
Este exemplo usa um pouco de matemática simples e converte um escalar em uma série.
Uma série requer um índice, que pode ser atribuído manualmente por você, conforme mostrado aqui, bem como programaticamente.
EXECUTE sp_execute_external_script @language = N'Python'
, @script = N'
a = 1
b = 2
c = a/b
print(c)
s = pandas.Series(c, index =["simple math example 1"])
print(s)
'
Já que a série não foi convertida em uma data.frame, os valores são retornados na janela mensagens, mas você pode ver que os resultados estão em um formato mais tabular.
Resultados
STDOUT message(s) from external script:
0.5
simple math example 1 0.5
dtype: float64
Para aumentar o tamanho da série, você pode adicionar novos valores usando uma matriz.
EXECUTE sp_execute_external_script @language = N'Python'
, @script = N'
a = 1
b = 2
c = a/b
d = a*b
s = pandas.Series([c,d])
print(s)
'
Caso você não especifique um índice, um será gerado, com valores começando com 0 e terminando com o tamanho da matriz.
Se você aumentar o número de valores de índice mas não adicionar novos valores de dados, os valores de dados serão repetidos para preencher a série.
EXECUTE sp_execute_external_script @language = N'Python'
, @script = N'
a = 1
b = 2
c = a/b
s = pandas.Series(c, index =["simple math example 1", "simple math example 2"])
print(s)
'
Resultados
STDOUT message(s) from external script:
0.5
simple math example 1 0.5
simple math example 2 0.5
dtype: float64
Converter série em estrutura de dados
Depois de converter os resultados de matemática escalar em uma estrutura de tabela, você ainda precisa convertê-los em um formato que o machine learning do SQL possa manipular.
Para converter uma série em um data.frame, chame o método DataFrame do Pandas.
EXECUTE sp_execute_external_script @language = N'Python'
, @script = N'
import pandas as pd
a = 1
b = 2
c = a/b
d = a*b
s = pandas.Series([c,d])
print(s)
df = pd.DataFrame(s)
OutputDataSet = df
'
WITH RESULT SETS((ResultValue FLOAT))
O resultado é mostrado abaixo. Mesmo que você use o índice para obter valores específicos do data.frame, os valores de índice não fazem parte da saída.
Resultados
ResultValue
0.5
2
Valores de saída em data.frame
Agora, você produzirá valores específicos de duas séries de resultados matemáticos em um data.frame. A primeira tem um índice de valores sequenciais gerados pelo Python. A segunda usa um índice arbitrário de valores de cadeia de caracteres.
O exemplo a seguir obtém um valor da série usando um índice de número inteiro.
EXECUTE sp_execute_external_script @language = N'Python'
, @script = N'
import pandas as pd
a = 1
b = 2
c = a/b
d = a*b
s = pandas.Series([c,d])
print(s)
df = pd.DataFrame(s, index=[1])
OutputDataSet = df
'
WITH RESULT SETS((ResultValue FLOAT))
Resultados
ResultValue
2,0
Lembre-se de que o índice gerado automaticamente começa em 0. Tente usar um valor de índice fora do intervalo e veja o que acontece.
Agora, obtenha um único valor da outra estrutura de dados usando um índice de cadeia de caracteres.
EXECUTE sp_execute_external_script @language = N'Python'
, @script = N'
import pandas as pd
a = 1
b = 2
c = a/b
s = pandas.Series(c, index =["simple math example 1", "simple math example 2"])
print(s)
df = pd.DataFrame(s, index=["simple math example 1"])
OutputDataSet = df
'
WITH RESULT SETS((ResultValue FLOAT))
Resultados
ResultValue
0.5
Se você tentar usar um índice numérico para obter um valor dessa série, obterá um erro.
Próximas etapas
Para saber mais sobre como escrever funções avançadas do Python com o machine learning do SQL, siga este início rápido:
Gerenciar a ingestão e a preparação de dados, o treinamento e a implantação de modelos e o monitoramento da solução de machine learning com Python, Azure Machine Learning e MLflow.
Neste guia de início rápido, você criará e treinará um modelo de previsão usando o Python. Você salvará o modelo em uma tabela no banco de dados e usará o modelo para prever valores com base em novos dados com o machine learning do SQL.
Execute um conjunto de scripts Python simples usando os Serviços de Machine Learning no SQL Server, em Clusters de Big Data ou nas Instâncias Gerenciadas de SQL do Azure. Saiba como usar o procedimento armazenado sp_execute_external_script para executar o script.
Os Serviços de Machine Learning são um recurso no SQL Server que possibilita executar scripts do Python e do R usando dados relacionais. Este artigo explica os conceitos básicos dos Serviços de Machine Learning do SQL Server e como começar.