Visualización Declarativa¶
Es un paradigma de visualización en donde se busca preocuparse de los datos y sus relaciones, más que en detalles sin mayor importancia. Algunas características son:
Se especifica lo que se desea hacer.
Los detalles se determinan automáticamente.
Especificación y Ejecución están separadas.
A modo de resumen, se refiere a construir visualizaciones a partir de los siguientes elementos:
Data
Transformation
Marks
Encoding
Scale
Guides
Diferencias entre enfoques
Imperativa |
Declarativa |
---|---|
Especificar cómo se debe hacer algo |
Especificar qué se quiere hacer |
Especificación y ejecución entrelazadas |
Separar especificación de ejecución |
Colocar un círculo rojo aquí y un círculo azul acá |
Mapear |
Ejemplo
El Iris dataset es un conjunto de datos que contine una muestras de tres especies de Iris (Iris setosa, Iris virginica e Iris versicolor). Se midió cuatro rasgos de cada muestra: el largo y ancho del sépalo y pétalo, en centímetros.
Este ejemplo servirá para mostrar una de las mayores diferencias entre una visualización imperativa (como matplotlib
) versus una declarativa (como seaborn
).
# librerias
import os
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
pd.set_option('display.max_columns', 500) # Ver más columnas de los dataframes
# Ver gráficos de matplotlib en jupyter notebook/lab
%matplotlib inline
# cargar datos
iris_df = pd.read_csv(os.path.join("data","iris.csv"))
iris_df.columns = ['sepalLength',
'sepalWidth',
'petalLength',
'petalWidth',
'species']
iris_df.head()
sepalLength | sepalWidth | petalLength | petalWidth | species | |
---|---|---|---|---|---|
0 | 5.1 | 3.5 | 1.4 | 0.2 | setosa |
1 | 4.9 | 3.0 | 1.4 | 0.2 | setosa |
2 | 4.7 | 3.2 | 1.3 | 0.2 | setosa |
3 | 4.6 | 3.1 | 1.5 | 0.2 | setosa |
4 | 5.0 | 3.6 | 1.4 | 0.2 | setosa |
El ejemplo clásico consiste en graficar sepalWidth versus petalLength y colorear por especie.
Imperativo
En matplotlib
sería algo así:
color_map = dict(zip(iris_df["species"].unique(),
["blue", "green", "red"]))
plt.figure(figsize=(10, 6))
for species, group in iris_df.groupby("species"):
plt.scatter(group["petalLength"],
group["sepalWidth"],
color=color_map[species],
alpha=0.3,
edgecolor=None,
label=species,
)
plt.legend(frameon=True, title="species")
plt.xlabel("petalLength")
plt.ylabel("sepalWidth")
plt.show()
Declarativo
En seaborn
sería algo así:
sns.set(rc={'figure.figsize':(10,8)})
sns.scatterplot(
x='petalLength',
y='sepalWidth',
data=iris_df,
hue='species',
palette = ['blue', 'green', 'red']
)
plt.show()