También podemos usar pairplot, te permite ver comparativas de pares de variables y analizar su comportamiento en un solo gráfico.
sns.pairplot(data=tips,hue='day')
plt.show()
Visualización de datos con Python
La importancia de la visualización de datos
Matplotlib
Pyplot básico
Subplot
Método orientado a objetos
Subplots
Leyendas, etiquetas, títulos, tamaño
Colores y estilos
Bar Plot
Crear otro tipo de gráficas
Quiz: Matplotlib
Seaborn
Seaborn
Set
Parámetros más usados con Seaborn
Distribuciones
Categóricos
Relation
Jointplot y Pairplot
Heatmap
Quiz: Seaborn
Cierre del curso
Posibilidades con Matplotlib y Seaborn
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
Seaborn maneja los gráficos de relación entre distintas variables numéricas para hacer visualizaciones. Veamos los distintos gráficos que tiene Seaborn para trabajar este tipo de relaciones.
Empieza importando los datos para empezar a graficar
import seaborn as sns
import matplotlib.pyplot as plt
tips = sns.load_dataset('tips')
tips.head(2)
sns.scatterplot(data= tips, x= 'total_bill', y = 'tip', hue= 'day');
sns.scatterplot(data= tips, x= 'total_bill', y = 'tip', hue= 'day', style= 'time', size='size');
plt.legend(loc= 'center', bbox_to_anchor= (1.12, 0.5))
markers = {"Lunch": 'D', "Dinner": 's'}
sns.scatterplot(data= tips, x= 'total_bill', y = 'tip', hue= 'day', style= 'time', size='size', markers = markers);
plt.legend(loc= 'center', bbox_to_anchor= (1.12, 0.5));
sns.lineplot(data= tips, x= 'total_bill', y = 'tip', hue= 'day', style= 'time', size='size');
kind
podemos modificar el tipo de gráficosns.relplot(data= tips, x= 'total_bill', y = 'tip', hue= 'day', style= 'time', size='size', kind= 'line');
sns.relplot(data= tips, x= 'total_bill', y = 'tip', hue= 'day', style= 'time', size='size', kind= 'scatter', col = 'time');
Aportes 50
Preguntas 1
También podemos usar pairplot, te permite ver comparativas de pares de variables y analizar su comportamiento en un solo gráfico.
sns.pairplot(data=tips,hue='day')
plt.show()
No se porque hasta ahora no se menciona pero hay un parametro llamado “ax” para poder usar seaborn en subplots
No se trata de que un grafico sea mas complicado de ver que otro, y no se trata de gustos, cuando el profesor dice “en lo personal me gusta mas este”, todo va a depender de la de variable que se esta graficando, de lo que se esta analizando, no vas a usar un grafico de dispersion para ver una serie de tiempo.
Por eso no me parece correcto que el profesor hable de gustos personales o de que un grafico sea mas sencillo que otro en lineas generales ya que la “claridad” depende de lo que se este analizando.
La función “col=” es MARAVILLOSA. Te reduce mucha data a un simple golpe de vista.
Cambiar el tipo de grafica con kind:
Para visualizar un poco mejor los últimos datos del video podemos cambiar las columnas a “day”
Super recomendad la gráfica pairplot.
Información resumida de esta clase
#EstudiantesDePlatzi
Los gráficos de relación me ayuda a ver la relación o correlación de diferentes variables numéricas
En seaborn creo que gráfico de dispersión con la función scatterplot
Dentro de esta gráfica puedo categorizar por otra variable utilizando el parámetro style
Puedo saber la frecuencia de mis datos utilizando el parámetro size
Para manejar la legenda lo hago desde Matplotlib con la función legend y allí defino su ubicación
Igualmente, puedo usar la función relplot para decirle a seaborn que me sugiera una gráfica para visualizar una relación
import seaborn as sns
import matplotlib.pyplot as plt
tips = sns.load_dataset('tips')
tips.head()
plt.figure(figsize=(8,8))
markers = {"Lunch":"D","Dinner":"s"}
sns.scatterplot(data=tips,x='total_bill',y='tip',hue='day',style='time',size='size',markers=markers);
plt.legend(loc='center',bbox_to_anchor=(1.12,0.5))
sns.lineplot(data=tips,x='total_bill',y='tip',hue='day',style='time',size='size');
plt.legend(loc='center',bbox_to_anchor=(1.12,0.5))
sns.relplot(data=tips,x='total_bill',y='tip',hue='day',style='time',size='size',col='time');
plt.figure(figsize=(8,8))
markers = {"Lunch":"D","Dinner":"o"}
sns.relplot(data=tips, x='total_bill', y='tip', hue='day', style='time', size='size', markers=markers,kind='line',col='time')
plt.legend(loc='center', bbox_to_anchor=(1.12,0.5))
plt.show()
Para hacer el gráfico kind=line dejé en el dataset solo los números de comensales 2,3 y 4 que son los más representativos y puse el número de comensales (size) como col.
cond_234 =(tips['size'] > 1) & (tips['size'] < 5)
tips_234 = tips[cond_234]
markers = {"Lunch":"X", "Dinner":"s"} # defino la forma de los puntos
sns.relplot(data=tips_234 ,x='total_bill',y='tip',hue='day',style='time',col='size',size='time',markers=markers,kind='line') # usa
plt.show()
El gráfico de 2 personas quedó confuso. Pero el de 3 y 4 comensales son más claros. Las líneas unen los puntos de igual day y time.
Todas las líneas por lo general muestran la relación positiva entre la facturación y las propinas.
Estoy sorprendido con el desarrollo de estos graficos de relacion y como su uso puede ser implementado en muchas empresas. Es mejor saber como realizarlo sin tener algun conflicto.
Aqui el resultado del reto
sns.relplot(data=tips,x='total_bill',y='tip',hue='day',style='time',size='size',kind='line')
plt.show()
El pequeño reto
sns.relplot(data=tips, x='total_bill',y='tip', hue='day', style='time', size='size', kind='line');
sns.relplot(data=tips,x=‘total_bill’,y=‘tip’,hue=‘day’,style=‘time’,size=‘size’,kind=‘line’)
plt.show()
Leyendo un poco la guía de Seaborn, vi que relplot tiene 2 tipos de kind (‘scatter’ y ‘line’).
Quería colocar 2 imágenes juntas utilizando la función relplot con la misma data con kind=‘scatter’ a la izquierda y kind=‘line’ a la derecha y relplot no permite trabajar con el parámetro ‘ax’.
Así que la solución es trabajar independientemente con scatterplot y lineplot y hacer las respectivas configuraciones para que se vea bien.
Código:
import matplotlib.pyplot as plt
import seaborn as sns
# Crear los subplots con más espacio entre ellos
fig, axes = plt.subplots(1, 2, figsize=(16, 4.5), gridspec_kw={'wspace': 0.32})
# Subplot 1 - Scatterplot
sns.scatterplot(data=tips, x='total_bill', y='tip', hue='day', style='time', size='size', ax=axes[0])
axes[0].legend(loc='upper right',bbox_to_anchor=(1.2,1.02))
# Subplot 2 - Lineplot
sns.lineplot(data=tips, x='total_bill', y='tip', hue='day', style='time', size='size', ax=axes[1])
axes[1].legend(loc='upper right',bbox_to_anchor=(1.2,1.02))
plt.show()
sns.relplot(data = tips, x = 'total_bill', y = 'tip', hue = 'day', style = 'time', size = 'size', col = 'time', kind = 'line')
plt.show()
sns.relplot(data=tips,x="total_bill",y="tip",hue="day",size="size",kind="scatter",col="time")
plt.show()
sns.relplot(data=tips,x='total_bill',y='tip',hue='day',style='time',size='size',kind='line')
plt.show()
(
sns.relplot(data=tips, x='total_bill', y='tip',hue='day',style='time',size='size',markers=markers, kind='line')
plt.show()
mi aporte , esta es una herramienta muy poderosa =D
<sns.relplot(data=tips, x='total_bill', y='tip', hue='day',style='time', size="size", kind='line')
plt.show()>
sns.relplot(data=tips,x='total_bill',y='tip',hue='day',style='time',size='size',kind='line')
plt.show()
Aquí mi aporte, use el dataset referente a la esperanza de vida de algunos países a lo largo de los años (healthexp), muy interesante observar cómo se relaciona directamente con el aumento de los salarios y el pasar de los años, además se puede observar como para el 2020 hubo una disminución en todos los países, posiblemente por la contingencia sanitaria del Sars 2 Covid 19.
dots = sns.load_dataset("healthexp")
sns.scatterplot(data=dots, x="Year",y="Life_Expectancy",hue="Country",size="Spending_USD")
plt.legend(loc="center",bbox_to_anchor=(1.2,0.6))
Tambien es evidente en el lineplot:
dots = sns.load_dataset("healthexp")
sns.lineplot(data=dots, x="Year",y="Life_Expectancy",hue="Country")
plt.legend(loc="center",bbox_to_anchor=(1.2,0.6))
Y si agregamos los parámetro row
y col
podemos separar aún más nuestros datos para mejor lectura.
plt.figure(figsize=(10,10))
markers = { "Lunch":"D", "Dinner":"s"} # predefino los markers con un diccionario
sns.relplot(data=tips, x='total_bill', y='tip', hue='day', style='time', size='size', markers=markers, col='day', row='time');
RETO DE CLASE
Con relplot estoy teniendo el mismo problema que tuve con displot: no puedo expandir el lienzo. A alguien más le sucede? De ser así: encontraron la solución?
Seaborn maneja los gráficos de relación entre distintas variables numéricas para hacer visualizaciones. Veamos los distintos gráficos que tiene Seaborn para trabajar este tipo de relaciones.
Tipos de gráficos de relación en Seaborn Empieza importando los datos para empezar a graficar
________________________________________
[1]
0 s
import matplotlib.pyplot as plt
import seaborn as sns
from matplotlib import markers
________________________________________
[2]
0 s
tips = sns.load_dataset("tips")
tips.head(10)
________________________________________
[3]
0 s
sns.scatterplot(data=tips,x="total_bill",y="tip")
plt.show()
#aca estamos graficando la relacion entre la cuenta y las propinas y podemos notar que cuando la cuanta es alta
#mas propinan dejan los clientes, pueden haver casos atipicos, pero si hay cieta relacion entre las valriables
________________________________________
[4]
0 s
sns.scatterplot(data=tips,x="total_bill",y="tip",hue="day")
plt.show()
#lo segmentamos y por cada color me reprecenta u dia distinto por semana y notamos que por dia hay cuentas diferentes
________________________________________
[5]
0 s
sns.scatterplot(data=tips,x="total_bill",y="tip",hue="day",style="time")
plt.show()
#con style estamos reprecentando el tiempo que seria almuerzo y sena y me los reprecenta en circulos y equiz
#lo que podemos notar en la grafica es que para las senas la cuenta es mucho mas grande
#estas relaciones se están haciendo entre cuenta y propina
________________________________________
[6]
0 s
plt.figure(figsize=(8,8))
sns.scatterplot(data=tips,x="total_bill",y="tip",hue="day",style="time",size="size")
plt.legend(loc="center",bbox_to_anchor=(1.12,0.5))
plt.show()
#size es el tamaño de los markers que tengo y size me reprecenta el numero de comenzales
#aca puedo hacer los analisis a nivel de grafico desde mi scatteplot
________________________________________
[7]
0 s
markers = {"Lunch":"D", "Dinner":"s"}
plt.figure(figsize=(8,8))
sns.scatterplot(data=tips,x="total_bill",y="tip",hue="day",style="time",size="size",markers=markers)
plt.legend(loc="center",bbox_to_anchor=(1.12,0.5))
plt.show()
#scatterplot en searbon se manejan propiedades bastente utiles y custumisables
#aca tengo lo mismo que en el grafico anterior pero aca lo estoy predefiniendo
________________________________________
hay otro grafico bastante útil que también me sirve para ver relaciones, es algo un poco más complicado de analizar, pero es bastante útil
________________________________________
[ ]
sns.lineplot(data=tips,x="total_bill",y="tip")
plt.show()
#esta grafica nos muetra una linea que es muy dificil de analisar, pero tambiem me muetra la relacion entre la cuenta y propinas
________________________________________
[9]
plt.figure(figsize=(8,8))
sns.lineplot(data=tips,x="total_bill",y="tip",hue="day",style="time",size="size")
plt.legend(loc="center",bbox_to_anchor=(1.12,0.5))
plt.show()
________________________________________
[12]
0 s
plt.figure(figsize=(8,8))
sns.relplot(data=tips,x="total_bill",y="tip",hue="day",style="time",size="size")
plt.show()
________________________________________
[13]
plt.figure(figsize=(8,8))
sns.relplot(data=tips,x="total_bill",y="tip",hue="day",style="time",size="size",col="time")
plt.show()
#relplot es un grafico bastente poderoso y util y es muy usado en la actualidad
________________________________________
[17]
0 s
plt.figure(figsize=(8,8))
sns.relplot(data=tips,x="total_bill",y="tip",hue="day",style="time",size="size",col="time",kind="scatter")
plt.show()
________________________________________
[18]
0 s
plt.figure(figsize=(8,8))
sns.relplot(data=tips,x="total_bill",y="tip",hue="day",style="time",size="size",col="time",kind="line")
plt.show()
________________________________________
[25]
3 s
sns.pairplot(data=tips,hue='day')
plt.show()
________________________________________
reto
Graffiti.
Mi solución al reto de clase, utilizando el comando kind en relplot:
sns.relplot(data= tips, x= 'total_bill', y = 'tip', hue = 'day', style='time', size= 'size', kind='line')
plt.show()
Para controlar el área de los marcadores podemos usar el parámetro sizes, el cual se indica como tupla. Entre mayor sea el intervalo, mayor el tamaño de los marcadores:
plt.figure(figsize=(8,6))
sns.scatterplot(data=tips, x='total_bill', y='tip', hue='day',
size='size', sizes=(20,300), legend = 'full',
palette='deep');
plt.legend(loc='center', bbox_to_anchor=(1.12, 0.5));
Mi aporte de la clase: kind=‘lines’
Reto
Desafio de la clase:
sns.relplot(data=tips, x='total_bill', y='tip', hue='day', style='time', size='size', kind='line') # Dificil de analizar, pero tmb nos muestra la relación entre una variable numerica y otra
plt.legend(loc='center', bbox_to_anchor=(1.15,0.47))
plt.show()
Reto cambiando kind con las columnas.
Otros ejemplos Graficos
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?