Tutorial do Python: preparar dados para categorizar clientes com o aprendizado de máquina do SQL

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 quatro partes, você restaurará e preparará os dados de um banco de dados usando o Python. Posteriormente nesta série, você usará esses dados para treinar e implantar um modelo de clustering no Python com os Serviços de Machine Learning do SQL Server ou nos Clusters de Big Data.

Na parte dois desta série de tutoriais de quatro partes, você restaurará e preparará os dados de um banco de dados usando o Python. Posteriormente nesta série, você usará esses dados para treinar e implantar um modelo de clustering em Python com os Serviços de Machine Learning do SQL Server.

Na parte dois desta série de tutoriais de quatro partes, você restaurará e preparará os dados de um banco de dados usando o Python. Posteriormente nesta série, você usará esses dados para treinar e implantar um modelo de clustering em Python com os Serviços de Machine Learning da Instância Gerenciada de SQL do Azure.

Neste artigo, você aprenderá a:

  • Separar clientes ao longo de dimensões diferentes usando o Python
  • Carregar os dados do Banco de Dados SQL em uma estrutura de dados do Python

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

Na parte três, você aprenderá a criar e treinar um modelo de cluster K-means em Python.

Na parte quatro, você aprenderá a criar um procedimento armazenado em um banco de dados que pode executar clustering no Python com base em novos dados.

Pré-requisitos

  • A parte dois deste tutorial pressupõe que você cumpriu os pré-requisitos da parte um.

Separar os clientes

Para se preparar para os clientes de clustering, primeiro você separará os clientes ao longo das seguintes dimensões:

  • orderRatio = taxa de devolução de pedidos (número total de pedidos parcialmente ou totalmente retornados em relação o número total de pedidos)
  • itemsRatio = taxa de devolução de itens (número total de itens retornados em relação ao número de itens comprados)
  • monetaryRatio = taxa de valores devolvidos (valor monetário total dos itens retornados em relação ao valor comprado)
  • frequência = frequência de devoluções

Abra um novo notebook no Azure Data Studio e insira o script a seguir.

Na cadeia de conexão, substitua os detalhes da conexão conforme necessário.

# Load packages.
import pyodbc
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from scipy.spatial import distance as sci_distance
from sklearn import cluster as sk_cluster

################################################################################################

## Connect to DB and select data

################################################################################################

# Connection string to connect to SQL Server named instance.
conn_str = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server}; SERVER=<server>; DATABASE=tpcxbb_1gb; UID=<username>; PWD=<password>')

input_query = '''SELECT
ss_customer_sk AS customer,
ROUND(COALESCE(returns_count / NULLIF(1.0*orders_count, 0), 0), 7) AS orderRatio,
ROUND(COALESCE(returns_items / NULLIF(1.0*orders_items, 0), 0), 7) AS itemsRatio,
ROUND(COALESCE(returns_money / NULLIF(1.0*orders_money, 0), 0), 7) AS monetaryRatio,
COALESCE(returns_count, 0) AS frequency
FROM
(
  SELECT
    ss_customer_sk,
    -- return order ratio
    COUNT(distinct(ss_ticket_number)) AS orders_count,
    -- return ss_item_sk ratio
    COUNT(ss_item_sk) AS orders_items,
    -- return monetary amount ratio
    SUM( ss_net_paid ) AS orders_money
  FROM store_sales s
  GROUP BY ss_customer_sk
) orders
LEFT OUTER JOIN
(
  SELECT
    sr_customer_sk,
    -- return order ratio
    count(distinct(sr_ticket_number)) as returns_count,
    -- return ss_item_sk ratio
    COUNT(sr_item_sk) as returns_items,
    -- return monetary amount ratio
    SUM( sr_return_amt ) AS returns_money
FROM store_returns
GROUP BY sr_customer_sk ) returned ON ss_customer_sk=sr_customer_sk'''


# Define the columns we wish to import.
column_info = {
    "customer": {"type": "integer"},
    "orderRatio": {"type": "integer"},
    "itemsRatio": {"type": "integer"},
    "frequency": {"type": "integer"}
}

Carregar os dados em um quadro de dados

Os resultados da consulta são retornados para o Python usando a função read_sql do Pandas. Como parte do processo, você usará as informações de coluna definidas no script anterior.

customer_data = pd.read_sql(input_query, conn_str)

Agora, exiba o início do quadro de dados para verificar se ela parece correta.

print("Data frame:", customer_data.head(n=5))
Rows Read: 37336, Total Rows Processed: 37336, Total Chunk Time: 0.172 seconds
Data frame:     customer  orderRatio  itemsRatio  monetaryRatio  frequency
0    29727.0    0.000000    0.000000       0.000000          0
1    97643.0    0.068182    0.078176       0.037034          3
2    57247.0    0.000000    0.000000       0.000000          0
3    32549.0    0.086957    0.068657       0.031281          4
4     2040.0    0.000000    0.000000       0.000000          0

Limpar os recursos

Se você não continuar com este tutorial, exclua o banco de dados tpcxbb_1gb.

Próximas etapas

Na parte dois desta série de tutoriais, você concluiu estas etapas:

  • Separar clientes ao longo de dimensões diferentes usando o Python
  • Carregar os dados do Banco de Dados SQL em uma estrutura de dados do Python

Para criar um modelo de machine learning que usa esses dados do cliente, siga a parte três desta série de tutoriais: