Análise descritiva da PNAD 2015 aula 01
Abaixo está um roteiro completo, com código pronto para Colab/Notebook, seguindo cada instrução da aula. Você só precisa ajustar a URL do .csv conforme o documento do curso.
Importação do dataset e criação do data frame
Bibliotecas
import pandas as pd
import numpy as np
Substitua pela URL do CSV indicada no notebook da aula
url = "COLE_AQUI_A_URL_DO_CSV_PNAD_2015"
Leitura do dataset
df = pd.read_csv(url)
Visualização básica
df.head()
Visualização de conteúdo, dimensões e tipos
Dimensões
print(f"Linhas: {df.shape[0]} | Colunas: {df.shape[1]}")
Nomes das colunas
print("Colunas:", list(df.columns))
Tipos de dados
print("\nTipos de dados por coluna:")
print(df.dtypes)
Informações gerais (nulos, memória, etc.)
print("\nResumo .info():")
df.info()
- Checagem rápida: Verifique se as colunas esperadas (“UF”, “Sexo”, “Cor”, “Anos.de.Estudo”, “Renda”) existem e se os tipos fazem sentido para análise.
Exploração da variável UF e gráfico de barras horizontal
import matplotlib.pyplot as plt
Contagem por UF
uf_counts = df['UF'].value_counts(dropna=False).sort_values(ascending=True)
Tabela de frequências
print("\nFrequências por UF:")
print(uf_counts)
Número de valores distintos
print(f"\nUF distintos: {df['UF'].nunique()}")
Gráfico de barras horizontal
plt.figure(figsize=(8, 10))
uf_counts.plot(kind='barh', color='#4C78A8')
plt.title('Distribuição de registros por UF (PNAD 2015)')
plt.xlabel('Quantidade de registros')
plt.ylabel('UF')
plt.tight_layout()
plt.show()
- Validação: Se UF vier codificada numericamente, o gráfico ainda é válido. Caso você tenha um dicionário UF→Sigla, pode mapear antes de plotar.
Transformação de Sexo, Cor e Anos.de.Estudo em categóricas
Abaixo está um template de transformação. Ajuste os dicionários conforme as instruções do documento da aula (códigos IBGE).
Copie exatamente os códigos conforme o documento do curso
map_sexo = {
1: 'Masculino',
2: 'Feminino'
}
map_cor = {
1: 'Branca',
2: 'Preta',
3: 'Amarela',
4: 'Parda',
5: 'Indígena'
}
Exemplo de categorização ordinal para anos de estudo.
Ajuste os limites e rótulos conforme o documento da aula.
bins = [-np.inf, 0, 4, 8, 11, 14, 99] # exemplo: 0, 1-4, 5-8, 9-11, 12-14, 15+ anos
labels = [
'Sem instrução',
'1–4 anos',
'5–8 anos',
'9–11 anos',
'12–14 anos',
'15+ anos'
]
Criação das novas colunas categóricas
df['Sexo_cat'] = df['Sexo'].map(map_sexo).astype('category')
df['Cor_cat'] = df['Cor'].map(map_cor).astype('category')
df['AnosEstudo_cat'] = pd.cut(df['Anos.de.Estudo'], bins=bins, labels=labels, ordered=True).astype('category')
Verificação das transformações
print("\nTipos após transformação:")
print(df[['Sexo', 'Sexo_cat', 'Cor', 'Cor_cat', 'Anos.de.Estudo', 'AnosEstudo_cat']].dtypes)
Amostra da nova tabela
df[['UF', 'Sexo_cat', 'Cor_cat', 'Anos.de.Estudo', 'AnosEstudo_cat', 'Renda']].head(10)
- Observação: “Sexo” e “Cor” são nominais; “AnosEstudo_cat” é ordinal. Se houver códigos “ignorado” ou “não declarado”, inclua mapeamento ou trate como NaN.
Apresentar menor e maior renda com f-string
renda_min = df['Renda'].min()
renda_max = df['Renda'].max()
print(f"Menor Renda observada: R$ {renda_min:,.2f}")
print(f"Maior Renda observada: R$ {renda_max:,.2f}")
- Dica: Se houver valores negativos ou zero na renda, considere investigar a origem (benefícios, rendas não declaradas, codificação, outliers).
Insights e achados iniciais
- Distribuição por UF: A quantidade de registros por estado indica a cobertura da amostra e pode refletir tamanhos populacionais e/ou desenho amostral. Estados com menos registros podem exigir cuidado ao comparar métricas de renda média ou anos de estudo.
- Estrutura dos dados: A tipagem correta (numérico vs. categórico) simplifica agrupamentos e estatísticas, evitando erros em descrições por sexo, cor/raça e escolaridade.
- Renda mínima e máxima: A presença de valores extremos (outliers) pode distorcer médias; considere usar mediana e intervalos interquartílicos na próxima aula para robustez.
- Escolaridade (ordinal): A categorização por faixas ajuda a comparar renda por níveis de instrução, suportando análises como “renda mediana cresce com escolaridade?”.
- Qualidade dos dados: Verifique nulos e códigos especiais (não declarado/ignorado). Se significativo, documente como isso afeta as estatísticas.