library(tidyverse)
library(here)
theme_set(theme_bw())
# SEMPRE read_csv NUNCA read.csv
clima_tudo = read_csv(
    here("data/tempo-jp-cg-pt.csv"),
    col_types = cols(
        .default = col_double(),
        cidade = col_character(),
        semana = col_date(format = ""),
        ano = col_integer(),
        mes = col_integer()
    )
)

clima = clima_tudo %>% 
    filter(ano == 2019)

As cidades da Paraíba são diversas e, do litoral ao sertão, muito da nossa cultura se criou e ainda existe devido ao clima e às chuvas. É possível entender melhor a diferença entre esses fenômenos nas diferentes regiões da Paraíba utilizando os dados do INMET. No decorrer desta análise, estaremos observando a temperatura, o vento, a umidade e a quantidade de chuva nas cidades de João Pessoa, capital da Paraíba situada no litoral, Campina Grande, situada no brejo paraibano, e Patos, situada no sertão.

Nessa análise, estarei respondendo as perguntas 4, 3 e 2, respectivamente, do Readme.

Entendendo os dados

Inicialmente, precisamos entender os dados que estamos trabalhando, quais atributos estão disponíveis, para então elaborar e responder perguntas com base neles. Vejamos um segmento dos dados:

clima %>% slice(1:8)
## # A tibble: 8 x 11
##   cidade   semana     temp_max temp_media temp_min vento_medio vento_max umidade
##   <chr>    <date>        <dbl>      <dbl>    <dbl>       <dbl>     <dbl>   <dbl>
## 1 Campina~ 2019-01-06     32.1       25.6     19.6        3.57       4.6    74.9
## 2 Campina~ 2019-01-13     33.5       27.1     20          3.29       4.5    69  
## 3 Campina~ 2019-01-20     33.3       26.7     19.6        4.01       6.5    72.5
## 4 Campina~ 2019-01-27     32.4       26.4     19.6        3.53       5      75.0
## 5 Campina~ 2019-02-03     32.2       25.3     19.5        2.95       4.8    83  
## 6 Campina~ 2019-02-10     31.1       25.6     20.1        3.17       5      84.1
## 7 Campina~ 2019-02-17     31.6       25.9     20.5        2.89       4.1    79.2
## 8 Campina~ 2019-02-24     31.1       25.9     20.5        3.63       4.8    76.8
## # ... with 3 more variables: chuva <dbl>, ano <int>, mes <int>

É interessante ver que temos os valores de temperatura máxima, média e mínima, o vento médio e máximo. A Umidade e a chuva são valores absolutos. Além disso, também temos acesso ao registro de quando essa medição foi feita, em que semana, o que pode ajudar a visualizar essa informação.

Análise da Temperatura

Agora sabemos que é possível visualizar a temperatura semana a semana, comparar entre as diferentes cidades, e tentar entender algo a partir disso. Vejamos a distribuição da temperatura de cada uma das cidades em 2019:

clima %>% 
  ggplot(aes(x = cidade, y = temp_media)) +
  geom_jitter(height = 0.1, color = "coral") +
  labs(x = "Cidade", y = "Temperatura Média") +
  ggtitle("Temperatura média por cidade, em 2019")

Pela distribuição acima, entendemos que Campina Grande possui as menores temperaturas médias, enquanto Patos possui as maiores temperaturas médias. Ainda assim, com o gráfico acima não conseguimos ver a distribuição dessas temperaturas ao longo do ano. Vejamos de outra forma:

clima %>% 
  ggplot(mapping = aes(x = semana, y = temp_media, color = cidade)) +
  geom_point() + geom_line() +
  labs(x = "Semana de 2019", y = "Temperatura Média", color = "Cidade") +
  ggtitle("Temperatura média ao longo de 2019")

Diferente da visualização anterior, agora podemos comparar semana a semana e notar coisas que antes não era possível notar: no período de Fevereiro a Junho, João Pessoa atinge temperaturas médias maiores que as de Patos; Campina Grande sempre está com temperaturas médias inferiores às outras cidades.

clima %>% filter(mes == 6) %>% 
  ggplot(mapping = aes(x = semana, y = temp_media, color = cidade)) + 
  geom_point() + geom_line() +
  labs(x = "Semanas de Junho de 2019", y = "Temperatura Média", color = "Cidade") +
  ggtitle("Temperatura média em Junho de 2019")

Também podemos olhar para um ponto específico do ano: se olharmos para Junho, quando ocorrem as festividades juninas, é também o ponto em que todas as cidades atingiram a menor temperatura média naquele ano, mas Campina Grande foi a mais fria entre as três. Assim, Campina Grande tem o São João mais frio, seguido por João Pessoa, enquanto Patos tem o mais quente.

Análise da Umidade e das Chuvas

Outro grande fator, além da temperatura, são as chuvas e a umidade. No tradicional São João de Campina Grande, não é surpresa tomar um banho de chuva no Parque do Povo, ou ter o céu coberto com uma fina e fria névoa. Mas essa época também é assim nas outras cidades?

