1
resposta

[Projeto] 11 Desafio: gráficos de distribuição de dados

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()

1 resposta

Oi, Moacir.

Parabéns pela dedicação na resolução desses desafios. É visível o cuidado que você teve tanto na lógica de programação quanto na estética dos gráficos, o que demonstra uma ótima compreensão dos conceitos de visualização de dados.

A escolha de colocar os gráficos lado a lado ajuda na comparação direta. Enquanto o histograma de colunas agrupa as idades em blocos fixos (bins), facilitando a contagem de quantas pessoas existem em cada faixa, a curva de densidade (KDE) oferece uma visão suavizada da distribuição.

A inclusão da linha da mediana é um detalhe importante. Em distribuições de idades, a mediana ajuda a entender se a população é majoritariamente jovem ou mais velha, sem que os valores extremos (como recém-nascidos ou centenários) distorçam tanto a percepção quanto a média faria.

E sua abordagem pra calcular os limites estatísticos foi muito precisa. O uso do Intervalo Interquartil (IIQ) para definir o que é um comportamento esperado e o que é um ponto fora da curva (outlier) é a base de uma análise de dados confiável.

Um ponto técnico interessante foi o uso de hlines. Como o seu boxplot está na vertical, os limites de controle realmente precisam ser linhas horizontais para cruzar o eixo Y nos valores corretos de volume.

Continue firme nos estudos.

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