Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
              Gäller för: SQL Server 2017 (14.x) och senare versioner 
Azure SQL Managed Instance
I del fyra i den här självstudieserien i fyra delar distribuerar du en klustringsmodell som utvecklats i Python till en databas med HJÄLP av SQL Server Machine Learning Services eller stordatakluster.
I del fyra i den här självstudieserien i fyra delar distribuerar du en klustringsmodell som utvecklats i Python till en databas med hjälp av SQL Server Machine Learning Services.
I del fyra i den här självstudieserien i fyra delar distribuerar du en klustringsmodell som utvecklats i Python till en databas med Hjälp av Azure SQL Managed Instance Machine Learning Services.
För att kunna utföra klustring regelbundet, när nya kunder registrerar sig, måste du kunna anropa Python-skriptet från valfri app. För att göra det kan du distribuera Python-skriptet i en databas genom att placera Python-skriptet i en SQL-lagrad procedur. Eftersom din modell körs i databasen kan den enkelt tränas mot data som lagras i databasen.
I det här avsnittet överför du Python-koden du just skrev till servern och implementerar klustring.
I den här artikeln får du lära dig att:
- Skapa en lagrad procedur som genererar modellen
 - Utföra klustring på servern
 - Använda klustringsinformationen
 
I del ett installerade du förhandskraven och återställde exempeldatabasen.
I del två lärde du dig hur du förbereder data från en databas för att utföra klustring.
I del tre lärde du dig att skapa och träna en K-Means-klustermodell i Python.
Förutsättningar
- Del fyra i den här självstudieserien förutsätter att du har uppfyllt förutsättningarna för del ett och slutfört stegen i del två och del tre.
 
Skapa en lagrad procedur som genererar modellen
Kör följande T-SQL-skript för att skapa den lagrade proceduren. Proceduren återskapar de steg som du utvecklade i del ett och två i den här självstudieserien:
- klassificera kunder baserat på deras inköps- och returhistorik
 - generera fyra kluster av kunder med hjälp av en K-Means-algoritm
 
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
Utföra klustring
Nu när du har skapat den lagrade proceduren kör du följande skript för att utföra klustring med hjälp av proceduren.
--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;
Använda klustringsinformationen
Eftersom du har lagrat klustringsproceduren i databasen kan den utföra klustring effektivt mot kunddata som lagras i samma databas. Du kan köra proceduren när dina kunddata uppdateras och använda den uppdaterade klustringsinformationen.
Anta att du vill skicka ett kampanjmeddelande till kunder i kluster 0, gruppen som var inaktiv (du kan se hur de fyra klustren beskrevs i del tre i den här självstudien). Följande kod väljer e-postadresserna till kunder i kluster 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
Du kan ändra c.cluster-värdet för att returnera e-postadresser för kunder i andra kluster.
Rensa resurser
När du är klar med handledningen kan du ta bort tpcxbb_1gb-databasen.
Nästa steg
I del fyra i den här självstudieserien har du slutfört följande steg:
- Skapa en lagrad procedur som genererar modellen
 - Utföra klustring på servern
 - Använda klustringsinformationen
 
Mer information om hur du använder Python i SQL-maskininlärning finns i: