Visualização e Análise Exploratória de Dados (EDA) em R

Hellen Sonaly Silva Alves
hellensilva.estat@gmail.com
http://lattes.cnpq.br/4845253626067527


Introdução

A Análise Exploratória de Dados (Exploratory Data Analysis – EDA) é uma etapa fundamental em Estatística e Ciência de Dados. Antes de aplicar testes estatísticos, ajustar modelos ou tirar conclusões, é essencial compreender a estrutura e as características dos dados.

Por meio da EDA, buscamos responder a perguntas como:

  • Como as variáveis estão distribuídas?
  • Existem valores faltantes ou inconsistências nos dados?
  • Há presença de outliers?
  • Quais são as relações entre as variáveis?
  • Existem diferenças relevantes entre grupos?

Neste tutorial, realizaremos uma Análise Exploratória de Dados utilizando o dataset iris, que já vem disponível por padrão no R. O objetivo é apresentar, de forma prática, algumas das principais técnicas e visualizações utilizadas nessa etapa inicial da análise de dados.

Análise

Dataset

Antes de iniciar a análise exploratória, é necessário instalar e carregar os pacotes que serão utilizados ao longo do tutorial. Neste exemplo, usaremos os pacotes dplyr para manipulação de dados e ggplot2 para visualização.

# Instalação dos pacotes (execute apenas uma vez)
install.packages("dplyr")
## package 'dplyr' successfully unpacked and MD5 sums checked
## 
## The downloaded binary packages are in
##  C:\Users\helle\AppData\Local\Temp\RtmpmKKW2L\downloaded_packages
install.packages("ggplot2")
## 
##   There is a binary version available but the source version is later:
##         binary source needs_compilation
## ggplot2  3.5.1  4.0.1             FALSE
# Carregamento dos pacotes
library(dplyr)
library(ggplot2)

Em seguida, carregamos o conjunto de dados iris, que já está disponível por padrão no R, e visualizamos as primeiras observações para entender sua estrutura inicial.

Carregando o Dataset

data(iris)

Visualizando as primeiras linhas

head(iris)
##   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1          5.1         3.5          1.4         0.2  setosa
## 2          4.9         3.0          1.4         0.2  setosa
## 3          4.7         3.2          1.3         0.2  setosa
## 4          4.6         3.1          1.5         0.2  setosa
## 5          5.0         3.6          1.4         0.2  setosa
## 6          5.4         3.9          1.7         0.4  setosa

Entendendo a estrutura dos dados

Antes de avançar para visualizações e análises mais detalhadas, é importante compreender a estrutura do conjunto de dados. Para isso, começamos inspecionando os tipos das variáveis e um resumo estatístico das observações.

# Estrutura do dataset
str(iris)
## 'data.frame':    150 obs. of  5 variables:
##  $ Sepal.Length: num  5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
##  $ Sepal.Width : num  3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
##  $ Petal.Length: num  1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
##  $ Petal.Width : num  0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
##  $ Species     : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
# Resumo estatístico
summary(iris)
##   Sepal.Length    Sepal.Width     Petal.Length    Petal.Width   
##  Min.   :4.300   Min.   :2.000   Min.   :1.000   Min.   :0.100  
##  1st Qu.:5.100   1st Qu.:2.800   1st Qu.:1.600   1st Qu.:0.300  
##  Median :5.800   Median :3.000   Median :4.350   Median :1.300  
##  Mean   :5.843   Mean   :3.057   Mean   :3.758   Mean   :1.199  
##  3rd Qu.:6.400   3rd Qu.:3.300   3rd Qu.:5.100   3rd Qu.:1.800  
##  Max.   :7.900   Max.   :4.400   Max.   :6.900   Max.   :2.500  
##        Species  
##  setosa    :50  
##  versicolor:50  
##  virginica :50  
##                 
##                 
## 

A função str() permite identificar:

  • O número de observações e variáveis do dataset;
  • O tipo de cada variável (numérica ou categórica);
  • A forma como os dados estão organizados.