clima %>% filter(mes == 6) %>% 
  ggplot(mapping = aes(x = semana, y = umidade, color = cidade, size = chuva)) + 
  geom_point(alpha = 0.6) +
  labs(x = "Semanas de Junho de 2019", y = "Umidade", size = "Chuva (mm)", color = "Cidade") +
  ggtitle("Umidade em Junho de 2019")

Embora Campina Grande seja a cidade mais úmida no mês de junho, não foi a que mais choveu, posição esta ocupada por João Pessoa. Patos, diferente das outras duas cidades, possui baixa umidade e chuva ao longo do mês inteiro. Mas essa visão ainda está restrita no mês de Junho. Vejamos como é essa proporção durante o ano inteiro, de uma outra forma:

clima %>% 
  ggplot(mapping = aes(x = semana, y = umidade, color = cidade, size = chuva)) +
  geom_point(alpha = 0.6) +
  facet_wrap(~cidade, ncol=1) +
  labs(x = "Semanas de 2019", y = "Umidade", size = "Chuva (mm)", color = "Cidade") +
  ggtitle("Umidade em 2019")

Enquanto João Pessoa e Campina Grande são úmidas e chove durante o ano todo, Patos tem bem menos umidade, bem mais associada aos momentos de chuva na cidade. Mas, por enquanto, só estamos vendo o ano de 2019, e Patos já foi bem diferente das outras. Como o 2019 de Patos se compara com os outros anos?

patos <- clima_tudo %>%
  filter(cidade == "Patos") %>%
  filter(ano < 2019) %>% 
  mutate(mes = as_factor(mes))
patos_2019 <- clima %>% 
  filter(cidade == "Patos") %>%
  mutate(mes = as_factor(mes))
patos %>%
  ggplot(mapping = aes(x = mes, y = umidade)) +
  geom_boxplot() + 
  geom_point(patos_2019, mapping = aes(x = mes, y = umidade), color="blue") +
  labs(x = "Mês do ano", y = "Umidade") +
  ggtitle("Umidade em Patos")

No gráfico acima, os pontos azuis representam as semanas daquele mês em 2019, enquanto os boxplots representam a distribuição de umidade nos anos anteriores. Quando comparamos, há muitos meses que repetem o que aconteceu nos anos anteriores, mas também é possível perceber que de Junho a Dezembro parece menos úmido - mais seco - que nos anos anteriores.

Sensação Térmica

Os primeiros meses do ano sempre dão uma sensação de calor muito grande, e não é difícil ver jornais falando sobre récordes de temperatura. Entretanto, sabemos que a sensação térmica, isto é, a temperatura que sentimos no ambiente, pode ser muito diferente da temperatura em si.Considerando apenas o período de janeiro e fevereiro, como varia o calor das 3 cidades nos últimos anos? Aqui, ao me referir a calor estou imaginando a maior temperatura experienciada pelas pessoas em cada semana. Para responder, vamos primeiro criar uma função que calcula a sensação térmica, gerando um valor mais próximo à experiência das pessoas:

sensacao_termica <- function(temperatura, vento) {
  sts <- c()
  for (i in 1:length(temperatura)) {
    vi = vento[i]
    ti = temperatura[i]
    sti <- 33 + (10 * sqrt(vi) + 10.45 - vi) * ((ti - 33) / 22)
    sts <- c(sts, sti)
  }
  return(sts)
}

clima <- clima %>% mutate(vento_medio_kmh = 3.6 * vento_medio)
clima$sensacao_termica <- sensacao_termica(clima$temp_media, clima$vento_medio_kmh)

clima %>% 
  filter(mes < 3) %>% 
  ggplot() +
  geom_point(mapping = aes(x = semana, y = temp_media, color="red")) +
  geom_point(mapping = aes(x = semana, y = sensacao_termica, color="blue")) +
  facet_wrap(~cidade) +
  labs(x = "Semana", y = "Temperatura e Sensação Térmica", color="Medida") +
  scale_color_manual(values = c("blue" = "blue", "red" = "red"),
                     labels = c("Sensação Térmica", "Temperatura Média")) +
  ggtitle("Temperaturas e Sensações Térmicas em 2019")

De início, já é perceptível que a sensação térmica é diretamente proporcional a temperatura, mas é sempre uma sensação de estar mais frio do que realmente está. Isso em 2019. Vejamos como isso acontece quando comparado aos anos anteriores:

clima_tudo$sensacao_termica <- sensacao_termica(clima_tudo$temp_media, clima_tudo$vento_medio)

clima_tudo %>% filter(mes < 3 & ano < 2019) %>% 
  ggplot(mapping = aes(x = semana, y = sensacao_termica, colour="red")) +
  geom_point() +
  geom_point(clima %>% filter(mes < 3), mapping = aes(x = semana, y = sensacao_termica, colour="blue")) +
  facet_wrap(~cidade) + 
  labs(x = "Ano", y = "Sensação Térmica", color = "Ano") +
  scale_color_manual(values = c("blue" = "blue", "red" = "red"),
                     labels = c("2019", "Outros anos")) +
  ggtitle("Sensação Térmica")
## Warning: Removed 1 rows containing missing values (geom_point).

Campina Grande e João Pessoa tiveram as menores sensações térmicas dos últimos anos. Patos, diferente das demais, teve uma sensação térmica semelhante aos anos anteriores.