1
resposta

Desafio: gráficos de distribuição de dados

Desafio 1

import pandas as pd
cidade = pd.read_csv('https://raw.githubusercontent.com/Gabriellemga/Python_Cursos_Alura/refs/heads/main/Data_viz_graficos_distribui%C3%A7%C3%A3o_compara%C3%A7%C3%A3o/dados/pop_idade.csv')
cidade.head()

import matplotlib.pyplot as plt
import seaborn as sns

fig, axs = plt.subplots(1, 2, figsize = (15,7))
sns.set_theme(style="white")

fig.suptitle('Distribuição das idades na Cidade de Alegre para uma amostra de 500 pessoas', 
             fontsize = 18, color = CINZA1, ha = 'right', x = 0.8)

sns.histplot(ax = axs[0] , data = cidade, x = 'idade' ,  binwidth = 5, color = AZUL2)
axs[0].set_title('Distribuição para um intervalo de 5 anos', size=14, color=CINZA2, x = 0.45)
axs[0].set_xlabel('Idade', fontsize = 12 )
axs[0].set_ylabel('Quantidade', fontsize = 12)
axs[0].xaxis.set_tick_params(labelsize = 12, labelcolor = CINZA1)
axs[0].yaxis.set_tick_params(labelsize = 12, labelcolor = CINZA2)
sns.despine()

sns.kdeplot(ax = axs[1], data = cidade, x = "idade", color = AZUL2, fill = True)
axs[1].set_title('Medidas de tedência central', size = 14, color = CINZA2, x = 0.3)
axs[1].set_xlabel('Idade', fontsize = 12 )
axs[1].set_ylabel('')
axs[1].xaxis.set_tick_params(labelsize = 12, labelcolor = CINZA1)
sns.despine()

axs[1].vlines(x = cidade['idade'].median(), ymin = 0, ymax = 0.039, colors = CINZA1, linestyles = "--")
axs[1].text(0.6, 0.6, f'Mediana = {int(cidade["idade"].median())} anos', fontsize=14, color = CINZA2, transform=axs[1].transAxes)

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Desafio 2

import pandas as pd
vol_amaciante = pd.read_csv("https://raw.githubusercontent.com/alura-cursos/dataviz-graficos/master/dados/volume_amaciante.csv")
vol_amaciante.head()

import matplotlib.pyplot as plt
import seaborn as sns

fig, ax = plt.subplots(figsize=(6,8))
sns.set_theme(style="white")

ax = sns.boxplot(vol_amaciante, y = 'Volume', orient = 'v', color = AZUL2) 

plt.suptitle('Boxplot do volume do amaciante', size=18, color=CINZA1, ha = 'right', x = 0.81, y = 0.97)
plt.title('para uma amostra de 1000 unidades', fontsize=14, color=CINZA2, pad = 15, loc = "left")
ax.set_xlabel('')
ax.set_ylabel('Volume (ml)', fontsize = 14)
ax.yaxis.set_tick_params(labelsize=12, labelcolor = CINZA2)
sns.despine(bottom=True)

IIQ = vol_amaciante['Volume'].quantile(0.75) - vol_amaciante['Volume'].quantile(0.25)

ax.annotate("Limite Superior", xy=(0, vol_amaciante.quantile(.75) + 1.5 * IIQ), xycoords='data',
            bbox=dict(boxstyle="round", fc=CINZA5, ec=CINZA3),
            xytext=(50, 0), textcoords='offset points',
            arrowprops=dict(arrowstyle="->", color=CINZA3))

ax.annotate("Limite Inferior", xy=(0, vol_amaciante.quantile(.25) - 1.5 * IIQ), xycoords='data',
            bbox=dict(boxstyle="round", fc=CINZA5, ec=CINZA3),
            xytext=(50, 0), textcoords='offset points',
            arrowprops=dict(arrowstyle="->", color=CINZA3))
plt.show()

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

1 resposta

Oi, Marcia! Como vai?

Agradeço por compartilhar seu código com a comunidade Alura.

Gostei bastante da forma como você organizou os gráficos e aplicou estilos personalizados! Continue assim!

Uma dica interessante para o futuro é usar o método mean() para destacar também a média nos gráficos, além da mediana. Veja este exemplo:


media = cidade['idade'].mean()
axs[1].vlines(x=media, ymin=0, ymax=0.039, colors='gray', linestyles='dotted')
axs[1].text(0.6, 0.5, f'Media = {int(media)} anos', fontsize=12, color='gray', transform=axs[1].transAxes)

Esse código calcula a média com mean() e adiciona uma linha pontilhada com a legenda correspondente no gráfico.

Qualquer dúvida que surgir, compartilhe no fórum.

Abraços e bons estudos!

Alura

Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!