Python 자습서: SQL 머신러닝으로 고객 분류를 위한 데이터 준비
적용 대상: SQL Server 2017(14.x) 이상 Azure SQL Managed Instance
이 4부 자습서 시리즈의 2부에서는 Python을 사용하여 데이터베이스에서 데이터를 복원하고 준비합니다. 이 시리즈의 후반부에서는 이 데이터를 사용하여 Python을 사용한 SQL Server Machine Learning Services 또는 Big Data Cluster에서 클러스터링 모델을 교육하고 배포합니다.
이 4부 자습서 시리즈의 2부에서는 Python을 사용하여 데이터베이스에서 데이터를 복원하고 준비합니다. 이 시리즈의 후반부에서는 이 데이터를 사용하여 SQL Server Machine Learning Services와 함께 Python에서 클러스터링 모델을 학습시키고 배포합니다.
이 4부 자습서 시리즈의 2부에서는 Python을 사용하여 데이터베이스에서 데이터를 복원하고 준비합니다. 이 시리즈의 후반부에서는 이 데이터를 사용하여 Python에서 Azure SQL Managed Instance Machine Learning Services와 함께 클러스터링 모델을 교육하고 배포합니다.
이 문서에서는 다음을 수행하는 방법을 알아봅니다.
- Python을 사용하여 다양한 차원에 따라 고객 구분
- 데이터베이스의 데이터를 파이썬 데이터 프레임에 로드
1부에서는 필수 구성 요소를 설치하고 샘플 데이터베이스를 복원했습니다.
3부에서는 파이썬에서 K-평균 클러스터링 모델을 만들고 학습하는 방법을 알아봅니다.
4부에서는 새 데이터를 기준으로 Python에서 클러스터링을 수행할 수 있는 저장 프로시저를 데이터베이스에서 만드는 방법을 알아봅니다.
필수 조건
- 이 튜토리얼의 2부에서는 1부의 전제 조건을 충족했다고 가정합니다.
고객 구분
클러스터링 고객을 준비하기 위해 먼저 다음 차원에 따라 고객을 구분합니다.
- orderRatio = 반품 주문 비율(총 주문 수 대비 부분적으로 또는 완전히 반환된 총 주문 수)
- itemsRatio = 반품 항목 비율(구입한 항목 수 대비 반품된 총 항목 수)
- monetaryRatio = 반품 금액 비율(반환된 항목의 총 금액과 구매한 금액)
- frequency = 반품 빈도
Azure Data Studio에서 새 Notebook을 열고 다음 스크립트를 입력합니다.
연결 문자열에서 필요에 따라 연결 세부 정보를 바꿉니다.
# 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"}
}
데이터 프레임에 데이터 로드
쿼리의 결과는 Pandas read_sql 함수를 사용하여 Python으로 반환됩니다. 프로세스의 일부로 이전 스크립트에서 정의한 열 정보를 사용합니다.
customer_data = pd.read_sql(input_query, conn_str)
이제 데이터 프레임의 시작 부분을 표시하여 올바르게 보이는지 확인합니다.
print("Data frame:", customer_data.head(n=5))
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
리소스 정리
이 자습서를 계속 진행하지 않으려면 tpcxbb_1gb 데이터베이스를 삭제하세요.
다음 단계
이 자습서 시리즈의 2부에서는 다음 단계를 완료했습니다.
- Python을 사용하여 다양한 차원에 따라 고객 구분
- 데이터베이스의 데이터를 파이썬 데이터 프레임에 로드
이 고객 데이터를 사용하는 기계 학습 모델을 만들려면 다음 자습서 시리즈의 3부를 따르세요.