Udostępnij za pomocą


Samouczek: przygotowywanie danych do wykonywania klastrowania w języku R przy użyciu uczenia maszynowego SQL

Dotyczy: SQL Server 2016 (13.x) i nowsze wersje usługi Azure SQL Managed Instance

W drugiej części tej czteroczęściowej serii samouczków przygotujesz dane z bazy danych do wykonania klastrowania w języku R przy użyciu usług SQL Server Machine Learning Services lub klastrów danych big data.

W drugiej części tej czteroczęściowej serii samouczków przygotujesz dane z bazy danych do wykonania klastrowania w języku R przy użyciu usług SQL Server Machine Learning Services.

W drugiej części tej czteroczęściowej serii samouczków przygotujesz dane z bazy danych do wykonania klastrowania w języku R przy użyciu usług SQL Server 2016 R.

W drugiej części tej czteroczęściowej serii samouczków przygotujesz dane z bazy danych do wykonania klastrowania w języku R przy użyciu usług Azure SQL Managed Instance Machine Learning Services.

W tym artykule dowiesz się, jak:

  • Segmentuj klientów według różnych wymiarów przy użyciu R
  • Ładowanie danych z bazy danych do ramki danych języka R

W części 1 zainstalowano wymagania wstępne i przywrócono przykładową bazę danych.

W trzeciej części dowiesz się, jak stworzyć i wytrenować model klastrowania K-Means w R.

W czwartej części dowiesz się, jak utworzyć procedurę składowaną w bazie danych, która może wykonywać klastrowanie w języku R na podstawie nowych danych.

Wymagania wstępne

  • W drugiej części tego samouczka założono, że ukończono część jedną.

Oddzielni klienci

Utwórz nowy plik RScript w programie RStudio i uruchom następujący skrypt. W zapytaniu SQL oddzielasz klientów według następujących wymiarów:

  • orderRatio = współczynnik zamówienia zwrotnego (łączna liczba zamówień częściowo lub w pełni zwrócona w porównaniu z łączną liczbą zamówień)
  • itemsRatio = współczynnik elementów zwracanych (łączna liczba zwróconych elementów w porównaniu z liczbą zakupionych elementów)
  • monetaryRatio = stosunek kwoty zwrotu (łączna kwota pieniężna elementów zwróconych w porównaniu do zakupionej kwoty)
  • frequency = częstotliwość zwrotu

W funkcji connStr zastąp ciąg ServerName własnymi informacjami o połączeniu.

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

Ładowanie danych do ramki danych

Teraz użyj następującego skryptu, aby zwrócić wyniki zapytania do ramki danych języka 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);

Powinny zostać wyświetlone wyniki podobne do poniższych.

  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

Uprzątnij zasoby

Jeśli nie zamierzasz kontynuować pracy z tym samouczkiem, usuń bazę danych tpcxbb_1gb.

Dalsze kroki

W drugiej części tej serii samouczków przedstawiono następujące zagadnienia:

  • Oddziel klientów według różnych wymiarów za pomocą języka R
  • Ładowanie danych z bazy danych do ramki danych języka R

Aby utworzyć model uczenia maszynowego, który korzysta z tych danych klienta, wykonaj trzy części tej serii samouczków: