Hola, si desean guardar los diagramas como imagen para descargarlos y usarlos en otro lado pueden usar el plt.savefig(“name.png”)
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 ofrece algunas gráficas u opciones que te permiten trabajar con distribuciones orientadas a tipos de datos numéricos. Veamos como puedes lograrlo utilizando código.
cumulative
sns.histplot(data = tips, x= 'tip', bins = 15, cumulative=True)
stat
, presentar los datos multiple
sns.histplot(data = tips, x= 'tip', bins = 15, hue= 'sex', stat = 'density', multiple= 'dodge');
Gráfica de densidad
sns.kdeplot(data=tips, x='tip', hue='sex');
sns.kdeplot(data=tips, x='tip', hue='sex', cumulative=True);
sns.kdeplot(data=tips, x='tip', hue='sex', shade=True);
Gráfica de distribución
kind
.sns.displot(data = tips, x = 'tip', hue = 'sex',kind= 'hist', multiple= 'stack');
El reto para ti es:
Aportes 95
Preguntas 10
Hola, si desean guardar los diagramas como imagen para descargarlos y usarlos en otro lado pueden usar el plt.savefig(“name.png”)
Para el ejercicio compare la facturación y las propinas entre los fines de semana (sábado y domingo ) y los días laborables.
En los fines de semana las propinas son mayores y más personas dejan propina.
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
tips = sns.load_dataset("tips") # convertimos el dataset de tips a dataframe
tips['weekend'] = tips.apply(lambda x : True if (x['day'] == 'Sun' or x['day'] == 'Sat') else False,axis=1)
# tips.head()
sns.displot(data=tips,x='tip',hue='weekend', kde=True, multiple='dodge')
También en los fines de semana se factura más en cantidad y por unidad de comida.
sns.displot(data=tips,x='total_bill',hue='weekend', kde=True, multiple='dodge')
En el gráfico combinado de facturación y propinas se ve como la zona de los fines de semana “contiene” en general a la zona de los días laborables. Lo que nos dice que los valores mayores de facturación y propinas corresponden a los días de semana.
sns.displot(data=tips,x='total_bill', y="tip", hue="weekend", kind="kde")
Es interesante que en general las propinas que dejan los hombres suman mas que la de las mujeres en todos los dias, pero en promedio, hay dias en los que las mujeres dan una propina mayor. Esto nos dice que no necesariamente los hombres son mas generosos, si no que en este restaurante en especifico, van mas hombres, o los que pagan la cuenta en general son hombres.
Reto completado!!
Use una grafica de rugplot
En el 2023 el método shade actualmente está descontinuado y dejará de funcionar en futuras versiones de seaborn, la recomendación oficial ahora es usar fill
Yo encontré que los sábados es el día que hay más propinas de hasta 3 dólares aproximadamente y de 7 a 10 dólares.
Pero de 3 a 6 dólares hay más propinas los domingos
Hola!
mi aporte para esta clase se fundamenta en usar el parámetro col='col_name'
donde podremos aplicar el mismo gráfico y segmentarlo por una dimensión para este ejemplo usare:
La comparación de x='total_bill'
con y='tip'
Un hue='smoker'
para visualizar los fumadores smokers
Visualizaciones independientes de sexo usando col='sex'
.
sns.displot(data=tips, x='total_bill', y='tip', hue='smoker', col='sex');
Ojo para la versión seaborn v0.14.0 el parámetro shade será un error, el parámetro pasará a ser fill ; siendo fill=True
Sabado y domingos la gente deja mas propina
Cuando se habla del parámetro shade, este ya está deprecado y presentará error para Seaborn V.0.14.0 en adelante, por lo que se requiere utilizar el parámetro fill
7:30 -> “shade” esta desactualizado. Ahora se usa “fill”
fig, axes = plt.subplots(figsize=(8,6))
sns.kdeplot(data=tips, x='Tip', hue='Day', shade=True)
fig.suptitle('Density Plot', fontsize=16, horizontalalignment='center')
sns.set(style="dark", palette="muted", font="Segoe UI")
sns.color_palette("flare", as_cmap=True)
plt.grid()
fig.tight_layout()
A la fecha shade= esta descontinuado (decrecated) y la libreria menciona que se debe usar fill=
Reto con regplot:
sns.regplot(data=tips,x="total_bill",y="tip")
plt.show()
Reto con scatterplot:
sns.scatterplot(data=tips,x="total_bill",y="tip",hue="sex")
plt.show()
busque con un ejemplo usando relplot.
Aqui podemos ver que los fumadores no dan propinas mayores a 7 dolares.
sns.displot(tips, x='tip', y='total_bill', hue='smoker', kind='kde')
plt.show()
Cuando la cena esta cara, los fumadores no dejan tanta propina.El dinero no da para todo jajaja
sns.displot(data = tips, x = 'tip', hue = 'size', kind = 'kde', multiple = 'stack')
plt.show()
Comparto este grafico que me parecio muy interesante
sns.jointplot(data = tips, y='tip', x = 'total_bill', kind='reg')
plt.savefig('./fig/figura.png')
plt.show()
cuando uses kdeplot en lugar de shade usa fill=True
Shade ya fue deprecado, ahora tocara usar fill=True.
Otros ejemplos mas de diagramas
Aca mi aporte con una deduccion interesante, los smoker parecen salirse de la media contantemente, para ambos lados de la drafica, implicaun comportamiento ms extremo para ambos lados para este grupo en especifico
sns.displot(data=tips, x='smoker', hue='sex', element="step")
esta vez probé el comportamiento de las propinas según el tipo de comida y me pareció interesante kde para este proposito.
#distribution plot feature at sns
sns.displot(data=tips,x='tip',y='total_bill',hue='time',kind='kde',palette="deep")
plt.show()
Esta clase sobre el uso de distribuciones esta interesante en el uso de este y comos se debe implementar. Es algo que me gusta. Estoy listo. Aqui esta el reto:
![](
Interpreto que consegui la relacion entre el total de las cuentas y las propinas en respectivos horiaros. Podemos ver que la mayor concentracion se da en las cenas. Tambie podemos ver que los gastos mas altos son realizados en la cena, y las propinas mas altas van de la mano con las cuentaas mas altas. Estas siempre por lo general durante una cena.
Aquí les dejo un código, donde se explica por partes como agregar mas de un grafica con seaborn, aplicando lo visto en clases anteriores
#importar librerias
import seaborn as sns
import matplotlib.pyplot as plt
#cargar la data
tips = sns.load_dataset('tips')
#subplots
fig, axes = plt.subplots(nrows=2,ncols=2, figsize = (12,8))
#seaborn en cada subsplots
# Subplot 1: Distribución de la cuenta total
sns.histplot(data=tips, x="total_bill", kde=True, ax=axes[0, 0])
axes[0, 0].set_title("Distribución de Total Bill")
# Subplot 2: cuenta por cada dia y cada sexo
sns.countplot(data = tips, x = 'day', hue = 'sex', ax=axes[0,1])
axes[0, 1].set_title("countplot Total Bill por Día")
# Subplot 3: Boxplot de la cuenta total vs día de la semana por cada sexo
sns.boxplot(data = tips, x= 'day', y='total_bill', hue='sex', dodge=True, ax=axes[1,0])
axes[1, 0].set_title("Boxplot Total Bill por Día")
# Subplot 4: violinplot de la cuenta total vs el dia de la semana por cada sexo
sns.violinplot(data = tips, x= 'day', y = 'total_bill', hue='sex',split= True, dodge= True,ax=axes[1,1])
axes[1, 1].set_title("violinplot Total Bill por Día")
# Ajustar espaciado entre subplots
plt.tight_layout()
# Mostrar los subplots
plt.show()
Densidad
sns.ecdfplot(data=tips,
x='tip',
hue='sex',
stat='count')
Lo que sea que signifique ecdf
sns.displot(data=tips,
x='tip',
hue='sex',
kind='ecdf')
Ejemplo de valores acumulados
sns.displot(data=tips,
x='tip',
bins=15,
cumulative=True)
Tanto hombres como mujeres son mas generosos los días domingos:
sns.barplot(x='sex',y='total_bill',data=tips, hue='day')
plt.show()
Aqui mi reto: 🐱👤⚡
sns.boxplot(data= tips,x='tip', y='day', hue = 'smoker')
plt.show()
En este caso hice una grafica de “Cajas y bigotes” Comparando los días que se tiene más propinas teniendo como parametro si son o no fumadores
![](
import seaborn as sns
import matplotlib.pyplot as plt
tips = sns.load_dataset('tips')
tips.head()
sns.histplot(data=tips,x='tip',bins=15,cumulative=False,hue='sex',stat='count',multiple='fill');
sns.kdeplot(data=tips,x='tip',hue='sex',cumulative=False,fill=True,bw_adjust=1);
sns.ecdfplot(data=tips,x='tip',hue='sex',stat='count');
sns.displot(data=tips,x='tip',hue='sex',kind='hist',multiple='stack');
Usar shade es deprecated, debemos usar en su lugar fill=True
`shade` is now deprecated in favor of `fill`; setting `fill=True`.
This will become an error in seaborn v0.14.0; please update your code.
En la cena es donde mas propina se recibe.
Quise ver la diferencia de cambiar el parametro stat:
fig, axes = plt.subplots(2, 3, figsize=(10, 6), sharey=False)
fig.suptitle('Conparacion del parametro stat')
sns.histplot(ax=axes[0,0], data=tips, x='tip', bins=20, stat='count')
axes[0,0].set_title('count')
axes[0,0].set_xlabel('')
axes[0,0].set_ylabel('')
sns.histplot(ax=axes[0,1], data=tips, x='tip', bins=20, stat='frequency')
axes[0,1].set_title('frequency')
axes[0,1].set_xlabel('')
axes[0,1].set_ylabel('')
sns.histplot(ax=axes[0,2], data=tips, x='tip', bins=20, stat='probability')
axes[0,2].set_title('probability')
axes[0,2].set_xlabel('')
axes[0,2].set_ylabel('')
sns.histplot(ax=axes[1,0], data=tips, x='tip', bins=20, stat='percent')
axes[1,0].set_title('percent')
axes[1,0].set_xlabel('')
axes[1,0].set_ylabel('')
sns.histplot(ax=axes[1,1], data=tips, x='tip', bins=20, stat='density')
axes[1,1].set_title('density')
axes[1,1].set_xlabel('')
axes[1,1].set_ylabel('')
fig.tight_layout()
Usar shade esta depreciado usemos en su lugar fill
`shade` is now deprecated in favor of `fill`; setting `fill=True`.
This will become an error in seaborn v0.14.0; please update your code.
Mi aporte:
`sns.displot(data=tips, x="tip", y="total_bill", kind="kde", hue="smoker", levels=4 )e>
sns.displot(data=tips, x="tip", y="total_bill", hue="time", binwidth=(2,4),
cbar=True)
plt.show()
Mi aporte al reto:
sns.histplot(data=tips, x='total_bill',y='tip',hue='day',stat='count',multiple='dodge')
plt.show()
![](
sns.rugplot(data=tips, x='tip', hue='day')
plt.show()
en mi aporte , grafico de manera contable para el eje y, dependiendo en x de la deuda total, enfocando el analisis en la comida especifica, y graficando dejando en especifico, los montos que se pagaron y segun ese monto como se distribuyo en las comidas. esta herramienta me parece poderosisima.
gracias
<sns.displot(data=tips,x='total_bill',hue='smoker', kind='ecdf', stat='count')
plt.show()>
<sns.displot(data=tips,x='tip',hue='sex', kind='kde', rug=True)
plt.show()>
<sns.displot(data=tips, x='total_bill', y='tip', kind='kde')
plt.show()>
Distribución de fumadores por día utilizando la visualización ECDF
sns.displot(data = tips, x = 'day', hue= 'smoker',kind= 'ecdf');
sns.violinplot(data=tips, x='tip',hue='sex',kind='kde',multiple='stack')
plt.show()
sns.jointplot( x='total_bill',y='tip',data=tips)
plt.show()
sns.pairplot( data=tips)
plt.show()
sns.lmplot( x='total_bill',y='tip',row='sex',col='time',data=tips)
plt.show()
Espero haber entendido lo que se pidió de ejercicio.
Ejercicio.
sns.displot(
data = tips,
x = 'tip',
hue = 'smoker',
kind= 'ecdf', # (ecdf, hist, kde)
stat = 'count');
compañeros, aquí pueden encontrar mejor los parámetros de uso de displot en seaborn.
El reto de hoy. Hice un gráfico kde con ‘tip’ en el eje x y ‘total_bill’ en el eje y.
¿Que cantidad de de clientes dan más propina del jueves al domingo?
#Reto Platzi
sns.displot(data=tips, x="total_bill", y='tip', hue='time', col='day')
plt.savefig("Seaborn.png")
plt.show()
Información resumida de esta clase
#EstudiantesDePlatzi
Un gráfico que puedo utilizar para ver las distribuciones es el histograma y su comando es histplot
Con el parámetro hue puedo hacer de manera visual una clasificación de los datos por otra variable
El parámetro stat me permite cambiar el modo en el que se trabajen los datos, por ejemplo, conteo, frecuencia, probabilidad, etc.
Utilizando el parámetro multiple puedo definir como deseo presentar mis datos
Con el comando kdeplot puedo crear un diagrama de densidad
El parámetro shade me ayuda a crear un sombreado debajo de la curva
Con el parámetro bw_adjust puedo ajustar los valores que se están trabajando en los ejes
Con el comando displot le estoy diciendo a Seaborn que me utilice un diagrama de distribución sugerido
Cuando sepa que debo usar una gráfica de distribución puedo usar el comando displot y en sus parámetros cambiar el tipo de gráfico si así lo deseo
Yo queria saber si habia una relacion en entre la hora entre el tiempo de la comida y el sexo, y creo que con esasimple linea se nota algo curioso, y es que en el tiempo del almuerzo es equitativo el registro de propinas entre hombres y mujeres, de hecho es mas el de mujeres que de hombres, pero a la hora de la cena se dispara la diferencia, como si los hombres fueran a cenar mas, o a la hora de la cena ellos pagan las propinas, agradeceria alguna opinion
col
.height
y aspect
sns.displot(data=tips, x='tip', hue='smoker', kind='kde', col='day', multiple='stack', height=4, aspect=.7)
plt.show()
sns.displot(data=tips, x='tip', kind='hist', hue='smoker', stat='probability', multiple='dodge');
Sin ánimo de entrar en polémica y por pura curiosidad de visualización de datos, hice un análisis de cuánto se da de propina, por sexo y por persona. Estos son los resultados:
tips.groupby('sex').describe()
Solo quería destacar lo increíblemente potente, fácil y elegante de Python, NumPy, Seaborn y la función describe()
.
Y al excelente profe.
P.D.: los hombres damos más propina. 😏
![](
reto completado
Aquí está mi gráfico!
sns.scatterplot(data=tips, x="tip",y="total_bill", hue="smoker")
plt.xlabel("Propina")
plt.ylabel("Cuenta total")
plt.legend(title="Fumadores",loc="lower right")
plt.savefig("primer_t.png")
plt.show()
No se como insertar una imagen jajajajaj, pero ahí va!
RETO DE CLASE
trabajando con distribuciones en Seaborn
________________________________________
[14]
0 s
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from scipy.stats import gaussian_kde
________________________________________
[2]
0 s
titanic = sns.load_dataset("titanic")
titanic.head()
________________________________________
[3]
0 s
sns.histplot(data=titanic,x="age",bins=10)
plt.show()
#como sabemos con hist, podemo graficar un histograma mostrando el valor de nuetrsos datos en barra
#este histograma me muetra las edades de los tripulantes de titanic y la mayoria de los tripulantes, estaba entre los 20 y 25 años
#con (bins) puedo generar un hist con las barras que yo desee
________________________________________
[4]
0 s
sns.histplot(data=titanic,x="age",bins=10,cumulative=True)
plt.show()
#con la funcion (cumulative) podemos ver el valor acomulativo de mis frecuencias en mi histograma
________________________________________
[5]
0 s
sns.histplot(data=titanic,x="age",bins=10,cumulative=False,hue="sex")
plt.show()
#en esta grafica estoy viendo la distribucion entre hombres y mujeres de manera frecuencial
________________________________________
[ ]
sns.histplot(data=titanic,x="age",bins=10,cumulative=False,hue="sex",stat="frequency")
plt.show()
#en esta grafica no estamos trabajando el conteo sino con la frecuencia de los valores
________________________________________
[ ]
sns.histplot(data=titanic,x="age",bins=10,cumulative=False,hue="sex",stat="probability")
plt.show()
#histograma que se trabaja con la probabilidad de los datos
________________________________________
[ ]
sns.histplot(data=titanic,x="age",bins=10,cumulative=False,hue="sex",stat="percent")
plt.show()
#en este histo se trabaja con el percen que entrega los datos e nivel de porcentajes
________________________________________
[ ]
sns.histplot(data=titanic,x="age",bins=10,cumulative=False,hue="sex",stat="density")
plt.show()
#tambien podemos trabajar a nivel de densidad mi histograma
________________________________________
[ ]
sns.histplot(data=titanic,x="age",bins=10,cumulative=False,hue="sex",stat="count",multiple="stack")
plt.show()
#count es por defeto
#con la parametro (multiple), como quiero mostrar mis datos y tenemos el ejemplo de stak o estaquiados,
#que me muetra donde empieza uno y donde termina el otro uno encima del otro que es la grafica que e separa en esta ocacion
________________________________________
[ ]
sns.histplot(data=titanic,x="age",bins=10,cumulative=False,hue="sex",stat="count",multiple="layer")
plt.show()
#tambien esta de tipo layer, como estaba anteriormente
________________________________________
[ ]
sns.histplot(data=titanic,x="age",bins=10,cumulative=False,hue="sex",stat="count",multiple="dodge")
plt.show()
#con la funcion (dodge)nos muetra los valores individualmente uno al lado del otro y es el mas usado de todos
________________________________________
[ ]
sns.histplot(data=titanic,x="age",bins=10,cumulative=False,hue="sex",stat="count",multiple="fill")
plt.show()
#con el parametro (fill), me muetra de 0 a 1, mostrandome toda la probabilidad, aunque el que se recomienda mas es dodge
________________________________________
asi se trabajan diferentes parametros a nivel del histograma
________________________________________
que otro gráficos a nivel de distribuciones puedo trabajar
________________________________________
[ ]
sns.kdeplot(data=titanic,x="age",hue="sex")
plt.show()
#aca tenemos un diagrama de densidad de las edades de hombres y mujeres de los tripulantes del titanic, aca nos muetra que los hombres son los que hay mas hombres que mujeres
#al igual que la edad
________________________________________
[ ]
sns.kdeplot(data=titanic,x="age",hue="sex",cumulative=True)
plt.show()
#con true empieza a comular los valores de atras hacia a delante como en el histograma
________________________________________
[ ]
sns.kdeplot(data=titanic,x="age",hue="sex",cumulative=False,shade=True,color="g")
plt.show()
#con el parametro (shade) me completa no solo con la linea sino que me hace un area que esta bajo la curba que lo pinta de determinadao color para que sea mas facil de analisar
________________________________________
[ ]
sns.kdeplot(data=titanic,x="age",hue="sex",cumulative=False,shade=True,bw_adjust=1)
plt.show()
#con el parametro (bw_ajust), ajuasta directamente la grafica y los parametros
________________________________________
otro de los gráficos que puedo trabajar en distribuciones es ecdfplot
________________________________________
[ ]
sns.ecdfplot(data=titanic,x="age",hue="sex",stat="count")
plt.show()
#esta grafica escalonada de las proporcion de las diferentes edades entre mujeres y hombres ayuda a algunos ejemplos
#con esta grafica tambiem puedo trabajar los diferentes parametros que trabajamos en el histograma y la dencidad
________________________________________
trabajando con displot
________________________________________
[ ]
sns.displot(data=titanic,x="age",hue="sex")
plt.show()
#con el parametro (displot), me genera un histograma
________________________________________
[6]
sns.displot(data=titanic,x="age",hue="sex",kind="hist",multiple="stack")
plt.show()
#aca tambien puedo generar una graffico de densidad solo utilisando un grfico que es displot
# al cambiar el parametro con el tipo de grafica que quiero
#condisplot es la herramienta general para todas graficas con sus respetivos parametros
________________________________________
Seaborn ofrece distintos gráficos muy fáciles de generar con los que puedo trabajar, y además ofrece displot que es para analizar y trabajar distribuciones
________________________________________
[10]
0 s
sns.scatterplot(data=titanic,x="age",y="fare",hue="sex")
plt.show()
________________________________________
[15]
0 s
sns.set(style="darkgrid")
df = sns.load_dataset('titanic')
________________________________________
[17]
0 s
fig = sns.kdeplot(df['age'], shade=True, color="r")
fig = sns.kdeplot(df['fare'], shade=True, color="b")
plt.show()
reto
Lo único que encontré de displot es que tiene solo 3 posibles parámetros para kind= ya que hist y kde fueron restringidos en el reto utilice ecdf parece una función de escalón.
En el data set “Tips” he hallado lo siguiente:
- Comprobé el comportamiento de las propinas con respecto al tiempo.
Al parecer, se deja más propina en el Almuerzo que en la Cena.
Conteo de propinas por hora del día
sns.set(style='dark',palette="dark",font='Arial')
sns.scatterplot(data=tips,x='tip',y='total_bill',hue='smoker',alpha=0.5)
plt.show()
Claramente podemos apreciar una correlación positiva entre el precio total de la comida y los tips. Además, comparando con otra variable (si la persona es fumadora), podemos ver que los no-fumadores tienden a dejar mejores propinas.
Reto
Haciendo uso de rugplot
sns.scatterplot(data=tips, x=“size”, y=“tip”)
sns.rugplot(data=tips, x=“size”, y=“tip”)
Mi desafío:
Grafico de dispersión entre costo de la comida y la propina abierto por horario de la comida entre almuerzo y cena:
sns.scatterplot(data=tips, x='total_bill', y='tip', hue='time', palette='Set2' )
plt.show()
Quería comprobar si las personas fumadoras dejaban más propinas que las personas que no fumaban
Se pudo comprobar que las personas que no fuman dejaban más propina que las que fuman
tips['sex_smoker'] = tips.apply(lambda x: True if (x['sex'] == 'Male' and x['smoker'] == 'Yes' ) else (True if x['sex'] == 'Female' and x['smoker'] == 'Yes' else False), axis = 1)
Fui redundante en el código, se puede mejorar. Sin embargo, quería aprender como hacer un if, elif and else
👾
No puedo ajuntar el gráfico
sns.displot(x="total_bill", y="tip", row="sex", col="time", data=tips, kind='kde')
plt.show()
Reto:
El jueves la propina ingresa principalmente del almuerzo y el fin de semana de la cena; el sabado es el dia que se obtiene la propina más alta.
¿Qué tan común es que un fumador de propina?🧐
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?