Tutorial: Preparación de datos para realizar la agrupación en clústeres en R con el aprendizaje automático de SQL

Se aplica a: SQL Server 2016 (13.x) y versiones posteriores Azure SQL Managed Instance

En la parte dos de esta serie de tutoriales de cuatro partes, preparará los datos de una base de datos para realizar la agrupación en clústeres en R con SQL Server Machine Learning Services o en Clústeres de macrodatos.

En la parte dos de esta serie de tutoriales de cuatro partes, preparará los datos de una base de datos para realizar la agrupación en clústeres en R con SQL Server Machine Learning Services.

En la parte dos de esta serie de tutoriales de cuatro partes, preparará los datos de una base de datos para realizar la agrupación en clústeres en R con SQL Server 2016 R Services.

En la parte dos de esta serie de tutoriales de cuatro partes, preparará los datos de una base de datos para realizar la agrupación en clústeres en R con Machine Learning Services en Azure SQL Managed Instance.

En este artículo, aprenderá a:

  • Separar clientes en diferentes dimensiones mediante R
  • Cargar los datos de la base de datos en una trama de datos de R

En la parte uno, ha instalado los requisitos previos y ha restaurado la base de datos de ejemplo.

En la parte tres, aprenderá a crear y entrenar un modelo de agrupación en clústeres k-means en R.

En la parte cuatro, descubrirá cómo crear un procedimiento almacenado en una base de datos que pueda realizar la agrupación en clústeres en R basándose en datos nuevos.

Prerrequisitos

  • En la parte dos de este tutorial, se da por hecho que ha completado la parte uno.

Separación de clientes

Cree un archivo de RScript en RStudio y ejecute el siguiente script. En la consulta SQL, está dividiendo a los clientes entre las dimensiones siguientes:

  • orderRatio = índice de devolución de pedidos (número total de pedidos con una devolución total o parcial comparado con el número total de pedidos)
  • itemsRatio = índice de artículos devueltos (número total de artículos devueltos comparado con el número de artículos comprados)
  • monetaryRatio = índice de importes de devoluciones (total de importes monetarios de los artículos devueltos comparado con el importe de las compras)
  • frequency = frecuencia de devolución

En la función connStr, reemplace ServerName por su propia información de conexión.

# 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";

Carga de los datos en una trama de datos

Ahora, use el siguiente script para que se devuelvan los resultados de la consulta a una trama de datos de 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);

Se mostrarán resultados similares a los siguientes.

  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

Limpieza de recursos

Si no quiere continuar con este tutorial, elimine la base de datos tpcxbb_1gb.

Pasos siguientes

En la parte dos de la serie de tutoriales, ha aprendido a:

  • Separar clientes en diferentes dimensiones mediante R
  • Cargar los datos de la base de datos en una trama de datos de R

Para crear un modelo de aprendizaje automático que use estos datos de clientes, siga la parte tres de esta serie de tutoriales: