Oficina ‘Introdução à análise exploratória de dados em ambiente R’
XI Seminário de Recursos Naturais | PRONAT UFRR | 2025
Baixe aqui:
Última atualização: 2026-08-12.
Código fonte: https://github.com/ricoperdiz/2025_analiseDadosR_XISemRecNat.
Adições
- Exemplos com conjunto chamado
dadosforam removidos.
Apresentação da oficina
O objetivo desta oficina é introduzir o uso da linguagem R e do ambiente RStudio para análise exploratória de dados, com foco em aplicações nas Ciências ambientais.
Ao final desta oficina, você terá os conhecimentos básicos para importar, manipular, agrupar e contar, e visualizar dados simples em R.
Durante as oito horas de oficina, apresentaremos resumidamente comandos básicos em R que cobrem quase todo o ciclo da análise de dados (Figura 1). Nosso intuito é demonstrar o poder do R enquanto ferramenta para a análise de dados. Oferecemos então uma introdução à importação de dados, checagem e transformação de dados, manipulação de dados, agrupamento e sumarização de dados, e, por fim, visualização de dados.
O que é o R?
R é uma linguagem de programação e um ambiente de software livre voltado à análise estatística, exploração e visualização de dados (Ihaka e Gentleman 1996).
Criado por Ross Ihaka e Robert Gentleman, o R é amplamente utilizado por estatísticos, cientistas de dados e pesquisadores para organizar, analisar e interpretar grandes volumes de informação de forma eficiente e reprodutível (Wickham e Grolemund 2017).
Por que R?
O IDE RStudio
O RStudio é um ambiente de desenvolvimento integrado (IDE), que facilita o uso do R. Ele é dividido em quatro painéis principais:
- Script (Editor) – onde escrevemos e salvamos códigos;
- Console – onde os comandos são executados;
- Ambiente – mostra objetos carregados na sessão;
- Arquivos, plots e pacotes – onde gerenciamos pastas, gráficos e extensões.
Dica:
Use o atalho Ctrl + Enter (ou Cmd + Enter no macOS) para executar uma linha de código selecionada.
Básico em R
Primeiros comandos
O R pode ser usado como uma calculadora interativa.
Experimente no console:
Objetos e atribuição
No R, os dados são armazenados em objetos. Usamos <- (ou =) para atribuir valores.
Boa prática: Use nomes curtos e descritivos (sem acentos ou espaços), como dados_plantas ou taxa_crescimento.
Podemos fazer operações matemáticas e guardar resultado das operações em objetos.
Ver o conteúdo de um objeto
Para ver o conteúdo de um objeto, basta digitar seu nome e rodar o código. Por exemplo, para ver a soma, que está no objeto soma, fazemos assim:
Concatenando elementos com a função c()
Podemos concatenar elementos utilizando a função c(). Chamamos esse conjunto de elementos de vetores:
Acima, criamos os vetores numeros e letras. Reparem que em letras adicionamos letras do alfabeto entre aspas "". Devemos fazer isso toda vez que desejarmos guardar texto em um objeto.
Tipos de dados e vetores
Os vetores são as estruturas básicas do R. Podem conter números, caracteres ou valores lógicos.
Estruturas de dados em R
| Estrutura | Descrição | Exemplo |
|---|---|---|
| Vetor | Sequência unidimensional | c(1,2,3) |
| Matriz | Tabela numérica bidimensional | matrix() |
| Data frame | Tabela com colunas de tipos diferentes | data.frame() |
| Lista | Conjunto heterogêneo de objetos | list() |
Podemos criar tabelas, por exemplo. No R, chamamos tabelas de data.frame. Cada coluna precisa ser um vetor (criado com a função c()). A função data.frame() junta esses vetores, criando uma tabela.
Em nosso exemplo exposto abaixo, os argumentos ID, Nome e Idade representam os nomes das colunas de nossa tabela, guardada no objeto dados_exemplo:
Podemos ver o conteúdo de dados_exemplo também simplesmente executando o nome do objeto:
Exemplo 2 de criação de um data.frame:
Acessando elementos
Podemos acessar elementos com colchetes [] ou pelo nome da coluna.
Pacotes e funções
O R possui milhares de pacotes que estendem suas funcionalidades. Pacotes em R são conjuntos de funções ou conjuntos de dados. Utilizamos a função install.packages() para instalar esses pacotes. Neste curso, faremos uso dos pacotes dplyr (Wickham et al. 2023), palmerpenguins (Horst et al. 2020), readxl (Wickham e Bryan 2025) e ggplot2 (Wickham 2016). Primeiro, devemos instalar os pacotes. Em seguida, carregamos os pacotes de interesse para nossos objetivos.
install.packages() VS. library()
Instalamos pacotes R uma vez apenas, para cada versão de R que tivermos instalado no computador. Por outro lado, a cada sessão nova de R, devemos carregar os pacotes utilizando a função library(), de forma que as funções dos pacotes estejam disponíveis na sessão.
A função install.packages() é como instalar um aplicativo no seu celular: você faz uma vez. O library() é como abrir esse aplicativo para usá-lo: você precisa fazer isso em cada nova sessão que iniciar.
O pacote dplyr inaugurou uma nova sintaxe em R (ver a postagem O que é o Tidyverse para mais informações), que permite a manipulação de dados tabulares de maneira mais prática e com mais clareza ao usuário.
O ggplot2 (Wickham 2016) é a ferramenta de visualização mais popular em R e será utilizada neste minicurso. Ele segue uma “gramática de gráficos”, em que você constrói o gráfico em camadas.
O pacote readxl (Wickham e Bryan 2025) é usado para importar planilhas .xls e .xlsx diretamente no R, sem precisar ter programas como o Excel/LibreOffice Calc instalados e sem depender de outras ferramentas externas. É amplamente utilizado para trazer dados tabulares para dentro do R de forma rápida e prática, preservando nomes de colunas e tipos de variáveis.
Por sua vez, o pacote palmerpenguins (Horst et al. 2020) oferece um conjunto de dados referente à morfologia de três espécies de pinguins que ocorrem no arquipélago de Palmer no noroeste da península Antártica.
# Instalar (executar uma única vez)
install.packages("dplyr")
install.packages("ggplot2")
install.packages("palmerpenguins")
install.packages("readxl")Agora carregaremos o pacote por meio da função library(). Devemos inserir o nome do pacote que queremos carregar entre os parênteses, com ou sem aspas.
# Carregar
library("dplyr")
library("ggplot2")
library("palmerpenguins")
library("readxl")Funções têm o formato nome(argumentos).
Importando dados
Para a análise de dados, precisamos carregar dados 😄😄😄. Existem diversas maneiras de importar dados ao R. Importaremos um arquivo CSV referente ao pacote R palmerpenguins (Horst et al. 2020).
Podemos ler arquivos xlsx utilizando a função read_excel() do pacote readxl (Wickham e Bryan 2025):
Resultado da leitura de dados usando read.table()
Quando executamos os dados lidos pela função read.table(), podemos acabar vendo muita coisa, o que pode acabar incomodando. Desta forma, pode-se utilizar a função head() para ver apenas as primeiras seis linhas da tabela.
read.csv() e read.table()
O R possui diferentes funções para ler tabelas:
read.csv()é uma forma simplificada de read.table() já configurada para ler arquivos separados por vírgula (,) e com ponto (.) como separador decimal.read.table()é mais flexível, permitindo ajustar separador (sep) e símbolo decimal (dec).
Inspeção básica - head(), tail(), str(), summary() e glimpse()
Agora que os dados foram lidos, vamos inspecioná-los. Para ver as primeiras linhas/valores de um objeto, utilizamos a função head():
Para observar os últimos valores, utilizamos a função tail():
Podemos utilizar a função dplyr::glimpse() para ver a estrutura dos dados:
Além de dplyr::glimpse(), duas funções muito úteis para inspecionar dados são:
str(): mostra a estrutura do objeto.summary():gera um resumo estatístico das variáveis numéricas e uma contagem das categorias.
Limpeza e checagem de dados
Dados do mundo real raramente são perfeitos. Precisamos limpá-los.
Dados ausentes (NA): Verificando e lidando com valores
NA.Tipos de colunas: Garantindo que cada coluna tenha o tipo de dado correto (numérico, texto, etc.).
Dados ausentes
Removendo linhas com NA
Para remover todas as linhas que apresentarem valoes ausentes, podemos utilizar a função na.omit().
Agora checamos os dados após a remoção das linhas com dados ausentes:
Renomear colunas
Podemos renomear colunas utilizando a função dplyr::rename():
Veja agora o resultado da renomeação das colunas:
Transformação de tipos de dados/colunas
Às vezes, uma coluna que deveria ser numérica (por exemplo, com números) é lida como um texto. Isso pode acontecer quando a coluna tem algum valor não numérico, como um caractere especial ou um espaço.
Para resolver, podemos converter o tipo de dado. Por exemplo, vamos transformar a coluna body_mass_g para o tipo numérico usando a função as.numeric():
O R possui uma função, chamada ajuda “help”, que deve ser utilizada para obtermos informação sobre o que uma função executa. Para obter essa ajuda, devemos pegar a função e executá-la da seguinte forma:
?read.table
?na.omit
?cAo utilizar o ? junto ao nome de uma função, sem os parênteses, uma janela se abre contendo várias informações úteis referentes ao que aquela determinada função faz. Teste aí!
Exercícios Práticos — Parte I
1. Criando e manipulando vetores
- Crie um vetor chamado
alturascom os valores1.60,1.72,1.80,1.65e1.75. - Calcule a média das alturas utilizando a função
mean(). - Calcule o desvio-padrão com
sd(). - Some
0.05a cada valor do vetor, simulando um aumento de 5 cm, e guarde o resultado em um novo vetor chamadoalturas_ajustadas. - Compare os dois vetores (
alturasealturas_ajustadas) no console.
2. Trabalhando com vetores de texto e lógicos
- Crie um vetor chamado
nomescom os valores"Ana","Bruno","Carlos","Daniela","Eduardo". - Crie um vetor lógico chamado
presentecom os valoresTRUE,FALSE,TRUE,TRUE,FALSE. - Verifique quantos alunos estavam presentes com
sum(presente). - Use a função
length()para contar quantos nomes há no vetor.
3. Construindo seu primeiro data.frame
- Use os vetores
nomes,alturasepresentepara criar umdata.framechamadodados_alunos. - Visualize a tabela no console.
- Verifique a estrutura do objeto com
str(). - Use a função
summary()para gerar um resumo estatístico das colunas numéricas.
4. Acessando elementos da tabela
- Mostre apenas a primeira linha da tabela.
- Mostre apenas a coluna
alturas. - Selecione as linhas dos alunos presentes (
TRUE). - Mostre apenas os nomes (
nomes) dos alunos com altura maior que 1.70 m.
5. Explorando funções novas
- Use
head()para ver as primeiras linhas da tabeladados_alunos. - Use
glimpse()para uma visão geral. - Use
nrow()encol()para descobrir quantas linhas e colunas há. - Tente ordenar o
data.framepela colunaalturas, do menor para o maior, usando a funçãoarrange()do pacotedplyr.
6. Mini-desafio
Crie um pequeno conjunto de dados fictício sobre plantas amostradas em campo. Inclua as colunas:
especie(nomes de 4 espécies quaisquer),altura_m(valores numéricos com alturas em metros),florida(valores lógicos TRUE/FALSE indicando se a planta estava florida).
- Monte o
data.framechamadoplantas. - Calcule a média da altura das plantas.
- Filtre apenas as plantas floridas.
- Renomeie a coluna
altura_mparaaltura_media_m.
Manipulação e transformação de dados com dplyr
Utilização do pipe |>
O R desde a versão 4.1.0 permite a utilização do operador |>, popularmente chamado de pipe (cano, em tradução literal), que permite o encadeamento de ações na linguagem. Isso serve apenas para facilitar a leitura do código. Assim lemos o código da esquerda para a direita.
Por exemplo, usando os exemplos anteriores, poderíamos fazer uso do pipe da seguinte maneira:
Reparem que o resultado é o mesmo apresentado na Seção 6.2.
O verdadeiro poder do pipe |> aparece quando encadeamos múltiplas operações em sequência. Isso nos permite realizar uma análise completa em poucas linhas de código, mantendo a lógica clara.
Exemplo
Vamos filtrar os pinguins da espécie Adelie, selecionar a coluna de massa corporal, remover os valores ausentes e, por fim, calcular a média
Veja como o |> torna essa sequência de passos fácil de ler:
|> funciona como um cano!
Pense no |> como um cano que ‘passa’ o resultado do comando anterior para a próxima função. Isso nos permite ler o código da esquerda para a direita, como uma sequência de passos.
Sem o pipe, o mesmo processo seria mais complexo e difícil de ler, pois uma função ficaria aninhada dentro da outra:
O |> transforma essa sintaxe confusa em uma sequência lógica de comandos.
Pacote dplyr
O pacote dplyr (parte do tidyverse) (Wickham et al. 2023)facilita a manipulação de dados com verbos simples e encadeáveis.
|>
Lê-se “então”. Ele envia o resultado de uma etapa para a próxima, tornando o código mais legível. Por exemplo, leia o código abaixo:
pinguins |> filter(sex == "male")O significado disso é:
“pegue
pinguins, então filtre apenas as linhas comsex == "male"”.
Funções importantes!
select(): Escolhe colunas.filter(): Filtra linhas.mutate(): Cria novas colunas ou altera existentes.group_by()esummarize(): Agrupa dados para fazer resumos.
Filtrando pinguins com barbatanas maiores que 200 mm:
Seleção de colunas - dplyr::select()
Podemos selecionar colunas com a função select():
Criação de novas colunas - dplyr::mutate()
Para criar novas colunas, usamos a função mutate().
Podemos fazer isso baseados em condições. Por exemplo, a função case_when() é ótima para aplicar várias regras, enquanto o ifelse() é mais simples e ideal para regras de ‘se isso, então aquilo’.
Agrupamento e sumarização de dados - group_by() e summarise()
Podemos agrupar os dados por qualquer variável e fazer sumários estatísticos, úteis na análise exploratória de dados. Para agrupar os dados, utilizamos a função group_by(); e para sumarizar, utilizamos a função summarise().
A função summarise() é incrivelmente poderosa para resumir seus dados. Além de calcular a média (mean()), podemos usar várias outras funções estatísticas para obter uma visão mais completa de cada grupo.
Imagine que queremos entender não apenas a média, mas também a variabilidade dos dados. Podemos calcular o desvio padrão (sd()), o valor mínimo (min()) e o máximo (max()) do comprimento da barbatana por espécie.
na.rm = TRUE
O na.rm = TRUE que você vê dentro das funções mean(), sd(), min() e max() significa ‘remova os valores NA (valores ausentes) antes de fazer o cálculo’. Isso evita erros e garante que a função opere apenas com os dados disponíveis.
Mais um exemplo de agrupamentos
Podemos gerar resumos por grupo — útil em análises ecológicas, por exemplo.
Simplificando contagens com count()
A função count() do pacote dplyr é a maneira mais simples e direta de realizar contagens por grupos. É uma ferramenta essencial na análise exploratória.
Enquanto summarise() pode ser usado para contar, a função count() foi feita para essa tarefa, tornando o código mais simples e intuitivo. Ela automaticamente agrupa os dados e conta a frequência de cada categoria.
Por exemplo, se quisermos saber a quantidade de pinguins de cada espécie em cada ilha, basta usar count() e especificar as colunas:
É uma maneira rápida e elegante de resumir a distribuição dos dados categóricos.
Exercícios Práticos — Parte II
1. Selecionando e filtrando
- Selecione apenas as colunas
species,islandebody_mass_gdo conjuntopinguins. - Filtre apenas os pinguins da espécie Gentoo.
- Filtre apenas os pinguins com massa corporal maior que 5000 g.
- Combine as duas condições: mostre apenas pinguins da espécie Gentoo com massa acima de 5000 g.
2. Criando novas colunas ⚙️
- Crie uma nova coluna chamada
massa_kg, que convertabody_mass_gpara quilogramas (massa_kg = body_mass_g / 1000). - Crie uma coluna chamada
barbatana_categoria, que classifique os pinguins como"Curta"seflipper_length_mm < 190,"Média"se estiver entre 190 e 210, e"Longa"se for maior que 210 (usecase_when()). - Mostre apenas as colunas
species,flipper_length_mmebarbatana_categoria.
3. Agrupando e resumindo 📊
- Calcule a média da massa corporal (
body_mass_g) para cada espécie de pinguim. - Adicione também o desvio padrão e o número de indivíduos por espécie.
- Em seguida, adicione uma segunda camada de agrupamento, calculando esses valores por espécie e ilha.
4. Contagens rápidas com count() 🔢
- Conte quantos indivíduos existem de cada espécie (
species). - Conte quantos indivíduos existem por espécie e sexo (
species,sex). - Crie um novo objeto chamado
contagem_islacom o número de pinguins por ilha (island), e visualize o resultado ordenado do maior para o menor número de registros (usearrange(desc(n))).
5. Combinando operações em sequência 🧠
Agora, una vários passos em uma única sequência usando o operador |>:
Filtre apenas os pinguins da espécie Adelie, remova valores ausentes, crie uma nova coluna com a massa em kg, e calcule a média dessa nova coluna.
6. Mini-desafio ecológico 🌿
Imagine que cada pinguim representa um indivíduo monitorado em campo. Use os dados para responder:
- Qual ilha possui, em média, os pinguins mais pesados?
- Qual espécie tem maior variação (desvio padrão) no comprimento da barbatana?
- Crie uma nova variável
densidade_aproxdefinida como(body_mass_g / flipper_length_mm), e mostre a média dessa variável por espécie.
7. Desafio de síntese 🎯
Combine tudo o que aprendeu até aqui para criar o seguinte relatório resumido:
Para cada espécie de pinguim, mostre:
- número de indivíduos (
n),- massa corporal média em kg,
- comprimento médio e máximo da barbatana (mm).
Ordene o resultado da maior para a menor massa corporal média.
Visualização de dados
O pacote ggplot2 (Wickham 2016) uma “gramática de gráficos”, em que você constrói o gráfico em camadas. As funções básicas do pacote, nesta ordem, são:
ggplot(): Define os dados e a estética (aes()).geom_*: Adiciona as camadas geométricas (pontos:geom_point(); barras:geom_col(); linhas:geom_line()).
Façamos um histograma do comprimento do bico dos pinguins:
Visualizando relações entre variáveis
Gráfico de dispersão entre comprimento de barbatana (flipper_length_mm) e massa corporal (body_mass_g)
Explorando relações complexas
Podemos adicionar mais variáveis aos nossos gráficos usando a estética.
color: Mapeia uma variável categórica para a cor.facet_wrap()efacet_grid(): Cria sub-gráficos para cada categoria.
Gráficos de facetas
As facetas facilitam a visualização de dados por grupos. Há duas funções que produzem as facetas:
facet_wrap(), quando você quer visualizar dados por apenas uma variável;facet_grid(), que deve ser utilizada quando você quer ver a combinação entre duas variáveis.
Gráfico de barras com geom_col()
Além de histogramas e dispersões, gráficos de barras são muito úteis:
Exercícios de visualização - Parte III
1. Histograma customizado
Crie um histograma da variável body_mass_g. Use uma cor diferente para o preenchimento (fill) e outra para o contorno (color). Adicione título e rótulos adequados aos eixos.
2. Relação entre duas variáveis 📈
Faça um gráfico de dispersão entre bill_length_mm (comprimento do bico) e bill_depth_mm (profundidade do bico). Diferencie as espécies por cor (color = species) e use alpha = 0.6 para dar transparência aos pontos.
3. Comparando grupos com facetas 🧩
Mostre o gráfico anterior, mas agora adicione facetas por ilha usando facet_wrap(~island). Inclua um título e eixos legíveis.
4. Gráfico de barras empilhadas 🧱
Crie um gráfico de barras mostrando o número de pinguins por espécie e sexo. Use geom_col(position = "dodge") para colocar as barras lado a lado. Dê um título e personalize as cores com fill = sex.
Desafio da oficina
Usando o que você aprendeu nesses dois dias, crie um pequeno conjunto de dados com três espécies vegetais e três variáveis quantitativas (por exemplo: altura, biomassa e área foliar).
- Calcule a média de cada variável.
- Crie um gráfico simples (de pontos ou colunas) mostrando uma relação entre elas.
- Dê um título e rótulos adequados.
Conclusão e próximos passos
Parabéns! Você concluiu esta oficina de introdução à análise exploratória de dados em R. Vimos (quase) o ciclo completo da análise de dados: importação, limpeza, transformação e visualização.
Onde seguir a partir daqui?
Aprofunde-se na linguagem R: continue explorando os fundamentos da linguagem, funções, estruturas de dados e boas práticas de programação. Há vasta literatura introdutória e intermediária disponível — veja, por exemplo, (Vicentini e Perdiz 2021).
Modelagem estatística: avance para técnicas de análise inferencial e modelagem, como regressão linear, ANOVA, e modelos generalizados, entre outras.
Comunicação e visualização interativa: transforme análises em aplicações dinâmicas e relatórios interativos com pacotes como {shiny}, {flexdashboard} e {rmarkdown}.
Continue praticando — cada nova análise é uma oportunidade para consolidar o que aprendeu e descobrir novas possibilidades dentro do universo do R!
Ao concluir esta oficina, o participante aprendeu a:
compreender o que é o R e o ambiente RStudio, seus painéis e formas básicas de interação;
criar, armazenar e manipular objetos e vetores de diferentes tipos (numéricos, textuais e lógicos);
construir e explorar
data.frames, acessando linhas e colunas por diferentes métodos;importar e inspecionar conjuntos de dados (.csv, .xlsx), utilizando funções como
read.table(),head(),str()esummary();realizar checagem e limpeza de dados, incluindo tratamento de valores ausentes, renomeação de colunas e transformação de tipos;
aplicar os principais verbos do pacote
dplyr(select(),filter(),mutate(),group_by(),summarise(),count()) para manipulação e transformação de dados;compreender e utilizar o pipe nativo
|>para encadear operações de forma legível e eficiente;efetuar análises exploratórias, incluindo agrupamentos, sumarizações e contagens;
iniciar-se na visualização de dados por meio do pacote
ggplot2, criando gráficos básicos para interpretação visual dos resultados.