Megosztás a következőn keresztül:


Python-oktatóanyag: Adatok előkészítése az ügyfelek sql-alapú gépi tanulással való kategorizálásához

A következőkre vonatkozik: Sql Server 2017 (14.x) és újabb verziók Felügyelt Azure SQL-példány

A négyrészes oktatóanyag-sorozat második részében visszaállítja és előkészíti az adatokat egy adatbázisból a Python használatával. A sorozat későbbi részében ezekkel az adatokkal betaníthat és felszerelhet egy klaszterezési modellt a Python nyelvben az SQL Server Machine Learning Services vagy a Big Data-fürtök révén.

A négyrészes oktatóanyag-sorozat második részében visszaállítja és előkészíti az adatokat egy adatbázisból a Python használatával. A sorozat későbbi részében ezekkel az adatokkal betaníthat és üzembe helyezhet egy fürtözési modellt a Pythonban az SQL Server Machine Learning Services használatával.

A négyrészes oktatóanyag-sorozat második részében visszaállítja és előkészíti az adatokat egy adatbázisból a Python használatával. A sorozat későbbi részében ezekkel az adatokkal betaníthat és üzembe helyezhet egy fürtözési modellt a Pythonban az Azure SQL Managed Instance Machine Learning Services használatával.

Ebben a cikkben megtudhatja, hogyan:

  • Ügyfelek elkülönítése különböző dimenziók mentén a Python használatával
  • Az adatbázis adatainak betöltése Python-adatkeretbe

Az első részben telepítette az előfeltételeket, és visszaállította a mintaadatbázist.

A harmadik részben megtudhatja, hogyan hozhat létre és taníthat be K-Means fürtözési modellt a Pythonban.

A negyedik részben megtanulhatja, hogyan hozhat létre tárolt eljárást egy olyan adatbázisban, amely új adatok alapján képes fürtözést végezni a Pythonban.

Prerequisites

  • Az oktatóanyag második része feltételezi, hogy teljesítette az első rész előfeltételeit.

Ügyfelek elkülönítése

Az ügyfelek klaszterezésére való felkészüléshez először a következő dimenziók mentén kell elkülönítenie az ügyfeleket.

  • orderRatio = visszatérési rendelés aránya (a részben vagy teljesen visszaadott rendelések teljes száma a rendelések teljes számával szemben)
  • itemsRatio = return item ratio (a visszaadott elemek teljes száma és a megvásárolt elemek száma)
  • monetaryRatio = visszatérési összeg aránya (a visszaadott tételek teljes pénzügyi összege a megvásárolt összeggel szemben)
  • frequency = visszatérési gyakoriság

Nyisson meg egy új jegyzetfüzetet az Azure Data Studióban, és írja be a következő szkriptet.

A kapcsolati sztringben szükség szerint cserélje le a kapcsolat részleteit.

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

Adatok betöltése adatkeretbe

A lekérdezés eredményei a Pandas read_sql függvénnyel lesznek visszaadva a Pythonnak. A folyamat részeként az előző szkriptben definiált oszlopadatokat fogja használni.

customer_data = pd.read_sql(input_query, conn_str)

Most jelenítse meg az adatkeret elejét annak ellenőrzéséhez, hogy helyesen néz-e ki.

print("Data frame:", customer_data.head(n=5))

Itt van az eredmények összessége.

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

Erőforrások tisztítása

Ha nem folytatja ezt az oktatóanyagot, törölje a tpcxbb_1gb adatbázist.

Következő lépések

Az oktatóanyag-sorozat második részében az alábbi lépéseket hajtotta végre:

  • Ügyfelek elkülönítése különböző dimenziók mentén a Python használatával
  • Az adatbázis adatainak betöltése Python-adatkeretbe

Az ügyféladatokat használó gépi tanulási modell létrehozásához kövesse az oktatóanyag-sorozat harmadik részét: