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

glimpse(climas)
## Observations: 2,748
## Variables: 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, 1…
## $ 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.…
## $ 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, 19…

Temperatura

Onde é mais quente?

Para tentar entender qual das duas cidades é mais quente podemos adotar uma abordagem superficial ou outra um pouco mais aprofundada. Uma possibilidade bem simplificada é dizer que a cidade mais quente será aquela cuja média das temperaturas máximas for maior.

climas %>% 
    group_by(cidade) %>% 
    summarise(t_max = mean(tmax)) %>% 
    as.data.frame()
##           cidade    t_max
## 1 Campina Grande 30.31691
## 2    João Pessoa 30.67349

De acordo com o que é observado acima, temos que João Pessoa é a cidade mais quente, mas com uma diferença muito pequena em relação a temperatura de Campina Grande. No entanto, esse raciocínio só considera o fator da temperatura máxima, não considerando outros elementos como o aspecto temporal, por exemplo. Além disso, é importante observar que ao longo do tempo não percebemos a temperatura de uma única forma, ela varia ao longo do dia (e do tempo). Tudo isso enfraquece o raciocínio anterior, verificando a necessidade de uma maior investigação para responder a pergunta.
Conforme as considerações anteriores, é importante ter em vista a variação da temperatura. Uma solução é considerar a temperatura média ao invés da temperatura máxima como medida de temperatura. Além disso, observar como esse valor se comporta ao longo do tempo pode ajudar a entender se as temperaturas seguem algum padrão - o que facilita dizer se uma cidade é mais quente do que a outra.

climas %>% 
    group_by(ano, cidade) %>% 
    summarise(t_media = mean(tmedia)) %>% 
    ggplot(aes(x = ano, y = t_media, color = cidade)) +
    geom_line() + geom_point() +
    labs(title = "Temperatura média ao longo dos anos", x = "Anos", y = "Temperatura média (°C)", color = "Cidade") +
    theme(plot.title = element_text(hjust = 0.5))

O gráfico acima mostra as médias das temperaturas médias das duas cidades, ao longo dos anos. Assim é possível perceber que, no geral, João Pessoa é mais quente do que Campina Grande. Isso é dito pois a média anual das médias das temperaturas mostra que, ao longo dos anos, João Pessoa sempre apresenta temperaturas mais quentes.

As temperaturas máximas semanais (o pico do calor) são tão diferentes quanto as médias? Mais?

max_temps <- climas %>% 
    group_by(cidade, semana) %>% 
    summarise(t_max = max(tmax)) %>% 
    group_by(cidade) %>% 
    slice(which.max(t_max))

min_max_temps <- climas %>% 
    group_by(cidade, semana) %>% 
    summarise(min_tmax = max(tmax)) %>% 
    group_by(cidade) %>% 
    slice(which.min(min_tmax))

climas %>% 
    ggplot(aes(x = as.Date(semana), y = tmax, color = cidade)) +
    geom_line(alpha = 0.7) +
    geom_point(data = max_temps, aes(x = as.Date(semana), y = t_max, color = cidade), size = 2) +
    geom_text(data = max_temps, aes(x = as.Date(semana), y = t_max, color = cidade, label = t_max), size = 3.75, vjust=0.5, hjust=-0.25) + 
    geom_point(data = min_max_temps, aes(x = as.Date(semana), y = min_tmax, color = cidade), size = 2) +
    geom_text(data = min_max_temps, aes(x = as.Date(semana), y = min_tmax, color = cidade, label = min_tmax), size = 3.75, vjust=0.5, hjust=-0.25) + 
    scale_x_date(date_breaks = "6 month", date_labels = "%m/%y") +
    facet_grid(rows = vars(cidade)) +
    labs(title = "Temperaturas máximas semanais", x = "Semana (Mês/Ano)", y = "Temperaturas máximas (°C)", color = "Cidade") +
    theme(axis.text.x = element_text(angle = 60, hjust = 1), plot.title = element_text(hjust = 0.5)) -> p1

max_media_temps <- climas %>% 
    group_by(cidade, semana) %>% 
    summarise(t_max = max(tmedia)) %>% 
    group_by(cidade) %>% 
    slice(which.max(t_max))

min_media_temps <- climas %>% 
    group_by(cidade, semana) %>% 
    summarise(min_tmax = max(tmedia)) %>% 
    group_by(cidade) %>% 
    slice(which.min(min_tmax))

climas %>% 
    ggplot(aes(x = as.Date(semana), y = tmedia, color = cidade)) +
    geom_line(alpha = 0.7) +
    geom_point(data = max_media_temps, aes(x = as.Date(semana), y = t_max, color = cidade), size = 2) +
    geom_text(data = max_media_temps, aes(x = as.Date(semana), y = t_max, color = cidade, label = sprintf("%0.1f", t_max)), size = 3.75, vjust=0.5, hjust=-0.25) +
    geom_point(data = min_media_temps, aes(x = as.Date(semana), y = min_tmax, color = cidade), size = 2) +
    geom_text(data = min_media_temps, aes(x = as.Date(semana), y = min_tmax, color = cidade, label = sprintf("%0.1f", min_tmax)), size = 3.75, vjust=0.5, hjust=-0.25) + 
    scale_x_date(date_breaks = "6 month", date_labels = "%m/%y") +
    facet_grid(rows = vars(cidade)) +
    labs(title = "Temperaturas médias semanais", x = "Semana (Mês/Ano)", y = "Temperaturas médias (°C)", color = "Cidade") +
    theme(axis.text.x = element_text(angle = 60, hjust = 1), plot.title = element_text(hjust = 0.5)) -> p2

grid.arrange(p1, p2)

Acima temos dois gráficos: o primeiro mostra o comportamento das temperaturas máximas semanais ao longo do tempo nas duas cidades. Já na visualização abaixo dele, observamos a variação das temperaturas médias semanais ao longo do tempo, em CG e JP.
Dito isso, queremos responder se as temperaturas máximas semanais são muito diferentes do que as temperaturas médias semanais. Podemos notar diferentes padrões em relação as duas cidades. Campina Grande apresenta muita variação nos picos de calor da semana e isso pode ser visto através da oscilação de valores em um intervalo muito grande. As temperaturas máximas variaram em um intervalo entre 34,6°C e 25°C, enquanto que os valores da temperatura média ficaram entre 28,6°C e 20,8°C. Já em João Pessoa as temperaturas máximas estiveram dentro de um intervalo de 33,7°C e 27,2°C e as suas temperaturas médias entre 30,1°C e 24°C.
Os gráficos acima facilitam analisar o que foi visto anteriormente, onde observamos uma maior diferença entre a variação das máximas semanais e as médias semanais de Campina Grande, pois o primeiro tem uma amplitude maior em relação ao segundo. Em paralelo, o mesmo não pode-se dizer de João Pessoa, onde as linhas seguem padrões muito mais semelhantes.
Essas informações podem ser sumarizadas por meio do desvio padrão, permitindo que a compraração seja feita através de uma medida e não somente de maneira visual. Com o desvio padrão, estaremos medindo a variabilidade dos dados em torno da média e também poder entender se há diferença entre as temperaturas máximas semanais e temperaturas médias semanais.

climas %>% 
    group_by(cidade) %>% 
    summarise(desvio_padrao = sd(tmax)) %>% 
    bind_cols(temp = c("tmax", "tmax")) -> sd_tmax

climas %>% 
    group_by(cidade) %>% 
    summarise(desvio_padrao = sd(tmedia)) %>% 
    bind_cols(temp = c("tmedia", "tmedia")) -> sd_tmedia

rbind(sd_tmax, sd_tmedia) %>%
    select(cidade,temp,desvio_padrao) %>% 
    as.data.frame()
##           cidade   temp desvio_padrao
## 1 Campina Grande   tmax      2.015313
## 2    João Pessoa   tmax      1.067440
## 3 Campina Grande tmedia      1.525646
## 4    João Pessoa tmedia      1.180293

Com isso, verificamos o que foi observado de forma visual: em Campina Grande existe mais diferença entre as temperaturas pois há maior variabilidade entre as máximas semanais (desvio padrão = 2,01) e as médias semanais (desvio padrão = 1,52). E em João Pessoa essa diferença entre temperaturas é pequena, uma vez que a os desvios padrões das temperaturas máximas e das temperaturas médias foram parecidos, sendo 1,06 e 1,18 respectivamente.

Quais os meses mais quentes e mais frios?

Como vimos anteriormente na primeira questão, utilizar a temperatura média é uma boa forma de indicar o que é quente. De maneira análoga, também podemos definir o conceito de frio através do mesmo raciocínio. Assim, uma opção é visualizar a temperatura média, das duas cidades combinadas, em cada mês.

climas %>% 
    group_by(mes) %>% 
    summarise(temp = mean(tmedia)) %>% 
    ggplot(aes(x = as.factor(mes), y = temp, group = 1)) +
    geom_line(alpha = 0.4) + geom_point() +
    geom_text(aes(label = sprintf("%0.1f", temp)), size = 3.5, vjust=1.5) +
    labs(title = "Temperaturas médias mensais", x = "Mês", y = "Temperatura média (°C)", color = "Cidade") +
    theme(plot.title = element_text(hjust = 0.5))

De acordo com o que é visto acima, o mês mais quente é Março e o mais frio é Julho. Entretanto, estamos analisando a temperatura média mensal das duas cidades. Sabemos que cada uma delas possui características distintas, sendo João Pessoa uma cidade litorânea e Campina Grande uma cidade que está em um planalto e, nesse caso, pode ser interessante realizar essa análise de forma diferente para cada uma das cidades.

climas %>% 
    group_by(cidade, mes) %>% 
    summarise(temp = mean(tmedia)) %>% 
    group_by(cidade) %>% 
    slice(which.max(temp)) -> maxtemp_mes

climas %>% 
    group_by(cidade, mes) %>% 
    summarise(temp = mean(tmedia)) %>% 
    group_by(cidade) %>% 
    slice(which.min(temp)) -> mintemp_mes

climas %>% 
    group_by(mes, cidade) %>% 
    summarise(temp = mean(tmedia)) %>% 
    ggplot(aes(x = as.factor(mes), y = temp, color = cidade, group = 1)) +
    geom_line() + geom_point() +
    geom_text(aes(label = sprintf("%0.2f", temp)), size = 3.5, vjust=1.5) +
    geom_point(data = maxtemp_mes, aes(x = as.factor(mes), y = temp, color = cidade), size = 3) +
    geom_point(data = mintemp_mes, aes(x = as.factor(mes), y = temp, color = cidade), size = 3) +
    # geom_text(data = maxtemp_mes, aes(x = as.factor(mes), y = temp, color = cidade, label = sprintf("%0.1f", temp)), size = 3.75, vjust=1.5) +
    # geom_text(data = mintemp_mes, aes(x = as.factor(mes), y = temp, color = cidade, label = sprintf("%0.1f", temp)), size = 3.75, vjust=-0.5) +
    facet_grid(rows = vars(cidade)) +
    labs(title = "Temperaturas médias mensais (por cidade)", x = "Mês", y = "Temperatura média (°C)", color = "Cidade") +
    theme(plot.title = element_text(hjust = 0.5))

Nessa segunda visualização, temos uma tendência de temperaturas mensais para as duas cidades que é bastante similar ao que foi visto anteriormente. Campina Grande também tem Julho como o mês mais frio. No entanto, é possível perceber que em relação à Campina, o mês mais quente foi Dezembro e, apesar de Março também ter sido quente, esse resultado difere do anterior - apesar da diferença ser muito pequena. E João Pessoa apresenta os meses mais quentes e mais frios iguais ao que foi visto antes, sendo Março e Julho respectivamente.

Qual foi o São João mais frio de CG que está nos nossos dados?

climas %>% 
    filter(cidade == "Campina Grande") %>% 
    filter(mes == 6) %>% 
    group_by(ano) %>% 
    summarise(temp = mean(tmedia)) %>% 
    ggplot(aes(x = as.factor(ano), y = temp, group = 1)) +
    geom_line(alpha = 0.5) + geom_point() +
    geom_text(aes(label = sprintf("%0.1f", temp)), size = 3.75, hjust = 0, vjust = -0.5) +
    labs(x = "Ano", y = "Temperatura média de Junho (°C)", title = "Média das temperaturas no mês do São João") +
    theme(plot.title = element_text(hjust = 0.5))

O gráfico acima tenta responder qual foi o São João mais frio em Campina Grande e, para isso, ele considera que essa festa acontece durante todo o mês de Junho. Além disso, os dados foram sumarizados para levar em conta a média das temperaturas médias do mês junino, uma vez que a temperatura média pode refletir melhor o conceito de “frio” dentro de um determinado período. Assim, observa-se que o São João mais frio foi o do ano de 2004, mas com a festa de 2008 sendo também muito fria.

Chuva

Quanto chove por semana em JP e CG?

Como é a distribuição do volume de chuvas por semana em JP e CG? A chuva varia mais ou menos que a temperatura? O formato da distribuição é igual?

climas %>% 
    ggplot(aes(x = chuva, fill = cidade)) +
    scale_x_continuous(n.breaks = 7) +
    facet_grid(rows = vars(cidade)) +
    geom_histogram(binwidth = 10) +
    labs(y = "Frequência", x = "Volume de chuva (em mm)", title = "Distribuição de chuvas por cidade", fill = "Cidade") +
    theme(plot.title = element_text(hjust = 0.5)) -> p3

climas %>% 
    ggplot(aes(x = tmedia, fill = cidade)) +
    scale_x_continuous(n.breaks = 7) +
    facet_grid(rows = vars(cidade)) +
    geom_histogram(bins = 20) +
    labs(y = "Frequência", x = "Temperatura média (em °C)", title = "Distribuição da temperatura por cidade", fill = "Cidade") +
    theme(plot.title = element_text(hjust = 0.5)) -> p4

grid.arrange(p3, p4)

De acordo com o primeiro gráfico, vemos que em boa parte das semanas não chove nada ou muito pouco, com os valores muito concentrados no intervalo de 0 a 20 milímetros de chuva, nas duas cidades. Vemos também que, por conta disso, a distribuição é assimétrica pois como visto anteriormente, muitos valores estão concentrados nas primeiras faixas de valores - indicando pouca chuva.
Em relação a temperatura, observamos no segundo gráfico que contém as duas cidades há uma distribuição mais simétrica, o que difere do plot o anterior. Temos que os valores de temperatura variam mais, pois não há muita concentração em um ponto central e eles são mais simétricos.

No geral, onde chove mais?

Para responder a pergunta podemos observar a distribuição de chuvas de uma outra forma, como mostra o gráfico abaixo.

climas %>% 
    ggplot(aes(x = cidade, y = chuva, color = cidade)) +
    geom_quasirandom() +
    labs(y = "Volume (em mm)", title = "Volume de chuva por cidade", color = "Cidade") +
    theme(plot.title = element_text(hjust = 0.5), axis.title.x = element_blank()) 

Essa visualização nos mostra que Campina Grande tem muitas ocorrências de 0mm de chuva, enquanto os valores de João Pessoa são mais distribuídos - o que pode ser um indicativo de que chove durante as semanas chove mais na cidade da capital. Para confirmar isso, podemos filtrar as semanas que não choveram e contar, para cada cidade, a quantidade de dias chuvosos.

climas %>% 
    filter(chuva > 0) %>% 
    group_by(cidade) %>% 
    summarise(n_semanas_chuvosas = n()) %>% 
    as.data.frame()
##           cidade n_semanas_chuvosas
## 1 Campina Grande                996
## 2    João Pessoa               1426

A tabela acima nos indica que de fato em João Pessoa houveram mais semanas chuvosas do que em Campina Grande e, assim, podemos dizer que no geral lá chove mais.

A distribuição é diferente em meses específicos?

climas %>% 
    ggplot(aes(x = chuva, fill = cidade)) +
    geom_histogram(bins = 20) +
    facet_wrap(vars(mes)) +
    labs(x = "Volume de chuvas (em mm)", y = "Frequência", title = "Distribuição mensal de chuvas", fill = "Cidade") +
    theme(plot.title = element_text(hjust = 0.5))

Pelo gráfico acima, podemos entender qual foi a distribuição de chuvas em cada um dos meses do ano, para cada uma das cidades. Podemos destacar que de Setembro até Dezembro, pouco chove em ambas as cidades pois, como pode ser visto, os volumes de chuvas estão muito concentrados em valores próximos a 0mm nesses meses. De Janeiro até Agosto as chuvas são mais frequentes, mas no primeiro trimestre do ano ainda ocorrem poucas chuvas - e a falta de chuvas é mais frequente em Campina Grande. Por volta de Março as duas cidades tem volumes de chuvas mais distribuídos e isso permance até Agosto, onde o volume de chuvas começa a diminuir.