Análise univariada
Analise cada coluna de forma independente: represente distribuições numéricas e contagens de valores categóricos e observe valores discrepantes e assimetria.
Análise univariada é uma aula grátis de Pandas & NumPy Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Pandas & NumPy Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Pandas & NumPy Academy inclui 4 aulas no total.
O que é análise univariada
A análise univariada examina uma coluna por vez, de forma isolada, ignorando as relações entre colunas. O objetivo é compreender a distribuição de cada variável, detectar valores atípicos, identificar assimetria e encontrar problemas de qualidade dos dados antes do início de qualquer modelagem. A análise univariada é diferente para colunas numéricas e categóricas: as numéricas precisam de gráficos de distribuição e estatísticas resumidas, enquanto as categóricas precisam de contagens de frequência e proporções.
import pandas as pd
import seaborn as sns
df = sns.load_dataset('titanic')
numeric_cols = df.select_dtypes('number').columns.tolist()
categoric_cols = df.select_dtypes('object').columns.tolist()
print('Numeric columns:', numeric_cols)
print('Categorical columns:', categoric_cols)Histogramas para colunas numéricas
Trace um histograma para cada coluna numérica para visualizar o formato de sua distribuição. Procure simetria versus assimetria (cauda de um dos lados), modalidade (um pico versus vários) e anomalias evidentes (valores nas extremidades que parecem implausíveis). No Pandas, df.hist() cria rapidamente uma grade de histogramas para várias colunas sem que seja necessário escrever um laço, mas o Seaborn histplot oferece um controle mais preciso para colunas individuais.
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
df = sns.load_dataset('titanic')
# Quick multi-column histogram grid
numeric = df.select_dtypes('number')
numeric.hist(bins=20, figsize=(12, 8), layout=(2, 3), color='steelblue', edgecolor='white')
plt.suptitle('Univariate Distributions (Numeric Columns)', y=1.02)
plt.tight_layout()
plt.show()Estatísticas resumidas para colunas numéricas
Para cada coluna numérica, calcule e compare mean e median. Quando mean > median de forma significativa, a distribuição apresenta assimetria à direita (cauda longa à direita, comum em dados de renda e preços). Quando mean < median, ela apresenta assimetria à esquerda. Verifique também o desvio padrão em relação à média: um std maior que a média em uma variável não negativa indica alta variabilidade ou valores atípicos. Calcule a assimetria diretamente com df.skew().
import pandas as pd
import seaborn as sns
df = sns.load_dataset('titanic')
numeric = df.select_dtypes('number')
summary = pd.DataFrame({
'mean': numeric.mean(),
'median': numeric.median(),
'std': numeric.std(),
'skewness': numeric.skew(),
'missing_pct': (numeric.isna().sum() / len(df) * 100).round(1)
}).round(2)
print(summary)Gráficos de caixa para detecção de valores atípicos
Os gráficos de caixa são a ferramenta visual mais rápida para identificar valores atípicos em colunas numéricas. Qualquer ponto além dos bigodes (1.5×IQR a partir de Q1 ou Q3) é plotado individualmente e sinalizado como possível valor atípico. Uma coluna com muitos pontos atípicos merece investigação: eles são erros de entrada de dados, valores extremos legítimos ou evidências de uma distribuição não normal? Os gráficos de caixa também revelam assimetria à direita ou à esquerda pela posição assimétrica da mediana dentro da caixa.
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
df = sns.load_dataset('titanic')
fig, axes = plt.subplots(1, 3, figsize=(14, 5))
for ax, col in zip(axes, ['age', 'fare', 'sibsp']):
df[[col]].boxplot(ax=ax)
ax.set_title(f'Box Plot: {col}')
plt.tight_layout()
plt.show()Contagem de valores atípicos com base em IQR
O método IQR (amplitude interquartil) define como valores atípicos os valores abaixo de Q1 - 1.5×IQR ou acima de Q3 + 1.5×IQR. Você pode fazer esse cálculo por meio de código para contar e inspecionar os valores atípicos de cada coluna numérica sem gerar gráficos. Isso é útil em pipelines automatizados nos quais é necessário registrar as contagens de anomalias em vez de gerar gráficos. Decidir o que fazer com os valores atípicos — removê-los, limitá-los ou sinalizá-los — deve ser uma escolha deliberada, orientada pelo conhecimento do domínio.
import pandas as pd
import seaborn as sns
df = sns.load_dataset('titanic')
numeric = df.select_dtypes('number')
Q1 = numeric.quantile(0.25)
Q3 = numeric.quantile(0.75)
IQR = Q3 - Q1
lower = Q1 - 1.5 * IQR
upper = Q3 + 1.5 * IQR
outlier_counts = ((numeric < lower) | (numeric > upper)).sum()
print('Outlier counts per column:')
print(outlier_counts[outlier_counts > 0])Contagens de valores para colunas categóricas
Para cada coluna categórica, chame value_counts() para ver como as observações se distribuem entre as categorias. Verifique sempre: alguma categoria isolada domina (>80%)? Isso causa desbalanceamento de classes em tarefas de classificação. Existem categorias raras com apenas 1 ou 2 observações (erros de digitação ou de entrada de dados)? A distribuição corresponde às expectativas do negócio (por exemplo, uma coluna de “país” que mostra a maioria dos pedidos vindo de um país inesperado)?
import pandas as pd
import seaborn as sns
df = sns.load_dataset('titanic')
for col in ['sex', 'embarked', 'class', 'who']:
counts = df[col].value_counts(dropna=False)
pct = (counts / len(df) * 100).round(1)
result = pd.DataFrame({'count': counts, 'pct%': pct})
print(f'\n--- {col} ---')
print(result)Gráficos de barras para variáveis categóricas
Visualize as contagens de valores categóricos em gráficos de barras usando sns.countplot ou chamando value_counts().plot(kind='bar'). Ordene as barras da categoria mais para a menos frequente para que a pessoa que visualiza possa identificar imediatamente as categorias dominantes. Para variáveis binárias (sim/não, masculino/feminino), um gráfico de pizza é aceitável, mas, para mais de 3 categorias, os gráficos de barras são sempre mais claros. Gire os rótulos das marcações em 45 graus quando os nomes das categorias forem longos.
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
df = sns.load_dataset('titanic')
fig, axes = plt.subplots(1, 2, figsize=(12, 5))
sns.countplot(data=df, x='embarked', order=df['embarked'].value_counts().index, ax=axes[0])
axes[0].set_title('Embarkation Port Counts')
sns.countplot(data=df, x='class', order=['First', 'Second', 'Third'], ax=axes[1])
axes[1].set_title('Passenger Class Counts')
plt.tight_layout()
plt.show()Detecção de assimetria e aplicação de transformações
Colunas numéricas com forte assimetria à direita (assimetria > 1.5) costumam se beneficiar de uma transformação logarítmica para se tornarem mais simétricas. Isso é importante para muitos testes estatísticos e para alguns algoritmos de aprendizado de máquina que pressupõem normalidade. Aplique np.log1p() (log(x+1), seguro para valores próximos de zero) e verifique novamente a assimetria. Compare os histogramas antes e depois para confirmar que a distribuição ficou mais parecida com um sino.
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
df = sns.load_dataset('titanic')
fig, axes = plt.subplots(1, 2, figsize=(10, 4))
sns.histplot(df['fare'], bins=30, kde=True, ax=axes[0])
axes[0].set_title(f'fare (skew={df["fare"].skew():.2f})')
log_fare = np.log1p(df['fare'])
sns.histplot(log_fare, bins=30, kde=True, ax=axes[1], color='coral')
axes[1].set_title(f'log1p(fare) (skew={log_fare.skew():.2f})')
plt.tight_layout()
plt.show()Verificação de colunas com variância zero
Uma coluna com variância zero (todos os valores são idênticos) não fornece nenhuma informação a qualquer modelo e deve ser removida. Uma coluna com variância próxima de zero (99% das linhas têm o mesmo valor) é igualmente inútil. Calcule a variância com df.var() e filtre as colunas. Verifique também as colunas em que nunique() == len(df) — elas provavelmente são colunas de ID que não devem ser usadas como características, mas podem ser úteis como identificadores de linhas.
import pandas as pd
import seaborn as sns
df = sns.load_dataset('titanic')
numeric = df.select_dtypes('number')
# Zero-variance columns
zero_var = numeric.columns[numeric.var() == 0].tolist()
print('Zero-variance columns:', zero_var)
# Near-zero variance (std < 0.01)
nzv = numeric.columns[numeric.std() < 0.01].tolist()
print('Near-zero variance:', nzv)
# Likely ID columns (all unique values)
id_candidates = [c for c in df.columns if df[c].nunique() == len(df)]
print('Likely ID columns:', id_candidates)Laço de automação da análise univariada
Em vez de repetir manualmente a mesma análise para cada coluna, escreva um laço que percorra todas as colunas numéricas e mostre as principais estatísticas em um formato estruturado. Isso facilita a análise rápida de dezenas de colunas e a sinalização daquelas que precisam de atenção. A saída pode ser salva em um arquivo CSV como parte de um registro de auditoria do pipeline que as partes interessadas podem revisar antes de os dados serem usados na modelagem.
import pandas as pd
import seaborn as sns
df = sns.load_dataset('titanic')
numeric = df.select_dtypes('number')
rows = []
for col in numeric.columns:
s = df[col]
Q1, Q3 = s.quantile(0.25), s.quantile(0.75)
IQR = Q3 - Q1
n_outliers = ((s < Q1 - 1.5*IQR) | (s > Q3 + 1.5*IQR)).sum()
rows.append({
'column': col,
'missing_pct': round(s.isna().mean() * 100, 1),
'mean': round(s.mean(), 2),
'std': round(s.std(), 2),
'skew': round(s.skew(), 2),
'outliers': int(n_outliers)
})
report = pd.DataFrame(rows)
print(report.to_string(index=False))Documentação das descobertas univariadas
Depois de concluir a análise univariada, documente suas descobertas de forma sistemática. Para cada coluna, registre: o formato da distribuição (assimétrica, bimodal, aproximadamente normal), a porcentagem de valores ausentes e a estratégia de imputação planejada, a contagem de valores atípicos e a decisão tomada (limitar, remover ou sinalizar), além de quaisquer valores suspeitos que exijam esclarecimento sobre o domínio. Essa documentação se torna o registro de qualidade dos dados que orienta as etapas de limpeza e evita que decisões sejam esquecidas ou contestadas posteriormente.
Verificação rápida
Teste sua compreensão da análise univariada apresentada nesta lição.
Recapitulação da lição
Nesta lição, você aprendeu: os histogramas revelam o formato da distribuição das colunas numéricas; os gráficos de caixa e os limites baseados em IQR identificam valores atípicos; e value_counts revela a frequência das categorias em colunas categóricas. Automatizar essas verificações em um laço cria um relatório de qualidade reutilizável. A seguir, vamos explorar a análise bivariada e de correlação — compreendendo as relações entre pares de colunas.
Aprenda Python com um tutor de IA — grátis
Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.
- Cursos
- 30
- Aulas
- 120
Perguntas Frequentes
A aula “Análise univariada” é grátis?
Sim — o texto completo de “Análise univariada” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Pandas & NumPy Academy, atualize para CoddyKit PRO. O curso de Pandas & NumPy Academy inclui 4 aulas no total.
O que vou aprender em “Análise univariada”?
Analise cada coluna de forma independente: represente distribuições numéricas e contagens de valores categóricos e observe valores discrepantes e assimetria. Você pratica Pandas & NumPy Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Pandas & NumPy Academy?
Nenhuma experiência prévia é necessária. Pandas & NumPy Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.
Quanto tempo leva a aula “Análise univariada”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Pandas & NumPy Academy?
Sim. Cada aula de Pandas & NumPy Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Lista de verificação para criação de perfil do conjunto de dados
- Análise univariada
- Análise bivariada e de correlação
- Resumindo descobertas em um relatório