Nesta análise avaliaremos dados de temperatura e precipitação. Os dados se referem às cidades de João Pessoa (capital da Paraíba), e Campina Grande (centro regional na Paraíba). Os dados englobam o período indo de 1989 até 2019.




Carregando pacotes

library(here)
library(lubridate)
library(ggbeeswarm)
library(tidyverse)

theme_set(theme_bw())




Carregando Dados

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

climas %>%
    glimpse()
## 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?

climas %>%
    ggplot(aes(tmax, ..density..,
               group=cidade,
               fill=cidade))  +
    geom_histogram(binwidth = 0.25,
                   color="black",
                   alpha=.4,
                   position="identity") +
    scale_x_continuous(breaks = seq(0, max(climas$tmax) + 5, 1)) +
    labs(x="Temperatura Máxima (°C)", y="Densidade de Frequência")

  • Campina Grande chega a alcançar temperaturas altas (acima de 34°C), e possui mais variação indo de 25°C até 34°C
  • As temperaturas em João Pessoa começam já em volta de 28°C.
climas %>%
    ggplot(aes(tmin, ..density..,
               group=cidade,
               fill=cidade))  +
    geom_histogram(binwidth = 0.5,
                   color="black",
                   alpha=.4,
                   position="identity") +
    scale_x_continuous(breaks = seq(0, max(climas$tmin) + 5, 1)) +
    labs(x="Temperatura Minima (°C)", y="Densidade de Frequência")

  • João Pessoa claramente possui temperaturas mínimas mais altas
climas %>%
    ggplot(aes(tmedia, ..density..,
               group=cidade,
               fill=cidade))  +
    geom_histogram(binwidth = 0.5,
                   color="black",
                   alpha=.4,
                   position="identity") +
    scale_x_continuous(breaks = seq(0, max(climas$tmedia) + 5, 1)) +
    labs(x="Temperatura Média (°C)", y="Densidade de Frequência")

  • Em termos de temperatura média João Pessoa possui os valores mais altos no período avaliado

Em geral, podemos dizer que João Pessoa é mais quente que Campina Grande.


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

climas %>%
    select(tmax, tmedia, semana, cidade) %>%
    pivot_longer(c("tmax", "tmedia"),
                 names_to = "metric") %>%
    ggplot(aes(value, ..density..,
               group=metric,
               fill=metric))  +
    geom_histogram(binwidth = .5,
                   color="black",
                   alpha=.4,
                   position="identity") +
    facet_wrap(~ cidade) +
    scale_x_continuous(breaks = round(seq(20,
                                    max(climas$tmax),
                                    1), 1)) +
    labs(x = "Temperatura (°Celsius)", y="Densidade de Frequência") +
    coord_flip()

  • Em cada cidade a curva das temperaturas máximas semanais tem uma forma/simetria similar à curva das temperaturas médias
  • A grande diferença é que a curva das temperaturas máximas semanais possui sua moda em um valor mais alto do que a curva das temperaturas médias

Em termos de curva as máximas se distribuem similarmente às médias, porém em uma escala mais alta


Quais os meses mais quentes e mais frios?

climas %>%
    mutate(month = month(semana)) %>%
    mutate(month = as.factor(month))%>%
    ggplot(aes(month, tmedia)) +
    geom_boxplot() +
    facet_wrap(~ cidade) +
    labs(x="Mês do Ano", y="Temperatura Média (°C)")

  • Os meses 1, 2, 3, 11 e 12 (Fevereiro, Março, Novembro e Dezembro) parecem ser os mais quentes.
    • Intuitivamente os meses mais quentes casam com os meses próximos ao verão.
  • Os meses 6, 7 e 8 (Junho, Julho e Agosto) parecem ser os mais frios.
    • Intuitivamente os meses mais frios casam com os meses próximos ao inverno.


Meses mais quentes

