Поделиться через


Преобразование данных с помощью языка R (учебник по SQL Server и RevoScaleR)

Область применения: SQL Server 2016 (13.x) и более поздних версий

Эта часть 9 входит в состав серии учебников по RevoScaleR, посвященной использованию функций RevoScaleR в SQL Server.

В этом учебнике вы получите сведения о функциях RevoScaleR для преобразования данных на разных этапах анализа.

  • Использование rxDataStep для создания и преобразования подмножества данных
  • Использование rxImport для преобразования транзитных данных в XDF-файле или в кадре данных в памяти во время импорта

Функции rxSummary, rxCube, rxLinModи rxLogit поддерживают преобразования данных, хотя и не предназначены специально для перемещения данных.

Использование функции rxDataStep для преобразования переменных

Функция rxDataStep обрабатывает данные по одному блоку за раз, считывая их из одного источника данных и записывая в другой. Вы можете указать столбцы, которые нужно преобразовать, загружаемые преобразования и т. д.

Чтобы сделать этот пример интереснее, используем функцию из другого пакета R для преобразования данных. Пакет boot является одним из "рекомендованных" пакетов, то есть boot входит в состав каждого дистрибутива R, но не загружается автоматически при запуске. Поэтому пакет должен быть уже доступен в экземпляре SQL Server, настроенном для интеграции R.

Пакет boot содержит нужную вам функцию inv.logit, которая выполняет обратное логит-преобразование. То есть функция inv.logit преобразует логит обратно в значение вероятности по шкале [0,1].

Совет

Кроме того, чтобы получать прогнозы по этой шкале, можно задать для параметра type значение response в исходном вызове функции rxPredict.

  1. Сначала создайте источник данных, в котором будут храниться данные, предназначенные для таблицы ccScoreOutput.

    sqlOutScoreDS <- RxSqlServerData( table =  "ccScoreOutput",  connectionString = sqlConnString, rowsPerRead = sqlRowsPerRead )
    
  2. Добавьте еще один источник данных, в котором будут храниться данные для таблицы ccScoreOutput2.

    sqlOutScoreDS2 <- RxSqlServerData( table =  "ccScoreOutput2",  connectionString = sqlConnString, rowsPerRead = sqlRowsPerRead )
    

    В новой таблице сохраните все переменные из предыдущей таблицы ccScoreOutput, а также новые переменные.

  3. Задайте контекст вычислений экземпляру SQL Server.

    rxSetComputeContext(sqlCompute)
    
  4. Используйте функцию rxSqlServerTableExists, чтобы проверить наличие таблицы выходных данных ccScoreOutput2. Если таблица существует, удалите ее с помощью функции rxSqlServerDropTable.

    if (rxSqlServerTableExists("ccScoreOutput2"))     rxSqlServerDropTable("ccScoreOutput2")
    
  5. Вызовите функцию rxDataStep и укажите требуемые преобразования в списке.

    rxDataStep(inData = sqlOutScoreDS,
        outFile = sqlOutScoreDS2,
        transforms = list(ccFraudProb = inv.logit(ccFraudLogitScore)),
        transformPackages = "boot",
        overwrite = TRUE)
    

    При определении преобразований, применяемых к каждому столбцу, можно указать дополнительные пакеты R, необходимые для выполнения преобразований. Дополнительные сведения о возможных типах преобразования см. в разделе Преобразование и выделение подмножеств данных с помощью RevoScaleR.

  6. Вызовите функцию rxGetVarInfo для просмотра сводки переменных в новом наборе данных.

rxGetVarInfo(sqlOutScoreDS2)

Результаты

Var 1: ccFraudLogitScore, Type: numeric
Var 2: state, Type: character
Var 3: gender, Type: character
Var 4: cardholder, Type: character
Var 5: balance, Type: integer
Var 6: numTrans, Type: integer
Var 7: numIntlTrans, Type: integer
Var 8: creditLine, Type: integer
Var 9: ccFraudProb, Type: numeric

Исходные оценки логита сохраняются, однако был добавлен новый столбец ccFraudProb, в котором оценки логита представлены значениями от 0 до 1.

Обратите внимание на то, что факторные переменные были записаны в таблицу ccScoreOutput2 как символьные данные. Чтобы использовать их как коэффициенты в последующих операциях анализа, задайте уровни с помощью параметра colInfo .

Следующие шаги