Capítulo 36 Animaciones

Se ha aprendido lo básico acerca de varias herramientas útiles para la visualización de información. El punto en común de lo realizado es que se trata de visualizaciones estáticas.

Recuérdese los estudios sobre la percepción:

No prestamos atención a todo lo que vemos. La visión es selectiva, como los otros sentidos, con el objeto de no abrumarnos. Solemos prestar atención a lo que contrasta con la norma.

Nuestros ojos ven lo que esperamos ver. Y esperamos ver patrones familiares, con los que hemos crecido y nos hemos desarrollado.

La memoria juega un papel importante en la cognición humana, pero es extremadamente limitada. Solo recordamos aquello a lo que atendemos. No recordamos aquello a lo que no prestamos atención.

Entre los atributos preatentivos está el movimiento. No se ha utilizado hasta el momento. Es hora.

Las animaciones se denominan de ese modo porque, a la manera del cine animado, une varias imágenes con la certeza de que nuestro cerebro las unirá generando una percepción de continuidad. El secreto radica en interpolar visualizaciones estáticas para crear esa sensación de imágenes intermedias que se mueven desde una hacia otra.

Nuestro cerebro, por razones evolutivas de supervivencia, es muy perceptivo al movimiento. Nos es imposible dejar de observar algo que se mueve.

La animación resuelve el punto número uno de la lista expuesta. El movimiento capta la atención de nuestro público objetivo. Eso explica que las aplicaciones más usadas sean las que presentan videos. Pero competimos en un medio en el que nuestros clientes son abrumados por propaganda animada, y por mensajes en movimiento, en pantallas publicitarias o en los celulares. Debemos respetar el entregar un mensaje valioso para nuestro público objetivo y que atienda a lo que sus ojos esperan ver, con el objeto de hacer el mensaje comprensible. Realizar animaciones de visualizaciones que atienden a los patrones culturales resuelve el segundo punto.

La memoria está intimamente relacionada con la emoción. Recordamos lo que es memorable, y nada hay más memorable que lo que nos genera sentimientos. He ahí el nicho que explota la visualización publicitaria. La visualización de información para toma de decisiones debe ser racional en el mensaje que transmite, pero puede ser emocional si está enfocada a contar la historia detrás de los datos.

Este curso no desarrolla el Storytelling, pero es una habilidad muy importante si se desea descollar en el mundo de la visualización. Hans Rosling fue un contador de historias con datos en movimiento que marcó un hito. Un ejemplo: https://www.youtube.com/watch?v=RUwS1uAdUcI&t=631s

A continuación se presentan técnicas de animación de visualizaciones estáticas.

Las animaciones imitan lo que se realiza en una cinta de acetato para rodar una película de cine. Se presenta una sucesión de cuadros (fotos) que el cerebro une e interpreta como imágenes en movimiento. 24 imágenes o cuadros por segundo es lo usual en cine y televisión para dar la sensación de continuidad, pero una menor tasa puede llegar a ser ilustrativa de la evolución de los datos en el tiempo como veremos.

Una opción existente para realizar animaciones en Python es el paquete bar_chart_race, especializado en diagramas de barras.

Realicemos la prueba con los datos de la población urbana por países.

##    Anio  Estados Unidos      India  ...     Japón  Indonesia    Brasil
## 0  1976       160611122  138219074  ...  85642808   26596457  67790415
## 1  1977       162256678  143699557  ...  86538157   28001978  70478354
## 2  1978       164005080  149379782  ...  87391419   29468690  73245834
## 3  1979       165847531  155285824  ...  88197927   30996679  76091693
## 4  1980       167551171  161444128  ...  88958689   32591870  79015954
## 
## [5 rows x 38 columns]

Obsérvese que requiere de una base de datos estructurada de una manera poco tradicional. Lo esperable son tres columnas: Año, País y Población. Este paquete espera que la información se pase de “larga” a “ancha”, presentando en las filas cada año y en las columnas los valores de cada categoría.

df.columns
## Index(['Anio', 'Estados Unidos', 'India', 'China', 'Etiopia', 'Polonia',
##        'Malasia', 'Perú', 'Venezuela', 'Iraq', 'Arabia Saudita', 'Canadá',
##        'Argelia', 'Ucrania', 'Vietnam', 'Tailandia', 'Rep. Dem. del Congo',
##        'España', 'Sur África', 'Colombia', 'Argentina', 'Egipto',
##        'Corea del Sur', 'Italia', 'Filipinas', 'Francia', 'Reino Unido',
##        'Banglades', 'Irán', 'Turquía', 'Alemania', 'Pakistan', 'Nigeria',
##        'Mexico', 'Rusia', 'Japón', 'Indonesia', 'Brasil'],
##       dtype='object')

Se debe establecer como índice la variable que evoluciona. Las restantes columnas deberán ser de caracter categórico. La variable que evoluciona es usualmente el tiempo, pero no necesariamente.

df = df.set_index('Anio')

Toma alrededor de minuto y medio renderizar el resultado:

import bar_chart_race as bcr
import pandas as pd
import numpy as np
df = pd.read_csv(data_dir/"Pob_urbana.csv")
df = df.set_index('Anio')
bcr.bar_chart_race(df = df, title = "Crecimiento poblacional", 
                   n_bars=12, orientation='h', cmap = 'tab20b', 
                   steps_per_period = 10,
                   filter_column_colors=True)
## <IPython.core.display.HTML object>

Es un paquete útil para realizar animaciones rápidas, pero no es ajustable el color para cada categoría. Sería útil para diferenciar países por alguna característica. Tal vez un color asociado a la bandera. O agrupar por continentes.

Es resaltable cómo bastan diez cuadros por segundo para generar la sensación de movimiento.

matplotlib, la librería básica de Python tienen la opción de realizar animaciones.

Lectura adicional

https://www.crehana.com/blog/estilo-vida/historia-de-la-animacion-que-no-encontraras-ni-en-wikipedia/

https://www.dexplo.org/bar_chart_race/tutorial/

https://www.youtube.com/watch?v=RCUrpCpGZ5o

https://towardsdatascience.com/making-a-bar-chart-race-plot-using-plotly-made-easy-8dad3b1da955