climas %>%
    mutate(month = month(semana)) %>%
    mutate(month = as.factor(month)) %>%
    filter(month %in% c(1, 2, 3, 11, 12)) %>%
    ggplot(aes(month, tmedia)) +
    geom_boxplot() +
    facet_wrap(~ cidade) +
    labs(x="Mês do Ano", y="Temperatura Média (°C)")

  • Em Campina Grande:

  • A distribuição de valores do mês 2 está acima da do resto, tornando Fevereiro o mês mais quente do ano.
  • Os valores mais altos estão no mês 3, assim os dias mais quentes do período aconteceram em Março.

  • Em João Pessoa:

  • A distribuição de valores do mês 3 está acima da do resto, tornando Março o mês mais quente do ano.
  • Os valores mais altos estão no mês 2, assim o dias mais quentes do período aconteceu em Fevereiro.


Meses mais frios

climas %>%
    mutate(month = month(semana)) %>%
    mutate(month = as.factor(month)) %>%
    filter(month %in% c(6, 7, 8)) %>%
    ggplot(aes(month, tmedia)) +
    geom_boxplot() +
    facet_wrap(~ cidade) +
    labs(x="Mês do Ano", y="Temperatura Média (°C)")

  • Tanto em Campina Grande com em João Pessoa o mês de Julho é em geral o mês mais frio do ano


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

climas %>%
    filter(cidade == "Campina Grande") %>%
    mutate(month = month(semana),
           day = day(semana)) %>%
    filter((day <= 8 & month == 7) |
            (month == 6)) %>%
    mutate(month = as.factor(month),
           day = as.factor(day),
           ano = as.factor(ano)) -> climas_sj

climas_sj %>%
    mutate(month = month(semana),
           day = day(semana)) %>%
    filter((day <= 8 & month == 7) |
            (month == 6)) %>%
    mutate(month = as.factor(month),
           day = as.factor(day),
           ano = as.factor(ano)) %>%
    group_by(ano) %>%
    summarise(median_tmin = median(tmin)) %>%
    ungroup() %>%
    inner_join(climas_sj, by= c("ano")) %>%    
    ggplot(aes(reorder(ano, median_tmin), tmin)) +
    geom_boxplot() +
    theme(axis.text.x = element_text(angle = 90, hjust = 1)) +
    labs(x="Ano", y="Temperatura Mínima (°C)")

  • Em termos de temperatura mínima 2003 e 2018 tiveram os menores valores medianos.
  • 2003 teve os dias mais frios, porém também teve temperaturas mínimas relativamentes altas (Maior variação).
climas_sj %>%
    mutate(month = month(semana),
           day = day(semana)) %>%
    filter((day <= 8 & month == 7) |
            (month == 6)) %>%
    mutate(month = as.factor(month),
           day = as.factor(day),
           ano = as.factor(ano)) %>%
    group_by(ano) %>%
    summarise(median_tmax = median(tmax)) %>%
    ungroup() %>%
    inner_join(climas_sj, by= c("ano")) %>%    
    ggplot(aes(reorder(ano,median_tmax), tmax)) +
    geom_boxplot() +
    theme(axis.text.x = element_text(angle = 90, hjust = 1)) +
    labs(x="Ano", y="Temperatura Máxima (°C)")

  • 2004 claramente teve as menores temperaturas máximas
climas_sj %>%
    mutate(month = month(semana),
           day = day(semana)) %>%
    filter((day <= 8 & month == 7) |
            (month == 6)) %>%
    mutate(month = as.factor(month),
           day = as.factor(day),
           ano = as.factor(ano)) %>%
    group_by(ano) %>%
    summarise(median_tmedia = median(tmedia)) %>%
    ungroup() %>%
    inner_join(climas_sj, by= c("ano")) %>%    
    ggplot(aes(reorder(ano,median_tmedia), tmedia)) +
    geom_boxplot() +
    theme(axis.text.x = element_text(angle = 90, hjust = 1)) +
    labs(x="Ano", y="Temperatura Média (°C)")

  • Em termos de temperatura média 2004 e 2008 tiveram os menores valores medianos.


Tendo quatro anos que se destacaram por terem valores mais baixos (2003, 2004, 2008 e 2018), observaremos suas distribuições:
climas %>%
    filter(cidade == "Campina Grande") %>%
    mutate(month = month(semana),
           day = day(semana)) %>%
    filter((day <= 8 & month == 7) |
            (month == 6)) %>%
    mutate(month = as.factor(month),
           day = as.factor(day),
           ano = as.factor(ano)) %>%
    filter(ano %in% c(2003, 2004, 2008, 2018)) %>%
    ggplot(aes(x=tmin, fill=ano)) +
    geom_density(alpha=.4) +
    labs(x = "Temperatura Mínima (°C)", y="Densidade de Frequência")

  • 2018 é o ano com as menores temperaturas mínimas
climas %>%
    filter(cidade == "Campina Grande") %>%
    mutate(month = month(semana),
           day = day(semana)) %>%
    filter((day <= 8 & month == 7) |
            (month == 6)) %>%
    mutate(month = as.factor(month),
           day = as.factor(day),
           ano = as.factor(ano)) %>%
    filter(ano %in% c(2003, 2004, 2008, 2018)) %>%
    ggplot(aes(x=tmax, fill=ano)) +
    geom_density(alpha=.4) +
    labs(x = "Temperatura Máxima (°C)", y="Densidade de Frequência")

  • 2004 é o ano com as menores temperaturas máximas
climas %>%
    filter(cidade == "Campina Grande") %>%
    mutate(month = month(semana),
           day = day(semana)) %>%
    filter((day <= 8 & month == 7) |
            (month == 6)) %>%
    mutate(month = as.factor(month),
           day = as.factor(day),
           ano = as.factor(ano)) %>%
    filter(ano %in% c(2003, 2004, 2008, 2018)) %>%
    ggplot(aes(x=tmedia, fill=ano)) +
    geom_density(alpha=.4) +
    labs(x = "Temperatura Média (°C)", y="Densidade de Frequência")

  • 2004 e 2008 são os anos com menores temperaturas médias.
  • 2004 possui a menor moda, e aparenta ter as menores temperaturas médias em geral.
  • A diferença entre 2004 e 2008 não é tão clara.


  • Menores Temperaturas Mínimas : 2018
  • Menores Temperaturas Máximas : 2004
  • Menores Temperaturas Médias : 2003 e 2004

Se avaliarmos apenas temperaturas mínimas 2018 seria o ano mais frio. Se levarmos as três métricas em consideração 2014 seria o melhor candidato para ano do São João mais frio




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 %>%
    mutate(week_in_year = week(semana)) %>%
    group_by(week_in_year, ano) %>%
    summarise(num = n()) %>%
    ungroup() %$%
    num %>%
    unique()
## [1] 1 2
  • Para algumas semanas do período avaliado existe mais de um valor, por essa razão trabalharemos com a média semanal.
climas %>%
    mutate(week_in_year = week(semana)) %>%
    group_by(week_in_year, ano, cidade) %>%
    summarise(mean_tmin = mean(tmin),
              mean_tmax = mean(tmax),
              mean_tmedia = mean(tmedia),
              mean_chuva = mean(chuva)) %>%
    ungroup() %>%
    mutate(mean_tmin = scale(mean_tmin), # applying z-score
           mean_tmax = scale(mean_tmax),
           mean_tmedia = scale(mean_tmedia),
           mean_chuva = scale(mean_chuva)) %>%
    pivot_longer(c("mean_tmax", "mean_tmedia",
                   "mean_chuva", "mean_tmin"),
                 names_to = "metric") %>%
    ggplot(aes(x=value, fill=metric)) +
    geom_density(alpha=.4) +
    facet_wrap(~ cidade)

  • O formato das distribuições é diferente
    • Em comparação à distribuição de temperatura a distribuição de chuva é muito mais enviesada à direita.
    • No caso da distribuição de chuva valores mais baixos que a média e mediana são os mais frequentes, a moda é menor que a média e a mediana.
climas %>%
    mutate(week_in_year = week(semana)) %>%
    group_by(week_in_year, ano, cidade) %>%
    summarise(mean_tmin = mean(tmin),
              mean_tmax = mean(tmax),
              mean_tmedia = mean(tmedia),
              mean_chuva = mean(chuva)) %>%
    ungroup() %>%
    mutate(mean_tmin = scale(mean_tmin),  # applying z-score
           mean_tmax = scale(mean_tmax),
           mean_tmedia = scale(mean_tmedia),
           mean_chuva = scale(mean_chuva)) %>%
    pivot_longer(c("mean_tmax", "mean_tmedia",
                   "mean_chuva", "mean_tmin"),
                 names_to = "metric") %>%
    ggplot(aes(x=metric, y=value)) +
    geom_boxplot() +
    facet_wrap(~ cidade) +
    labs(x="", y="z-score") +
    coord_flip()

  • A varição das distribuições é diferente, a distribuição dos valores de chuva possui muito mais valores distante da parte central da distribuição (IQR) à direita. Reflexo do forte viés à direita
