Transformar dados usando R (SQL Server e tutorial RevoScaleR)

Aplica-se a: SQL Server 2016 (13.x) e versões posteriores

Este é o tutorial 9 da série de tutoriais RevoScaleR sobre como usar funções RevoScaleR com o SQL Server.

Neste tutorial, vai aprender sobre as funções RevoScaleR para transformar dados em várias fases da sua análise.

  • Use o rxDataStep para criar e transformar um subconjunto de dados
  • Use o rxImport para transformar dados em trânsito para ou a partir de um ficheiro XDF ou de um quadro de dados em memória durante a importação

Embora não seja especificamente para movimentação de dados, as funções rxSummary, rxCube, rxLinMod e rxLogit suportam todas transformações de dados.

Use o rxDataStep para transformar variáveis

A função rxDataStep processa os dados um bloco de cada vez, lendo de uma fonte de dados e escrevendo noutra. Podes especificar as colunas a transformar, as transformações a carregar, e assim por diante.

Para tornar este exemplo interessante, vamos usar uma função de outro pacote R para transformar os dados. O pacote de arranque é um dos pacotes "recomendados", o que significa que o arranque está incluído em todas as distribuições de R, mas não é carregado automaticamente no arranque. Portanto, o pacote já deverá estar disponível na instância do SQL Server configurada para integração com R.

A partir do pacote de arranque , use a função inv.logit, que calcula o inverso de um logit. Ou seja, a função inv.logit converte um logit de volta numa probabilidade na escala [0,1].

Sugestão

Outra forma de obter previsões nesta escala seria definir o parâmetro de tipo para resposta na chamada original ao rxPredict.

  1. Comece por criar uma fonte de dados para armazenar os dados destinados à tabela, ccScoreOutput.

    sqlOutScoreDS <- RxSqlServerData( table =  "ccScoreOutput",  connectionString = sqlConnString, rowsPerRead = sqlRowsPerRead )
    
  2. Adicione outra fonte de dados para armazenar os dados da tabela ccScoreOutput2.

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

    Na nova tabela, armazene todas as variáveis da tabela anterior ccScoreOutput , mais a variável recém-criada.

  3. Defina o contexto de computação para a instância do SQL Server.

    rxSetComputeContext(sqlCompute)
    
  4. Use a função rxSqlServerTableExists para verificar se a tabela ccScoreOutput2 de saída já existe; e, se sim, use a função rxSqlServerDropTable para eliminar a tabela.

    if (rxSqlServerTableExists("ccScoreOutput2"))     rxSqlServerDropTable("ccScoreOutput2")
    
  5. Chame a função rxDataStep e especifique as transformações desejadas numa lista.

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

    Quando defines as transformações aplicadas a cada coluna, podes também especificar quaisquer pacotes R adicionais necessários para realizar as transformações. Para mais informações sobre os tipos de transformações que pode realizar, veja Como transformar e subagrupar dados usando o RevoScaleR.

  6. Chame rxGetVarInfo para ver um resumo das variáveis no novo conjunto de dados.

rxGetVarInfo(sqlOutScoreDS2)

Results

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

As pontuações originais de logit são preservadas, mas foi adicionada uma nova coluna, ccFraudProb, na qual as pontuações de logit são representadas como valores entre 0 e 1.

Note que as variáveis fator foram escritas na tabela ccScoreOutput2 como dados de caracteres. Para os usar como fatores em análises subsequentes, utilize o parâmetro colInfo para especificar os níveis.

Passo seguinte