No dataset iris, observamos que:

  • As variáveis Sepal.Length, Sepal.Width, Petal.Length e Petal.Width são numéricas;
  • A variável Species é categórica (fator), indicando a espécie da flor.

Já a função summary() fornece estatísticas descritivas básicas:

  • Para variáveis numéricas: mínimo, primeiro quartil, mediana, média, terceiro quartil e máximo;
  • Para variáveis categóricas: a contagem de observações em cada categoria.

Essas informações ajudam a ter uma visão geral da distribuição dos dados e a identificar possíveis assimetrias ou valores extremos.

Além disso, é fundamental verificar a presença de valores ausentes, pois eles podem impactar análises posteriores e a aplicação de modelos estatísticos.

colSums(is.na(iris))
## Sepal.Length  Sepal.Width Petal.Length  Petal.Width      Species 
##            0            0            0            0            0

Neste caso, observamos que o dataset iris não possui valores ausentes, o que facilita a continuidade da análise sem a necessidade de tratamento adicional dos dados.

Estatística descritiva

Nesta seção, calculamos algumas medidas estatísticas descritivas para uma variável numérica. Como exemplo, utilizamos o comprimento da pétala (Petal.Length), calculando média, mediana, desvio padrão, valor mínimo e máximo.

iris %>%
  summarise(
    media_petal_length   = mean(Petal.Length),
    mediana_petal_length = median(Petal.Length),
    desvio_padrao        = sd(Petal.Length),
    minimo               = min(Petal.Length),
    maximo               = max(Petal.Length)
  )
##   media_petal_length mediana_petal_length desvio_padrao minimo maximo
## 1              3.758                 4.35      1.765298      1    6.9

Essas medidas ajudam a resumir o comportamento da variável e fornecem uma primeira visão sobre sua distribuição.

Dica: diferenças grandes entre a média e a mediana podem indicar assimetria na distribuição ou a presença de outliers.

Visualizações univariadas

A análise gráfica é uma etapa fundamental da Análise Exploratória de Dados, pois permite identificar padrões que nem sempre são evidentes apenas por meio de tabelas e estatísticas resumo.

Histograma

O histograma é utilizado para visualizar a forma da distribuição de uma variável numérica, permitindo identificar se ela é simétrica, assimétrica ou multimodal.

ggplot(iris, aes(x = Petal.Length)) +
geom_histogram(bins = 20, color = "white") +
labs(
title = "Distribuição do Comprimento da Pétala",
x = "Petal.Length",
y = "Frequência"
)

A partir do histograma, podemos observar como os valores de Petal.Length estão distribuídos e verificar a presença de possíveis concentrações, assimetrias ou valores extremos.

Densidade

Uma alternativa ao histograma é o gráfico de densidade, que fornece uma estimativa suavizada da distribuição da variável. Ele é especialmente útil para identificar a forma geral da distribuição sem depender do número de classes (bins).

ggplot(iris, aes(x = Petal.Length)) +
geom_density() +
labs(
title = "Densidade do Comprimento da Pétala",
x = "Petal.Length",
y = "Densidade"
)

O gráfico de densidade facilita a visualização de assimetrias e possíveis múltiplos picos na distribuição dos dados.

Boxplot (identificação de outliers)

O boxplot é uma ferramenta eficaz para resumir a distribuição de uma variável numérica, destacando a mediana, os quartis e possíveis valores extremos (outliers).

ggplot(iris, aes(y = Petal.Length)) +
geom_boxplot() +
labs(
title = "Boxplot do Comprimento da Pétala",
y = "Petal.Length"
)

Neste gráfico:

  • A linha central representa a mediana;

  • A caixa corresponde ao intervalo entre o primeiro e o terceiro quartil;

  • Pontos fora dos limites indicam possíveis outliers.

Essas visualizações complementam as estatísticas descritivas e ajudam a entender melhor o comportamento da variável analisada.

Visualizações bivariadas (relação entre variáveis)

A análise bivariada tem como objetivo investigar a relação entre duas variáveis. Gráficos de dispersão são especialmente úteis para identificar padrões, tendências, correlações e possíveis agrupamentos nos dados.

