Esta es la tercera parte de una serie de tres partes sobre el lenguaje de programación R. La Parte 1 explicó cómo importar datos a R, la Parte 2 se centró en la limpieza de datos (cómo escribir el código R que realizará las tareas básicas de limpieza de datos), y la Parte 3 da una mirada en profundidad a la visualización de datos.
Como aprendimos anteriormente, la aplicabilidad de la R en entornos empresariales sigue atrayendo a nuevos usuarios tanto por su creciente popularidad como por su enfoque pragmático del análisis de datos. Hemos visto cómo los datos pueden ser importados a R desde un archivo de texto delimitado. Y hemos visto cómo escribir código R que realiza tareas básicas de limpieza de datos de una forma que es mucho menos propensa a errores que la manipulación manual de celdas en una hoja de cálculo. Ahora, vamos a sumergirnos directamente en la visualización de datos con algunos ejemplos útiles.
Datos de demostración
Los ejemplos que figuran a continuación requieren un marco de datos rellenado y depurado, como se ha descrito en los artículos anteriores. En ellos se describe la forma en que los datos pueden importarse de un archivo de texto y preprocesarse para obtener una forma adecuada para su análisis y posterior procesamiento. Si no tiene tiempo para revisarlas en detalle, ejecute los siguientes comandos para crear el marco de datos y ejecutar funciones para dar formato a los datos:
library(tidyr)
df <- data.frame(Year = c(2000, rep(NA, 11)),
Mes = as.factor(1:12),
Cuarto = c($0027Q1$0027, rep(NA, 2),
«Q2», rep(NA, 2),
«Q3», rep(NA, 2),
«Q4»,rep(NA, 2)),
Saldo = c(10000,rep(NA, 2), 6000,
rep(NA, 3), 3000,
2000, rep(NA, 2), 1000),
Retirada = c(rep(NA, 3), 4000,
rep(NA, 3), 3000,
1000, rep(NA, 2), 1000)
)
df <- df %>%
llenar (Año, trimestre, balance) %>%
replace_na(list(Withdrawal = 0))
Vista (df)
Estos pasos crean los datos de la muestra y rellenan los valores que faltan. No incluyen código adicional relacionado con el filtrado y la integración de los datos mediante el paquete dplyr que se ha mencionado anteriormente. Estos pasos fueron ejemplos de actividades de exploración de datos independientes, pero los resultados obtenidos no se guardaron para referencia futura. Cualquier filtrado y resumen requerido para las visualizaciones que se indican a continuación se realizará en conjunto con los pasos necesarios para producir el gráfico en sí.
Gráficos de base R
R out-of-the-box incluye un sistema de gráficos que puede crear rápidamente una salida gráfica (en muchos casos, el simple hecho de pasarle datos proporciona un resultado interesante). Otros paquetes de gráficos pueden ser usados para hacer gráficos de mejor apariencia, pero requieren largas y complejas llamadas de funciones para crear incluso el más simple de los gráficos. Consideremos el conjunto de datos de la columna Balance del marco de datos (df). La sintaxis que se utiliza a continuación indica que la columna puede ser visualizada por:
- Introduciendo la variable que hace referencia al df.
- Está a punto de aparecer el signo del dólar que indica una columna en el marco de datos.
- Añadiendo el nombre de la propia columna; en este caso, Balance.
El aviso R y la llamada a la función introducidos por el usuario se muestran en azul; la salida del comando está en negro:
> df$Balance
[1] 10000 10000 10000 6000 6000 6000 3000 2000 [10] 2000 2000 1000El uno y el diez entre paréntesis indican el índice del primer elemento que aparece en la línea: 10000 es el primero, y 2000 (en la segunda línea) es el décimo. La variable df$Balance se conoce como vector en R; es análoga a una matriz o lista en otros lenguajes de programación (una secuencia ordenada de variables que pueden ser referenciadas por su posición o índice). La forma genérica de trazar los objetos R implica simplemente llamar a la gráfica y pasarla a los datos que se van a trazar:
plot(df$Balance)
En RStudio, el gráfico se muestra en el panel Plots (ubicado en la esquina inferior derecha por defecto). Puede hacer clic en el botón Zoom para ver el gráfico en una ventana separada de tamaño variable.
La función de trazado representa fielmente los datos que se le pasan como un trazado de dispersión. Utiliza la posición de la entrada o índice como eje x, el valor contenido en Balance como eje y, y establece las marcas y etiquetas del eje. Aunque esto es correcto, no es la forma en que se podría esperar ver estos datos. Si prefiere un gráfico de barras, puede llamar a la función de gráfico de barras en su lugar:
barplot(df$Balance)
Se presenta un gráfico de barras, pero los ejes x e y no están etiquetados. Afortunadamente, se pueden crear etiquetas regenerando el gráfico y añadiendo argumentos adicionales:
barplot(df$Balance, xlab = $0027Index$0027, ylab=$0027Balance$0027)
Todos estos ejemplos representan una única variable: el equilibrio. En muchos casos, querrás mostrar dos o más. El siguiente ejemplo crea un gráfico de líneas con el mes en el eje x y el saldo en el eje y:
plot(df$Month, df$Balance, type=»l»)
Como puedes ver, los gráficos de base de R hacen que sea fácil crear una trama, pero se necesita el juicio humano para elegir las variables relevantes y seleccionar la función correcta y las opciones relacionadas. Las funciones de los gráficos base hacen buenas conjeturas para los valores por defecto, pero los usuarios más avanzados prefieren elegir explícitamente opciones que produzcan resultados más pulidos.
El paquete ggplot2
El paquete ggplot2 introduce una «Gramática de Gráficos» que esencialmente deconstruye el proceso de producción de gráficos de manera sistemática. Hace explícitas las reglas y características comunes que subyacen a la presentación de la información cuantitativa. A modo de comparación, recrearemos las gráficas ya presentadas usando los gráficos base de arriba:
ggplot(df, aes(x=seq_along(Balance), y=Balance)) + geom_point()
La función ggplot sólo toma un marco de datos como entrada, pero permite referenciar las columnas sin utilizar la sintaxis del signo de dólar que se vio anteriormente. La función aes representa la estética, que mapea los componentes del gráfico a variables particulares. Y la función seq_along es necesaria para referenciar el índice del Balance.
A diferencia de la función de trazado, que trata de crear un gráfico de dispersión por defecto en el ejemplo anterior, la función ggplot no tiene una manera predeterminada de trazar los datos. Necesita la función geom_point() para indicar que los datos se representen como puntos. La función geom_bar() se utiliza en el siguiente ejemplo para crear un gráfico de barras, junto con llamadas a funciones adicionales para dar formato al eje x y a las etiquetas. Se utiliza la función xlab para etiquetar el eje x, y la función scale_x_discrete() para indicar que se deben mostrar valores discretos (números enteros) en lugar de valores continuos que pueden incluir decimales.
ggplot(df, aes(x=seq_along(Balance), y=Balance)) +
geom_bar(stat=»identidad») +
xlab($0027Index$0027) +
scale_x_discrete()
Los patrones se hacen más obvios cuanto más se trabaja con ggplot2; la «gramática» subyacente puede ayudar a sugerir los cambios necesarios para modificar una trama. Basándonos en lo que hemos visto en los dos ejemplos anteriores, podemos razonar que el gráfico de líneas que incluye el mes como el eje x y el equilibrio como el eje y puede ser producido estableciendo el mes como la variable x y usando una función geom para crear gráficos de líneas:
ggplot(df, aes(x=Mes, y=Saldo)) +
geom_line() +
scale_x_discrete()
El creador de ggplot2, Hadley Wickham, también creó los paquetes dplyr y tidyr – y, como resultado, pueden ser integrados sin problemas de maneras sorprendentes. Una serie de declaraciones «pipelined» pueden incluir llamadas a la función ggplot en lugar de pasar datos como primer parámetro. Este ejemplo utiliza un enfoque diferente para establecer los valores del eje x. Especifica valores continuos (en lugar de discretos) pero hace referencia explícita a las rupturas como números enteros:
df %>%
filtro(Retirada> 0) %>%
select(Month, Balance) %>%
arreglar(desc(Mes)) %>%
ggplot(aes(Mes, Balance)) +
geom_bar(stat=»identidad») +
scale_x_continuo(breaks=c(1:12))
Los gráficos creados por ggplot2 tienden a ser visualmente atractivos, pero expertos como Edward Tufte promueven la práctica de «remover despiadadamente la tinta innecesaria». La llamada previa puede tener funciones adicionales añadidas para crear una versión mínima de los datos mostrados:
df %>%
filtro(Retirada> 0) %>%
select(Month, Balance) %>%
arreglar(desc(Mes)) %>%
ggplot(aes(Mes, Balance)) +
geom_bar(stat=»identidad») +
scale_x_continuo(breaks=c(1:12)) +
theme_bw() +
theme(panel.border = element_blank(),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
axis.line = element_blank())
Informes y presentaciones
Los gráficos producidos en R pueden exportarse en formatos estándar y añadirse al documento o presentación de su elección. Puede crearlos fácilmente usando RStudio con las opciones de menú que se muestran a continuación. El código R incorporado en estos documentos se compila para crear un resultado final que muestre los gráficos renderizados y los valores derivados.
Producir documentos de este tipo tiene un valor inmenso. Si se construye adecuadamente, un informe o presentación elaborado de esta manera desterrará los errores que normalmente se producen cuando los datos de una parte de un documento no están sincronizados con una visualización generada a partir de él más adelante en el documento. Además de eliminar esta clase de errores, se puede utilizar el mismo documento para generar resultados diferentes, basados en un conjunto de datos diferentes o actualizados. Esta es otra forma en que RStudio está cerrando la brecha entre las capacidades estadísticas avanzadas del lenguaje R y el software de negocios más popular en uso hoy en día.
Para llevar
Si no estás aprovechando ya todas las ventajas de las muchas características de R, es hora de empezar. Como hemos visto a lo largo de esta serie de tres partes, los usuarios de negocios tienen opciones aparentemente ilimitadas con el lenguaje de programación R. R no sólo puede hacer que su carga de trabajo sea más eficiente, sino que puede ayudar a reducir errores y crear informes y presentaciones que incluyen visualizaciones mucho más sofisticadas de lo que es posible con el software estándar de procesamiento de textos y presentaciones.
Consigue nuestro contenido primero. En tu bandeja de entrada.
1229
Contribuyente
Casimir Saternos
es un desarrollador y arquitecto de software que ha presentado temas relacionados con la R en el RStudio: El screencast Get Started disponible en Pluralsight así como en el sitio de Simple-Talk y en la Red de Tecnología de Oracle. Es el autor de Client Server Web Apps with JavaScript y Java with O$0027Reilly y ha escrito artículos que han aparecido en Java Magazine.