Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy: SQL Server 2017 (14.x) i nowsze wersje
usługi Azure SQL Managed Instance
W czwartej części tej czteroczęściowej serii samouczków wdrożysz model klastrowania opracowany w języku Python w bazie danych przy użyciu usług SQL Server Machine Learning Services lub klastrów danych big data.
W czwartej części tej czteroczęściowej serii samouczków wdrożysz model klastrowania opracowany w języku Python w bazie danych przy użyciu usług SQL Server Machine Learning Services.
W czwartej części tej czteroczęściowej serii samouczków wdrożysz model klastrowania opracowany w języku Python w bazie danych przy użyciu usług Azure SQL Managed Instance Machine Learning Services.
Aby regularnie wykonywać klastrowanie podczas rejestracji nowych klientów, musisz mieć możliwość wywołania skryptu Python z dowolnej aplikacji. W tym celu możesz wdrożyć skrypt języka Python w bazie danych, umieszczając skrypt języka Python w procedurze składowanej SQL. Ponieważ model jest wykonywany w bazie danych, można go łatwo wytrenować względem danych przechowywanych w bazie danych.
W tej sekcji przeniesiesz właśnie napisany kod języka Python na serwer i wdrożysz klaster.
W tym artykule dowiesz się, jak:
- Utwórz procedurę składowaną, która generuje model
- Wykonywanie klastrowania na serwerze
- Korzystanie z informacji dotyczących klastrowania
W części 1 zainstalowano wymagania wstępne i przywrócono przykładową bazę danych.
W drugiej części przedstawiono sposób przygotowywania danych z bazy danych do wykonywania klastrowania.
W trzeciej części nauczyłeś się, jak tworzyć i trenować model klastrowania metodą K-Średnich w języku Python.
Wymagania wstępne
- W czwartej części tej serii samouczków przyjęto założenie, że spełniono wymagania wstępne części 1 i wykonano kroki opisane w części drugiej i trzeciej.
Utwórz procedurę składowaną, która generuje model
Uruchom następujący skrypt języka T-SQL, aby utworzyć procedurę składowaną. Procedura odtwarza kroki opracowane w jednej i drugiej części tej serii samouczków:
- klasyfikowanie klientów na podstawie historii zakupów i zwrotów
- generowanie czterech klastrów klientów przy użyciu algorytmu K-Średnich
USE [tpcxbb_1gb]
GO
DROP procedure IF EXISTS [dbo].[py_generate_customer_return_clusters];
GO
CREATE procedure [dbo].[py_generate_customer_return_clusters]
AS
BEGIN
DECLARE
-- Input query to generate the purchase history & return metrics
@input_query NVARCHAR(MAX) = N'
SELECT
ss_customer_sk AS customer,
CAST( (ROUND(COALESCE(returns_count / NULLIF(1.0*orders_count, 0), 0), 7) ) AS FLOAT) AS orderRatio,
CAST( (ROUND(COALESCE(returns_items / NULLIF(1.0*orders_items, 0), 0), 7) ) AS FLOAT) AS itemsRatio,
CAST( (ROUND(COALESCE(returns_money / NULLIF(1.0*orders_money, 0), 0), 7) ) AS FLOAT) AS monetaryRatio,
CAST( (COALESCE(returns_count, 0)) AS FLOAT) 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
'
EXEC sp_execute_external_script
@language = N'Python'
, @script = N'
import pandas as pd
from sklearn.cluster import KMeans
#get data from input query
customer_data = my_input_data
#We concluded in step 2 in the tutorial that 4 would be a good number of clusters
n_clusters = 4
#Perform clustering
est = KMeans(n_clusters=n_clusters, random_state=111).fit(customer_data[["orderRatio","itemsRatio","monetaryRatio","frequency"]])
clusters = est.labels_
customer_data["cluster"] = clusters
OutputDataSet = customer_data
'
, @input_data_1 = @input_query
, @input_data_1_name = N'my_input_data'
with result sets (("Customer" int, "orderRatio" float,"itemsRatio" float,"monetaryRatio" float,"frequency" float,"cluster" float));
END;
GO
Wykonywanie klastrowania
Po utworzeniu procedury składowanej wykonaj następujący skrypt, aby przeprowadzić klastrowanie za pomocą tej procedury.
--Create a table to store the predictions in
DROP TABLE IF EXISTS [dbo].[py_customer_clusters];
GO
CREATE TABLE [dbo].[py_customer_clusters] (
[Customer] [bigint] NULL
, [OrderRatio] [float] NULL
, [itemsRatio] [float] NULL
, [monetaryRatio] [float] NULL
, [frequency] [float] NULL
, [cluster] [int] NULL
,
) ON [PRIMARY]
GO
--Execute the clustering and insert results into table
INSERT INTO py_customer_clusters
EXEC [dbo].[py_generate_customer_return_clusters];
-- Select contents of the table to verify it works
SELECT * FROM py_customer_clusters;
Korzystanie z informacji dotyczących klastrowania
Ponieważ procedura klastrowania jest przechowywana w bazie danych, może ona wydajnie wykonywać klastrowanie względem danych klientów przechowywanych w tej samej bazie danych. Można wykonać procedurę za każdym razem, gdy dane klienta zostaną zaktualizowane i użyj zaktualizowanych informacji dotyczących klastrowania.
Załóżmy, że chcesz wysłać promocyjną wiadomość e-mail do klientów w klastrze 0, która była nieaktywna (możesz zobaczyć, jak cztery klastry zostały opisane w trzeciej części tego samouczka). Poniższy kod wybiera adresy e-mail klientów w klastrze 0.
USE [tpcxbb_1gb]
--Get email addresses of customers in cluster 0 for a promotion campaign
SELECT customer.[c_email_address], customer.c_customer_sk
FROM dbo.customer
JOIN
[dbo].[py_customer_clusters] as c
ON c.Customer = customer.c_customer_sk
WHERE c.cluster = 0
Wartość c.cluster można zmienić tak, aby zwracała adresy e-mail dla klientów w innych klastrach.
Uprzątnij zasoby
Po zakończeniu pracy z tym samouczkiem możesz usunąć bazę danych tpcxbb_1gb.
Dalsze kroki
W czwartej części tej serii samouczków wykonano następujące kroki:
- Utwórz procedurę składowaną, która generuje model
- Wykonywanie klastrowania na serwerze
- Korzystanie z informacji dotyczących klastrowania
Aby dowiedzieć się więcej na temat używania języka Python w uczeniu maszynowym SQL, zobacz: