Você acabou de receber um arquivo Excel com dados da sua empresa. Milhares de linhas, várias colunas... Por onde começar? A resposta é: EDA - Análise Exploratória de Dados. É como dar uma primeira olhada nos dados antes de fazer qualquer análise mais complexa.

O EDA, além de ser um buzzword no campo da ciência de dados, é um requisito indispensável. Essa é a primeira, e mais importante, fase para um cientista de dados. Aprendi, depois de apanhar muito, que executando uma análise exploratória corretamente evita muita frustação e dor de cabeça.

O que é EDA?

EDA é abreviação para Exploratory Data Analysis (Análise Exploratória de Dados). É basicamente o processo de conhecer seus dados antes de trabalhar com eles.

É como quando você visita uma cidade nova. Assim que chegar, sempre quer dar uma voltinha para achar bares, mercados, padarias, pronto socorro, e por ai vai.

Por que EDA é Importante?

Antes de mais nada, você precisa olhar os dados, e avaliar com o que está trabalhando. Isso vai ajudar a ver quais dados estão faltando, erros, rótulos errados, etc. Nesse processo você também pode descobrir padrões interessantes.

Nesta fase você esta preparando os dados e descobrindo o potencial dos seus dados. E também vai decidir como lidar com valores ausentes evitando surpresas desagrádaveis depois.

As Ferramentas Básicas

A principal ferramenta para isso é o Jupyter Notebook. Esse ambiente de desenvolvimento integrado (IDE) é perfeito para visualização. Se você ainda não tem esse programa, pode instalar. É grátis e facil de usar. Mais instruções aqui.

No Python, para fazer EDA, você vai precisa de algumas bibliotecas:

import pandas as pd
import numpy as np

# Carregando seus dados
df = pd.read_csv('meus_dados.csv')
# ou
df = pd.read_excel('meus_dados.xlsx')

Passo 1: Primeira Olhada - "O que eu tenho aqui?"

Vendo as primeiras linhas

# Mostra as primeiras 5 linhas
print(df.head())

# Quer ver mais? Mude o número
print(df.head(10))

Tamanho do dataset

# Quantas linhas e colunas?
print(df.shape)
# Resultado: (1000, 8) significa 1000 linhas e 8 colunas

Nomes das colunas

# Quais são as colunas?
print(df.columns)

Tipos de dados

# Que tipo de dado cada coluna tem?
print(df.dtypes)

Passo 2: Informações Gerais

Resumo completo

# Informações gerais sobre o dataset
print(df.info())

Esta função mostra:

  • Quantas linhas e colunas
  • Nome de cada coluna
  • Quantos valores não-nulos (dados que existem)
  • Tipo de cada coluna
  • Quanto de memória está usando

Estatísticas básicas

# Estatísticas das colunas numéricas
print(df.describe())

Mostra para cada coluna numérica:

  • count: quantos valores existem
  • mean: média
  • std: desvio padrão (o quanto os dados variam)
  • min: menor valor
  • 25%: primeiro quartil
  • 50%: mediana (valor do meio)
  • 75%: terceiro quartil
  • max: maior valor

Passo 3: Investigando Dados Faltantes

Verificando valores faltantes

# Quantos dados estão faltando em cada coluna?
print(df.isnull().sum())

Porcentagem de dados faltantes

# Em porcentagem
print(df.isnull().sum() / len(df) * 100)

Linhas com dados faltantes

# Quantas linhas têm pelo menos um dado faltando?
print(df.isnull().any(axis=1).sum())

Passo 4: Analisando Cada Coluna

Para colunas numéricas

# Estatísticas de uma coluna específica
print(df['preco'].describe())

# Valores únicos
print(df['preco'].nunique())

# Maior e menor valor
print(f"Maior valor: {df['preco'].max()}")
print(f"Menor valor: {df['preco'].min()}")

# Média e mediana
print(f"Média: {df['preco'].mean()}")
print(f"Mediana: {df['preco'].median()}")

Para colunas de texto (categóricas)

# Valores únicos
print(df['categoria'].unique())

# Contagem de cada valor
print(df['categoria'].value_counts())

# Qual é o mais comum?
print(df['categoria'].mode()[0])

Passo 5: Procurando Padrões

Correlação entre colunas numéricas

# Como as colunas numéricas se relacionam?
print(df.corr())

Valores próximos de 1 = correlação forte positiva Valores próximos de -1 = correlação forte negativa Valores próximos de 0 = sem correlação

Agrupando dados

# Média por categoria
print(df.groupby('categoria')['preco'].mean())

# Contagem por categoria
print(df.groupby('categoria').size())

# Várias estatísticas de uma vez
print(df.groupby('categoria')['preco'].agg(['mean', 'median', 'std']))

Passo 6: Encontrando Problemas

Valores duplicados

# Quantas linhas estão duplicadas?
print(df.duplicated().sum())

# Ver as linhas duplicadas
print(df[df.duplicated()])

Valores estranhos

# Para coluna numérica - procurar valores muito altos ou baixos
print(df['preco'].sort_values(ascending=False).head(10))  # 10 maiores
print(df['preco'].sort_values().head(10))  # 10 menores

# Para coluna de texto - ver se tem valores estranhos
print(df['categoria'].value_counts())

Exemplo Prático: Analisando Vendas

Vamos aplicar tudo isso num exemplo real:

# Carregando dados de vendas
vendas = pd.read_csv('vendas.csv')

# Passo 1: Primeira olhada
print("Primeiras linhas:")
print(vendas.head())
print(f"\nTamanho: {vendas.shape}")
print(f"Colunas: {list(vendas.columns)}")

# Passo 2: Informações gerais
print("\nInformações gerais:")
print(vendas.info())
print("\nEstatísticas:")
print(vendas.describe())

# Passo 3: Dados faltantes
print("\nDados faltantes:")
print(vendas.isnull().sum())

# Passo 4: Análise por coluna
print("\nAnálise da coluna 'valor_venda':")
print(vendas['valor_venda'].describe())
print("\nProdutos mais vendidos:")
print(vendas['produto'].value_counts().head())

# Passo 5: Padrões
print("\nVenda média por produto:")
print(vendas.groupby('produto')['valor_venda'].mean())
print("\nCorrelação entre colunas numéricas:")
print(vendas.corr())

# Passo 6: Problemas
print(f"\nLinhas duplicadas: {vendas.duplicated().sum()}")
print("Vendas mais altas (possíveis outliers):")
print(vendas['valor_venda'].sort_values(ascending=False).head())

Dicas Importantes

Sempre comece com .head() e .info()

Antes de fazer qualquer coisa, olhe seus dados e entenda o que você tem.

Cuidado com dados faltantes

Se uma coluna tem muitos dados faltando, talvez ela não seja útil para sua análise.

Preste atenção nos tipos de dados

Às vezes números vêm como texto. Use pd.to_numeric() para converter.

Procure por valores estranhos

Idades negativas, salários de R$ 1 milhão, datas no futuro... sempre há algo estranho.

Use .value_counts() bastante

É uma das funções mais úteis para entender colunas categóricas.

Conclusão

EDA não é glamoroso, mas é fundamental. É melhor gastar tempo conhecendo seus dados do que descobrir problemas depois de horas de análise. Lembre-se: dados ruins geram insights ruins, não importa quão sofisticada seja sua análise.

Comece sempre com essas funções básicas: .head(), .info(), .describe(), .isnull().sum() e .value_counts(). Com elas, você já vai ter uma visão bem clara do que está trabalhando.