climas %>%
    mutate(week_in_year = week(semana)) %>%
    group_by(week_in_year, ano, cidade) %>%
    summarise(mean_chuva = mean(chuva)) %>%
    ungroup() %>%
    ggplot(aes(mean_chuva, (..count..)/sum(..count..),
               group=cidade,
               fill=cidade))  +
    geom_histogram(binwidth = 10,
                   color="black",
                   position="dodge2") +
    scale_x_continuous(breaks = seq(0, 500, 20)) +
    coord_flip() +
    labs(x="Chuva média semanal", y="Frequência Relativa")

  • Valores abaixo de 20 são mais frequentes em ambas cidades.
climas %>%
    mutate(week_in_year = week(semana)) %>%
    group_by(week_in_year, ano, cidade) %>%
    summarise(mean_chuva = mean(chuva)) %>%
    ungroup() %>%
    ggplot(aes(x=mean_chuva, color=cidade)) +
    stat_ecdf(geom = "step") +
    labs(x="Chuva média semanal", y="Frequência Relativa") +
    scale_x_continuous(breaks = seq(0, 500, 25)) +
    coord_flip()

  • A quase totalidade dos valores de precipitação está abaixo de 100.
climas %>%
    mutate(week_in_year = week(semana)) %>%
    group_by(week_in_year, ano, cidade) %>%
    summarise(mean_chuva = mean(chuva)) %>%
    ungroup() %>%
    ggplot(aes(mean_chuva, x=cidade,
               fill=cidade))  +
    geom_boxplot() +
    scale_y_continuous(breaks = seq(0, 500, 20)) +
    labs(x="Chuva média semanal", y="Frequência Relativa")

  • Em geral os valores medianos de precipitação em Campina Grande estão próximos de 5.
  • Em geral os valores medianos de precipitação em João Pessoa estão próximos de 20.

No geral, onde chove mais?

climas %>%
    mutate(week_in_year = week(semana)) %>%
    group_by(week_in_year, ano, cidade) %>%
    summarise(mean_chuva = mean(chuva)) %>%
    ungroup() %>%
    ggplot(aes(mean_chuva, (..count..)/sum(..count..),
               group=cidade,
               fill=cidade))  +
    geom_histogram(binwidth = 10, position = "dodge2") +
    labs(x="Chuva média semanal", y="Frequência Relativa")

  • Em geral chove mais em João Pessoa do que em Campina Grande.
  • Valores mais baixos são mais frequentes em Campina Grande, e valores mais altos são mais frequentes em João Pessoa.
climas %>%
    ggplot(aes(cidade, chuva)) +
    geom_boxplot() +
    labs(x="Cidade", y="Nível de precipitação")

  • Em geral chove mais em João Pessoa do que em Campina Grande.
climas %>%
    ggplot(aes(x=chuva, fill=cidade)) +
    geom_density(alpha=.4) +
    labs(y="Densidade de Frequência", x="Nível de precipitação")

  • Em geral chove mais em João Pessoa do que em Campina Grande.

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

climas %>%
    mutate(month = month(semana),
           week_in_year = week(semana)) %>%
    group_by(week_in_year, ano, month, cidade) %>%
    summarise(mean_chuva = mean(chuva)) %>%
    ungroup() %>%
    group_by(ano, month, cidade) %>%
    summarise(mean_chuva = mean(mean_chuva)) %>%
    ungroup() %>%
    mutate(month = as.factor(month)) %>%
    ggplot(aes(month, mean_chuva, fill=cidade))  +
    geom_boxplot() +
    labs(x="Mês do ano", y="Chuva média semanal")

  • A distribuição muda em meses específicos, meses na metade do ano (Maio, Junho e Julho) apresentam taxas mais altas de chuva.