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 två av den här självstudieserien i fyra delar återställer och förbereder du data från en databas med Python. Senare i den här serien använder du dessa data för att träna och distribuera en klustringsmodell i Python med SQL Server Machine Learning Services eller i stordatakluster.
I del två av den här självstudieserien i fyra delar återställer och förbereder du data från en databas med Python. Senare i den här serien använder du dessa data för att träna och distribuera en klustermodell i Python med SQL Server Machine Learning Services.
I del två av den här självstudieserien i fyra delar återställer och förbereder du data från en databas med Python. Senare i den här serien använder du dessa data för att träna och distribuera en klustermodell i Python med Azure SQL Managed Instance Machine Learning Services.
I den här artikeln får du lära dig att:
- Separera kunder längs olika dimensioner med hjälp av Python
- Läs in data från databasen i en Python-dataram
I del ett installerade du förhandskraven och återställde exempeldatabasen.
I del tre får du lära dig hur du skapar och tränar en K-Means-klustermodell i Python.
I del fyra får du lära dig hur du skapar en lagrad procedur i en databas som kan utföra klustring i Python baserat på nya data.
Prerequisites
- Del två i den här självstudien förutsätter att du har uppfyllt förutsättningarna för del ett.
Separata kunder
För att förbereda för kundklustring kommer du först att separera kunderna längs följande dimensioner:
- orderRatio = returorderförhållande (totalt antal ordrar delvis eller helt returnerade jämfört med det totala antalet beställningar)
- itemsRatio = return item ratio (totalt antal artiklar som returneras jämfört med antalet köpta artiklar)
- monetaryRatio = förhållandet mellan returbelopp (totalt penningbelopp för poster som returneras jämfört med det köpta beloppet)
- frequency = återfrekvens
Öppna en ny notebook-fil i Azure Data Studio och ange följande skript.
Ersätt anslutningsinformationen efter behov i anslutningssträngen.
# Load packages.
import pyodbc
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from scipy.spatial import distance as sci_distance
from sklearn import cluster as sk_cluster
################################################################################################
## Connect to DB and select data
################################################################################################
# Connection string to connect to SQL Server named instance.
conn_str = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server}; SERVER=<server>; DATABASE=tpcxbb_1gb; UID=<username>; PWD=<password>')
input_query = '''SELECT
ss_customer_sk AS customer,
ROUND(COALESCE(returns_count / NULLIF(1.0*orders_count, 0), 0), 7) AS orderRatio,
ROUND(COALESCE(returns_items / NULLIF(1.0*orders_items, 0), 0), 7) AS itemsRatio,
ROUND(COALESCE(returns_money / NULLIF(1.0*orders_money, 0), 0), 7) AS monetaryRatio,
COALESCE(returns_count, 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'''
# Define the columns we wish to import.
column_info = {
"customer": {"type": "integer"},
"orderRatio": {"type": "integer"},
"itemsRatio": {"type": "integer"},
"frequency": {"type": "integer"}
}
Ladda in data i en dataframe
Resultat från frågan returneras till Python med hjälp av funktionen Pandas read_sql . Som en del av processen använder du kolumninformationen som du definierade i föregående skript.
customer_data = pd.read_sql(input_query, conn_str)
Visa nu början av dataramen för att kontrollera att den ser korrekt ut.
print("Data frame:", customer_data.head(n=5))
Här är resultatet.
Rows Read: 37336, Total Rows Processed: 37336, Total Chunk Time: 0.172 seconds
Data frame: customer orderRatio itemsRatio monetaryRatio frequency
0 29727.0 0.000000 0.000000 0.000000 0
1 97643.0 0.068182 0.078176 0.037034 3
2 57247.0 0.000000 0.000000 0.000000 0
3 32549.0 0.086957 0.068657 0.031281 4
4 2040.0 0.000000 0.000000 0.000000 0
Rensa resurser
Om du inte tänker fortsätta med den här självstudien, ta bort databasen tpcxbb_1gb.
Nästa steg
I del två av den här självstudieserien har du slutfört följande steg:
- Separera kunder längs olika dimensioner med hjälp av Python
- Läs in data från databasen i en Python-dataram
Om du vill skapa en maskininlärningsmodell som använder dessa kunddata följer du del tre i den här självstudieserien: