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()

Q1 — Qual cidade é mais quente? Isso muda no pico do verão (jan-fev)?

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


Q2 — Quais são os meses mais quentes e mais frios? Como é a temperatura nas festas juninas?

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


Q3 — Quanto chove por semana em JP e CG?

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


Q4 — Qual a relação entre a temperatura de uma semana e a da semana anterior?

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.


Q5 — Qual a relação entre temperatura e chuvas nas semanas em que choveu?

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