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
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
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.