Análise Exploratória de Dados

A Análise Exploratória de Dados (AED) é uma abordagem para analisar conjuntos de dados com o objetivo de resumir suas principais características, frequentemente com métodos visuais. Ela ajuda a entender os dados, identificar padrões, detectar anomalias e formular hipóteses.

John Tukey e o Nascimento da AED

A Análise Exploratória de Dados, como a conhecemos hoje, tem suas raízes no trabalho pioneiro de John Wilder Tukey (1915-2000), um dos estatísticos mais influentes do século XX. Tukey, que também era químico e cientista da computação, revolucionou a forma como os dados são analisados e interpretados.

Quem foi John Tukey?

John Wilder Tukey (1915-2000)

John Wilder Tukey (1915-2000), o pai da Análise Exploratória de Dados

A Revolução da Análise Exploratória

Em 1977, Tukey publicou o livro seminal “Exploratory Data Analysis”, que estabeleceu os fundamentos da AED. Nesta obra, ele argumentou que a análise estatística não deveria se limitar a testar hipóteses (análise confirmatória), mas também deveria explorar os dados para descobrir padrões inesperados e gerar novas hipóteses.

Princípios Fundamentais de Tukey:

  1. Ênfase na Visualização: Tukey acreditava que “a imagem mais simples possível de uma imagem é a melhor, desde que faça o que precisa ser feito”.

  2. Resistência: Desenvolveu técnicas robustas que não são afetadas por valores atípicos, como a mediana e os quartis.

  3. Exploração Ativa: Encorajava os analistas a “brincar” com os dados, fazendo diferentes perguntas e visualizações.

  4. Ferramentas Inovadoras: Criou várias ferramentas visuais que são padrão hoje, incluindo:

    • Boxplot (ou diagrama de caixa)
    • Stem-and-leaf plot (diagrama de ramo-e-folhas)
    • Five-number summary (resumo dos cinco números)

Impacto e Legado

A abordagem de Tukey teve um impacto profundo em diversos campos:

A AED Hoje

Embora os princípios fundamentais permaneçam os mesmos, a AED evoluiu com a tecnologia:

A visão de Tukey de que “o objetivo mais importante da análise de dados é descobrir o que você não estava procurando” continua a guiar analistas e cientistas de dados em todo o mundo.

Objetivos da Análise Exploratória

  1. Entender a estrutura e distribuição dos dados
  2. Identificar valores atípicos e anomalias
  3. Descobrir padrões e relações entre variáveis
  4. Validar suposições iniciais
  5. Preparar os dados para análises mais avançadas

Técnicas Básicas de AED

1. Estatísticas Descritivas

As medidas de tendência central e dispersão fornecem um resumo numérico dos dados:

2. Visualizações Básicas

Exemplo Prático em Julia

Vamos realizar uma análise exploratória em um conjunto de dados de exemplo usando Julia. Usaremos o pacote DataFrames para manipulação de dados e Plots para visualização.

Carregando os Pacotes

julia
# Carregando os pacotes necessários
using DataFrames
using Statistics
using Plots

# Criando um conjunto de dados de exemplo com valores estáticos
function criar_dados_estudantes()
    # Dados estáticos para garantir reprodutibilidade
    nomes = ["Ana", "Carlos", "Maria", "João", "Julia", "Pedro", "Luiza", "Rafael"]
    idades = [18, 24, 20, 22, 19, 21, 23, 18]  # Idades fixas
    notas = [7, 6, 9, 8, 7, 5, 8, 6]  # Notas fixas
    horas_estudo = [17, 18, 15, 12, 19, 10, 14, 16]  # Horas de estudo fixas
    aprovado = [nota >= 7 ? "Sim" : "Não" for nota in notas]  # Calculado baseado nas notas fixas
    
    return DataFrame(
        Nome = nomes,
        Idade = idades,
        Nota = notas,
        HorasEstudo = horas_estudo,
        Aprovado = aprovado
    )
end

# Criando o DataFrame
df = criar_dados_estudantes()

# Visualizando as primeiras linhas
println("Primeiras linhas do conjunto de dados:")
df

Saída esperada:

# Saída
8×5 DataFrame
Row │ Nome Idade Nota HorasEstudo Aprovado
│ String Int64 Int64 Int64 String
─────┼───────────────────────────────────────────
1 │ Ana 18 7 17 Sim
2 │ Carlos 24 6 18 Não
3 │ Maria 20 9 15 Sim
4 │ João 22 8 12 Sim
5 │ Julia 19 7 19 Sim
6 │ Pedro 21 5 10 Não
7 │ Luiza 23 8 14 Sim
8 │ Rafael 18 6 16 Não

Estatísticas Descritivas

Vamos calcular algumas estatísticas descritivas básicas:

