Partilhar via


Tutorial do Python: Explorar e visualizar dados

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

Na parte dois desta série de tutoriais de cinco partes, você explorará os dados de exemplo e gerará alguns gráficos. Posteriormente, aprenderá a serializar objetos gráficos no Python, desserializá-los e fazer gráficos.

Neste artigo você vai:

  • Revisar os dados de exemplo
  • Criar gráficos usando o Python no T-SQL

Na parte um, você instalou os pré-requisitos e restaurou o banco de dados de exemplo.

Na parte três, você aprenderá a criar recursos a partir de dados brutos usando uma função do Transact-SQL. Você chamará essa função por meio de um procedimento armazenado para criar uma tabela que contém os valores do recurso.

Na parte quatro, você carregará os módulos e chamará as funções necessárias para criar e treinar o modelo usando um procedimento armazenado do SQL Server.

Na parte cinco, você aprenderá a operacionalizar os modelos treinados e salvos na parte quatro.

Examinar os dados

Primeiro, reserve um minuto para procurar o esquema de dados, já que fizemos algumas alterações para facilitar o uso dos dados de Táxi de NYC

  • O conjunto de recursos original usava arquivos separados para os identificadores de táxi e os registros de viagem. Nós ingressamos os dois conjuntos de dados originais nas colunas medallion, hack_license e pickup_datetime.
  • O conjunto de dados original abrangia muitos arquivos e era muito grande. Reduzimos a amostra para obter apenas 1% do número original de registros. A tabela de dados atual tem 1.703.957 linhas e 23 colunas.

Identificadores de táxi

A coluna medallion representa o número da ID exclusiva do táxi.

A coluna hack_license contém o número de licença do motorista do táxi (anônimo).

Registros de corrida e tarifa

Cada registro de corrida inclui os locais de embarque e desembarque de passageiros, a hora e a distância da corrida.

Cada registro de tarifa inclui informações de pagamento, como a forma de pagamento, o valor total do pagamento e o valor da gorjeta.

As três últimas colunas podem ser usadas para várias tarefas de aprendizado de máquina. A coluna tip_amount contém valores numéricos contínuos e pode ser usada como a coluna label para a análise de regressão. A coluna tipped tem apenas valores sim/não e é usada para classificação binária. A coluna tip_class tem vários rótulos de classe e, portanto, pode ser usada como o rótulo para tarefas de classificação de várias classes.

Os valores usados para as colunas de rótulo se baseiam na coluna tip_amount usando estas regras de negócio:

  • A coluna de rótulo tipped tem os valores possíveis 0 e 1

    Se tip_amount> 0, tipped = 1; caso contrário, tipped = 0

  • A coluna de rótulo tip_class tem os valores de classe possíveis 0-4

    Classe 0: tip_amount = $0

    Classe 1: tip_amount> $0 e tip_amount<= $5

    Classe 2: tip_amount> $5 e tip_amount<= $10

    Classe 3: tip_amount> $10 e tip_amount<= $20

    Classe 4: tip_amount> $20

Criar gráficos usando o Python no T-SQL

Em geral, o desenvolvimento de uma solução de ciência de dados inclui intensiva exploração e visualização de dados. Como a visualização é uma ferramenta avançada para entender a distribuição dos dados e das exceções, o Python fornece diversos pacotes para a visualização de dados. O módulo matplotlib é uma das bibliotecas mais populares para visualização e inclui muitas funções para criar histogramas, gráficos de dispersão, gráficos de caixa e outros grafos de exploração de dados.

Nesta seção, você aprenderá a trabalhar com gráficos usando procedimentos armazenados. Em vez de abrir a imagem no servidor, você armazena o objeto Python plot como dados varbinary e, em seguida, grava-os em um arquivo que pode ser compartilhado ou exibido em outro lugar.

Criar um gráfico como dados varbinary

