Visualizar datos de SQL Server mediante R (tutorial de SQL Server y RevoScaleR)
Se aplica a: SQL Server 2016 (13.x) y versiones posteriores
Este es el tutorial 6 de la serie de tutoriales de RevoScaleR sobre el uso de las funciones de RevoScaleR con SQL Server.
En este tutorial, usará funciones de R para ver la distribución de valores de la columna creditLine por género.
- Creación de variables mínimo-máximo para entradas de histograma
- Visualización de datos en un histograma mediante rxHistogram de RevoScaleR
- Visualización de gráficos de dispersión con levelplot de lattice incluido en la distribución de R base
Como se muestra en este tutorial, puede combinar funciones de código abierto y específicas de Microsoft en el mismo script.
Adición de valores máximos y mínimos
Según las estadísticas de resumen calculadas del tutorial anterior, ha descubierto alguna información útil sobre los datos que quiere insertar en el origen de datos para llevar a cabo cálculos adicionales. Por ejemplo, puede usar los valores mínimos y máximos para calcular histogramas. En este ejercicio, agregará los valores máximos y mínimos al origen de datos RxSqlServerData.
Empiece por configurar algunas variables temporales.
sumDF <- sumOut$sDataFrame var <- sumDF$Name
Use la variable ccColInfo que ha creado en el tutorial anterior para definir las columnas del origen de datos.
Agregue nuevas columnas calculadas (numTrans, numIntlTrans y creditLine) a la colección de columnas que reemplazan la definición original. El siguiente script agrega factores basados en los valores mínimos y máximos, obtenidos de sumOut, que almacena la salida en memoria 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") )
Después de actualizar la colección de columnas, aplique la siguiente instrucción para crear una versión actualizada del origen de datos SQL Server que ha definido anteriormente.
sqlFraudDS <- RxSqlServerData( connectionString = sqlConnString, table = sqlFraudTable, colInfo = ccColInfo, rowsPerRead = sqlRowsPerRead)
El origen de datos sqlFraudDS ahora incluye las nuevas columnas que ha agregado mediante ccColInfo.
En este momento, las modificaciones solo afectan al objeto de origen de datos en R; aún no se ha escrito ningún dato nuevo en la tabla de la base de datos. En cambio, puede usar los datos que se han capturado en la variable sumOut para crear visualizaciones y resúmenes.
Sugerencia
Si olvida qué contexto de proceso está usando, ejecute rxGetComputeContext() . El valor devuelto "RxLocalSeq Compute Context" indica que se está ejecutando en el contexto de proceso local.
Visualización de los datos mediante rxHistogram
Use el siguiente código de R para llamar a la función rxHistogram y pasar una fórmula y un origen de datos. Puede ejecutar esto localmente en primer lugar para ver los resultados esperados y cuánto tarda.
rxHistogram(~creditLine|gender, data = sqlFraudDS, histType = "Percent")
De manera interna, rxHistogram llama a la función rxCube , que se incluye en el paquete RevoScaleR . rxCube genera una única lista (o trama de datos) que contiene una columna para cada variable que se ha especificado en la fórmula, además de una columna de recuentos.
Ahora, establezca el contexto de proceso en el equipo remoto de SQL Server y ejecute rxHistogram de nuevo.
rxSetComputeContext(sqlCompute) rxHistogram(~creditLine|gender, data = sqlFraudDS, histType = "Percent")
Los resultados son exactamente los mismos, ya que está usando el mismo origen de datos, pero, en el segundo paso, los cálculos se realizan en el servidor remoto. Después, los resultados se devuelven a la estación de trabajo local para el trazado.
Visualización con gráficos de dispersión
Los gráficos de dispersión se suelen usar durante la exploración de datos para comparar la relación entre dos variables. Puede usar paquetes de R integrados con este fin; las funciones de RevoScaleR proporcionarán las entradas.
Llame a la función rxCube para calcular la media de fraudRisk de cada combinación de numTrans y numIntlTrans:
cube1 <- rxCube(fraudRisk~F(numTrans):F(numIntlTrans), data = sqlFraudDS)
Para especificar los grupos que se han usado para calcular medias de grupo, use la notación
F()
. En este ejemplo,F(numTrans):F(numIntlTrans)
indica que los enteros de las variablesnumTrans
ynumIntlTrans
deben tratarse como variables categóricas, con un nivel para cada valor entero.El valor devuelto predeterminado de rxCube es un objeto rxCube que representa una tabulación cruzada.
Llame a la función rxResultsDF para convertir los resultados en una trama de datos que pueda usarse fácilmente en una de las funciones de trazado estándar de R.
cubePlot <- rxResultsDF(cube1)
La función rxCube incluye un argumento opcional, returnDataFrame = TRUE, que puede usar para convertir los resultados en una trama de datos directamente. Por ejemplo:
print(rxCube(fraudRisk~F(numTrans):F(numIntlTrans), data = sqlFraudDS, returnDataFrame = TRUE))
En cambio, el resultado de rxResultsDF es más limpio y conserva los nombres de las columnas de origen. Puede ejecutar
head(cube1)
seguido dehead(cubePlot)
para comparar el resultado.Cree un mapa térmico mediante la función levelplot del paquete lattice que se incluye en todas las distribuciones de R.
levelplot(fraudRisk~numTrans*numIntlTrans, data = cubePlot)
Resultados
En este análisis rápido puede ver que aumenta el riesgo de fraude tanto en el número de transacciones como en el número de transacciones internacionales.
Para más información sobre la función rxCube y las referencias cruzadas, vea Resúmenes de datos mediante RevoScaleR.