Руководство по подготовке данных для выполнения кластеризации в R с помощью машинного обучения SQL
Область применения: SQL Server 2016 (13.x) и более поздних версий Управляемый экземпляр SQL Azure
Во второй части этого цикла учебников, состоящего из четырех частей, вы подготовите данные из базы данных для выполнения кластеризации в R с помощью Служб машинного обучения SQL Server или в кластерах больших данных.
Во второй части этого цикла учебников, состоящего из четырех частей, вы подготовите данные из базы данных для выполнения кластеризации в R с помощью служб машинного обучения SQL Server.
Во второй части этого цикла учебников, состоящего из четырех частей, вы подготовите данные из базы данных для выполнения кластеризации в R с помощью служб SQL Server 2016 R.
Во второй части этого цикла учебников, состоящего из четырех частей, вы подготовите данные из базы данных для выполнения кластеризации в R с помощью служб машинного обучения управляемого экземпляра SQL Azure.
В этой статье вы узнаете, как выполнять следующие задачи.
- Разделение клиентов по разным измерениям с использованием языка R.
- Загрузка данных из базы данных в кадр данных R.
В первой части были установлены необходимые компоненты и восстановлена демонстрационная база данных.
В третьей части вы узнаете, как создать и обучить модель кластеризации на основе k-средних в R.
В четвертой части вы узнаете, как создать хранимую процедуру в базе данных, которая может выполнять кластеризацию в R на основе новых данных.
Необходимые компоненты
- Во второй части этого цикла учебников предполагается, что вы уже выполнили первую часть.
Разделение клиентов
Создайте файл RScript в RStudio и выполните следующий сценарий. В SQL-запросе разделение клиентов выполняется по таким измерениям:
- orderRatio = коэффициент возвратов заказов (отношение числа частично или полностью возвращенных заказов к общему числу заказов)
- itemsRatio = коэффициент возврата единицы товара (отношение возвращенных единиц товара к общему числу проданных единиц товара)
- monetaryRatio = коэффициент возврата в денежном выражении (отношение общего объема возвратов к общему объему покупок в денежном выражении)
- frequency = частота возвратов
В функции connStr замените ServerName собственными данными для подключения.
# Define the connection string to connect to the tpcxbb_1gb database
connStr <- "Driver=SQL Server;Server=ServerName;Database=tpcxbb_1gb;uid=Username;pwd=Password"
#Define the query to select data
input_query <- "
SELECT ss_customer_sk AS customer
,round(CASE
WHEN (
(orders_count = 0)
OR (returns_count IS NULL)
OR (orders_count IS NULL)
OR ((returns_count / orders_count) IS NULL)
)
THEN 0.0
ELSE (cast(returns_count AS NCHAR(10)) / orders_count)
END, 7) AS orderRatio
,round(CASE
WHEN (
(orders_items = 0)
OR (returns_items IS NULL)
OR (orders_items IS NULL)
OR ((returns_items / orders_items) IS NULL)
)
THEN 0.0
ELSE (cast(returns_items AS NCHAR(10)) / orders_items)
END, 7) AS itemsRatio
,round(CASE
WHEN (
(orders_money = 0)
OR (returns_money IS NULL)
OR (orders_money IS NULL)
OR ((returns_money / orders_money) IS NULL)
)
THEN 0.0
ELSE (cast(returns_money AS NCHAR(10)) / orders_money)
END, 7) AS monetaryRatio
,round(CASE
WHEN (returns_count IS NULL)
THEN 0.0
ELSE returns_count
END, 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";
Загрузка данных в кадр данных
Теперь воспользуйтесь приведенным ниже сценарием, чтобы вернуть результаты из запроса в кадр данных R.
# Query using input_query and get the results back
# to data frame customer_data
library(RODBC)
ch <- odbcDriverConnect(connStr)
customer_data <- sqlQuery(ch, input_query)
# Take a look at the data just loaded
head(customer_data, n = 5);
Результат должен иметь следующий вид.
customer orderRatio itemsRatio monetaryRatio frequency
1 29727 0 0 0.000000 0
2 26429 0 0 0.041979 1
3 60053 0 0 0.065762 3
4 97643 0 0 0.037034 3
5 32549 0 0 0.031281 4
Очистка ресурсов
Если вы не собираетесь продолжать работу с этим учебником, удалите базу данных tpcxbb_1gb.
Следующие шаги
Во второй части этого цикла учебников вы узнали, как выполнять следующие задачи:
- Разделение клиентов по разным измерениям с использованием языка R.
- Загрузка данных из базы данных в кадр данных R.
Чтобы создать модель машинного обучения, которая использует эти данные о клиентах, перейдите к третьей части этого учебника: