Una introducción a seaborn
Seaborn es una biblioteca para crear gráficos estadísticos en Python. Se basa en matplotlib y se integra estrechamente con las estructuras de datos de pandas .
Seaborn te ayuda a explorar y comprender tus datos. Sus funciones de graficación operan sobre dataframes y arrays que contienen conjuntos de datos completos y realizan internamente el mapeo semántico y la agregación estadística necesarios para generar gráficos informativos. Su API declarativa, orientada a conjuntos de datos, te permite concentrarte en el significado de los diferentes elementos de tus gráficos, en lugar de en los detalles de cómo dibujarlos.
Aquí tenéis un ejemplo de lo que puede hacer Seaborn:
>># Import seaborn
>>import seaborn as sns
>># Apply the default theme
>>sns.set_theme()
>># Load an example dataset
>>tips = sns.load_dataset("tips")
>># Create a visualization
>>sns.relplot(
>> data=tips,
>> x="total_bill", y="tip", col="time",
>> hue="smoker", style="smoker", size="size",
>>)
Han ocurrido varias cosas aquí. Vamos a repasarlas una por una:
# Import seaborn
import seaborn as sns
Seaborn es la única biblioteca que necesitamos importar para este sencillo ejemplo. Por convención, se importa con la sintaxis abreviada sns.
Seaborn utiliza Matplotlib para generar sus gráficos. Para trabajar de forma interactiva, se recomienda usar una interfaz Jupyter/IPython en modo Matplotlib ; de lo contrario, tendrá que llamar a la función correspondiente matplotlib.pyplot.show()cada vez que desee visualizar el gráfico.
# Apply the default theme
sns.set_theme()
Esto utiliza el sistema rcParam de matplotlib y afectará la apariencia de todos los gráficos de matplotlib, incluso si no los creas con seaborn. Además del tema predeterminado, existen varias opciones adicionales , y puedes controlar de forma independiente el estilo y la escala del gráfico para adaptar rápidamente tu trabajo a diferentes contextos de presentación (por ejemplo, crear una versión de tu figura con fuentes legibles para proyectar durante una charla). Si te gustan los valores predeterminados de matplotlib o prefieres otro tema, puedes omitir este paso y seguir utilizando las funciones de graficación de seaborn.
# Load an example dataset
tips = sns.load_dataset("tips")
La mayor parte del código en la documentación utiliza la load_dataset()función para acceder rápidamente a un conjunto de datos de ejemplo. Estos conjuntos de datos no tienen nada de especial: son simplemente dataframes de pandas, y podríamos haberlos cargado pandas.read_csv()o creado manualmente. La mayoría de los ejemplos en la documentación especifican datos mediante dataframes de pandas, pero seaborn es muy flexible en cuanto a las estructuras de datos que acepta.
# Create a visualization
sns.relplot(
    data=tips,
    x="total_bill", y="tip", col="time",
    hue="smoker", style="smoker", size="size",
)
Este gráfico muestra la relación entre cinco variables del conjunto de datos `tips` mediante una sola llamada a la función `seaborn` relplot(). Observe que solo proporcionamos los nombres de las variables y sus funciones en el gráfico. A diferencia de cuando se usa `matplotlib` directamente, no fue necesario especificar atributos de los elementos del gráfico en términos de valores de color o códigos de marcadores. Internamente, `seaborn` se encargó de la traducción de los valores del dataframe a argumentos que `matplotlib` entiende. Este enfoque declarativo le permite centrarse en las preguntas que desea responder, en lugar de en los detalles de cómo controlar `matplotlib`.
Una API de alto nivel para gráficos estadísticos
No existe una única forma óptima de visualizar datos. Diferentes preguntas se responden mejor con diferentes gráficos. Seaborn facilita el cambio entre distintas representaciones visuales mediante una API consistente orientada a conjuntos de datos.
La función relplot()recibe ese nombre porque está diseñada para visualizar diversas relaciones estadísticas . Si bien los diagramas de dispersión suelen ser eficaces, las relaciones en las que una variable representa una medida del tiempo se representan mejor mediante una línea. La relplot()función cuenta con un práctico kindparámetro que permite cambiar fácilmente a esta representación alternativa.
dots = sns.load_dataset("dots")
sns.relplot(
    data=dots, kind="line",
    x="time", y="firing_rate", col="align",
    hue="choice", size="coherence", style="choice",
    facet_kws=dict(sharex=False),
)

Observe cómo se utilizan los parámetros `x` e ` sizey` styletanto en el gráfico de dispersión como en el de líneas, pero afectan a ambas visualizaciones de forma diferente: modifican el área del marcador y el símbolo en el gráfico de dispersión, mientras que en el de líneas modifican el ancho de línea y el interlineado. No fue necesario tener en cuenta esos detalles, lo que nos permitió centrarnos en la estructura general del gráfico y en la información que queríamos transmitir.
Estimación estadística
A menudo, nos interesa el valor promedio de una variable en función de otras. Muchas funciones de Seaborn realizan automáticamente la estimación estadística necesaria para responder a estas preguntas:
fmri = sns.load_dataset("fmri")
sns.relplot(
    data=fmri, kind="line",
    x="timepoint", y="signal", col="region",
    hue="event", style="event",
)

Cuando se estiman valores estadísticos, seaborn utilizará el remuestreo bootstrap para calcular intervalos de confianza y dibujar barras de error que representen la incertidumbre de la estimación.
La estimación estadística en Seaborn va más allá de la estadística descriptiva. Por ejemplo, es posible mejorar un diagrama de dispersión incluyendo un modelo de regresión lineal (y su incertidumbre) mediante lmplot():
sns.lmplot(data=tips, x="total_bill", y="tip", col="time", hue="smoker")

Representaciones distribucionales
Los análisis estadísticos requieren conocer la distribución de las variables en el conjunto de datos. La función seaborn displot()admite varios métodos para visualizar distribuciones. Estos incluyen técnicas clásicas como los histogramas y métodos computacionalmente intensivos como la estimación de densidad kernel:
sns.displot(data=tips, x="total_bill", col="time", kde=True)

Seaborn también intenta promover técnicas poderosas pero menos conocidas, como el cálculo y la representación gráfica de la función de distribución acumulativa empírica de los datos:
sns.displot(data=tips, kind="ecdf", x="total_bill", col="time", hue="smoker", rug=True)

Gráficos para datos categóricos
En Seaborn, existen varios tipos de gráficos especializados orientados a la visualización de datos categóricos. Se puede acceder a ellos mediante [método/función/método] catplot(). Estos gráficos ofrecen diferentes niveles de detalle. En el nivel más detallado, puede que desee ver todas las observaciones dibujando un gráfico de dispersión: un diagrama de dispersión que ajusta las posiciones de los puntos a lo largo del eje categórico para que no se superpongan.
sns.catplot(data=tips, kind="swarm", x="day", y="total_bill", hue="smoker")

Alternativamente, se podría utilizar la estimación de densidad kernel para representar la distribución subyacente de la que se muestrean los puntos:
sns.catplot(data=tips, kind="violin", x="day", y="total_bill", hue="smoker", split=True)

O bien, podría mostrar únicamente el valor medio y su intervalo de confianza dentro de cada categoría anidada:
sns.catplot(data=tips, kind="bar", x="day", y="total_bill", hue="smoker")

Vistas multivariadas en conjuntos de datos complejos
Algunas funciones de Seaborn combinan varios tipos de gráficos para ofrecer rápidamente resúmenes informativos de un conjunto de datos. Una de ellas, `src` jointplot(), se centra en una única relación. Representa gráficamente la distribución conjunta entre dos variables junto con la distribución marginal de cada variable:
penguins = sns.load_dataset("penguins")
sns.jointplot(data=penguins, x="flipper_length_mm", y="bill_length_mm", hue="species")

La otra, pairplot(), adopta una perspectiva más amplia: muestra las distribuciones conjuntas y marginales para todas las relaciones por pares y para cada variable, respectivamente:
sns.pairplot(data=penguins, hue="species")

Herramientas de nivel inferior para la creación de figuras
Estas herramientas funcionan combinando funciones de trazado a nivel de ejes con objetos que gestionan el diseño de la figura, vinculando la estructura de un conjunto de datos a una cuadrícula de ejes . Ambos elementos forman parte de la API pública y se pueden usar directamente para crear figuras complejas con solo unas pocas líneas de código adicionales.
g = sns.PairGrid(penguins, hue="species", corner=True)
g.map_lower(sns.kdeplot, hue=None, levels=5, color=".2")
g.map_lower(sns.scatterplot, marker="+")
g.map_diag(sns.histplot, element="step", linewidth=0, kde=True)
g.add_legend(frameon=True)
g.legend.set_bbox_to_anchor((.61, .6))

Valores predeterminados con opiniones definidas y personalización flexible
Seaborn crea gráficos completos con una sola llamada a función: cuando sea posible, sus funciones agregarán automáticamente etiquetas de ejes informativas y leyendas que explican las asignaciones semánticas en el gráfico.
En muchos casos, seaborn también elegirá valores predeterminados para sus parámetros según las características de los datos. Por ejemplo, las asignaciones de color que hemos visto hasta ahora usaban distintos tonos (azul, naranja y, a veces, verde) para representar diferentes niveles de las variables categóricas asignadas hue. Al asignar una variable numérica, algunas funciones cambiarán a un gradiente continuo.
sns.relplot(
    data=penguins,
    x="bill_length_mm", y="bill_depth_mm", hue="body_mass_g"
)

Cuando estés listo para compartir o publicar tu trabajo, probablemente querrás perfeccionar la figura más allá de lo que ofrecen las opciones predeterminadas. Seaborn permite varios niveles de personalización. Define múltiples temas integrados que se aplican a todas las figuras, sus funciones tienen parámetros estandarizados que pueden modificar las asignaciones semánticas de cada gráfico, y se pasan argumentos de palabras clave adicionales a los gráficos de Matplotlib, lo que permite un mayor control. Una vez que hayas creado un gráfico, sus propiedades se pueden modificar tanto a través de la API de Seaborn como accediendo a la capa de Matplotlib para realizar ajustes más precisos.
sns.set_theme(style="ticks", font_scale=1.25)
g = sns.relplot(
    data=penguins,
    x="bill_length_mm", y="bill_depth_mm", hue="body_mass_g",
    palette="crest", marker="x", s=100,
)
g.set_axis_labels("Bill length (mm)", "Bill depth (mm)", labelpad=10)
g.legend.set_title("Body mass (g)")
g.figure.set_size_inches(6.5, 4.5)
g.ax.margins(.15)
g.despine(trim=True)

Relación con matplotlib
La integración de Seaborn con matplotlib le permite usarlo en los numerosos entornos que admite matplotlib, incluyendo análisis exploratorio en cuadernos, interacción en tiempo real en aplicaciones GUI y salida de archivo en varios formatos rasterizados y vectoriales.
Si bien puedes ser productivo usando solo las funciones de seaborn, la personalización completa de tus gráficos requerirá cierto conocimiento de los conceptos y la API de matplotlib. Un aspecto de la curva de aprendizaje para los nuevos usuarios de seaborn será saber cuándo es necesario recurrir a matplotlib para lograr una personalización específica. Por otro lado, los usuarios que ya conocen matplotlib encontrarán que gran parte de sus conocimientos son transferibles.
Matplotlib cuenta con una API completa y potente; prácticamente cualquier atributo de la figura se puede modificar a tu gusto. La combinación de la interfaz de alto nivel de Seaborn y la profunda capacidad de personalización de Matplotlib te permitirá explorar rápidamente tus datos y crear gráficos que se pueden adaptar para obtener un producto final con calidad de publicación .
Próximos pasos
Tienes varias opciones para continuar. Podrías empezar aprendiendo a instalar Seaborn . Una vez hecho esto, puedes explorar la galería de ejemplos para hacerte una idea más amplia de los gráficos que Seaborn puede generar. O bien, puedes leer el resto de la guía del usuario y el tutorial para obtener información más detallada sobre las diferentes herramientas y su función. Si tienes en mente un gráfico específico y quieres saber cómo crearlo, puedes consultar la referencia de la API , que documenta los parámetros de cada función y muestra numerosos ejemplos para ilustrar su uso.
No hay comentarios.:
Publicar un comentario