¿Cómo hacer un Dashboard muy simple en R? (nota: no es shiny)

Utilizando trelliscope y ggplot para crear gráficas sobre HTML

Rafael González Gouveia
Ciencia y Datos
6 min readFeb 7, 2019

--

Trelliscope Dashboard

¡Hola Mundo! En este artículo me gustaría enseñar cómo hacer un dashboard con Trelliscope de R y también hacer un análisis precio-calidad para vinos de distintos países. Los datos son de Kaggle.

Puedes mirar el resultado final en este enlace.

Siempre me ha interesado saber si un vino más caro, es mejor. Para mí, quitando el color, todos son como iguales! Para los profesionales es diferente y por eso pagan hasta 1000 USD por una botella… Peero, ¿mientras más paguen, será mejor el vino?

Podemos utilizar data science en R para averiguarlo. El repositorio de Zack Thoutt tiene una base de datos con revisiones de vinos de distintos países. Además veremos como integrar a esto modelos lineales y visualización en HTML (para una web por ejemplo).

►Antes de seguir, quiero contarte que estoy preparando videos básicos sobre R. Te invito a mirar el de dataframes y si te gusta, suscríbete al canal ✅ para aprender más de R! Sino también puedes seguir el curso básico en formato escrito desde está página web! Ahora sí continuemos :D ✌️!

Photo by Scott Warman on Unsplash

Las secciones del artículo dividen un flujo de trabajo de ciencia de datos en las siguientes etapas

Descarga > Procesamiento > Modelos > Resultados

Spoiler alert: la conclusión del artículo es que existe una relación entre la puntuación y el logaritmo del precio. O visto de otra forma, si no tienes mucho dinero para una botella de vino (al menos 100 USD), todos van a tener más o menos la misma calidad.

He subido a internet el código, los datos limpios, y resultado final en una página web.

Estoy atento a sugerencias, preguntas o comentarios y también si quieres aprender más sobre Data Science en R, te recomiendo mirar esté video de mi canal de YouTube:

Ahora sí, empecemos.

Descarga

Los datos de las revisiones de vinos están disponibles en la web de Kaggle. Si nunca has descargado de Kaggle, es muy sencillo. Click en Download y se descargará un csv de 51 MB.

Si quieres ir un poco más allá, te invito a mirar el repositorio de Zack Thoutt. Tiene un script en python que genera un json con la base de datos mediante web scrapping (scrape-winemag.py).

Para el desarrollo del problema he decidido utilizar Rstudio para mostrar la utilidad de la librería Trelliscope. Para empezar, cargamos la librería Tidyverse, una colección de paquetes para ciencia de datos en R. Podemos utilizar el siguiente código para cargar los datos en nuestro entorno:

Tenemos 129,971 revisiones de vinos y 14 variables o atributos de estas revisiones. Los datos no presentan duplicados pero sí nulos, los NA.

En este caso nos interesa el precio y los puntos de cada revisión por país. Podemos utilizar ggplot2 para hacer la gráfica (ggplot2 viene con Tidyverse). Para evitar una sobrecarga de puntos, tomamos al azar 10,000 revisiones. El efecto jitter añade una variación aleatoria al eje vertical y, es solo visual. Obtenemos la siguiente gráfica:

Esta gráfica presenta algunos problemas visuales:

  • Muchas revisiones se acumulan para precios bajos.
  • Hay tantos países, que la escala de color es ineficiente.
  • No es muy claro el patrón en los datos.

En la siguiente sección veremos como pulir estos detalles.

Procesamiento

Podemos mejorar la visualización tratando los datos de la siguiente manera:

  • Quitamos los valores nulos del dataset.
  • Filtramos para países que tengan más de 2mil revisiones.
  • Transformamos el precio a una escala logarítmica.

Utilizando dplyr y tidyr (precargados en Tidyverse), podemos realizar estas operaciones con el siguiente código:

El uso del operador pipe %>% y los nombres de las funciones de Tidyverse ayudan en la lectura y facilita la estructura del código. Esto resulta muy útil luego al tener que documentar.

La nueva gráfica muestra que el tratamiento de datos ha tenido, en general, un buen efecto.

Modelos

La idea de los modelos es resumir grandes y complicados conjuntos de datos con pocos números. Como decía el sabio de George Box,

todos los modelos están equivocados, pero algunos son útiles.

Utilizamos modelos de regresión lineal simple por la interpretación de sus parámetros. Los parámetros de interés son pendiente e intercepto, m y b. Describimos la puntuación en función del logaritmo del precio. La ecuación de esta recta sería:

points = m* log(price) + b

Ecuación de la recta vista en un plano cartesiano

Esta familia de modelos comprende todas las infinitas posibilidades para m y b. En lenguaje matemático estamos diciendo que la familia L es

donde tenemos que optimizar (m,b) con respecto a alguna regla de análisis numérico. En el caso de regresión lineal, lo usual es optimizar mínimos cuadrados. Este proceso de optimización se repite para cada país, una recta para Argentina, otra para España, y así.

En R, podemos calcular todos los parámetros al mismo tiempo con el siguiente código:

La función lm viene por defecto en R y sirve para generar modelos lineales. Se introducen las variables en formato de formula y regresa una lista con los resultados del modelo. Con el simbolo $, accedemos a los elemento de la lista. En nuestro caso b y m están guardados en los espacios 1 y 2 de coefficients.

La tabla resultante muestra los parámetros óptimos para cada país.

  • El parámetro b es la puntuación que tendría una botella si costara 1 USD. Alemania empieza con mejor puntuación inicial. Prost!
  • El parámetro m es el crecimiento de la puntuación por unidad de log(price). Para todos los países, m es positivo.
  • La puntuación crece siguiendo una escala logarítmica respecto al precio. Tendríamos que tener mucho dinero para notar una diferencia.

Resultados

Trelliscope es una librería que permite de una forma flexible visualizar grandes y complejos conjuntos de datos creada por Ryan Hafen. Podemos utilizarla para generar una gráfica en formato HTML que podemos subir a cualquier página web.

Para generar la visualización escribimos unas líneas más en nuestro código de ggplot, la función facet_trelliscope. El código quedaría así:

El dashboard interactivo puede mirarse en este link. Se puede interactuar con la cantidad de gráficas, agregar promedios, máximos o mínimos. Filtrar para ciertos rangos y ordenarlos. En mi opinión es una herramienta útil que resuelve el problema de analizar muchas gráficas a la vez.

En Trelliscope podemos filtrar para Argentina, Chile y España.

Conclusiones finales

  • La paquetería de Tidyverse nos permite realizar el procesamiento, visualización y modelado de los datos de una manera sencilla.
  • Los modelos lineales son muy útiles para describir e interpretar los datos.
  • Con Trelliscope obtuvimos un dashboard en formato HTML que podemos fácilmente compartir en la web.
  • En cuanto a los vinos, para un rango de precios no muy elevado, la puntuación de los vinos es más o menos igual.

Espero que hayas aprendido algo del artículo. Si te ha gustado, puedes ver más contenido de programación para Data Science en mi canal de YouTube:

Por mi parte, te animo a mirar el contenido y publicar en Ciencia y Datos. Saludos!

--

--