Comunicando tu análisis de datos
Fecha de la noticia: 18-11-2020

Introducción
En este nuevo post introducimos un tema importante en el sector del análisis de datos y que, sin embargo, suele pasar desapercibido a la mayor parte de la audiencia no especialista. Cuando hablamos de analítica avanzada de datos tendemos a pensar en sofisticadas herramientas y avanzados conocimientos en materia de aprendizaje automático e inteligencia artificial. Sin desmerecer estas habilidades tan demandadas en la actualidad, existen aspectos mucho más básicos del análisis de datos que tienen un impacto mucho mayor en el usuario o consumidor final de resultados. En esta ocasión hablamos de la comunicación del análisis de datos. Una buena comunicación de los resultados y el proceso de un análisis de datos puede marcar la diferencia entre el éxito o el fracaso de un proyecto de analítica de datos.
Comunicación. Un proceso integrado
Podríamos pensar que la comunicación del análisis de datos es un proceso posterior y desacoplado al propio análisis técnico. En definitiva, es algo que se deja para el final. Esto es un error muy común entre los analistas y científicos de datos. La comunicación debe de estar integrada con el proceso de análisis. Desde la perspectiva más táctica de la documentación del código y el proceso de análisis, hasta la comunicación al público final (en forma de presentaciones y/o informes). Todo debe de ser un proceso integrado. De la misma forma que en el mundo del desarrollo de software se ha impuesto la filosofía DevOps, en el espacio del análisis de datos ha de imponerse la filosofía DataOps. En ambos casos, el objetivo es la entrega de valor continua y ágil en forma de software y datos
Gartner define DataOps como “una práctica colaborativa de gestión de datos centrada en la mejora de la comunicación, la integración y la automatización de los flujos de datos entre los responsables de la gestión de datos y los consumidores en una empresa".
Innovation Insight for DataOps
Beneficios de emplear una metodología integrada de análisis y comunicación de datos.
-
Un único proceso controlado y gobernado. Cuando adoptamos DataOps podemos estar seguros de que todas las etapas de análisis de datos se encuentran bajo control, gobernadas y altamente automatizadas. Esto redunda en el control y la seguridad del pipeline de datos.
-
Ciencia de datos reproducible. Cuando comunicamos resultados y/o parte del proceso de análisis de datos, es habitual que otros colaboradores partan de tu trabajo para intentar mejorar o modificar los resultados. A veces, tan solo tratarán de reproducir tus mismos resultados. Si la comunicación final ha formado parte del proceso de una forma integrada y automatizada, tus colaboradores no tendrán problema a la hora de reproducir esos mismos resultados por ellos mismos. De lo contrario, si la comunicación se ha realizado al final del proceso y de forma desacoplada (tanto en el tiempo como en el uso de herramientas diferentes) del análisis, existe una alta probabilidad de que el intento de reproducción falle. Los procesos de desarrollo de software, incluyan o no datos, son altamente iterativos. Esto es, se efectúan cientos si no miles de cambios en los códigos antes de obtener los resultados deseados. Si estos cambios iterativos, por pequeños que sean se desacoplan de la comunicación final, con toda seguridad, el resultado obtenido habrá obviado cambios que harán imposible su reproducción directa.
-
Entrega de valor continua. En multitud de ocasiones he vivido situaciones en las que la preparación de resultados se deja como última fase de un proyecto o proceso de análisis de datos. La mayor parte de los esfuerzos se centran en el desarrollo del análisis de los datos y el desarrollo de algoritmos (cuando corresponde). Este hecho tiene una consecuencia clara. La última tarea es la de preparar la comunicación y por lo tanto es la que menos foco acaba concentrando. Todos los esfuerzos del equipo se han gastado en fases previas. Estamos exhaustos y la documentación y comunicación es lo que nos separa de la entrega del proyecto. Como consecuencia, la documentación del proyecto será insuficiente y la comunicación mediocre. Sin embargo, cuando presentemos los resultados a nuestros clientes, intentaremos desesperadamente convencer de que se ha hecho un trabajo excelente de análisis (y así será) pero nuestra arma es la comunicación que hemos preparada y está será previsiblemente muy mejorable.
-
Mejora en la calidad de la comunicación. Cuando integramos desarrollo y comunicación estamos monitorizando en todo momento lo que finalmente van a consumir nuestros clientes. De esta forma, durante el proceso de análisis, contamos con la agilidad de modificar los resultados que estamos produciendo (en forma de gráficos, tablas, etc.) en tiempo de análisis. En múltiples ocasiones he visto como después de cerrar la fase de análisis y revisar los resultados producidos, nos damos cuenta de que algo no se entiende bien o es mejorable en términos de comunicación. Pueden ser cosas sencillas como los colores de una leyenda o los dígitos decimales en una tabla. Sin embargo, si el análisis se ha realizado con herramientas muy diferentes y desacopladas de la producción de resultados (por ejemplo, una presentación), la sola idea de volver a ejecutar el proyecto de análisis para modificar pequeños detalles le hará saltar las alarmas a cualquier analista o científico de datos. Con la metodología DataOps y las herramientas adecuadas, tan solo tenemos que volver a ejecutar la pipeline de datos con los cambios correspondientes y todo se re-creará de forma automática.
Herramientas de comunicación integrada
Hemos hablado de la metodología y sus beneficios, pero debemos saber que las herramientas para implementar de forma correcta la estrategia juegan un papel importante. Sin ir más lejos, este post se ha realizado íntegramente con un pipeline de datos que en el mismo proceso integra: (1) la redacción de este post, (2) la creación de un sitio web para su publicación, (3) el versionado del código y (4) el análisis de datos, aunque en este caso, no es relevante, pues tan solo sirve para ilustrar que es una parte más del proceso.
Sin entrar en demasiados detalles técnicos, en el mismo entorno de trabajo (y programación y redacción de documentos) RStudio y utilizando los complementos de Markdown y Blogdown podemos crear un sitio web completo en el que podemos ir publicando nuestros posts, en este caso sobre análisis de datos. La explicación detallada sobre la creación del sitio web que alojará los siguientes posts de contenido lo dejaremos para otro momento. En estos momentos vamos a centrarnos en la generación de este post de contenido en el que mostraremos un ejemplo de análisis de datos.
Para ilustrar el proceso vamos a utilizar este conjunto de datos disponible en datos.gob.es. Se trata de un conjunto de datos que recoge los usos de la tarjeta ciudadana del Ayuntamiento de Gijón, durante 2019 en los diferentes servicios disponibles en la ciudad.
Como podemos comprobar, en este punto, estamos ya integrando la comunicación de un análisis de datos con su propio análisis. Lo primero que vamos a hacer es cargar el conjunto de datos y ver una previsualización del mismo.
file <- "http://opendata.gijon.es/descargar.php?id=590&tipo=EXCEL"
Citicard <- read_csv2(file, col_names = TRUE)
head(Citicard)
Fecha | Servicio | Instalacion | Usos |
---|---|---|---|
2019-01-01 | Aseos públicos | Avda Carlos Marx | 642 |
2019-01-01 | Aseos públicos | Avda del Llano | 594 |
2019-01-01 | Aseos públicos | C/ Puerto el Pontón | 139 |
2019-01-01 | Aseos públicos | Cerro Santa Catalina | 146 |
2019-01-01 | Aseos públicos | Donato Argüelles | 1095 |
2019-01-01 | Aseos públicos | El Rinconín | 604 |
A continuación vamos a generar un análisis obvio y sencillo en cualquier fase exploratoria (EDA - Exploratory Data Analysis) de un conjunto de datos nuevo. Vamos a agregar el conjunto de datos por Fecha y Servicios, obteniendo así la suma de usos de la tarjeta por fecha y tipo de servicio.
Citi_agg <- Citicard %>%
group_by(Fecha, Servicio) %>%
summarise(Usos = sum(Usos))
head(Citi_agg)
Fecha | Servicio | Usos |
---|---|---|
2019-01-01 | Aseos públicos | 17251 |
2019-01-01 | Préstamos bibliotecas | 15369 |
2019-01-01 | Transporte | 1201471 |
2019-02-01 | Aseos públicos | 18186 |
2019-02-01 | Préstamos bibliotecas | 14716 |
2019-02-01 | Transporte | 1158109 |
Graficamos el resultado y observamos como el uso mayoritario de la tarjeta ciudadana es el pago del transporte público. Dado que hemos generado un gráfico interactivo, podemos seleccionar en los controles Autoescala y hacer click sobre la leyenda para eliminar la columna del transporte y analizar con detalles las diferencias entre el uso de Aseos públicos y Préstamos en bibliotecas.
Citi_fig <- ggplot(Citi_agg, aes(x=Fecha, y=Usos/1000, fill=Servicio)) +
geom_bar(stat="identity", colour="white") + labs(x = "Servicio", y = "Uso Tarjeta (en miles)") +
theme(
axis.title.x = element_text(color = "black", size = 14, face = "bold"),
axis.title.y = element_text(color = "black", size = 10, face = "bold")
)
ggplotly(Citi_fig)
Cuando descartamos por un momento el uso de la tarjeta como medio de pago en el transporte público, observamos el mayor uso de la tarjeta para el acceso a los aseos públicos y en menor medida para el préstamo de medios en bibliotecas públicas. De la misma forma, el uso del zoom, nos permite ver con mayor comodidad y detalles estas diferencias en meses concretos.
En caso de preguntarnos cual es la distribución del uso total de la Tarjeta Ciudadana a lo largo del 2019, podemos generar la siguiente visualización y constatar el resultado evidente de que el uso en el trasnporte público representa el 97%.
Tot_2019_uses <- sum(Citi_agg$Usos)
Citi_agg_tot <- Citicard %>%
group_by(Servicio) %>%
summarise(Usos = 100*sum(Usos)/Tot_2019_uses) %>%
arrange(desc(Usos))
knitr::kable(Citi_agg_tot, "pipe", digits=0, col.names=(c("Servicio Usado", "Uso Tarjeta en %")))
Servicio Usado | Uso Tarjeta en % |
---|---|
Transporte | 97 |
Aseos públicos | 2 |
Préstamos bibliotecas | 1 |
ggplot(Citi_agg_tot,aes(x=Servicio, y=Usos, fill=Servicio)) +
geom_bar(stat="identity", colour="white") + labs(x = "Servicio", y = "Uso en %") +
theme(
axis.title.x = element_text(color = "black", size = 14, face = "bold"),
axis.title.y = element_text(color = "black", size = 14, face = "bold")
) -> Citi_fig2
ggplotly(Citi_fig2)
Terminamos. En este post, hemos visto como una estrategia integrada de comunicación nos permite integrar nuestro análisis técnico con la generación de resultados consumibles en forma de tablas y gráficos listos para el usuario final. En el mismo proceso integramos los cálculos (agregaciones, normalizaciones, etc.) con la producción de resultados de calidad y con un formato adaptado al lector no especialista. En una estrategia no integrada de comunicación, hubieramos post-procesado los resultados del análisis técnico en otro momento del tiempo posterior y, probablemente, en una herramienta diferente. Esto nos hubiera hecho ser menos productivos a la vez que perderíamos la traza de los pasos que hemos seguido para generar el resultado final.
Conclusiones
La comunicación es un aspecto fundamental del análisis de datos. Una mala comunicación puede echar por tierra un excelente trabajo de análisis de datos, por muy sofisticado que este sea. Para realizar una buena comunicación es necesario implementar una estrategia integrada de comunicación. Esto pasa por adoptar la filosofía DataOps para desarrollar un trabajo excelente, reproducible y automatizado de los flujos de datos. Esperamos que os haya gustado el tema de este post y volveremos más adelante con contenidos sobre DataOps y comunicación de datos. ¡Hasta pronto!
Contenido elaborado por Alejandro Alija,experto en Transformación Digital e Innovación.
Los contenidos y los puntos de vista reflejados en esta publicación son responsabilidad exclusiva de su autor.