Compartilhar via


Visualizar dados do SQL Server usando o R (tutorial de SQL Server e RevoScaleR)

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

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

Neste tutorial, você usará as funções do R para exibir a distribuição de valores na coluna creditLine por gênero.

  • Criar variáveis mín-máx para entradas de histograma
  • Visualizar dados em um histograma usando rxHistogram do RevoScaleR
  • Visualizar com gráficos de dispersão usando levelplot do pacote malha incluído na distribuição de R base

Conforme demonstrado nesse tutorial, você pode combinar funções de software livre e específicas da Microsoft no mesmo script.

Adicionar valores máximos e mínimos

Com base nas estatísticas de resumo calculadas no tutorial anterior, você descobriu algumas informações úteis sobre os dados que pode inserir na fonte de dados para cálculos adicionais. Por exemplo, os valores mínimo e máximo podem ser usados para computar histogramas. Neste exercício, adicione os valores alto e baixo à fonte de dados RxSqlServerData.

  1. Comece configurando algumas variáveis temporárias.

    sumDF <- sumOut$sDataFrame
    var <- sumDF$Name
    
  2. Use a variável ccColInfo que você criou no tutorial anterior para definir as colunas na fonte de dados.

    Adicione novas colunas calculadas (numTrans, numIntlTranse creditLine) à coleção de colunas que substituem a definição original. O script a seguir adiciona fatores com base nos valores mínimo e máximo obtidos de sumOut, que está armazenando a saída na memória de rxSummary.

    ccColInfo <- list(
        gender = list(type = "factor",
          levels = c("1", "2"), 
          newLevels = c("Male", "Female")),
        cardholder = list(type = "factor",
          levels = c("1", "2"), 
          newLevels = c("Principal", "Secondary")), 
        state = list(type = "factor", 
          levels = as.character(1:51), 
          newLevels = stateAbb), 
        balance  = list(type = "numeric"),
        numTrans = list(type = "factor", 
          levels = as.character(sumDF[var == "numTrans", "Min"]:sumDF[var == "numTrans", "Max"])),
        numIntlTrans = list(type = "factor",  
            levels = as.character(sumDF[var == "numIntlTrans", "Min"]:sumDF[var =="numIntlTrans", "Max"])),
        creditLine = list(type = "numeric")
            )
    
  3. Após atualizar a coleção de colunas, aplique a instrução a seguir para criar uma versão atualizada da fonte de dados SQL Server que você definiu anteriormente.

    sqlFraudDS <- RxSqlServerData(
        connectionString = sqlConnString,
        table = sqlFraudTable,
        colInfo = ccColInfo,
        rowsPerRead = sqlRowsPerRead)
    

    A fonte de dados sqlFraudDS agora inclui as novas colunas adicionadas usando ccColInfo.

Neste ponto, as modificações afetam apenas o objeto de fonte de dados em R. Nenhum dado novo foi gravado na tabela de banco de dados ainda. No entanto, você pode usar os dados capturados na variável sumOut para criar visualizações e resumos.

Dica

Se você esquecer qual contexto de computação está usando, execute rxGetComputeContext() . Um valor retornado de "Contexto de Computação de RxLocalSeq" indica que você está executando no contexto de computação local.

Visualizar dados usando o rxHistogram

  1. Use o seguinte código R para chamar a função rxHistogram e passar uma fórmula e fonte de dados. Você pode executá-lo localmente a princípio, para ver os resultados esperados e quanto tempo demora.

    rxHistogram(~creditLine|gender, data = sqlFraudDS,  histType = "Percent")
    

    Internamente, rxHistogram chama a função rxCube , que está incluída no pacote RevoScaleR . rxCube gera uma única lista (ou quadro de dados) que contém uma coluna para cada variável especificada na fórmula, além de uma coluna de contagens.

  2. Agora, defina o contexto de computação para o computador remoto do SQL Server e execute rxHistogram novamente.

    rxSetComputeContext(sqlCompute)
    rxHistogram(~creditLine|gender, data = sqlFraudDS,  histType = "Percent")
    
  3. Os resultados são exatamente os mesmos porque você está usando a mesma fonte de dados, mas na segunda etapa, os cálculos são executados no servidor remoto. Em seguida, os resultados são retornados à estação de trabalho local para plotagem.

Resultados do histograma

Visualizar com gráficos de dispersão

Os gráficos de dispersão são frequentemente usados durante a exploração de dados para comparar a relação entre duas variáveis. Você pode usar pacotes R internos para essa finalidade, com entradas fornecidas por funções de RevoScaleR.

  1. Chame a função rxCube para calcular a média de fraudRisk para cada combinação de numTrans e numIntlTrans:

    cube1 <- rxCube(fraudRisk~F(numTrans):F(numIntlTrans),  data = sqlFraudDS)
    

    Para especificar os grupos usados para calcular os meios de grupo, use a notação F() . Neste exemplo, F(numTrans):F(numIntlTrans) indica que os inteiros nas variáveis numTrans e numIntlTrans devem ser tratados como variáveis categóricas, com um nível para cada valor inteiro.

    O valor retornado padrão de rxCube é um objeto rxCube, que representa uma tabulação cruzada.

  2. Chame a função rxResultsDF para converter os resultados em um quadro de dados que pode ser facilmente usado em uma das funções de plotagem do R padrão.

    cubePlot <- rxResultsDF(cube1)
    

    A função rxCube inclui um argumento opcional, returnDataFrame = TRUE, que você poderá usar para converter os resultados em um quadro de dados diretamente. Por exemplo:

    print(rxCube(fraudRisk~F(numTrans):F(numIntlTrans), data = sqlFraudDS, returnDataFrame = TRUE))

    No entanto, a saída de rxResultsDF é mais limpa e preserva os nomes das colunas de origem. Você pode executar head(cube1) seguido por head(cubePlot) para comparar a saída.

  3. Crie um mapa de calor usando a função levelplot do pacote malha incluído em todas as distribuições do R.

    levelplot(fraudRisk~numTrans*numIntlTrans, data = cubePlot)
    

    Resultados

    Resultados da dispersão

Com essa análise rápida, você pode ver que o risco de fraude aumenta com o número de transações e o número de transações internacionais.

Para saber mais sobre a função rxCube e tabelas cruzadas em geral, confira Resumos de dados com RevoScaleR.

Próximas etapas