Independientemente de las herramientas utilizadas para el análisis de datos, normalmente la manera de exponer los resultados es un documento de Word o una presentación Powerpoint.
En esta entrada crearemos una presentación Powerpoint e insertaremos una serie de gráficos y texto programáticamente, utilizando juntos los paquetes OfficeR y rvg. También aprovecharemos la ocasión para presentar (para quien no lo conozca) el operador ‘Pipe’ de gran utilidad a la hora de anidar funciones.
El paquete OfficeR permite acceder y manipular documentos Word y presentaciones PowerPoint, mientras que rvg, nos permitirá insertar las visualizaciones de R como objetos de Office que podremos manipular desde el documento.
Vamos a crear un template de PowerPoint en blanco, sin diapositivas. A continuación, utilizando R añadiremos diapositivas con texto y gráficos.
Advertencia, no es objeto de este post llegar a una presentación ‘bonita’, sino mostrar la funcionalidad 🙂
Necesitaremos tener instalados los paquetes:
– officer
– magrittr
– ggplot2
– rvg
Estos paquetes instalaran otros por tener dependencia.
Cargamos los paquetes:
library(officer) library(magrittr) library(ggplot2) library(rvg)
Vamos a cargar en la sesión de R el template Powerpoint que guardamos antes, y comprobaremos la información del ‘layout’ del objeto rpptx con ‘layout_summary’, esta función también forma parte del paquete OfficeR y nos ofrece información sobre el diseño de las diapositivas.
my_presentation <- read_pptx("C:/BlogR/template.pptx") layout_summary(my_presentation)
Esto nos devuelve:
layout master 1 Title Slide Office Theme 2 Title and Vertical Text Office Theme 3 Vertical Title and Text Office Theme 4 Title and Content Office Theme 5 Section Header Office Theme 6 Two Content Office Theme 7 Comparison Office Theme 8 Title Only Office Theme 9 Blank Office Theme 10 Content with Caption Office Theme 11 Picture with Caption Office Theme
Si quisiéramos cambiar algo en el máster de template.pptx deberíamos abrir la presentación Powerpoint y en ‘Slide Master’ dentro de ‘View’, ‘Master Layout’ cambiar los diseños:
A continuación, vamos a definir una serie de variables con el contenido que vamos a incluir en la presentación:
title1 <- "Summary" title2 <- "Chart from image" title3 <- "Editable chart using barplot()" intro <- "In this post we are playing around to create and edit a Powerpoint presentation using R" text1 <- "This visualization is embeded from an image file" text2 <- "Now, this is an editable visualization created using barplot()" footer <- "SolidQ 2017"
Paréntesis antes de continuar: El ‘Pipe’!
Antes de avanzar vamos a comentar el operador ‘%>%’ para que se entienda claramente el código a continuación. Este operador pertenece al paquete magrittr y nos permite ir anidando el código. Para verlo claro lo mejor es un ejemplo simple:
Supongamos que quiero resolver y = cos(log(x)), esto lo resolveríamos como:
y <- x %>% log() %>% cos()
Como vemos es una manera de anidar el código escribiendo ‘de dentro hacia afuera’ y en ocasiones puede resultar mucho más cómodo de escribir, y por supuesto, de leer.
Si buscamos sobre el pipe en R encontraremos múltiples referencias al lenguaje F#, pero si no se ha tenido la fortuna de utilizar este lenguaje (como es el caso de un servidor), quizá suene más ‘|’ de Shell o Terminal, en donde se anidan comandos.
Ahora que conocemos %>% vamos a añadir una diapositiva a nuestra presentación:
Repasemos el flujo que se puede ver en el código de arriba.
– Leemos y pasamos el fichero template.pptx al objeto my_presentation.
– Añadimos una diapositivas con add_slide, le decimos que use el diseño (layout) ‘Title Slide’ y el master ‘Office Theme’.
– Con ph_with_text añadimos el texto de tipo ‘ctrTitle’, es decir el título.
– De la misma forma añadimos un subtítulo ‘subTitle’ y un pie de página ‘ftr’.
Continuando de la misma forma añadiremos más diapositivas con texto y gráficos, resaltamos ph_with_img() a la que le pasamos la ruta de la imagen y ph_with_vg() a la que le pasamos la gráfica de R directamente . Utilizaremos datos aleatorios de ejemplo porque en esta sesión de R no tenemos ningún dataset de ejemplo cargado, pero nos sirve para ilustrar la idea.
my_presentation <- # Load template read_pptx("C:/BlogR/template.pptx") %>% # Add a slide add_slide(layout="Title Slide", master="Office Theme") %>% # Add title (ctrTitle) ph_with_text(type = "ctrTitle", str = "My first PPT made in R!!") %>% # Add subtitle (subTitle) ph_with_text(type = "subTitle", str = "A simple way to embed R visualizations in Office!!") %>% ph_with_text(type = "ftr", str = footer ) %>% # Summary Slide, add text using variables: add_slide(layout = "Title and Content", master = "Office Theme") %>% ph_with_text(type = "title", index = 1, str = title1) %>% ph_with_text(type="body",str = intro ) %>% ph_with_text(type = "ftr", str = footer ) %>% ph_with_text(type = "sldNum", str = "1" ) %>% ph_with_text(type = "dt", str = format(Sys.Date(),"%B %d,%Y")) %>% # Slide with Chart from an image: add_slide(layout = "Content with Caption", master = "Office Theme") %>% ph_with_text(type = "title", index = 1, str = title2) %>% ph_with_text(type = "body", index = 2,str = text1) %>% ph_with_img(type = "body", index = 1, src = "C:/BlogR/visualization.PNG") %>% ph_with_text(type = "ftr", str = footer ) %>% ph_with_text(type = "sldNum", str = "2" ) %>% ph_with_text(type = "dt", str = format(Sys.Date(),"%B %d,%Y")) %>% # Slide with chart from R add_slide(layout = "Content with Caption", master = "Office Theme") %>% ph_with_text(type = "title", index = 1, str = title3) %>% ph_with_text(type = "body", index = 2,str = text2) %>% ph_with_vg(code = barplot(sample(1:100,15),xlab="Day",ylab="SaleAmount"), type = "body") %>% ph_with_text(type = "ftr", str = footer ) %>% ph_with_text(type = "sldNum", str = "3" ) %>% ph_with_text(type = "dt", str = format(Sys.Date(),"%B %d,%Y")) %>% print( target = "C:/BlogR/officer_sample.pptx") %>% invisible()
El resultado:
Y en particular en la última diapositiva tendremos un gráfico editable desde el Powerpoint 🙂
Esto es todo por hoy, ahí queda este recurso como uno más entre las capacidades de ‘autodocumentación’ que ofrece R.
A gusto del consumidor queda el cómo aprovechar estas funcionalidades.
Saludos!