Partilhar via


Tutorial: Preparar dados para executar clustering em R com aprendizado de máquina SQL

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

Na segunda parte desta série de tutoriais de quatro partes, você preparará os dados de um banco de dados para executar clustering em R com Serviços de Aprendizado de Máquina do SQL Server ou em Clusters de Big Data.

Na segunda parte desta série de tutoriais de quatro partes, você preparará os dados de um banco de dados para executar clustering em R com os Serviços de Aprendizado de Máquina do SQL Server.

Na segunda parte desta série de tutoriais de quatro partes, você preparará os dados de um banco de dados para executar clustering em R com o SQL Server 2016 R Services.

Na segunda parte desta série de tutoriais de quatro partes, você preparará os dados de um banco de dados para executar clustering em R com os Serviços de Aprendizado de Máquina de Instância Gerenciada SQL do Azure.

Neste artigo, você aprenderá a:

  • Separe os clientes em diferentes dimensões usando R
  • Carregue os dados do banco de dados em um quadro de dados R

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

Na terceira parte, você aprenderá como criar e treinar um modelo de agrupamento K-Means em R.

Na quarta parte, você aprenderá como criar um procedimento armazenado em um banco de dados que pode executar clustering em R com base em novos dados.

Pré-requisitos

  • A segunda parte deste tutorial pressupõe que você concluiu a primeira parte.

Separe os clientes

Crie um novo arquivo RScript no RStudio e execute o seguinte script. Na consulta SQL, você está separando os clientes nas seguintes dimensões:

  • orderRatio = taxa de ordem de retorno (número total de pedidos parcial ou totalmente devolvidos versus o número total de pedidos)
  • itemsRatio = índice de itens de retorno (número total de itens devolvidos versus o número de itens comprados)
  • monetaryRatio = rácio do montante de retorno (montante monetário total dos itens devolvidos versus o montante adquirido)
  • frequência = frequência de retorno

Na função connStr , substitua ServerName por suas próprias informações de conexão.

# Define the connection string to connect to the tpcxbb_1gb database

connStr <- "Driver=SQL Server;Server=ServerName;Database=tpcxbb_1gb;uid=Username;pwd=Password"

#Define the query to select data
input_query <- "
SELECT ss_customer_sk AS customer
    ,round(CASE 
            WHEN (
                       (orders_count = 0)
                    OR (returns_count IS NULL)
                    OR (orders_count IS NULL)
                    OR ((returns_count / orders_count) IS NULL)
                    )
                THEN 0.0
            ELSE (cast(returns_count AS NCHAR(10)) / orders_count)
            END, 7) AS orderRatio
    ,round(CASE 
            WHEN (
                     (orders_items = 0)
                  OR (returns_items IS NULL)
                  OR (orders_items IS NULL)
                  OR ((returns_items / orders_items) IS NULL)
                 )
            THEN 0.0
            ELSE (cast(returns_items AS NCHAR(10)) / orders_items)
            END, 7) AS itemsRatio
    ,round(CASE 
            WHEN (
                     (orders_money = 0)
                  OR (returns_money IS NULL)
                  OR (orders_money IS NULL)
                  OR ((returns_money / orders_money) IS NULL)
                 )
            THEN 0.0
            ELSE (cast(returns_money AS NCHAR(10)) / orders_money)
            END, 7) AS monetaryRatio
    ,round(CASE 
            WHEN (returns_count IS NULL)
            THEN 0.0
            ELSE returns_count
            END, 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";

Carregar os dados em um quadro de dados

Agora, use o script a seguir para retornar os resultados da consulta para um quadro de dados R.

# Query using input_query and get the results back
# to data frame customer_data

library(RODBC)

ch <- odbcDriverConnect(connStr)

customer_data <- sqlQuery(ch, input_query)

# Take a look at the data just loaded
head(customer_data, n = 5);

Você verá resultados semelhantes aos seguintes.

  customer orderRatio itemsRatio monetaryRatio frequency
1    29727          0          0      0.000000         0
2    26429          0          0      0.041979         1
3    60053          0          0      0.065762         3
4    97643          0          0      0.037034         3
5    32549          0          0      0.031281         4

Limpeza de recursos

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

Próximos passos

Na segunda parte desta série de tutoriais, você aprendeu como:

  • Separe os clientes em diferentes dimensões usando R
  • Carregue os dados do banco de dados em um quadro de dados R

Para criar um modelo de aprendizado de máquina que use esses dados do cliente, siga a parte três desta série de tutoriais: