Partilhar via


Guia de início rápido: estruturas de dados e objetos usando 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 guia de início rápido, você aprenderá a usar estruturas de dados e tipos de dados ao usar Python nos Serviços de Aprendizado de Máquina do SQL Server, nos Serviços de Aprendizado de Máquina de Instância Gerenciada do SQL do Azure ou em Clusters de Big Data do SQL Server. Você aprenderá sobre como mover dados entre Python e SQL Server e os problemas comuns que podem ocorrer.

O aprendizado de máquina SQL depende do pacote Python pandas , que é ótimo para trabalhar com 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 guia de início rápido, você revisará algumas definições básicas de estrutura de dados, para prepará-lo para problemas adicionais que podem ser encontrados ao passar dados tabulares entre o Python e o banco de dados.

Os conceitos a conhecer antecipadamente incluem:

  • Um quadro de dados é uma tabela com várias colunas.
  • Uma única coluna de um quadro de dados é um objeto semelhante a uma lista chamado série.
  • Um único valor de um quadro de dados é chamado de célula e é acessado por índice.

Como você exporia o resultado único de um cálculo como um quadro de dados, se um data.frame requer uma estrutura tabular? Uma resposta é representar o valor escalar único como uma série, que é facilmente convertida em um quadro de dados.

Observação

Ao retornar datas, Python em SQL usa DATETIME, que tem um intervalo de datas restrito de 1753-01-01(-53690) até 9999-12-31(2958463).

Pré-requisitos

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

Valor escalar representado como série

Este exemplo faz algumas contas simples e converte um escalar em uma série.

  1. Uma série requer um índice, que você pode atribuir manualmente, como mostrado aqui, ou 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)
    '
    

    Como a série não foi convertida em data.frame, os valores são retornados na janela Mensagens, mas você pode ver que os resultados estão em um formato mais tabular.

    Results

    STDOUT message(s) from external script: 
    0.5
    simple math example 1    0.5
    dtype: float64
    
  2. Para aumentar o comprimento 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)
    '
    

    Se você não especificar um índice, será gerado um índice com valores que começam com 0 e terminam com o comprimento da matriz.

    Results

    STDOUT message(s) from external script:
    0    0.5
    1    2.0
    dtype: float64
    
  3. 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)
    '
    

    Results

    STDOUT message(s) from external script:
    0.5
    simple math example 1    0.5
    simple math example 2    0.5
    dtype: float64
    

Converter séries em quadros de dados

Depois de converter os resultados de matemática escalar em uma estrutura tabular, você ainda precisa convertê-los em um formato que o aprendizado de máquina SQL possa manipular.

  1. Para converter uma série em um data.frame, chame o método pandas DataFrame .

    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 se você usar o índice para obter valores específicos do data.frame, os valores de índice não farão parte da saída.

    Results

    ResultadoValor
    0,5
    2

Produzir valores num data.frame

Agora você produzirá valores específicos de duas séries de resultados matemáticos em um data.frame. O primeiro tem um índice de valores sequenciais gerados pelo Python. O segundo usa um índice arbitrário de valores de cadeia de caracteres.

  1. O exemplo a seguir obtém um valor da série usando um índice 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))
    

    Results

    ResultadoValor
    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.

  2. Agora obtenha um único valor do outro quadro 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))
    

    Results

    ResultadoValor
    0,5

    Se você tentar usar um índice numérico para obter um valor desta série, você receberá um erro.

Próximos passos

Para aprender a escrever funções avançadas do Python com o aprendizado de máquina SQL, siga este guia de início rápido: