climas = read_csv(here::here("data/clima_cg_jp-semanal.csv"), 
                  col_types = "cTdddddd")

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    <dbl> 12, 1, 1, 1, 2, 2, 2, 2, 10, 11, 11, 11, 11, 12, 12, 12, 12, 1,…
## $ ano    <dbl> 1992, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 199…

Calcular a temperatura da semana anterior em cada linha

climas = climas %>% 
  mutate(temp_anterior = lag(tmedia, n = 1))

glimpse(climas)
## Rows: 2,748
## Columns: 9
## $ cidade        <chr> "Campina Grande", "Campina Grande", "Campina Grande", "C…
## $ semana        <dttm> 1992-12-27, 1993-01-03, 1993-01-10, 1993-01-31, 1993-02…
## $ tmedia        <dbl> 26.13333, 26.11905, 25.76667, 25.74000, 26.31429, 26.285…
## $ tmax          <dbl> 30.4, 32.4, 32.2, 32.0, 32.7, 32.7, 32.3, 32.3, 32.1, 31…
## $ tmin          <dbl> 20.7, 19.3, 19.7, 19.9, 19.6, 20.0, 20.4, 21.2, 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…
## $ mes           <dbl> 12, 1, 1, 1, 2, 2, 2, 2, 10, 11, 11, 11, 11, 12, 12, 12,…
## $ ano           <dbl> 1992, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 19…
## $ temp_anterior <dbl> NA, 26.13333, 26.11905, 25.76667, 25.74000, 26.31429, 26…

Q1: Qual a cidade é mais quente? Isso muda se considerarmos apenas o período de janeiro e fevereiro (pico do verão)?

# Calcula a temperatura média anual por cidade
media_anual_por_cidade <- climas %>%
  group_by(cidade) %>%
  summarise(temperatura_media_anual = mean(tmedia, na.rm = TRUE))
# Filtra apenas os meses de janeiro e fevereiro e calcula a média do verão por cidade
media_verao_por_cidade <- climas %>%
  filter(mes %in% c(1, 2)) %>%
  group_by(cidade) %>%
  summarise(temperatura_media_verao = mean(tmedia, na.rm = TRUE))
# Geração de estatísticas descritivas para a temperatura média anual por cidade
resumo_anual <- climas %>%
  group_by(cidade) %>%
  summarise(
    Temperatura_Minima = min(tmedia, na.rm = TRUE),
    Primeiro_Quartil   = quantile(tmedia, probs = 0.25, na.rm = TRUE),
    Mediana            = median(tmedia, na.rm = TRUE),
    Media              = mean(tmedia, na.rm = TRUE),
    Terceiro_Quartil   = quantile(tmedia, probs = 0.75, na.rm = TRUE),
    Temperatura_Maxima = max(tmedia, na.rm = TRUE)
  )

print(resumo_anual)
## # A tibble: 2 × 7
##   cidade      Temperatura_Minima Primeiro_Quartil Mediana Media Terceiro_Quartil
##   <chr>                    <dbl>            <dbl>   <dbl> <dbl>            <dbl>
## 1 Campina Gr…               20.8             23.5    25.0  24.7             25.9
## 2 João Pessoa               24.0             26.8    27.8  27.7             28.6
## # ℹ 1 more variable: Temperatura_Maxima <dbl>
# Estatísticas descritivas para os meses de verão (janeiro e fevereiro)
resumo_verao <- climas %>%
  filter(mes %in% c(1, 2)) %>%
  group_by(cidade) %>%
  summarise(
    Temperatura_Minima = min(tmedia, na.rm = TRUE),
    Primeiro_Quartil   = quantile(tmedia, probs = 0.25, na.rm = TRUE),
    Mediana            = median(tmedia, na.rm = TRUE),
    Media              = mean(tmedia, na.rm = TRUE),
    Terceiro_Quartil   = quantile(tmedia, probs = 0.75, na.rm = TRUE),
    Temperatura_Maxima = max(tmedia, na.rm = TRUE)
  )

print(resumo_verao)
## # A tibble: 2 × 7
##   cidade      Temperatura_Minima Primeiro_Quartil Mediana Media Terceiro_Quartil
##   <chr>                    <dbl>            <dbl>   <dbl> <dbl>            <dbl>
## 1 Campina Gr…               23.0             25.3    25.9  25.9             26.5
## 2 João Pessoa               26.6             28.3    28.7  28.7             29.0
## # ℹ 1 more variable: Temperatura_Maxima <dbl>
# Junta os dados de temperatura média anual com os de verão, por cidade
tabela_temperaturas <- left_join(media_anual_por_cidade, media_verao_por_cidade, by = "cidade")

# Prepara os dados em formato longo para visualização com ggplot2
dados_para_grafico <- tabela_temperaturas %>%
  pivot_longer(cols = c(temperatura_media_anual, temperatura_media_verao),
               names_to = "periodo",
               values_to = "temperatura")

# Criação do gráfico de barras comparando as temperaturas médias
grafico_comparativo <- dados_para_grafico %>%
  ggplot(aes(x = cidade, y = temperatura, fill = periodo)) +
  geom_bar(stat = "identity", position = "dodge", color = "black") +  # barras lado a lado
  geom_text(aes(label = round(temperatura, 1)), 
            vjust = 1.8, position = position_dodge(0.9)) +  # rótulos nas barras
  labs(
    x = "Cidade", 
    y = "Temperatura Média (°C)", 
    title = "Comparativo de Temperaturas Médias Anual e no Verão"
  ) +
  scale_fill_discrete(
    labels = c("Anual", "Verão")
  ) +
  theme_minimal()

# Exibe o gráfico
print(grafico_comparativo)

Observa-se que João Pessoa apresenta as maiores médias de temperatura tanto anualmente (27.7°C) quanto no verão (28.7°C). Em contraste, Campina Grande registra médias de 24.7°C e 25.9°C, respectivamente. A utilização da média como métrica climática permite considerar o comportamento geral das temperaturas ao longo do tempo.

Q2: Quais os meses mais quentes e mais frios? Como você descreveria a temperatura das festas juninas das cidades nos últimos anos?

# Adiciona o nome dos meses aos dados
clima_formatado <- climas %>%
  mutate(nome_mes = month(mes, label = TRUE))

# Calcula a temperatura média mensal por cidade
media_mensal_por_cidade <- clima_formatado %>%
  group_by(cidade, nome_mes) %>%
  summarise(temp_media = mean(tmedia, na.rm = TRUE), .groups = "drop")
# Ordena as temperaturas médias do mês do maior ao menor para cada cidade
meses_mais_quentes <- media_mensal_por_cidade %>%
  arrange(cidade, desc(temp_media))

# Ordena do menor ao maior para obter os meses mais frios
meses_mais_frios <- media_mensal_por_cidade %>%
  arrange(cidade, temp_media)

# Filtros específicos para Campina Grande e João Pessoa
quentes_cg <- meses_mais_quentes %>% filter(cidade == "Campina Grande")
quentes_jp <- meses_mais_quentes %>% filter(cidade == "João Pessoa")
frios_cg   <- meses_mais_frios   %>% filter(cidade == "Campina Grande")
frios_jp   <- meses_mais_frios   %>% filter(cidade == "João Pessoa")
# Visualização das listagens de meses mais quentes/frios por cidade
quentes_cg
quentes_jp
frios_cg
frios_jp
# Estatísticas descritivas para o mês de junho (festas juninas)
resumo_junho <- climas %>%
  filter(mes == 6) %>%
  group_by(cidade) %>%
  summarise(
    Min = min(tmedia, na.rm = TRUE),
    Q1 = quantile(tmedia, 0.25, na.rm = TRUE),
    Mediana = median(tmedia, na.rm = TRUE),
    Media = mean(tmedia, na.rm = TRUE),
    Q3 = quantile(tmedia, 0.75, na.rm = TRUE),
    Max = max(tmedia, na.rm = TRUE),
    .groups = "drop"
  )

print(resumo_junho)
## # A tibble: 2 × 7
##   cidade           Min    Q1 Mediana Media    Q3   Max
##   <chr>          <dbl> <dbl>   <dbl> <dbl> <dbl> <dbl>
## 1 Campina Grande  21.3  22.2    22.8  22.8  23.3  24.9
## 2 João Pessoa     24.0  25.8    26.4  26.4  26.9  28.3
# Temperatura média por mês para cada cidade
media_mensal <- climas %>%
  group_by(mes, cidade) %>%
  summarise(temp_media = mean(tmedia, na.rm = TRUE), .groups = "drop")
# Gráfico linha: temperatura média ao longo dos meses
grafico_temporal_mensal <- media_mensal %>%
  ggplot(aes(x = mes, y = temp_media, color = cidade)) +
  geom_line() +
  geom_point() +
  geom_text(aes(label = round(temp_media, 1)),
            vjust = 1.8, size = 3, position = position_dodge(0.9)) +
  scale_x_continuous(breaks = 1:12) +
  labs(
    x = "Mês",
    y = "Temperatura Média (°C)",
    title = "Temperatura Média Mensal por Cidade",
    color = "Cidade"
  ) +
  theme_minimal() +
  theme(legend.position = "bottom")

print(grafico_temporal_mensal)

# Temperatura média anual por cidade
media_anual <- climas %>%
  group_by(ano, cidade) %>%
  summarise(temp_media = mean(tmedia, na.rm = TRUE), .groups = "drop")
# Gráfico linha: temperatura média ao longo dos anos
grafico_temporal_anual <- media_anual %>%
  ggplot(aes(x = ano, y = temp_media, color = cidade)) +
  geom_line() +
  geom_point() +
  geom_text(aes(label = round(temp_media, 1)),
            vjust = 1.5, size = 2.5, position = position_dodge(0.9)) +
  scale_x_continuous(breaks = seq(min(climas$ano), max(climas$ano), by = 1)) +
  labs(
    x = "Ano",
    y = "Temperatura Média (°C)",
    title = "Temperatura Média Anual por Cidade",
    color = "Cidade"
  ) +
  theme_minimal() +
  theme(
    axis.text.x = element_text(angle = 90, vjust = 0.5, hjust = 1),
    legend.position = "bottom"
  )

print(grafico_temporal_anual)

# Retorna o tema padrão do ggplot2
theme_set(theme_gray())

A análise das temperaturas médias mensais mostrou diferenças claras entre Campina Grande e João Pessoa. Em Campina Grande, os meses mais quentes foram dezembro, fevereiro e março. Já em João Pessoa, os meses com maior temperatura média foram março, fevereiro e janeiro. Os meses mais frios foram os mesmos nas duas cidades: julho, agosto e junho, o que indica uma estabilidade maior no inverno.

Durante o mês de junho, época das festas juninas, Campina Grande teve temperatura média de 22,84°C, com mínima de 21,34°C e máxima de 24,85°C. Em João Pessoa, as temperaturas foram mais altas: média de 26,36°C, mínima de 23,99°C e máxima de 28,28°C.

Usar a temperatura média é útil porque dá uma ideia geral do clima, sem focar só nos extremos. Observar como essas médias mudam ao longo dos meses e dos anos ajuda a entender padrões sazonais e possíveis mudanças climáticas — algo importante para o planejamento urbano, o turismo e a adaptação às mudanças no clima regional.

Q3: Quanto chove por semana em JP e CG? Descreva a distribuição do volume de chuvas para as cidades?

# Total de chuva semanal por cidade
chuva_por_semana <- climas %>%
  group_by(cidade, semana) %>%
  summarise(total_chuva_mm = sum(chuva, na.rm = TRUE), .groups = "drop")
# Estatísticas básicas (média, mediana, desvio padrão e variância) da chuva semanal por cidade
estatisticas_chuva <- chuva_por_semana %>%
  group_by(cidade) %>%
  summarise(
    media_mm     = mean(total_chuva_mm, na.rm = TRUE),
    mediana_mm   = median(total_chuva_mm, na.rm = TRUE),
    desvio_mm    = sd(total_chuva_mm, na.rm = TRUE),
    variancia_mm = var(total_chuva_mm, na.rm = TRUE),
    .groups = "drop"
  )

estatisticas_chuva
# Resumo descritivo da chuva semanal (valores extremos e quartis)
resumo_chuva <- chuva_por_semana %>%
  group_by(cidade) %>%
  summarise(
    Min       = min(total_chuva_mm, na.rm = TRUE),
    Q1        = quantile(total_chuva_mm, 0.25, na.rm = TRUE),
    Mediana   = median(total_chuva_mm, na.rm = TRUE),
    Media     = mean(total_chuva_mm, na.rm = TRUE),
    Q3        = quantile(total_chuva_mm, 0.75, na.rm = TRUE),
    Max       = max(total_chuva_mm, na.rm = TRUE),
    .groups = "drop"
  )

resumo_chuva
# Boxplot comparando a distribuição da chuva semanal entre as cidades
ggplot(chuva_por_semana, aes(x = cidade, y = total_chuva_mm)) +
  geom_boxplot(fill = "skyblue") +
  labs(
    title = "Distribuição da Chuva Semanal por Cidade",
    x = "Cidade",
    y = "Total de Chuva (mm)"
  )

# Histograma sobreposto da chuva semanal para cada cidade
ggplot(chuva_por_semana, aes(x = total_chuva_mm, fill = cidade)) +
  geom_histogram(bins = 30, alpha = 0.5, position = "identity") +
  labs(
    title = "Distribuição da Frequência de Chuvas Semanais",
    x = "Total de Chuva por Semana (mm)",
    y = "Número de Semanas",
    fill = "Cidade"
  )

# Dispersão temporal da chuva por semana, com separação por cidade
ggplot(chuva_por_semana, aes(x = semana, y = total_chuva_mm)) +
  geom_point(color = "#1F77B4", alpha = 0.7) +
  facet_wrap(~ cidade) +
  labs(
    title = "Chuva Semanal ao Longo do Tempo",
    x = "Semana do Ano",
    y = "Total de Chuva (mm)"
  )

A análise da precipitação semanal mostra diferenças claras entre Campina Grande e João Pessoa. João Pessoa tem, em média, 32,65 mm de chuva por semana, mais que o dobro dos 13,99 mm observados em Campina Grande.

A mediana também reforça essa diferença: 14,1 mm em João Pessoa contra 4,9 mm em Campina Grande. Isso indica que João Pessoa tem chuvas mais frequentes e intensas ao longo do ano.

A variabilidade das chuvas é maior em João Pessoa, com desvio padrão e variância mais altos. Isso mostra que a cidade litorânea passa por semanas muito chuvosas e outras mais secas, o que é comum em climas tropicais.

Gráficos como boxplots, histogramas e séries temporais ajudam a visualizar essas diferenças, sendo úteis para entender padrões sazonais e identificar extremos que afetam áreas como agricultura, saneamento e planejamento urbano.

Q4: Qual a relação entre a temperatura de uma semana e a temperatura da semana anterior (descreva para as duas cidades)?

# Correlação de Pearson entre a temperatura média semanal e a da semana anterior
pearson_por_cidade <- climas %>%
  group_by(cidade) %>%
  summarise(
    correlacao_pearson = cor(temp_anterior, tmedia, method = "pearson", use = "pairwise.complete.obs"),
    .groups = "drop"
  )

pearson_por_cidade
# Correlação de Spearman (não paramétrica, baseada em rankings)
spearman_por_cidade <- climas %>%
  group_by(cidade) %>%
  summarise(
    correlacao_spearman = cor(temp_anterior, tmedia, method = "spearman", use = "pairwise.complete.obs"),
    .groups = "drop"
  )

spearman_por_cidade
# Correlação de Kendall (não paramétrica, baseada em pares ordenados)
kendall_por_cidade <- climas %>%
  group_by(cidade) %>%
  summarise(
    correlacao_kendall = cor(temp_anterior, tmedia, method = "kendall", use = "pairwise.complete.obs"),
    .groups = "drop"
  )

kendall_por_cidade
# Gráfico
grafico_correlacao_temporal <- climas %>%
  ggplot(aes(x = temp_anterior, y = tmedia)) +
  geom_point(alpha = 0.6, color = "#2c7fb8") +
  geom_smooth(method = "lm", se = FALSE, color = "#f03b20") +
  facet_wrap(~ cidade) +
  labs(
    title = "Variação da Temperatura: Semana Atual vs. Semana Anterior",
    x = "Temperatura da Semana Anterior (°C)",
    y = "Temperatura Média da Semana Atual (°C)"
  )

print(grafico_correlacao_temporal)
## `geom_smooth()` using formula = 'y ~ x'
## Warning: Removed 1 row containing non-finite outside the scale range
## (`stat_smooth()`).
## Warning: Removed 1 row containing missing values or values outside the scale range
## (`geom_point()`).

A análise dos coeficientes de correlação entre a temperatura média semanal e a da semana anterior mostra uma forte relação nas duas cidades: Campina Grande e João Pessoa.

Usando as três métricas — Pearson, Spearman e Kendall — os valores foram altos em todos os casos, indicando uma associação positiva consistente. Isso quer dizer que semanas quentes tendem a ser seguidas por outras também quentes, e o mesmo vale para semanas frias.

Esse tipo de estabilidade é comum em regiões tropicais e subtropicais, onde as variações semanais de temperatura costumam ser suaves.

Os gráficos confirmam essa tendência: a linha de regressão mostra que os pontos seguem um padrão bem definido. Esse comportamento pode ser útil para construir modelos de previsão com base nos dados das semanas anteriores.

Q5: Qual a relação entre temperatura e chuvas nas semanas em que choveu (descreva para as duas cidades)?

# Separando os dados por cidade
climas_cg = climas %>% filter(cidade == "Campina Grande")
climas_jp = climas %>% filter(cidade == "João Pessoa")
# Calculando as correlações para Campina Grande
correlacao_pearson_cg = cor(climas_cg$tmedia, climas_cg$chuva, method = "pearson", use = "pairwise.complete.obs")
correlacao_spearman_cg = cor(climas_cg$tmedia, climas_cg$chuva, method = "spearman", use = "pairwise.complete.obs")
correlacao_kendall_cg = cor(climas_cg$tmedia, climas_cg$chuva, method = "kendall", use = "pairwise.complete.obs")

cat(paste("Correlações para Campina Grande:\nPearson:", correlacao_pearson_cg, "\nSpearman:", correlacao_spearman_cg, "\nKendall:", correlacao_kendall_cg))
## Correlações para Campina Grande:
## Pearson: -0.395831070013836 
## Spearman: -0.541074266715462 
## Kendall: -0.376791296740262

Correlações para Campina Grande:

Pearson: -0.395831070013836

Spearman: -0.541074266715462

Kendall: -0.376791296740262

# Gráfico para Campina Grande
ggplot(climas_cg, aes(x = tmedia, y = chuva)) +
  geom_point(color = "#1F77B4") +
  geom_smooth(method = "lm", se = FALSE, color = "black") +
  labs(title = "Relação entre temperatura e chuvas em Campina Grande",
       x = "Temperatura média da semana (°C)",
       y = "Chuva (mm)")
## `geom_smooth()` using formula = 'y ~ x'

## Correlações para Campina Grande: ## Pearson: -0.395831070013836 ## Spearman: -0.541074266715462 ## Kendall: -0.376791296740262

# Gráfico para Campina Grande
ggplot(climas_cg, aes(x = tmedia, y = chuva)) +
  geom_point(color = "#1F77B4") +
  geom_smooth(method = "lm", se = FALSE, color = "black") +
  labs(title = "Relação entre temperatura e chuvas em Campina Grande",
       x = "Temperatura média da semana (°C)",
       y = "Chuva (mm)")
## `geom_smooth()` using formula = 'y ~ x'

# Calculando as correlações para João Pessoa
correlacao_pearson_jp = cor(climas_jp$tmedia, climas_jp$chuva, method = "pearson", use = "pairwise.complete.obs")
correlacao_spearman_jp = cor(climas_jp$tmedia, climas_jp$chuva, method = "spearman", use = "pairwise.complete.obs")
correlacao_kendall_jp = cor(climas_jp$tmedia, climas_jp$chuva, method = "kendall", use = "pairwise.complete.obs")

cat(paste("Correlações para João Pessoa\nPearson:", correlacao_pearson_jp, "\nSpearman:", correlacao_spearman_jp, "\nKendall:", correlacao_kendall_jp))
## Correlações para João Pessoa
## Pearson: -0.441130867729121 
## Spearman: -0.483612482663624 
## Kendall: -0.328018102300212

Correlações para João Pessoa

Pearson: -0.441130867729121

Spearman: -0.483612482663624

Kendall: -0.328018102300212

# Gráfico para João Pessoa
ggplot(climas_jp, aes(x = tmedia, y = chuva)) +
  geom_point(color = "#1F77B4") +
  geom_smooth(method = "lm", se = FALSE, color = "black") +
  labs(title = "Relação entre temperatura e chuvas em João Pessoa",
       x = "Temperatura média da semana (°C)",
       y = "Chuva (mm)")
## `geom_smooth()` using formula = 'y ~ x'

Com base nos resultados, podemos observar que existe uma correlação negativa moderada entre a temperatura e a quantidade de chuvas nas semanas em que choveu para ambas as cidades, Campina Grande e João Pessoa. Isso é evidenciado pelos coeficientes de correlação de Pearson, Spearman e Kendall, que são todos negativos.