DESAFIO 1: Calcular a média de quartos dos imóveis
# Forma simples
media_quartos = df['quartos'].mean()
print(f"Média de quartos: {media_quartos:.2f}")
# Forma detalhada com estatísticas
estatisticas_quartos = df['quartos'].describe()
print(estatisticas_quartos)
# Alternativa: usando agg para múltiplas operações
resumo = df['quartos'].agg(['mean', 'median', 'min', 'max', 'count'])
print(resumo)
Explicação:
.mean(): calcula a média aritmética.describe(): retorna contagem, média, desvio padrão, min, Q1, mediana, Q3, max.agg(): permite calcular múltiplas agregações de uma vez
DESAFIO 2: Conferir quantos bairros únicos existem
# Forma simples
qtd_bairros = df['bairro'].nunique()
print(f"Quantidade de bairros únicos: {qtd_bairros}")
# Ver os bairros
print(df['bairro'].unique())
# Contar frequência de cada bairro
contagem_bairros = df['bairro'].value_counts()
print(contagem_bairros)
# Alternativa com mais detalhes
print(f"Bairros únicos: {qtd_bairros}")
print(f"Total de registros: {len(df)}")
print(f"Média de imóveis por bairro: {len(df) / qtd_bairros:.1f}")
Explicação:
.nunique(): conta valores únicos.unique(): retorna array com valores únicos.value_counts(): conta a frequência de cada valor
DESAFIO 3: Analisar quais bairros possuem média de aluguel mais elevada
# Forma básica
media_por_bairro = df.groupby('bairro')['aluguel'].mean()
print(media_por_bairro.sort_values(ascending=False))
# Forma detalhada com múltiplas métricas
analise_bairros = df.groupby('bairro')['aluguel'].agg([
('média', 'mean'),
('mediana', 'median'),
('mínimo', 'min'),
('máximo', 'max'),
('quantidade', 'count'),
('desvio_padrão', 'std')
])
analise_bairros = analise_bairros.sort_values('média', ascending=False)
print(analise_bairros)
# Salvando em um arquivo
analise_bairros.to_csv('analise_aluguel_por_bairro.csv')
# Alternativa com groupby múltiplo
analise_completa = df.groupby('bairro').agg({
'aluguel': 'mean',
'quartos': 'mean',
'imovel_id': 'count' # ou qualquer coluna para contar registros
})
analise_completa.columns = ['média_aluguel', 'média_quartos', 'quantidade_imóveis']
print(analise_completa.sort_values('média_aluguel', ascending=False))
Explicação:
.groupby(): agrupa dados por uma ou mais colunas.agg(): aplica agregações (funções) aos gruposascending=False: ordena de forma decrescente
DESAFIO 4: Gráfico de barras horizontais com top 5 bairros
import matplotlib.pyplot as plt
# Obter top 5
top_5 = df.groupby('bairro')['aluguel'].mean().nlargest(5)
# Criar gráfico
fig, ax = plt.subplots(figsize=(10, 6))
ax.barh(top_5.index, top_5.values, color='#2E86AB')
# Personalizações
ax.set_xlabel('Média de Valor de Aluguel (R$)', fontsize=12, fontweight='bold')
ax.set_ylabel('Bairro', fontsize=12, fontweight='bold')
ax.set_title('Top 5 Bairros com Maior Média de Aluguel', fontsize=14, fontweight='bold')
ax.invert_yaxis() # Maior valor no topo
# Adicionar valores nas barras
for i, v in enumerate(top_5.values):
ax.text(v, i, f' R$ {v:,.0f}', va='center', fontweight='bold')
# Grid para melhor leitura
ax.grid(axis='x', alpha=0.3, linestyle='--')
# Salvar e mostrar
plt.tight_layout()
plt.savefig('top_5_bairros.png', dpi=300, bbox_inches='tight')
plt.show()
# Alternativa com seaborn (mais bonito)
import seaborn as sns
top_5 = df.groupby('bairro')['aluguel'].mean().nlargest(5).sort_values()
plt.figure(figsize=(10, 6))
sns.barplot(x=top_5.values, y=top_5.index, palette='viridis', orient='h')
plt.xlabel('Média de Valor de Aluguel (R$)', fontweight='bold')
plt.ylabel('Bairro', fontweight='bold')
plt.title('Top 5 Bairros com Maior Média de Aluguel', fontweight='bold', fontsize=14)
plt.grid(axis='x', alpha=0.3)
plt.tight_layout()
plt.savefig('top_5_bairros_seaborn.png', dpi=300, bbox_inches='tight')
plt.show()
Explicação:
.nlargest(5): retorna os 5 maiores valores.barh(): cria barras horizontaisinvert_yaxis(): inverte eixo Y (maior valor no topo).text(): adiciona rótulos nos dados