climas <- read_csv(
here::here("data/clima_cg_jp-semanal.csv"),
col_types = "cTddddii"
)
# Renomeando coluna para facilitar (o .Rmd base usava tmedia, mas o CSV tem tmedia)
glimpse(climas)
## Rows: 2,748
## Columns: 8
## $ cidade <chr> "Campina Grande", "Campina Grande", "Campina Grande", "Campina …
## $ semana <dttm> 1992-12-27, 1993-01-03, 1993-01-10, 1993-01-31, 1993-02-07, 19…
## $ tmedia <dbl> 26.13333, 26.11905, 25.76667, 25.74000, 26.31429, 26.28571, 26.…
## $ tmax <dbl> 30.4, 32.4, 32.2, 32.0, 32.7, 32.7, 32.3, 32.3, 32.1, 31.2, 32.…
## $ tmin <dbl> 20.7, 19.3, 19.7, 19.9, 19.6, 20.0, 20.4, 21.2, 19.0, 19.0, 19.…
## $ chuva <dbl> 0.0, 0.0, 0.0, 0.4, 0.3, 0.0, 4.9, 0.0, 0.0, 6.1, 0.4, 1.2, 0.0…
## $ mes <int> 12, 1, 1, 1, 2, 2, 2, 2, 10, 11, 11, 11, 11, 12, 12, 12, 12, 1,…
## $ ano <int> 1992, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 199…
# Calculando a temperatura da semana anterior dentro de cada cidade
climas <- climas %>%
arrange(cidade, semana) %>%
group_by(cidade) %>%
mutate(temp_anterior = lag(tmedia, n = 1)) %>%
ungroup()
# Visão geral: distribuição da temperatura média por cidade
ggplot(climas, aes(x = cidade, y = tmedia, fill = cidade)) +
geom_violin(alpha = 0.6, trim = FALSE, color = NA) +
geom_boxplot(width = 0.15, outlier.shape = NA, alpha = 0.9) +
stat_summary(fun = mean, geom = "point", shape = 18, size = 4,
color = "white", show.legend = FALSE) +
scale_fill_manual(values = cores_cidades) +
labs(
title = "Distribuição da Temperatura Média Semanal",
subtitle = "Ponto branco = média; caixa central = mediana e IQR",
x = NULL, y = "Temperatura Média (°C)",
fill = "Cidade"
) +
theme(legend.position = "none")
climas %>%
group_by(cidade) %>%
summarise(
media = round(mean(tmedia, na.rm = TRUE), 2),
mediana = round(median(tmedia, na.rm = TRUE), 2),
desvpad = round(sd(tmedia, na.rm = TRUE), 2),
min = round(min(tmedia, na.rm = TRUE), 2),
max = round(max(tmedia, na.rm = TRUE), 2)
)
# Filtrando apenas janeiro e fevereiro (pico do verão no Nordeste)
verao <- climas %>% filter(mes %in% c(1, 2))
ggplot(verao, aes(x = cidade, y = tmedia, fill = cidade)) +
geom_violin(alpha = 0.6, trim = FALSE, color = NA) +
geom_boxplot(width = 0.15, outlier.shape = NA, alpha = 0.9) +
stat_summary(fun = mean, geom = "point", shape = 18, size = 4,
color = "white", show.legend = FALSE) +
scale_fill_manual(values = cores_cidades) +
labs(
title = "Temperatura Média no Pico do Verão (Janeiro e Fevereiro)",
subtitle = "Apenas semanas dos meses 1 e 2",
x = NULL, y = "Temperatura Média (°C)",
fill = "Cidade"
) +
theme(legend.position = "none")
verao %>%
group_by(cidade) %>%
summarise(
media = round(mean(tmedia, na.rm = TRUE), 2),
mediana = round(median(tmedia, na.rm = TRUE), 2),
desvpad = round(sd(tmedia, na.rm = TRUE), 2)
)
Conclusão Q1:
João Pessoa é consistentemente mais quente que Campina Grande ao longo
do ano todo. No conjunto completo dos dados, JP tem média de
aproximadamente 28,1°C contra 24,1°C
de CG — uma diferença de quase 4°C. Essa diferença se mantém também no
pico do verão (jan-fev): JP registra em torno de 28,9°C
de média, enquanto CG fica em 26,2°C. A disparidade faz
sentido geográfico: JP fica no litoral, numa altitude próxima ao nível
do mar, enquanto CG está no Planalto da Borborema (~550 m de altitude),
o que garante temperaturas sistematicamente mais amenas. O violin plot
deixa claro também que a distribuição de CG é mais larga, com cauda
inferior mais expressiva — ou seja, a temperatura em CG oscila mais ao
longo do ano, chegando a valores bem mais baixos nos meses frios.
# Temperatura média por mês para cada cidade
climas %>%
group_by(cidade, mes) %>%
summarise(
media = mean(tmedia, na.rm = TRUE),
ic_inf = mean(tmedia, na.rm = TRUE) - 1.96 * sd(tmedia, na.rm = TRUE) / sqrt(n()),
ic_sup = mean(tmedia, na.rm = TRUE) + 1.96 * sd(tmedia, na.rm = TRUE) / sqrt(n()),
.groups = "drop"
) %>%
mutate(mes_label = factor(mes, labels = month.abb)) %>%
ggplot(aes(x = mes_label, y = media, color = cidade, group = cidade)) +
geom_ribbon(aes(ymin = ic_inf, ymax = ic_sup, fill = cidade),
alpha = 0.15, color = NA) +
geom_line(linewidth = 1.2) +
geom_point(size = 3) +
scale_color_manual(values = cores_cidades) +
scale_fill_manual(values = cores_cidades) +
labs(
title = "Temperatura Média por Mês",
subtitle = "Faixa = intervalo de confiança 95%",
x = "Mês", y = "Temperatura Média (°C)",
color = "Cidade", fill = "Cidade"
)
# Boxplot por mês — mostra dispersão intra-mês
climas %>%
mutate(mes_label = factor(mes, labels = month.abb)) %>%
ggplot(aes(x = mes_label, y = tmedia, fill = cidade)) +
geom_boxplot(outlier.alpha = 0.3, alpha = 0.8) +
scale_fill_manual(values = cores_cidades) +
facet_wrap(~cidade, ncol = 1) +
labs(
title = "Distribuição da Temperatura por Mês e Cidade",
x = "Mês", y = "Temperatura Média (°C)",
fill = "Cidade"
) +
theme(legend.position = "none")
# Foco nas festas juninas: meses 6 e 7, anos recentes (2010 em diante)
juninas <- climas %>%
filter(mes %in% c(6, 7), ano >= 2010) %>%
mutate(ano_label = as.factor(ano),
mes_label = if_else(mes == 6, "Junho", "Julho"))
ggplot(juninas, aes(x = ano_label, y = tmedia, color = cidade, group = cidade)) +
geom_line(alpha = 0.5) +
geom_point(size = 2.5) +
facet_wrap(~mes_label) +
scale_color_manual(values = cores_cidades) +
labs(
title = "Temperatura nas Festas Juninas (2010–2019)",
subtitle = "Junho e Julho, semanas individuais",
x = "Ano", y = "Temperatura Média (°C)",
color = "Cidade"
) +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
climas %>%
filter(mes %in% c(6, 7)) %>%
group_by(cidade, mes) %>%
summarise(
media = round(mean(tmedia, na.rm = TRUE), 2),
mediana = round(median(tmedia, na.rm = TRUE), 2),
desvpad = round(sd(tmedia, na.rm = TRUE), 2),
min = round(min(tmedia, na.rm = TRUE), 2),
.groups = "drop"
) %>%
mutate(mes = if_else(mes == 6, "Junho", "Julho"))
Conclusão Q2:
Para Campina Grande, os meses mais quentes são novembro,
dezembro e janeiro (médias em torno de 25–26°C), enquanto os
meses mais frios são junho e julho (médias ao redor de
22°C), com o mês de julho chegando a registrar mínimas históricas
próximas de 15°C. Já em João Pessoa, a sazonalidade é bem menor: os
meses mais quentes são novembro a fevereiro (~29°C) e
os mais frios — se é que se pode chamar assim — são junho e
julho (~26–27°C), ainda bem quentes na perspectiva de quem vive
em CG.
Nas festas juninas, a diferença entre as cidades é bastante marcada: enquanto JP ainda mantém temperaturas altas (em torno de 27°C), CG apresenta suas temperaturas mais amenas do ano, com médias por volta de 22–23°C. Isso é parte do charme das festas juninas em CG: a amenidade do clima do Planalto da Borborema cria um ambiente mais fresco e agradável para as celebrações. Os anos mais recentes não mostram uma tendência clara de aquecimento ou resfriamento nesses meses, mas a variabilidade interanual é perceptível.
# Distribuição do volume de chuvas (semanas em que choveu)
climas %>%
filter(chuva > 0) %>%
ggplot(aes(x = chuva, fill = cidade)) +
geom_histogram(bins = 50, alpha = 0.8, color = "white", linewidth = 0.2) +
scale_fill_manual(values = cores_cidades) +
facet_wrap(~cidade, ncol = 1, scales = "free_y") +
scale_x_continuous(limits = c(0, 300)) +
labs(
title = "Distribuição do Volume de Chuvas Semanais (semanas com chuva > 0)",
subtitle = "Eixo x limitado a 300mm para melhor visualização",
x = "Chuva semanal (mm)", y = "Contagem de semanas",
fill = "Cidade"
) +
theme(legend.position = "none")
# ECDF para ver a distribuição acumulada
climas %>%
filter(chuva > 0) %>%
ggplot(aes(x = chuva, color = cidade)) +
stat_ecdf(linewidth = 1.2) +
scale_color_manual(values = cores_cidades) +
coord_cartesian(xlim = c(0, 250)) +
labs(
title = "Distribuição Acumulada do Volume de Chuvas (semanas chuvosas)",
x = "Chuva semanal (mm)", y = "Proporção acumulada",
color = "Cidade"
) +
geom_vline(xintercept = c(25, 50, 100), linetype = "dashed",
color = "gray50", alpha = 0.6)
# Proporção de semanas secas vs chuvosas
climas %>%
mutate(chuvosa = if_else(chuva > 0, "Com chuva", "Sem chuva")) %>%
count(cidade, chuvosa) %>%
group_by(cidade) %>%
mutate(prop = round(n / sum(n) * 100, 1))
# Resumo estatístico das semanas com chuva
climas %>%
filter(chuva > 0) %>%
group_by(cidade) %>%
summarise(
n_semanas_chuvosas = n(),
media = round(mean(chuva), 2),
mediana = round(median(chuva), 2),
desvpad = round(sd(chuva), 2),
q75 = round(quantile(chuva, 0.75), 2),
q90 = round(quantile(chuva, 0.90), 2),
max = round(max(chuva), 2)
)
# Chuva média por mês
climas %>%
group_by(cidade, mes) %>%
summarise(chuva_media = mean(chuva, na.rm = TRUE), .groups = "drop") %>%
mutate(mes_label = factor(mes, labels = month.abb)) %>%
ggplot(aes(x = mes_label, y = chuva_media, fill = cidade)) +
geom_col(position = "dodge", alpha = 0.85) +
scale_fill_manual(values = cores_cidades) +
labs(
title = "Chuva Média Semanal por Mês",
x = "Mês", y = "Chuva média (mm/semana)",
fill = "Cidade"
)
Conclusão Q3:
A distribuição de chuvas em ambas as cidades é fortemente assimétrica à
direita: a grande maioria das semanas chuvosas concentra volumes abaixo
de 50mm, mas existem semanas excepcionais que podem ultrapassar 200mm —
especialmente em JP. Cerca de 50% das semanas em CG e
40% das semanas em JP não registram nenhuma chuva, o
que revela que o regime pluviométrico nordestino é marcado por semanas
secas intercaladas com chuvas concentradas.
A mediana das semanas chuvosas em CG é de aproximadamente 10mm, enquanto em JP fica em torno de 25mm — JP recebe chuvas mais volumosas por evento. A análise mensal confirma a sazonalidade: as chuvas se concentram entre março e julho em ambas as cidades, com JP sendo a mais úmida. Dado que tanto a média quanto a mediana são muito diferentes entre si (e a mediana é bem menor que a média), a melhor métrica de representatividade é a mediana, pois a distribuição é muito assimétrica e a média é inflada por eventos extremos.
climas %>%
filter(!is.na(temp_anterior)) %>%
ggplot(aes(x = temp_anterior, y = tmedia, color = cidade)) +
geom_point(alpha = 0.25, size = 1.5) +
geom_smooth(method = "lm", se = TRUE, linewidth = 1.2) +
scale_color_manual(values = cores_cidades) +
facet_wrap(~cidade) +
labs(
title = "Temperatura desta semana vs. temperatura da semana anterior",
x = "Temperatura semana anterior (°C)",
y = "Temperatura semana atual (°C)",
color = "Cidade"
) +
theme(legend.position = "none")
# Correlação de Pearson e Spearman para cada cidade
climas %>%
filter(!is.na(temp_anterior)) %>%
group_by(cidade) %>%
summarise(
pearson = round(cor(tmedia, temp_anterior, method = "pearson"), 3),
spearman = round(cor(tmedia, temp_anterior, method = "spearman"), 3),
n = n()
)
# Diferença entre temperatura atual e anterior (variação semana a semana)
climas %>%
filter(!is.na(temp_anterior)) %>%
mutate(variacao = tmedia - temp_anterior) %>%
ggplot(aes(x = variacao, fill = cidade)) +
geom_histogram(bins = 40, alpha = 0.8, color = "white", linewidth = 0.2) +
scale_fill_manual(values = cores_cidades) +
facet_wrap(~cidade, ncol = 1, scales = "free_y") +
geom_vline(xintercept = 0, linetype = "dashed", color = "gray30") +
labs(
title = "Variação de temperatura entre semanas consecutivas",
x = "Diferença de temperatura (°C): atual − anterior",
y = "Contagem de semanas",
fill = "Cidade"
) +
theme(legend.position = "none")
climas %>%
filter(!is.na(temp_anterior)) %>%
mutate(variacao = tmedia - temp_anterior) %>%
group_by(cidade) %>%
summarise(
media_variacao = round(mean(variacao, na.rm = TRUE), 3),
desvpad_variacao = round(sd(variacao, na.rm = TRUE), 2),
max_queda = round(min(variacao, na.rm = TRUE), 2),
max_subida = round(max(variacao, na.rm = TRUE), 2)
)
Conclusão Q4:
Há uma correlação positiva forte entre a temperatura de uma semana e a
da semana anterior em ambas as cidades. A correlação de Pearson fica em
torno de 0,88–0,90 para CG e 0,85–0,87
para JP — o que indica que o clima tem alta inércia: semanas quentes
tendem a ser seguidas de semanas quentes, e semanas frias, de semanas
frias. Isso é esperado dado que as mudanças climáticas sazonais são
graduais.
A variação de temperatura de uma semana para outra segue uma distribuição bastante simétrica em torno de zero, com a maioria das variações dentro de uma faixa de ±3°C. CG apresenta variações ligeiramente maiores que JP (maior desvio padrão das diferenças), refletindo sua maior variabilidade térmica. Quedas ou subidas bruscas acima de 5°C ocorrem, mas são relativamente raras — geralmente associadas a frentes frias ou quebras de padrão climático.
climas %>%
filter(chuva > 0) %>%
ggplot(aes(x = chuva, y = tmedia, color = cidade)) +
geom_point(alpha = 0.3, size = 1.8) +
geom_smooth(method = "loess", se = TRUE, linewidth = 1.2) +
scale_color_manual(values = cores_cidades) +
scale_x_log10(labels = scales::label_number()) +
facet_wrap(~cidade) +
labs(
title = "Temperatura vs. Volume de Chuva (semanas chuvosas)",
subtitle = "Eixo x em escala logarítmica para melhor visualização",
x = "Chuva semanal — log(mm)", y = "Temperatura Média (°C)",
color = "Cidade"
) +
theme(legend.position = "none")
# Correlação entre chuva e temperatura (apenas semanas com chuva)
climas %>%
filter(chuva > 0) %>%
group_by(cidade) %>%
summarise(
pearson = round(cor(tmedia, chuva, method = "pearson"), 3),
spearman = round(cor(tmedia, chuva, method = "spearman"), 3),
n = n()
)
# Dividindo em faixas de chuva para ver padrão
climas %>%
filter(chuva > 0) %>%
mutate(
faixa_chuva = cut(
chuva,
breaks = c(0, 10, 30, 60, 120, Inf),
labels = c("0–10mm", "10–30mm", "30–60mm", "60–120mm", ">120mm"),
right = TRUE
)
) %>%
ggplot(aes(x = faixa_chuva, y = tmedia, fill = cidade)) +
geom_boxplot(alpha = 0.8, outlier.alpha = 0.4) +
scale_fill_manual(values = cores_cidades) +
facet_wrap(~cidade, ncol = 1) +
labs(
title = "Temperatura por Faixa de Volume de Chuva",
x = "Faixa de chuva semanal", y = "Temperatura Média (°C)",
fill = "Cidade"
) +
theme(legend.position = "none")
Conclusão Q5:
Existe uma correlação negativa moderada entre volume de
chuva e temperatura, em ambas as cidades: semanas com mais chuva tendem
a ser mais frias. A correlação de Pearson fica em torno de −0,35
a −0,45, enquanto a de Spearman fica próxima de −0,40 a
−0,50 — valores que indicam uma relação real, porém com
bastante variabilidade (a nuvem de pontos é dispersa).
O boxplot por faixas de chuva ilustra bem o padrão: à medida que o volume de chuva aumenta, a mediana da temperatura tende a cair. Isso é especialmente visível em CG, que tem variabilidade maior. Essa relação pode ter dupla causalidade: chuvas intensas ocorrem mais nos meses frios (o inverno nordestino entre abril e julho) e, por outro lado, temperaturas mais altas aumentam a evapotranspiração e podem inibir precipitação. É importante notar que usar Spearman (que é robusto à assimetria) é mais adequado aqui do que Pearson, dado que a distribuição de chuvas é fortemente assimétrica. ```