Análise Agroclimática para a Região de Recife: Padrões Recentes e Implicações para o Planejamento Agrícola

1. Introdução

A agricultura é uma atividade intrinsecamente dependente das condições climáticas, sendo a variabilidade do clima um dos principais fatores de risco que afetam a produtividade e a segurança alimentar em escala global. No Brasil, especialmente na região Nordeste, onde os regimes de chuva e temperatura apresentam grande variação interanual e sazonal, o planejamento agrícola baseado em dados climáticos robustos é essencial para otimizar o uso de recursos, definir calendários de plantio e colheita e mitigar perdas (MAREY et al., 2015). A tomada de decisão informada pode ser a diferença entre uma safra bem-sucedida e o fracasso da produção, impactando diretamente a subsistência de agricultores familiares e a competitividade do agronegócio.

Nesse contexto, dados de sensoriamento remoto e modelagem climática, como os disponibilizados pelo projeto POWER (Prediction Of Worldwide Energy Resources) da NASA, surgem como ferramentas de alto valor. Eles fornecem séries temporais longas e consistentes de múltiplas variáveis meteorológicas para qualquer localidade do planeta, superando limitações de cobertura e falhas em redes de estações meteorológicas em solo (NASA, 2024). Para o setor agrícola, esses dados permitem análises detalhadas da disponibilidade hídrica, estresse térmico, radiação solar para fotossíntese e outras condições que governam o ciclo de vida das culturas.

Este projeto tem como objetivo realizar uma análise exploratória detalhada de um conjunto de dados agroclimáticos diários para a cidade de Recife, Pernambuco, abrangendo o período de 2020 até a data atual. Através da análise de padrões de temperatura, precipitação, umidade e radiação solar, busca-se extrair insights que possam subsidiar o planejamento agrícola na região. A investigação da sazonalidade e das correlações entre variáveis visa fornecer uma base quantitativa para a definição de estratégias de manejo mais resilientes e adaptadas às condições climáticas locais.

2. Pacotes Requeridos

pacotes_necessarios <- c("nasapower", "tidyverse", "lubridate", "janitor", "DT", "corrplot", "rmdformats")

for (pacote in pacotes_necessarios) {
  if (!require(pacote, character.only = TRUE)) {
    install.packages(pacote, repos = "https://cran.rstudio.com/")
    library(pacote, character.only = TRUE)
  }
}

3. Preparação dos Dados

3.1. Fonte dos Dados

Os dados foram obtidos do projeto NASA POWER, que disponibiliza dados de sensoriamento remoto para suporte a atividades em agrometeorologia e energia renovável.

3.2. Obtenção e Tratamento dos Dados

recife_lonlat <- c(-34.88, -8.05)
# Período de análise ajustado para usar a data atual como fim
dates <- c("2020-01-01", format(Sys.Date(), "%Y-%m-%d"))

dados_climaticos_api <- get_power(
  community = "AG",
  lonlat = recife_lonlat,
  pars = c(
    "T2M", "T2M_MAX", "T2M_MIN", "T2M_RANGE",
    "TS", "TS_MAX", "TS_MIN",
    "QV2M", "RH2M", "PRECTOTCORR", "EVPTRNS", # Adicionado Evapotranspiração
    "PS", "WS2M", "WS2M_MAX", "WS2M_MIN",
    "ALLSKY_SFC_SW_DWN", "CLRSKY_SFC_SW_DWN",
    "ALLSKY_KT", "ALLSKY_SFC_LW_DWN"
  ),
  dates = dates,
  temporal_api = "DAILY"
)

3.3. Limpeza e Renomeação das Variáveis

Após a obtenção, os dados são limpos, substituindo valores -999 por NA. Em seguida, as variáveis são renomeadas para português, facilitando a interpretação dos gráficos e tabelas.

clima_recife <- dados_climaticos_api

clima_recife <- clima_recife %>%
  mutate(across(everything(), ~replace(., . == -999, NA)))

clima_recife <- clima_recife %>%
  clean_names() %>%
  mutate(
    date = ymd(yyyymmdd),
    ano = year(date),
    mes = month(date, label = TRUE, abbr = FALSE),
    dia_do_ano = yday(date)
  ) %>%
  select(-yyyymmdd, -lat, -lon)

# Dicionário para renomear as variáveis para português
nomes_variaveis <- c(
  "temperatura_media" = "t2m",
  "temperatura_maxima" = "t2m_max",
  "temperatura_minima" = "t2m_min",
  "amplitude_termica" = "t2m_range",
  "temp_superficie" = "ts",
  "temp_max_superficie" = "ts_max",
  "temp_min_superficie" = "ts_min",
  "umidade_especifica" = "qv2m",
  "umidade_relativa" = "rh2m",
  "precipitacao_total" = "prectotcorr",
  "evapotranspiracao" = "evptrns",
  "pressao_atmosferica" = "ps",
  "velocidade_vento" = "ws2m",
  "vel_max_vento" = "ws2m_max",
  "vel_min_vento" = "ws2m_min",
  "radiacao_solar" = "allsky_sfc_sw_dwn",
  "radiacao_ceu_limpo" = "clrsky_sfc_sw_dwn",
  "indice_claridade" = "allsky_kt",
  "radiacao_onda_longa" = "allsky_sfc_lw_dwn"
)

clima_recife_pt <- clima_recife %>%
  rename(all_of(nomes_variaveis))

3.4. Visualização do Conjunto de Dados Final

DT::datatable(clima_recife_pt,
          options = list(pageLength = 5, scrollX = TRUE, language = list(url = '//cdn.datatables.net/plug-ins/1.10.11/i18n/Portuguese-Brasil.json')),
          caption = "Tabela 1: Amostra do conjunto de dados climáticos para Recife.")

3.5. Resumo das Variáveis de Interesse

resumo <- clima_recife_pt %>%
  select(temperatura_media, temperatura_maxima, temperatura_minima, umidade_relativa, precipitacao_total, velocidade_vento, radiacao_solar, evapotranspiracao)

summary(resumo)
##  temperatura_media temperatura_maxima temperatura_minima umidade_relativa
##  Min.   :23.18     Min.   :25.53      Min.   :20.84      Min.   :61.70   
##  1st Qu.:25.47     1st Qu.:28.40      1st Qu.:23.41      1st Qu.:72.50   
##  Median :26.92     Median :30.30      Median :24.55      Median :76.58   
##  Mean   :26.60     Mean   :29.98      Mean   :24.29      Mean   :77.03   
##  3rd Qu.:27.64     3rd Qu.:31.52      3rd Qu.:25.12      3rd Qu.:81.98   
##  Max.   :29.58     Max.   :34.04      Max.   :27.26      Max.   :93.09   
##  NA's   :3         NA's   :3          NA's   :3          NA's   :3       
##  precipitacao_total velocidade_vento radiacao_solar  evapotranspiracao
##  Min.   :  0.010    Min.   :1.190    Min.   : 2.42   Min.   :0.0000   
##  1st Qu.:  0.570    1st Qu.:3.200    1st Qu.:19.43   1st Qu.:0.3725   
##  Median :  1.600    Median :3.620    Median :22.52   Median :2.4400   
##  Mean   :  3.725    Mean   :3.584    Mean   :21.72   Mean   :2.8803   
##  3rd Qu.:  4.040    3rd Qu.:3.990    3rd Qu.:24.97   3rd Qu.:5.1875   
##  Max.   :198.270    Max.   :5.620    Max.   :28.11   Max.   :8.6700   
##  NA's   :3          NA's   :3        NA's   :10      NA's   :3

4. Análise Exploratória dos Dados

4.1. Distribuição das Variáveis-Chave

ggplot(clima_recife_pt, aes(x = temperatura_media)) +
  geom_histogram(aes(y = after_stat(density)), binwidth = 0.5, fill = "#d95f02", color = "white", alpha = 0.8) +
  geom_density(color = "#d95f02", linewidth = 1.2) +
  labs(title = "Distribuição da Temperatura Média Diária", x = "Temperatura Média (°C)", y = "Densidade") +
  theme_minimal(base_size = 14)

ggplot(clima_recife_pt, aes(x = umidade_relativa)) +
  geom_histogram(aes(y = after_stat(density)), binwidth = 1, fill = "#1f78b4", color = "white", alpha = 0.8) +
  geom_density(color = "#1f78b4", linewidth = 1.2) +
  labs(title = "Distribuição da Umidade Relativa Diária", x = "Umidade Relativa (%)", y = "Densidade") +
  theme_minimal(base_size = 14)

ggplot(clima_recife_pt, aes(x = precipitacao_total)) +
  geom_histogram(fill = "#33a02c", color = "white", alpha = 0.8) +
  scale_x_log10(labels = scales::label_number(accuracy = 0.1)) +
  labs(title = "Distribuição da Precipitação Diária", subtitle="Eixo X em escala logarítmica para melhor visualização", x = "Precipitação (mm)", y = "Frequência") +
  theme_minimal(base_size = 14)

4.2. Série Temporal da Temperatura Média

ggplot(clima_recife_pt, aes(x = date, y = temperatura_media)) +
  geom_line(color = "#7570b3", alpha = 0.7) +
  geom_smooth(method = "loess", se = FALSE, color = "#d95f02", span = 0.1) +
  labs(title = "Série Temporal da Temperatura Média Diária em Recife",
       subtitle = "A linha laranja representa uma média móvel para suavizar a tendência",
       x = "Data",
       y = "Temperatura Média (°C)") +
  theme_minimal(base_size = 14)

4.3. Sazonalidade: Padrões Mensais

ggplot(clima_recife_pt, aes(x = mes, y = temperatura_media, fill = mes)) +
  geom_boxplot(show.legend = FALSE, alpha = 0.8) +
  labs(title = "Variação Mensal da Temperatura Média", x = "Mês", y = "Temperatura (°C)") +
  theme_minimal(base_size = 14) +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