Gráfico de dispersão: duas variáveis numéricas

Nesta etapa, analisamos a relação entre o comprimento e a largura da pétala, ambas variáveis numéricas.

ggplot(iris, aes(x = Petal.Length, y = Petal.Width)) +
geom_point(alpha = 0.7) +
labs(
title = "Relação entre Comprimento e Largura da Pétala",
x = "Petal.Length",
y = "Petal.Width"
)

Esse tipo de gráfico permite observar se existe uma relação linear, não linear ou ausência de relação entre as variáveis.

Gráfico de dispersão com grupos

Ao colorir os pontos por espécie, conseguimos identificar padrões e possíveis agrupamentos que não seriam facilmente observados em um gráfico sem diferenciação de grupos.

ggplot(iris, aes(x = Petal.Length, y = Petal.Width, color = Species)) +
geom_point(alpha = 0.8) +
labs(
title = "Comprimento vs Largura da Pétala (por Espécie)",
x = "Petal.Length",
y = "Petal.Width"
)

Neste gráfico, é possível notar que as espécies apresentam distribuições distintas, o que indica que as variáveis da pétala são informativas para diferenciar os grupos presentes no dataset.

Comparação entre grupos

A comparação entre grupos permite identificar diferenças no comportamento de uma variável entre categorias distintas. No dataset iris, utilizamos a variável Species para comparar as distribuições das medidas da flor.

Boxplot por espécie

O boxplot é uma forma clássica e eficiente de comparar distribuições entre grupos, pois evidencia mediana, quartis e possíveis outliers.

ggplot(iris, aes(x = Species, y = Petal.Length, fill = Species)) +
geom_boxplot() +
labs(
title = "Comprimento da Pétala por Espécie",
x = "Espécie",
y = "Petal.Length"
) +
guides(fill = "none")

Esse gráfico mostra claramente que o comprimento da pétala varia entre as espécies, indicando que essa variável é relevante para diferenciá-las.

Correlação

A correlação mede o grau de associação linear entre variáveis numéricas. É importante destacar que correlação não implica causalidade, mas pode indicar relações interessantes para investigações futuras.

Matriz de correlação entre variáveis numéricas

cor(iris[, 1:4])
##              Sepal.Length Sepal.Width Petal.Length Petal.Width
## Sepal.Length    1.0000000  -0.1175698    0.8717538   0.8179411
## Sepal.Width    -0.1175698   1.0000000   -0.4284401  -0.3661259
## Petal.Length    0.8717538  -0.4284401    1.0000000   0.9628654
## Petal.Width     0.8179411  -0.3661259    0.9628654   1.0000000

Para uma visualização rápida das relações entre todas as variáveis numéricas, utilizamos o pairs plot, que combina gráficos de dispersão para cada par de variáveis.

pairs(iris[, 1:4], main = "Pairs plot - iris (variáveis numéricas)")

A partir desses gráficos, é possível observar relações fortes entre algumas variáveis, especialmente entre as medidas da pétala, reforçando os padrões identificados nas análises anteriores.

Conclusão

Principais insights da EDA

A partir das estatísticas descritivas e das visualizações exploratórias, foi possível obter diversos insights relevantes sobre o dataset iris. Em particular, a Análise Exploratória de Dados permitiu:

  • Visualizar a distribuição das variáveis numéricas;
  • Detectar possíveis outliers e identificar padrões nos dados;
  • Compreender relações entre variáveis, como entre Petal.Length e Petal.Width;
  • Observar uma separação clara entre as espécies em algumas medidas da flor;
  • Formular hipóteses que podem ser investigadas em etapas posteriores, como testes estatísticos ou modelos de classificação.

A EDA é um passo essencial para orientar decisões analíticas e evitar conclusões equivocadas. Ao combinar estatística descritiva com visualizações gráficas, conseguimos compreender de forma rápida e eficiente os principais padrões e relações presentes nos dados, servindo como base sólida para análises mais avançadas.