Ecossistema R: estatística e visualização de dados
1. Introdução ao Ecossistema R
O R surgiu em 1993, criado por Ross Ihaka e Robert Gentleman na Universidade de Auckland, Nova Zelândia, como uma implementação livre da linguagem S. Sua filosofia sempre foi clara: ser uma linguagem voltada para análise estatística e visualização de dados, com forte ênfase em reprodutibilidade e comunidade aberta.
Na ciência de dados moderna, o R se destaca frente a Python e Julia por seu ecossistema estatístico maduro e integrado. Enquanto Python oferece bibliotecas independentes (pandas, scikit-learn), o R possui pacotes coesos como o tidyverse que seguem uma filosofia de design consistente. Julia, por sua vez, é mais rápida em computação numérica, mas carece da amplitude de pacotes estatísticos que o R acumulou em três décadas.
Para começar, instale o R e o RStudio. O RStudio oferece uma interface REPL (Read-Eval-Print Loop) integrada com console, editor de scripts, visualização de dados e gerenciamento de pacotes. Primeiros comandos:
# Instalação de pacotes essenciais
install.packages("tidyverse")
install.packages("ggplot2")
install.packages("dplyr")
# Carregar pacotes
library(tidyverse)
library(ggplot2)
2. Manipulação e Transformação de Dados com tidyverse
O tidyverse revolucionou a manipulação de dados no R. Seus pacotes seguem uma gramática unificada que torna o código legível e previsível.
dplyr fornece verbos intuitivos para transformação:
library(dplyr)
# Filtrar linhas, criar novas colunas, agrupar e sumarizar
dados_filtrados <- dados %>%
filter(ano > 2020) %>%
mutate(receita_ajustada = receita * 1.1) %>%
group_by(categoria) %>%
summarise(
media = mean(receita_ajustada),
desvio = sd(receita_ajustada),
n = n()
)
tidyr lida com formato dos dados:
library(tidyr)
# Pivoteamento longo para largo
dados_largos <- dados_longos %>%
pivot_wider(
names_from = mes,
values_from = vendas
)
# Pivoteamento largo para longo
dados_longos <- dados_largos %>%
pivot_longer(
cols = -id,
names_to = "mes",
values_to = "vendas"
)
readr e lubridate facilitam importação e manipulação de datas:
library(readr)
library(lubridate)
# Importar CSV com especificação de tipos
dados <- read_csv("vendas.csv",
col_types = cols(
data = col_date(format = "%Y-%m-%d"),
valor = col_double()
))
# Manipular datas
dados %>%
mutate(
mes = month(data),
ano = year(data),
trimestre = quarter(data)
)
3. Estatística Descritiva e Inferencial
O R oferece funções base poderosas para estatística descritiva:
# Medidas resumo
summary(dados$valor)
describe(dados) # pacote psych
# Distribuições
hist(dados$valor, breaks = 30)
boxplot(valor ~ categoria, data = dados)
Testes de hipótese clássicos:
# Teste t para duas amostras
t.test(valor ~ grupo, data = dados)
# ANOVA de um fator
modelo_anova <- aov(valor ~ tratamento, data = dados)
summary(modelo_anova)
# Teste qui-quadrado
tabela <- table(dados$categoria, dados$resultado)
chisq.test(tabela)
Modelos lineares com lm():
# Regressão linear
modelo <- lm(valor ~ idade + renda + educacao, data = dados)
summary(modelo)
# Interpretação dos coeficientes
coef(modelo)
confint(modelo)
4. Visualização de Dados com ggplot2
O ggplot2 implementa a Gramática dos Gráficos, onde cada gráfico é construído por camadas:
library(ggplot2)
# Gráfico de dispersão básico
ggplot(dados, aes(x = idade, y = valor)) +
geom_point(alpha = 0.5, color = "blue") +
geom_smooth(method = "lm", se = TRUE) +
labs(
title = "Relação entre Idade e Valor",
x = "Idade (anos)",
y = "Valor (R$)"
)
# Gráfico de barras com facetas
ggplot(dados, aes(x = categoria, fill = resultado)) +
geom_bar(position = "dodge") +
facet_wrap(~ ano, ncol = 3) +
theme_minimal() +
scale_fill_manual(
values = c("sucesso" = "green", "fracasso" = "red")
)
# Boxplot personalizado
ggplot(dados, aes(x = grupo, y = valor, fill = grupo)) +
geom_boxplot(outlier.color = "red", outlier.size = 3) +
stat_summary(fun = mean, geom = "point", shape = 18, size = 4) +
theme_classic() +
coord_flip()
5. Pacotes Especializados para Visualização
plotly transforma gráficos ggplot2 em interativos:
library(plotly)
p <- ggplot(dados, aes(x = idade, y = valor, text = nome)) +
geom_point()
ggplotly(p, tooltip = "text")
corrplot e ggcorrplot para matrizes de correlação:
library(corrplot)
library(ggcorrplot)
# Matriz de correlação
cor_matrix <- cor(dados_numericos)
corrplot(cor_matrix, method = "color", type = "upper")
# Versão ggplot2
ggcorrplot(cor_matrix,
hc.order = TRUE,
type = "lower",
lab = TRUE)
gganimate para animações:
library(gganimate)
p <- ggplot(dados, aes(x = tempo, y = valor, color = grupo)) +
geom_line() +
transition_reveal(tempo)
animate(p, fps = 10, duration = 5)
6. Modelagem Estatística Avançada
Modelos lineares generalizados (GLM):
# Regressão logística (família binomial)
modelo_logistico <- glm(
sucesso ~ idade + renda + educacao,
data = dados,
family = binomial(link = "logit")
)
summary(modelo_logistico)
predict(modelo_logistico, type = "response")
# Regressão de Poisson (contagem)
modelo_poisson <- glm(
contagem ~ tratamento + tempo,
data = dados_contagem,
family = poisson(link = "log")
)
Análise de séries temporais:
library(forecast)
library(tsibble)
# Criar objeto tsibble
serie <- dados %>%
as_tsibble(index = data)
# Modelo ARIMA
modelo_arima <- auto.arima(serie$valor)
forecast(modelo_arima, h = 12) %>%
autoplot()
Machine learning básico:
library(caret)
library(randomForest)
# Divisão treino-teste
set.seed(42)
split <- createDataPartition(dados$target, p = 0.8, list = FALSE)
treino <- dados[split, ]
teste <- dados[-split, ]
# Random Forest
modelo_rf <- randomForest(
target ~ .,
data = treino,
ntree = 500,
importance = TRUE
)
# Avaliação
predicoes <- predict(modelo_rf, teste)
confusionMatrix(predicoes, teste$target)
7. Reproducibilidade e Comunicação de Resultados
R Markdown e Quarto permitem criar relatórios dinâmicos:
---
title: "Análise de Vendas"
output: html_document
---
```{r}
# Código executado no relatório
summary(dados)
ggplot(dados, aes(x = mes, y = vendas)) + geom_line()
**Shiny** para dashboards interativos:
```text
library(shiny)
ui <- fluidPage(
titlePanel("Dashboard de Vendas"),
sidebarLayout(
sidebarPanel(
selectInput("categoria", "Categoria:",
choices = unique(dados$categoria))
),
mainPanel(
plotOutput("grafico")
)
)
)
server <- function(input, output) {
output$grafico <- renderPlot({
dados %>%
filter(categoria == input$categoria) %>%
ggplot(aes(x = mes, y = vendas)) +
geom_line()
})
}
shinyApp(ui = ui, server = server)
Boas práticas com renv:
# Iniciar ambiente reprodutível
renv::init()
# Instalar pacotes
renv::install("tidyverse")
# Snapshot do ambiente
renv::snapshot()
# Restaurar em outro computador
renv::restore()
8. Conclusão e Próximos Passos
O ecossistema R oferece soluções completas para estatística e visualização de dados, desde análises descritivas simples até modelos preditivos complexos. Sua força reside na integração entre pacotes, na filosofia de design consistente e na comunidade ativa que produz conteúdo de qualidade.
Para aprofundamento, explore os CRAN Task Views, que organizam pacotes por área temática. Acompanhe o R-bloggers para tutoriais e cases reais. Participe de comunidades como R-Ladies e grupos de usuários locais.
O R se integra nativamente com SQL, Spark e APIs REST. Com o pacote reticulate, é possível chamar código Python dentro do R, combinando o melhor dos dois mundos. Tendências futuras incluem o R nas nuvens (Posit Cloud) e o crescimento de interfaces low-code como o RStudio Visual Editor.
Referências
- R Project for Statistical Computing — Site oficial do R, com documentação, manuais e links para download
- RStudio (Posit) — Ambiente de desenvolvimento integrado para R, com recursos de edição, debugging e visualização
- Tidyverse — Coleção de pacotes para ciência de dados no R, incluindo dplyr, ggplot2, tidyr e readr
- R for Data Science (2nd Edition) — Livro online gratuito de Hadley Wickham, referência em manipulação e visualização de dados com tidyverse
- CRAN Task Views — Visões temáticas que organizam pacotes do CRAN por áreas como estatística, machine learning e séries temporais
- R-bloggers — Agregador de blogs sobre R, com tutoriais, cases e novidades da comunidade
- Shiny — Framework para construção de dashboards interativos diretamente no R
- Quarto — Sistema de publicação científica que integra R, Python e Julia para relatórios dinâmicos