No olvides que en las ciencias cualquier problema casi siempere puede tener varias resoluciones, por lo tanto nosotros enseñamos lo más óptimo y eficiente.
Solución:
Con las versiones más nuevas de Seaborn puedes hacer lo siguiente:
import numpy as np
import pandas as pd
import seaborn as sns
sns.set(color_codes=True)
df = sns.load_dataset('titanic')
df.head()
x,y = 'class', 'survived'
(df
.groupby(x)[y]
.value_counts(normalize=True)
.mul(100)
.rename('percent')
.reset_index()
.pipe((sns.catplot,'data'), x=x,y='percent',hue=y,kind='bar'))
producción
Actualizar
Si también quieres porcentajes, puedes hacer lo siguiente:
import numpy as np
import pandas as pd
import seaborn as sns
df = sns.load_dataset('titanic')
df.head()
x,y = 'class', 'survived'
df1 = df.groupby(x)[y].value_counts(normalize=True)
df1 = df1.mul(100)
df1 = df1.rename('percent').reset_index()
g = sns.catplot(x=x,y='percent',hue=y,kind='bar',data=df1)
g.ax.set_ylim(0,100)
for p in g.ax.patches:
txt = str(p.get_height().round(2)) + '%'
txt_x = p.get_x()
txt_y = p.get_height()
g.ax.text(txt_x,txt_y,txt)
Podría estar confundido. La diferencia entre su salida y la salida de
occupation_counts = (df.groupby(['income'])['occupation']
.value_counts(normalize=True)
.rename('percentage')
.mul(100)
.reset_index()
.sort_values('occupation'))
p = sns.barplot(x="occupation", y="percentage", hue="income", data=occupation_counts)
_ = plt.setp(p.get_xticklabels(), rotation=90) # Rotate labels
es, me parece, sólo el orden de las columnas.
Y pareces importarte eso, desde que pasas sort=False
. Pero luego, en su código, el orden se determina únicamente por casualidad (y el orden en el que se itera el diccionario incluso cambia de una ejecución a otra con Python 3.5).
Puede usar la biblioteca Dexplot para contar y normalizar sobre cualquier variable para obtener frecuencias relativas.
Pasa el count
función el nombre de la variable que le gustaría contar y producirá automáticamente un gráfico de barras de los recuentos de todos los valores únicos. Utilizar split
para subdividir las cuentas por otra variable. Tenga en cuenta que Dexplot envuelve automáticamente las etiquetas x-tick.
dxp.count('occupation', data=df, split='income')
Utilizar el normalize
parámetro para normalizar los conteos sobre cualquier variable (o combinación de variables con una lista). También puedes usar True
para normalizar sobre el gran total de conteos.
dxp.count(‘ocupación’, data=df, split=’ingresos’, normalizar=’ingresos’)
Te mostramos reseñas y calificaciones
Te invitamos a asentar nuestra publicación poniendo un comentario o valorándolo te lo agradecemos.