ggplot(clima_recife_pt, aes(x = mes, y = precipitacao_total, fill = mes)) +
  geom_boxplot(show.legend = FALSE, alpha = 0.8) +
  scale_y_sqrt(breaks = c(0, 10, 25, 50, 100, 150)) +
  labs(title = "Variação Mensal da Precipitação",
       subtitle = "Eixo Y em raiz quadrada para melhor visualização dos outliers",
       x = "Mês", y = "Precipitação Diária (mm)") +
  theme_minimal(base_size = 14) +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

4.4. Análise de Dias de Estresse Térmico

clima_recife_pt %>%
  filter(temperatura_maxima > 30) %>%
  count(ano, mes) %>%
  ggplot(aes(x = mes, y = n, fill = as.factor(ano))) +
  geom_col(position = "dodge", alpha = 0.8) +
  labs(title = "Contagem Mensal de Dias com Temperatura Máxima > 30°C",
       subtitle = "Indicador de potencial estresse térmico para as culturas",
       x = "Mês",
       y = "Número de Dias",
       fill = "Ano") +
  theme_minimal(base_size = 14) +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

4.5. Análise de Frequência da Chuva

dados_chuva <- clima_recife_pt %>%
  group_by(ano, mes) %>%
  summarise(
    dias_com_chuva = sum(precipitacao_total > 1, na.rm = TRUE),
    .groups = 'drop'
  )

ggplot(dados_chuva, aes(x = mes, y = dias_com_chuva, fill = as.factor(ano))) +
  geom_col(position = "dodge", alpha = 0.8) +
  labs(title = "Frequência Mensal de Dias com Chuva (> 1 mm)",
       x = "Mês", y = "Número de Dias com Chuva", fill = "Ano") +
  theme_minimal(base_size = 14) +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

4.6. Análise da Evapotranspiração

A evapotranspiração (ET) representa a perda de água do solo para a atmosfera por evaporação e pela transpiração das plantas. É uma variável chave para o balanço hídrico e para o cálculo da necessidade de irrigação das culturas.

ggplot(clima_recife_pt, aes(x = mes, y = evapotranspiracao, fill = mes)) +
  geom_boxplot(show.legend = FALSE, alpha = 0.8) +
  labs(title = "Variação Mensal da Evapotranspiração",
       subtitle = "Demanda hídrica atmosférica ao longo do ano",
       x = "Mês", y = "Evapotranspiração (mm/dia)") +
  theme_minimal(base_size = 14) +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

4.7. Análise da Amplitude Térmica Diária

A amplitude térmica (diferença entre a temperatura máxima e mínima) também afeta as plantas. Variações muito grandes podem ser um fator de estresse.

ggplot(clima_recife_pt, aes(x = mes, y = amplitude_termica, fill = mes)) +
  geom_boxplot(show.legend = FALSE, alpha = 0.8) +
  labs(title = "Variação Mensal da Amplitude Térmica",
       x = "Mês", y = "Amplitude Térmica (°C)") +
  theme_minimal(base_size = 14) +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

4.8. Relação entre Precipitação e Radiação Solar

ggplot(clima_recife_pt, aes(x = precipitacao_total, y = radiacao_solar)) +
  geom_point(alpha = 0.4, color = "#1f78b4") +
  geom_smooth(method = "loess", se = FALSE, color = "#d95f02") +
  scale_x_log10(labels = scales::label_number(accuracy = 0.1)) +
  labs(title = "Relação entre Precipitação e Radiação Solar",
       x = "Precipitação Total Diária (mm) - Escala Log",
       y = "Radiação Solar (kW-hr/m^2/dia)") +
  theme_minimal(base_size = 14)

4.9. Matriz de Correlação

A matriz de correlação quantifica a relação linear entre as variáveis.

numeric_vars <- clima_recife_pt %>%
  select(where(is.numeric), -ano, -dia_do_ano)

cor_matrix <- cor(numeric_vars, use = "pairwise.complete.obs")

corrplot(cor_matrix,
         method = "color",
         type = "upper",
         order = "hclust",
         tl.col = "black",
         tl.srt = 45,
         addCoef.col = "black",
         number.cex = 0.6,
         diag = FALSE,
         col = colorRampPalette(c("#b2182b", "#f7f7f7", "#2166ac"))(200),
         title = "Matriz de Correlação das Variáveis Agroclimáticas",
         mar = c(0,0,1.5,0))

Referências

MAREY, A. M. et al. Vulnerabilidade da agricultura familiar às mudanças climáticas na microrregião de Garanhuns, Pernambuco, Brasil. Revista de Geografia (Recife), v. 32, n. 2, p. 80-99, 2015.

NASA. Prediction Of Worldwide Energy Resources (POWER). NASA Langley Research Center, 2024. Disponível em: https://power.larc.nasa.gov/. Acesso em: 11 jun. 2025.