library(readxl)
# Importa a aba "coffee rust" do arquivo Excel local
# Certifique-se de que o arquivo está na mesma pasta do projeto
meudado <- read_excel(
"dados_diversos.xlsx",
sheet = "coffee rust"
)Aula 2 - Importação, Organização e Visualização de Dados no R
Introdução
Este material apresenta um fluxo básico e comentado para:
- importar dados de diferentes fontes;
- reorganizar tabelas do formato largo para o formato longo;
- selecionar e filtrar dados;
- resumir estatisticamente os valores;
- construir gráficos exploratórios e comparativos.
A ideia é que cada etapa da análise fique clara, tanto do ponto de vista conceitual quanto do ponto de vista do código.
Excel
Arquivos do Excel geralmente possuem uma ou mais abas. A função read_excel() permite indicar tanto o arquivo quanto a aba a ser importada.
CSV
Arquivos CSV (Comma-Separated Values) são o padrão universal para troca de dados por serem leves e compatíveis com qualquer software.
library(tidyverse)── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ dplyr 1.2.0 ✔ readr 2.2.0
✔ forcats 1.0.1 ✔ stringr 1.6.0
✔ ggplot2 4.0.2 ✔ tibble 3.3.1
✔ lubridate 1.9.5 ✔ tidyr 1.3.2
✔ purrr 1.2.1
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag() masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
meucsv <- read_csv("experimento.csv")Rows: 192 Columns: 7
── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
chr (3): location, cultivar, treatment
dbl (4): year, block, severity, yield_kg_ha
ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
meucsvGoogle Sheet
Arquivos em Google Sheet, para serem lidos, precisam estar habilitados para compartilhamento com qualquer pessoa com o link, como visualizador ou editor. Arquivo com várias abas, cada aba deve ser carregada individualmente.
library(gsheet)
meudadonuvem <- gsheet2tbl("https://docs.google.com/spreadsheets/d/1bq2N19DcZdtax2fQW9OHSGMR0X2__Z9T/edit?gid=959387827#gid=959387827")
meudadonuvem#Abas
curve <- gsheet2tbl("https://docs.google.com/spreadsheets/d/1bq2N19DcZdtax2fQW9OHSGMR0X2__Z9T/edit?gid=1807247585#gid=1807247585")
survey <- gsheet2tbl("https://docs.google.com/spreadsheets/d/1bq2N19DcZdtax2fQW9OHSGMR0X2__Z9T/edit?gid=1118819738#gid=1118819738")Gemini - várias abas
Consulta ao gemini para abrir todas as abas de um Google Sheet. Se você tiver muitas abas, pode criar uma função que só precisa do “GID” (o número final da URL), já que o corpo do link é sempre o mesmo.
library(gsheet)
library(purrr) # opcional, para o map
ID_PLANILHA <- "1bq2N19DcZdtax2fQW9OHSGMR0X2__Z9T" #Sequência no meio da URL
ler_aba <- function(gid) {
url <- paste0("https://docs.google.com/spreadsheets/d/", ID_PLANILHA, "/edit?gid=", gid)
gsheet2tbl(url)
}
# Lista de GIDs das suas abas
gids <- list(
principal = "959387827",
curve = "1807247585",
survey = "1118819738"
)
# Carrega tudo
minhas_abas <- map(gids, ler_aba)Dados em pacotes
Dados presentes em pacotes para testar as funções e servir de exemplo.
library(epifitter)
dadopacote <- epifitter::PowderyMildew
dadopacoteDados do GitHub
Utiliza o mesmo comando de CSV, copiando o endereço web do “RAW” do arquivo.
dadogh <- read.csv("https://raw.githubusercontent.com/emdelponte/paper-hgam-curves/refs/heads/main/maize_bipolaris.csv")
dadogh2. Reorganização: Formato Largo vs. Longo
Muitas análises e gráficos no ggplot2 exigem o formato longo (tidy data).
No formato largo, cada variável medida está em uma coluna diferente. No formato longo, as colunas são “derretidas” para que tenhamos uma coluna de identificação (Key) e uma de valores (Value).
2.1 Converter para formato longo com pivot_longer()
Vamos usar dados de comparação entre três métodos de avaliação de severidade (Assess, LeafDoctor e ImageJ).
# Importação
software <- gsheet2tbl("[https://docs.google.com/spreadsheets/d/1bq2N19DcZdtax2fQW9OHSGMR0X2__Z9T/edit?gid=373270992#gid=373270992](https://docs.google.com/spreadsheets/d/1bq2N19DcZdtax2fQW9OHSGMR0X2__Z9T/edit?gid=373270992#gid=373270992)")
# Pivotagem: Empilhando as colunas de softwares
dados_longo <- software |>
pivot_longer(
cols = c(Assess, LeafDoctor, ImageJ), # Colunas para empilhar
names_to = "software", # Nome da nova coluna de categorias
values_to = "severidade" # Nome da nova coluna de valores
)
head(dados_longo)2.2 Visualização exploratória do formato longo
dados_longo |>
ggplot(aes(x = software, y = severidade, color = software)) +
geom_boxplot(outlier.colour = NA) +
geom_jitter(width = 0.1, alpha = 0.3) +
facet_wrap(~ crop) +
theme_minimal() +
labs(title = "Comparação de Softwares por Cultura")3. Manipulação com dplyr: Selecionar e Filtrar
select(): Utilizado para escolher colunas específicas.filter(): Utilizado para filtrar linhas baseadas em critérios lógicos.
# Criando subconjuntos para análises específicas
Assess_only <- dados_longo |> filter(software == "Assess")
LeafDoctor_only <- dados_longo |> filter(software == "LeafDoctor")
ImageJ_only <- dados_longo |> filter(software == "ImageJ")4. Resumo Estatístico e Gráficos de Colunas
Antes de realizar testes, precisamos de estatísticas descritivas (média e desvio padrão).
# Resumo robusto filtrando o software Assess
resumo_assess <- dados_longo |>
filter(software == "Assess") |>
group_by(crop) |>
summarise(
media_severidade = mean(severidade, na.rm = TRUE),
dp_severidade = sd(severidade, na.rm = TRUE)
)
# Gráfico de colunas com barra de erro (Desvio Padrão)
resumo_assess |>
ggplot(aes(x = crop, y = media_severidade, fill = crop)) +
geom_col(alpha = 0.8) +
geom_errorbar(aes(ymin = media_severidade - dp_severidade,
ymax = media_severidade + dp_severidade),
width = 0.1) +
theme_classic() +
labs(y = "Severidade Média (%)", title = "Média e Desvio Padrão (Software Assess)")5. Relação entre Variáveis (Correlação)
Para avaliar se dois softwares concordam entre si, utilizamos o gráfico de dispersão e o Coeficiente de Correlação de Pearson (\(r\)).
- \(r = 1\): Correlação positiva perfeita.
- \(r = 0\): Ausência de relação linear.
- A linha
geom_abline(intercepto 0, inclinação 1) representa a concordância perfeita.
library(ggpubr)
library(patchwork)
# Função para criar gráfico de correlação padronizado
criar_cor_plot <- function(data, x_var, y_var) {
ggplot(data, aes(x = .data[[x_var]], y = .data[[y_var]])) +
geom_point(size = 2, color = "darkorange", alpha = 0.6) +
geom_smooth(method = "lm", se = FALSE, color = "black") +
geom_abline(intercept = 0, slope = 1, linetype = 2) + # Linha de identidade (1:1)
stat_cor(method = "pearson") +
ylim(0, 100) + xlim(0, 100) +
theme_minimal()
}
p1 <- criar_cor_plot(software, "LeafDoctor", "Assess")
p2 <- criar_cor_plot(software, "ImageJ", "Assess")
p3 <- criar_cor_plot(software, "LeafDoctor", "ImageJ")
# Combinando gráficos com patchwork
(p1 | p2 | p3) + plot_annotation(title = "Análise de Concordância entre Softwares")Warning: Removed 1 row containing missing values or values outside the scale range
(`geom_smooth()`).
6. Observações Finais sobre o Fluxo
Este código ilustra um fluxo de trabalho reprodutível: 1. Importação: Dados locais ou remotos. 2. Limpeza/Tidy: Uso de pivot_longer para organizar a estrutura. 3. Transformação: filter e group_by para segmentar a análise. 4. Resumo: Cálculo de métricas centrais e de dispersão. 5. Comunicação: Visualização clara com ggplot2 e exportação com ggsave().
# Exemplo de salvamento de gráfico
# ggsave("meu_painel_correlacao.png", width = 10, height = 4, bg = "white")