julia
# Estatísticas descritivas para colunas numéricas
function resumo_estatistico(df)
    println("Estatísticas Descritivas:")
    println("------------------------")
    
    for col in names(df)
        if eltype(df[!, col]) <: Number
            println("\nVariável: ", col)
            println("  Média: ", round(mean(skipmissing(df[!, col])), digits=2))
            println("  Mediana: ", median(skipmissing(df[!, col])))
            println("  Mínimo: ", minimum(skipmissing(df[!, col])))
            println("  Máximo: ", maximum(skipmissing(df[!, col])))
            println("  Desvio Padrão: ", round(std(skipmissing(df[!, col])), digits=2))
        end
    end
    
    # Contagem para variáveis categóricas
    println("\nContagem por categoria (Aprovado):")
    println(combine(groupby(df, :Aprovado), nrow => :Contagem))
end

resumo_estatistico(df)

Saída esperada:

# Saída
Estatísticas Descritivas:
------------------------
Variável: Idade
Média: 20.62
Mediana: 20.5
Mínimo: 18
Máximo: 24
Desvio Padrão: 2.39
Variável: Nota
Média: 7.0
Mediana: 7.0
Mínimo: 5
Máximo: 9
Desvio Padrão: 1.41
Variável: HorasEstudo
Média: 15.12
Mediana: 15.5
Mínimo: 10
Máximo: 19
Desvio Padrão: 3.04
Contagem por categoria (Aprovado):
2×2 DataFrame
Row │ Aprovado Contagem
│ String Int64
─────┼────────────────────
1 │ Não 3
2 │ Sim 5

Visualização dos Dados

1. Histograma das Notas

julia
# Criando um histograma das notas
histogram(df.Nota, 
          bins=5, 
          xlabel="Notas", 
          ylabel="Frequência", 
          title="Distribuição das Notas",
          color=:steelblue,
          alpha=0.6,
          lw=0,
          legend=false,
          xlims=(4, 10),
          xticks=4:10)

Saída do Histograma:

Histograma das Notas

2. Gráfico de Dispersão: Horas de Estudo vs Notas

julia
# Criando um gráfico de dispersão
scatter(df.HorasEstudo, df.Nota,
        xlabel="Horas de Estudo",
        ylabel="Nota",
        title="Relação entre Horas de Estudo e Notas",
        color=:blue,
        legend=false,
        markersize=8,
        markercolor=:white,
        markerstrokecolor=:steelblue,
        markerstrokewidth=2,
        xlims=(8, 20),
        ylims=(4, 10),
        xticks=8:20,
        yticks=4:10)

# Adicionando uma linha de tendência
x_range = minimum(df.HorasEstudo):0.1:maximum(df.HorasEstudo)
coef = cov(df.HorasEstudo, df.Nota) / var(df.HorasEstudo)
intercept = mean(df.Nota) - coef * mean(df.HorasEstudo)
plot!(x_range, x -> intercept + coef * x, 
      linewidth=2, 
      linestyle=:dash, 
      color=:darkred,
      label="Linha de Tendência")

Saída do Gráfico de Dispersão:

Gráfico de Dispersão

3. Boxplot das Horas de Estudo por Status de Aprovação

julia
using StatsPlots
# Criando um boxplot agrupado por aprovação
boxplot(df.Aprovado, df.HorasEstudo;
        xlabel="Aprovado",
        ylabel="Horas de Estudo",
        title="Distribuição de Horas de Estudo por Status de Aprovação",
        color=:steelblue,
        legend=false)

Saída do Boxplot:

Boxplot de Horas de Estudo por Aprovação

Análise dos Resultados

Com base na análise exploratória, podemos tirar as seguintes conclusões:

  1. Distribuição das Notas: As notas variam de 5 a 9, com média de 7.0.
  2. Relação entre Variáveis: Há uma correlação positiva entre horas de estudo e notas, sugerindo que alunos que estudam mais tendem a ter notas melhores.
  3. Aprovação: 5 dos 8 alunos foram aprovados (nota ≥ 7).
  4. Idade dos Alunos: A idade média é de aproximadamente 21 anos, variando de 18 a 24 anos.

Próximos Passos

Com base nessa análise exploratória, poderíamos:

  1. Realizar testes estatísticos para verificar a significância das relações encontradas
  2. Coletar mais dados para aumentar a confiabilidade das conclusões
  3. Desenvolver um modelo de classificação para prever a aprovação com base nas outras variáveis

Referências

  1. Tukey, J. W. (1977). Exploratory Data Analysis. Addison-Wesley.
  2. Behrens, J. T. (1997). Principles and Procedures of Exploratory Data Analysis. Psychological Methods.
  3. Wickham, H., & Grolemund, G. (2016). R for Data Science. O’Reilly Media.