Desafio 1: Baixe a base de dados com as amostras das idades dos moradores do município de Cidade Alegre e crie os histogramas de colunas e de linha lado a lado, buscando interpretar as diferenças entre eles e o que podem representar separadamente. Adicione também uma linha que define a mediana da distribuição no histograma de linha e escreva o valor dessa medida no gráfico.
objetivo de colocar os gráficos lado a lado é perceber como o histograma de colunas foca na frequência absoluta por intervalos, enquanto o de linha (densidade)
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
1. Carregando os dados
df_idade = pd.read_csv('pop_idade.csv')
mediana = df_idade['idade'].median()
2. Configurando a área do gráfico (1 linha, 2 colunas)
fig, axs = plt.subplots(1, 2, figsize=(16, 6))
sns.set_theme(style="white")
--- Gráfico 1: Histograma de Colunas ---
sns.histplot(data=df_idade, x="idade", bins=15, color="#0077b6", ax=axs[0])
axs[0].set_title('Distribuição por Intervalos (Colunas)', fontsize=14)
axs[0].set_xlabel('Idade')
axs[0].set_ylabel('Frequência')
--- Gráfico 2: Histograma de Linha (KDE) ---
sns.kdeplot(data=df_idade, x="idade", color="#e63946", fill=True, ax=axs[1])
axs[1].set_title('Curva de Densidade (Linha)', fontsize=14)
axs[1].set_xlabel('Idade')
axs[1].set_ylabel('Densidade')
Adicionando a linha da mediana e o texto
axs[1].axvline(mediana, color='black', linestyle='--')
axs[1].text(mediana + 1, 0.02, f'Mediana: {mediana:.0f} anos',
color='black', fontweight='bold')
Ajustes finais
sns.despine()
plt.tight_layout()
plt.show()
Desafio 2: Represente no boxplot dos volumes do amaciante os limites superiores e inferiores do diagrama de caixa. Comente sobre o resultado encontrado ao desenhar esses limites no boxplot.
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
1. Carregando os dados e definindo cores (usando a paleta do curso)
df_amaciante = pd.read_csv('volume_amaciante.csv')
AZUL2, VERMELHO1, CINZA2 = '#0077b6', '#e76f51', '#495057'
2. Cálculo dos limites estatísticos
Q1 = df_amaciante['Volume'].quantile(0.25)
Q3 = df_amaciante['Volume'].quantile(0.75)
IIQ = Q3 - Q1
limite_superior = Q3 + 1.5 * IIQ
limite_inferior = Q1 - 1.5 * IIQ
3. Construção do Boxplot
fig, ax = plt.subplots(figsize=(6, 8))
sns.boxplot(data=df_amaciante, y='Volume', orient='v', color=AZUL2, ax=ax)
4. Adicionando as linhas dos limites (vlines não serve aqui pois o eixo é Y, usamos hlines)
O boxplot vertical centraliza em x=0, então desenhamos a linha de -0.4 a 0.4
ax.hlines(y=[limite_inferior, limite_superior], xmin=-0.4, xmax=0.4,
colors=VERMELHO1, linestyles='--', linewidth=2)
5. Personalização
plt.title('Boxplot de Volume com Limites de Outliers', fontsize=14, pad=20)
ax.set_ylabel('Volume (ml)', fontsize=12)
ax.text(0.42, limite_superior, f'Limite Sup: {limite_superior:.2f}', color=VERMELHO1, va='center')
ax.text(0.42, limite_inferior, f'Limite Inf: {limite_inferior:.2f}', color=VERMELHO1, va='center')
sns.despine()
plt.show()