Breve tutorial: visualización de datos en Python con Altair (2024)
Introducción
Introducción a Altair y la Visualización de Datos
Construida sobre una base de Vega y Vega-Lite, Altair ofrece una sintaxis clara para crear impresionantes narrativas visuales a partir de datos crudos.
Aquí te cuento por qué uso Altair al presentar insights basados en datos. En primer lugar, la filosofía de diseño de Altair prioriza una integración estrecha con Pandas, la biblioteca de referencia para manipulación de datos en Python. Esto significa que tus dataframes se transforman directamente en visualizaciones con poca fricción. Además, su sintaxis declarativa te permite describir lo que quieres que el gráfico represente, en lugar de cómo se debe renderizar el gráfico, lo cual, para mí, ahorra mucho tiempo.
Empecemos con un ejemplo simple para familiarizarnos. Importar Altair es tan sencillo como una declaración estándar de importación en Python. Suponiendo que tienes el paquete Altair instalado (pip install altair
o conda install -c conda-forge altair
), así es como comienzas.
import altair as alt
from vega_datasets import data
El conjunto de datos con el que jugaremos es un conjunto de datos de ejemplo incorporado, ideal para captar las capacidades de Altair sin abrumar a los principiantes. El paquete de conjuntos de datos de Vega (vega_datasets
) es un tesoro para aprender y experimentar con datos de muestra.
cars = data.cars()
Ahora tenemos en nuestras manos un conjunto de datos sobre varios coches y sus atributos, como millas por galón (mpg
), número de cilindros, y más. Vamos a visualizar la relación entre el consumo de gasolina y la potencia usando un gráfico de dispersión.
chart = alt.Chart(cars).mark_point().encode(
x='Horsepower:Q',
y='Miles_per_Gallon:Q',
color='Origin:N'
)
chart
Creamos un objeto de gráfico, especificamos el tipo de marca (mark_point()
para puntos de dispersión) y codificamos los ejes. 'Q' significa Cuantitativo, lo que indica que los datos son numéricos. 'N' es para Nominal, representando datos categóricos. También hemos añadido codificación de color basada en el origen del coche para dar una visión más profunda.
Ahora observa la magia que Altair conjura: un gráfico de dispersión interactivo donde cada punto representa un coche, y al pasar el ratón sobre él revela más sobre los datos que representa.
La expresividad de Altair está en su simplicidad. Con solo unas pocas líneas de código, los datos saltan de la hoja de cálculo estática y se transforman en una historia interactiva. Y esto es solo la punta del iceberg. Altair te permite construir visualizaciones complejas y en capas apilando bloques simples.
Encuentro que leer la documentación de Altair me ayuda a solidificar el entendimiento, y cuando se combina con la práctica, convierte a los narradores de datos principiantes en visualizadores experimentados.
Es cierto, e importante que recuerdes, que aprender a visualizar datos con Altair o cualquier otra biblioteca es un proceso iterativo. No te desanimes si tu primer gráfico no cumple tus expectativas. La experimentación lleva a la maestría, y Altair es un mentor astuto.
Esta introducción toca la superficie de Altair. Pronto aprenderás cómo configurar el entorno para usar Altair, crear tu primer gráfico, y eventualmente profundizar en personalizaciones avanzadas e interactividad. Y a medida que avances, recuerda el principio básico que guía a Altair: conciso, declarativo y analítico. Estos son los atributos de una narración visual de datos eficiente.
Configuración de su Entorno para Altair
Antes de sumergirnos en el diseño de visualizaciones impresionantes con Altair, vamos a preparar nuestro entorno para que todo funcione sin problemas. Te guiaré paso a paso, tal como lo hice cuando exploré Altair por primera vez.
Lo primero es asegurarnos de tener Python instalado. Altair es una librería de Python, así que es imprescindible. Descarga Python desde el sitio oficial (https://www.python.org/) si aún no lo tienes en tu computadora. Recomiendo optar por Python 3.6 o una versión más nueva, ya que Altair funciona mejor con estas versiones.
Con Python listo, abre tu terminal e instala Altair usando pip, el instalador de paquetes de Python. Aquí tienes el comando que usé:
pip install altair vega_datasets
Altair tiene algunas dependencias, como Pandas y Vega, pero pip se encarga de instalarlas por ti. En caso de que te interese, Vega es el lenguaje de gramática de visualización que subyace a Altair, proporcionando un lenguaje declarativo para crear, guardar y compartir diseños de visualización interactiva.
A continuación, querrás un entorno de desarrollo interactivo (IDE) para codificar. Yo prefiero trabajar con Jupyter Notebooks, especialmente para visualización de datos, porque son muy fáciles de usar y puedes ver tus gráficos justo debajo de los bloques de código. Para configurarlo, corre:
pip install notebook
Luego, inícialo con:
jupyter notebook
Tu navegador web predeterminado se abrirá con la interfaz de Jupyter. Crea un nuevo cuaderno y estarás listo. (Nota: Si prefieres, JupyterLab es una alternativa con más funciones).
Ahora, vamos a probar si Altair se instaló correctamente. En tu nuevo cuaderno, importa Altair con el siguiente código:
import altair as alt
Si no hay errores, ¡felicitaciones! Altair está listo para usarse.
Dado que Altair está basado en trabajar directamente con datos, es importante saber cómo importarlos. El paquete vega_datasets, que instalamos antes, da acceso a una variedad de conjuntos de datos para practicar, lo cual es útil para aprender. Así es como se carga un conjunto simple de datos:
from vega_datasets import data
cars = data.cars()
El código anterior importa un conjunto de datos clásico sobre varios coches y sus características. Para asegurarte de que lo tienes, ejecuta print(cars.head())
y deberías ver las primeras cinco entradas del conjunto de datos.
Finalmente, vamos a crear un gráfico básico para asegurar que todo esté funcionando. La API de Altair es increíblemente intuitiva. Con solo unas pocas líneas, creé un gráfico de dispersión:
chart = alt.Chart(cars).mark_point().encode(
x='Horsepower',
y='Miles_per_Gallon',
color='Origin',
tooltip=['Name', 'Year']
)
chart
Ese bloque de código es todo lo que se necesita para crear un simple gráfico de dispersión interactivo. Al ejecutarlo, deberías ver hermosos puntos circulares que representan diferentes coches en tu cuaderno, coloreados por su origen, y al pasar el ratón sobre ellos, mostrará el nombre del coche y el año, ¡muy genial!
Con estos pasos completos, has configurado con éxito tu entorno para sumergirte en Altair. El resto de este tutorial se dedicará a la parte realmente divertida: crear tu primer gráfico, personalizarlo y construir interactividades que seguramente impresionarán a cualquiera que vea tu trabajo.
Creando tu Primer Gráfico con Altair
Crear tu primer gráfico usando Altair es un paso gratificante en el mundo de la visualización de datos con Python. Te guiaré en el proceso de construir un gráfico de barras básico, que no solo es útil sino también una base sólida para diseñar visualizaciones más complejas más adelante.
Primero, asegúrate de tener tus datos listos. Usaré un ejemplo simple: un conjunto de datos de frutas y sus correspondientes cantidades. Imagina que eres un vendedor de frutas rastreando el inventario. Así podría verse:
import pandas as pd
# Creando un DataFrame simple
data = pd.DataFrame({
'Fruta': ['Manzanas', 'Naranjas', 'Bananas', 'Uvas', 'Duraznos'],
'Cantidad': [23, 17, 35, 29, 12]
})
Con nuestros datos bien organizados en un DataFrame
, podemos comenzar a elaborar un gráfico. Importa Altair – asegúrate de que esté instalado con pip install altair
– ya que no cubriré la instalación aquí.
import altair as alt
La API de Altair es maravillosa por su estructura concisa e intuitiva. Comienza definiendo un objeto Chart, pasándole tus datos, y usa el método mark_bar()
para indicar que estamos creando un gráfico de barras.
# Inicializando el objeto gráfico
chart = alt.Chart(data)
Presta atención a la variable chart; esta será tu herramienta para añadir varios componentes al gráfico.
Después, especifica tus ejes vinculándolos a columnas de tu conjunto de datos. En Altair, esto se hace utilizando la función encode()
, donde asignas los canales x
e y
a los campos de datos.
# Vinculando los ejes a las columnas del conjunto de datos
chart = chart.mark_bar().encode(
x='Fruta',
y='Cantidad'
)
Una vez que codificas los ejes, básicamente le has indicado a Altair qué debe graficar: los nombres de las frutas en el eje x y sus cantidades en el eje y. Maravíllate de lo fácil que fue.
Ahora, para realmente ver el fruto de tu trabajo (juego de palabras intencionado), necesitas mostrar el gráfico. En un notebook de Jupyter, simplemente escribir chart
es suficiente. En un script, podrías querer guardarlo como un archivo HTML, o usar un renderizador apropiado para tu entorno.
# Mostrar el gráfico
chart
Y ahí lo tienes, tu primer gráfico con Altair. El resultado debería ser un gráfico de barras claro y directo que muestra nuestro inventario hipotético de frutas. Si ejecutas esto en un notebook de Jupyter o en un IDE que soporte la renderización de gráficos, verás que aparece una visualización ordenada.
Convertirte en un hábito de examinar tu gráfico después de crearlo es una buena práctica. ¿Las barras representan lo que esperabas? ¿Los datos están correctamente ordenados? Estas autoauditorías te ayudan a detectar errores o a descubrir insights sobre el conjunto de datos que podrías haber pasado por alto.
Lo que acabas de hacer es el primer paso en la narración de datos. Al visualizar las cantidades de frutas, has proporcionado un vistazo del inventario en una forma más rápida de digerir que una tabla de números en bruto.
Ahora, eso no fue tan difícil, ¿verdad? Has sentado las bases para visualizaciones más intrincadas e informativas mientras refuerzas los conceptos básicos de usar Altair. Mantente curioso, experimenta con otros tipos de marcas como mark_line()
o mark_point()
, y recuerda que cada gráfico que construyas mejora tu fluidez en el lenguaje de los datos.
Personalizaciones Avanzadas de Gráficas e Interactividad
Al avanzar en nuestro viaje hacia la visualización de datos con Altair, quiero mostrarte cómo convertir tus gráficos estáticos en obras maestras interactivas. Verás que con un poco de código adicional, puedes permitir que los usuarios filtren, hagan zoom y modifiquen los datos presentados en tiempo real, lo que se convierte en una herramienta poderosa al explorar conjuntos de datos y presentar resultados.
Comencemos personalizando nuestros gráficos con algunas características más avanzadas. Supongamos que tenemos un diagrama de dispersión. Aquí te muestro cómo agregar sugerencias que muestran datos adicionales al pasar el cursor sobre un punto:
import altair as alt
from vega_datasets import data
cars = data.cars()
chart = alt.Chart(cars).mark_point().encode(
x='Horsepower:Q',
y='Miles_per_Gallon:Q',
color='Origin:N',
tooltip=['Name', 'Year', 'Horsepower', 'Miles_per_Gallon']
).interactive()
chart
Ahora, esto es funcional, pero para dar vida a nuestros datos, la interactividad es clave. Aquí te muestro cómo podemos agregar opciones de zoom y pan de manera sencilla:
chart = chart.encode(
x=alt.X('Horsepower:Q', scale=alt.Scale(zero=False)),
y=alt.Y('Miles_per_Gallon:Q', scale=alt.Scale(zero=False))
).properties(
selection=alt.selection_interval(bind='scales')
)
chart
Con selection_interval(bind='scales')
, los usuarios ahora pueden hacer clic y arrastrar para hacer zoom en áreas específicas del gráfico, y desplazarse para explorar diferentes secciones de los datos.
Para un poco de dinamismo, introduzcamos un menú desplegable que filtra nuestro diagrama de dispersión basado en el origen de los autos:
input_dropdown = alt.binding_select(options=cars['Origin'].unique())
selection = alt.selection_single(fields=['Origin'], bind=input_dropdown, name='Country of ')
chart = chart.add_selection(
selection
).transform_filter(
selection
)
chart
Se crea un menú desplegable y el gráfico se actualiza según la selección, bastante atractivo para los usuarios que quieren comparar subconjuntos de datos.
Una de las fortalezas de Altair es su naturaleza declarativa, que traduce convenientemente nuestras intenciones en visuales impresionantes. Para demostrarlo, resaltemos puntos de datos específicos con condiciones. Imagina que estás interesado en autos con alta eficiencia:
highlight = alt.selection(type='single', on='mouseover',
fields=['Miles_per_Gallon'], nearest=True)
base = alt.Chart(cars).encode(
x='Horsepower:Q',
y='Miles_per_Gallon:Q',
color=alt.condition(highlight, 'Origin:N', alt.value('lightgray'))
).add_selection(
highlight
)
base
Ahora al mover el ratón sobre los puntos de datos, se iluminan aquellos con alto Miles_per_Gallon
.
Para finalizar nuestra tutorial, te sugiero experimentar con estas personalizaciones. Intenta combinar filtros, selecciones y otros tipos de gráficos como barras, líneas o áreas. Las posibilidades son casi infinitas y muy atractivas.
Para una mayor exploración, consulta la documentación de Altair o sumérgete en ejemplos del repositorio de Altair en GitHub.
Recuerda, la belleza de Altair reside en tu creatividad con los datos. Los gráficos son tan elocuentes como la historia que estás intentando contar. Así que adelante, toma estos bloques de construcción y crea algo que no solo tú, sino que también otros encontrarán esclarecedor.
Compartir