Partilhar via


Tutorial do Python: Explore e visualize dados

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

Na segunda parte desta série de tutoriais de cinco partes, você explorará os dados de exemplo e gerará alguns gráficos. Mais tarde, você aprenderá como serializar objetos gráficos em Python e, em seguida, desserializar esses objetos e criar gráficos.

Neste artigo, você:

  • Analise os dados de exemplo
  • Crie gráficos usando Python em T-SQL

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

Na terceira parte, você aprenderá a criar recursos a partir de dados brutos usando uma função Transact-SQL. Em seguida, você chamará essa função a partir de um procedimento armazenado para criar uma tabela que contenha os valores do recurso.

Na quarta parte, 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 quinta parte, você aprenderá a operacionalizar os modelos que treinou e salvou na quarta parte.

Revisar os dados

Primeiro, reserve um minuto para navegar no esquema de dados, pois fizemos algumas alterações para facilitar o uso dos dados do NYC Taxi

  • O conjunto de dados original usava arquivos separados para os identificadores de táxi e registros de viagem. Juntámos os dois conjuntos de dados originais nas colunas medalhão, hack_license e pickup_datetime.
  • O conjunto de dados original abrangia muitos arquivos e era bastante 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 medalhão representa o número de identificação único do táxi.

A coluna hack_license contém o número da carteira de motorista de táxi (anonimizado).

Registos de viagens e tarifas

Cada registro de viagem inclui o local e o horário de embarque e desembarque e a distância da viagem.

Cada registro de tarifa inclui informações de pagamento, como o tipo 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 coluna de rótulo para análise de regressão. A coluna inclinada 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 são todos baseados na tip_amount coluna, usando estas regras de negócios:

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

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

  • A coluna tip_class de rótulo tem valores de classe possíveis de 0 a 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

Crie gráficos usando Python em T-SQL

O desenvolvimento de uma solução de ciência de dados geralmente inclui exploração intensiva de dados e visualização de dados. Como a visualização é uma ferramenta tão poderosa para entender a distribuição dos dados e valores atípicos, o Python fornece muitos pacotes para visualizar 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 gráficos 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 plot Python como dados varbinary e, em seguida, grava isso em um arquivo que pode ser compartilhado ou visualizado em outro lugar.

Criar um gráfico como dados varbinary

O procedimento armazenado retorna um objeto Python figure serializado como um fluxo de dados varbinary . Você não pode exibir os dados binários diretamente, mas você 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. Crie o procedimento armazenado PyPlotMatplotlib.

    No seguinte script:

    • A variável @query define o texto SELECT tipped FROM nyctaxi_sampleda consulta , que é passado para o bloco de código Python como o argumento para a variável de entrada de script, @input_data_1.
    • O script Python é bastante simples: objetos matplotlibfigure são usados para fazer o histograma e o gráfico de dispersão, e esses objetos são serializados usando a pickle biblioteca.
    • O objeto gráfico 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 a partir dos dados codificados como a consulta de entrada.

    EXEC [dbo].[PyPlotMatplotlib]
    
  3. Os resultados devem ser algo assim:

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

    Para fazer isso, execute o seguinte código Python, substituindo o nome do servidor, o nome do banco de dados e as credenciais conforme apropriado (para autenticação do Windows, substitua os UID parâmetros e PWD por Trusted_Connection=True). Verifique se a versão do Python é a mesma no cliente e no servidor. Certifique-se também de que as bibliotecas Python em seu cliente (como matplotlib) são a mesma versão ou superior em relação às bibliotecas instaladas no servidor. Para exibir uma lista de pacotes instalados e suas versões, consulte Obter informações sobre pacotes 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 como a 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 visualizar o gráfico, localize o diretório de trabalho 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óximos passos

Neste artigo, você:

  • Revisou os dados da amostra
  • Gráficos criados usando Python em T-SQL