O procedimento armazenado retorna um objeto figure do Python serializado como um fluxo de dados varbinary. Você não pode exibir os dados binários diretamente, mas pode usar o código Python no cliente para desserializar e exibir as figuras e, em seguida, salvar o arquivo de imagem em um computador cliente.

  1. Para criar o procedimento armazenado PyPlotMatplotlib.

    No script a seguir:

    • A variável @query define o texto da consulta SELECT tipped FROM nyctaxi_sample, que é passado para o bloco de código do Python como o argumento para a variável de entrada de script, @input_data_1.
    • O script Python é bastante simples: os objetos matplotlib figure são usados para criar o histograma e o gráfico de dispersão e esses objetos então são serializados usando a biblioteca de pickle.
    • O objeto de gráfico do Python é serializado para um DataFrame Pandas para saída.
    DROP PROCEDURE IF EXISTS PyPlotMatplotlib;
    GO
    
    CREATE PROCEDURE [dbo].[PyPlotMatplotlib]
    AS
    BEGIN
        SET NOCOUNT ON;
        DECLARE @query nvarchar(max) =
        N'SELECT cast(tipped as int) as tipped, tip_amount, fare_amount FROM [dbo].[nyctaxi_sample]'
        EXECUTE sp_execute_external_script
        @language = N'Python',
        @script = N'
    import matplotlib
    matplotlib.use("Agg")
    import matplotlib.pyplot as plt
    import pandas as pd
    import pickle
    
    fig_handle = plt.figure()
    plt.hist(InputDataSet.tipped)
    plt.xlabel("Tipped")
    plt.ylabel("Counts")
    plt.title("Histogram, Tipped")
    plot0 = pd.DataFrame(data =[pickle.dumps(fig_handle)], columns =["plot"])
    plt.clf()
    
    plt.hist(InputDataSet.tip_amount)
    plt.xlabel("Tip amount ($)")
    plt.ylabel("Counts")
    plt.title("Histogram, Tip amount")
    plot1 = pd.DataFrame(data =[pickle.dumps(fig_handle)], columns =["plot"])
    plt.clf()
    
    plt.hist(InputDataSet.fare_amount)
    plt.xlabel("Fare amount ($)")
    plt.ylabel("Counts")
    plt.title("Histogram, Fare amount")
    plot2 = pd.DataFrame(data =[pickle.dumps(fig_handle)], columns =["plot"])
    plt.clf()
    
    plt.scatter( InputDataSet.fare_amount, InputDataSet.tip_amount)
    plt.xlabel("Fare Amount ($)")
    plt.ylabel("Tip Amount ($)")
    plt.title("Tip amount by Fare amount")
    plot3 = pd.DataFrame(data =[pickle.dumps(fig_handle)], columns =["plot"])
    plt.clf()
    
    OutputDataSet = plot0.append(plot1, ignore_index=True).append(plot2, ignore_index=True).append(plot3, ignore_index=True)
    ',
    @input_data_1 = @query
    WITH RESULT SETS ((plot varbinary(max)))
    END
    GO
    
  2. Agora, execute o procedimento armazenado sem argumentos para gerar um gráfico com os dados embutidos em código como a consulta de entrada.

    EXEC [dbo].[PyPlotMatplotlib]
    
  3. Os resultados devem ser semelhantes a estes:

    plot
    0xFFD8FFE000104A4649...
     0xFFD8FFE000104A4649...
     0xFFD8FFE000104A4649...
     0xFFD8FFE000104A4649...
    
  4. Em um cliente Python, agora você pode se conectar à instância do SQL Server que gerou os objetos binários do gráfico e exibir os gráficos.

    Para fazer isso, execute o código Python a seguir, substituindo o nome do servidor, o nome do banco de dados e as credenciais conforme apropriado (para autenticação do Windows, substitua os parâmetros UID e PWD por Trusted_Connection=True). Verifique se a versão do Python é a mesma no cliente e no servidor. Além disso, verifique se as bibliotecas do Python em seu cliente (como matplotlib) são de uma versão igual ou superior com relação às bibliotecas instaladas no servidor. Para exibir uma lista de pacotes instalados e suas versões, confira Obter informações do pacote Python.

    %matplotlib notebook
    import pyodbc
    import pickle
    import os
    cnxn = pyodbc.connect('DRIVER=SQL Server;SERVER={SERVER_NAME};DATABASE={DB_NAME};UID={USER_NAME};PWD={PASSWORD}')
    cursor = cnxn.cursor()
    cursor.execute("EXECUTE [dbo].[PyPlotMatplotlib]")
    tables = cursor.fetchall()
    for i in range(0, len(tables)):
        fig = pickle.loads(tables[i][0])
        fig.savefig(str(i)+'.png')
    print("The plots are saved in directory: ",os.getcwd())
    
  5. se a conexão for bem-sucedida, você verá uma mensagem semelhante à seguinte:

    Os gráficos são salvos no diretório: xxxx

  6. O arquivo de saída é criado no diretório de trabalho do Python. Para exibir o gráfico, localize o diretório de trabalho do Python e abra o arquivo. A imagem a seguir mostra um gráfico salvo no computador cliente.

    Valor da gorjeta vs. Valor da tarifa

Próximas etapas

Neste artigo você:

  • Revisou os dados de exemplo
  • Criou gráficos usando o Python no T-SQL