Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

1
resposta

(20. Python: Pandas: conhecendo a biblioteca) Desafio: bora praticar?

import pandas as pd

# Importando a base de dados
url = "https://raw.githubusercontent.com/alura-cursos/pandas-conhecendo-a-biblioteca/main/base-de-dados/aluguel.csv"

df = pd.read_csv(url, sep=';')

# 1) Média de quartos dos imóveis
media_quartos = df['Quartos'].mean()

print('Média de quartos:', media_quartos)

# 2) Quantidade de bairros únicos
bairros_unicos = df['Bairro'].nunique()

print('Quantidade de bairros únicos:', bairros_unicos)

# 3) Média de aluguel por bairro
media_aluguel_bairro = (
    df.groupby('Bairro')['Valor']
    .mean()
    .sort_values(ascending=False)
)

print(media_aluguel_bairro.head())

# 4) Gráfico dos 5 bairros com maiores médias de aluguel
top5_bairros = media_aluguel_bairro.head(5)

top5_bairros.plot(
    kind='barh',
    figsize=(10, 6),
    color='green'
)
1 resposta

Olá, Eduardo. Como vai?

Parabéns pela excelente resolução do desafio! O seu código demonstra um ótimo domínio das funções essenciais da biblioteca Pandas para análise exploratória de dados.

Você seguiu perfeitamente os passos necessários, desde a importação do arquivo delimitado por ponto e vírgula (sep=';') até a geração do gráfico de barras horizontais utilizando boas práticas de visualização.

Para agregar ainda mais valor ao seu projeto e aprofundar os seus conhecimentos em Pandas, vamos analisar os pontos fortes do seu código e trazer algumas sugestões de melhorias técnicas e de negócios.

Pontos Fortes do seu Código

  • Uso correto do nunique(): No item 2, utilizar o nunique() é a forma mais performática e direta de descobrir a quantidade de registros únicos em uma coluna do DataFrame, evitando a necessidade de extrair uma lista com unique() e depois medir o seu tamanho.
  • Agrupamento com Ordenação: No item 3, encadear as funções .groupby(), .mean() e .sort_values(ascending=False) demonstra uma excelente compreensão de como o Pandas funciona por baixo dos panos (mecanismo de Dividir-Aplicar-Combinar).
  • Escolha do Gráfico: No item 4, utilizar o gráfico de barras horizontais (kind='barh') para exibir nomes de bairros é uma excelente prática de design de dados. Barras horizontais evitam que os nomes dos bairros fiquem sobrepostos ou na diagonal, tornando a leitura imediata.

Sugestões de Melhoria e Boas Práticas

Se você quiser elevar ainda mais o nível técnico dessa análise, aqui estão duas sugestões práticas:

1. Tratamento de Valores Nulos antes do Agrupamento

Ao calcular a média de aluguel por bairro, o Pandas ignora os valores nulos por padrão. No entanto, se houver imóveis cujo valor do aluguel está em branco (NaN), a contagem pode gerar distorções se o seu objetivo for analisar a base completa. Uma boa prática é verificar e tratar esses valores nulos antes:

# Verificando se existem valores nulos na coluna Valor
print(df['Valor'].isnull().sum())

# Removendo linhas onde o Valor do aluguel é nulo antes de tirar a média
df_limpo = df.dropna(subset=['Valor'])

2. Refinando o Gráfico para Apresentações Executivas

Embora o seu código para o gráfico funcione perfeitamente, quando geramos relatórios para tomadas de decisão, adicionar títulos aos eixos e inverter a ordem das barras facilita a interpretação. No gráfico de barras horizontais (barh), o Pandas costuma colocar o maior valor no topo, mas a ordenação de leitura humana funciona melhor de cima para baixo.

Veja como deixar o seu gráfico ainda mais profissional:

# Selecionando o top 5 e invertendo a ordem para o maior aparecer primeiro no topo do gráfico
top5_bairros = media_aluguel_bairro.head(5).sort_values(ascending=True)

ax = top5_bairros.plot(
    kind='barh',
    figsize=(10, 6),
    color='green'
)

# Adicionando elementos informativos
ax.set_title('Top 5 Bairros com Maiores Médias de Valor de Aluguel', fontsize=14, fontweight='bold')
ax.set_xlabel('Valor Médio (R$)', fontsize=12)
ax.set_ylabel('Bairro', fontsize=12)

Continue praticando com esse ótimo rigor lógico e compartilhando suas soluções aqui no fórum!

Espero que possa ter lhe ajudado!