Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
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
tippeddo rótulo tem os valores possíveis 0 e 1Se
tip_amount> 0,tipped= 1; caso contráriotipped= 0A coluna
tip_classde rótulo tem valores de classe possíveis de 0 a 4Classe 0:
tip_amount= $0Classe 1:
tip_amount> $0 etip_amount<= $5Classe 2:
tip_amount> $5 etip_amount<= $10Classe 3:
tip_amount> $10 etip_amount<= $20Classe 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.
Crie o procedimento armazenado PyPlotMatplotlib.
No seguinte script:
- A variável
@querydefine o textoSELECT 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 matplotlib
figuresão usados para fazer o histograma e o gráfico de dispersão, e esses objetos são serializados usando apicklebiblioteca. - 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- A variável
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]Os resultados devem ser algo assim:
plot 0xFFD8FFE000104A4649... 0xFFD8FFE000104A4649... 0xFFD8FFE000104A4649... 0xFFD8FFE000104A4649...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
UIDparâmetros ePWDporTrusted_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())Se a conexão for bem-sucedida, você verá uma mensagem como a seguinte:
Os gráficos são salvos no diretório: xxxx
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.
Próximos passos
Neste artigo, você:
- Revisou os dados da amostra
- Gráficos criados usando Python em T-SQL