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?

Temperaturas Máximas

colors <- c("Mediana" = "darkblue", "Média" = "darkred")

climas %>%
  ggplot(aes(cidade, tmax)) +
  geom_jitter(alpha = 0.15) +
  stat_summary(aes(color="Mediana"),
               fun.y = median, fun.ymin = median, fun.ymax = median,
               geom = "crossbar", width = 0.5) +
  stat_summary(aes(color="Média"),
               fun.y = mean, fun.ymin = mean, fun.ymax = mean,
               geom = "crossbar", width = 0.5) +
  scale_color_manual(values = colors) +
  scale_y_continuous(limits = c(0, 40)) +
  labs(y="Temperaturas Máximas (°C)", x="Cidade")

  • Não existe diferença clara, existe muita intersecção.
    • A média e mediana das temperatura máximas em ambas cidades estão muito próximas.
  • Existe mais dispersão nas temperaturas máximas de Campina Grande.
climas %>%
  group_by(cidade) %>%
  summarise(mean = mean(tmax),
            sd = sd(tmax),
            median = median(tmax),
            mad = mad(tmax)) %>%
  ungroup()
  • Como já indicado no gráfico de dispersão existe pouca diferença em termos de mediana e média, a média e mediana de João Pessoa está acima porém em menos de 1 grau Celsius.

  • As temperaturas máximas de Campina Grande possuem mais variação

climas %>%
  ggplot(aes(cidade, tmax)) +
  geom_boxplot() +
  scale_y_continuous(limits = c(0, 40)) +
  labs(y="Temperaturas Máximas (°C)", x="Cidade")

  • Em termos de temperatura máxima não é claro qual cidade é 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")

  • O gráfico acima reforça a similaridade entre as temperaturas máximas das duas cidades.

Em termos de temperatura máxima não é claro qual cidade é mais quente


Temperaturas mínimas

colors <- c("Mediana" = "darkblue", "Média" = "darkred")

climas %>%
  ggplot(aes(cidade, tmin)) +
  geom_jitter(alpha = 0.15) +
  stat_summary(aes(color="Mediana"),
               fun.y = median, fun.ymin = median, fun.ymax = median,
               geom = "crossbar", width = 0.5) +
  stat_summary(aes(color="Média"),
               fun.y = mean, fun.ymin = mean, fun.ymax = mean,
               geom = "crossbar", width = 0.5) +
  scale_color_manual(values = colors) +
  scale_y_continuous(limits = c(0, 40)) +
  labs(y="Temperaturas Mínimas (°C)", x="Cidade")

  • No período considerado, as temperaturas mínimas de João Pessoa são mais altas que as de Campina Grande.
    • A mediana e a média das temperaturas mínimas em João Pessoa são mais altas que as de Campina Grande.
climas %>%
  group_by(cidade) %>%
  summarise(mean = mean(tmin),
            sd = sd(tmin),
            median = median(tmin),
            mad = mad(tmin)) %>%
  ungroup()
  • Em termos de mediana e média as temperaturas mínimas de João Pessoa estão 3°C acima das de Campina Grande.

  • Existe mais dispersão nas temperaturas mínimas de João Pessoa.

climas %>%
  ggplot(aes(cidade, tmin)) +
  geom_boxplot() +
  scale_y_continuous(limits = c(0, 40)) +
  labs(y="Temperaturas Mínimas (°C)", x="Cidade")

  • Observando os quartis fica ainda mais claro que as temperaturas mínimas de João Pessoa são mais altas que as de Campina Grande.
    • O primeiro quartil das temperaturas mínimas de João Pessoa tem uma valor mais alto que o terceiro quartil das temperaturas mínimas de Campina Grande.
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")

  • Embora haja intersecção, em geral os valores de temperatura mínima de João Pessoa estão acima dos valores de Campina Grande
    • A intersecção é entre valores mais altos de Campina Grande e valores mais baixos de João Pessoa. O que reforça que as temperaturas mínimas de João Pessoa são mais altas que as de Campina Grande

No período considerado, as temperaturas mínimas de João Pessoa são mais altas que as de Campina Grande.

Temperaturas médias

colors <- c("Mediana" = "darkblue", "Média" = "darkred")

climas %>%
  ggplot(aes(cidade, tmedia)) +
  geom_jitter(alpha = 0.15) +
  stat_summary(aes(color="Mediana"),
               fun.y = median, fun.ymin = median, fun.ymax = median,
               geom = "crossbar", width = 0.5) +
  stat_summary(aes(color="Média"),
               fun.y = mean, fun.ymin = mean, fun.ymax = mean,
               geom = "crossbar", width = 0.5) +
  scale_color_manual(values = colors) +
  scale_y_continuous(limits = c(0, 40)) +
  labs(y="Temperaturas Médias (°C)", x="Cidade")

  • Embora haja intersecção, em geral os valores de temperatura média de João Pessoa estão acima dos valores de Campina Grande
    • A mediana e a média das temperaturas médias em João Pessoa são mais altas que as de Campina Grande
  • Os valores de Campina Grande são mais dispersos.
climas %>%
  group_by(cidade) %>%
  summarise(mean = mean(tmedia),
            sd = sd(tmedia),
            median = median(tmedia),
            mad = mad(tmedia)) %>%
  ungroup()
  • Em termos de mediana e média as temperaturas médias de João Pessoa estão 3°C acima das de Campina Grande.

  • Existe mais dispersão nas temperaturas médias de Campina Grande.

climas %>%
  ggplot(aes(cidade, tmedia)) +
  geom_boxplot() +
  scale_y_continuous(limits = c(0, 40)) +
  labs(y="Temperaturas Médias (°C)", x="Cidade")

  • O 1º Quartil de João Pessoa está acima do 3º Quartil de Campina Grande.
    • Isso implica em que a maior parte dos valores de temperatura média de João Pessoa está acima dos de Campina Grande.
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")

  • Embora haja intersecção, em geral os valores de temperatura média de João Pessoa estão acima dos valores de Campina Grande
    • A intersecção é entre valores mais altos de Campina Grande e valores mais baixos de João Pessoa, o que reforça que as temperaturas médias de João Pessoa são mais altas que as de Campina Grande

No período considerado, as temperaturas médias de João Pessoa são mais altas que as de Campina Grande.


Conclusão


  • No período considerado, não existe diferença clara entre as temperaturas máximas de João Pessoa e Campina Grande.

  • No período considerado as temperaturas mínimas de João Pessoa são mais altas que as de Campina Grande.

  • No período considerado as temperaturas médias de João Pessoa são mais altas que as de Campina Grande.


No período considerado, João Pessoa é a cidade mais quente


Os invernos em Campina Grande têm ficado mais frios ou mais quentes ao longo dos quinquênios?

  • Por questão de simplificação consideraremos o período de 20 de Julho a 20 de Setembro como o período de inverno.

Um quinquênio inclui 5 anos:

  • Por exemplo o quinquênio de 1995 inclui os 5 anos (1995, 1996, 1997, 1998, 1999)
  • Por exemplo o quinquênio de 2000 inclui os 5 anos (2000, 2001, 2002, 2003, 2004)
climas %>%
  filter(cidade == "Campina Grande") %>%
  mutate(month = month(semana),
           day = day(semana),
         quinquennium = ano - ano %% 5) %>%
  filter((day >= 20 & month == 7) |
            (month == 8) |
            (day <= 20 & month == 9)) -> climas_inverno

climas_inverno %$%
  ano %>%
  unique() %>%
  sort()
##  [1] 1995 1996 1997 1998 1999 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010
## [16] 2011 2012 2013 2014 2015 2016 2017 2018
  • O ano mais antigo para o qual temos dados do período de inverno é 1995.
climas_inverno %$%
  ano %>%
  unique() %>%
  sort() %>%
  setdiff(seq(1995, 2019, 1), .)
## [1] 2000 2019
  • No período de 1995 até 2019 não temos dados para 2000 e 2019.
climas_inverno %$%
  quinquennium %>%
  unique() %>%
  sort() 
## [1] 1995 2000 2005 2010 2015
  • Os quinquênios de 1995, 2000, 2005, 2010 e 2015 serão incluidos na análise. São os quinquênios para os quais temos informação no período de inverno. Lembrando que não temos informação para os anos 2000 e 2019.
climas_inverno %>%
  mutate(month = as.factor(month),
           day = as.factor(day),
           ano = as.factor(ano),
         quinquennium = as.factor(quinquennium)) -> climas_inverno

Temperaturas Máximas

climas_inverno %>%
  ggplot(aes(quinquennium, tmax)) +
  stat_summary(aes(color="Mediana"), 
               fun.y = median, fun.ymin = median, fun.ymax = median,
               geom = "crossbar", width = 0.5) +
  stat_summary(aes(color="Média"),
               fun.y = mean, fun.ymin = mean, fun.ymax = mean,
               geom = "crossbar", width = 0.5) +
  geom_jitter(alpha = 0.35) +
  scale_color_manual(values = colors) +
  scale_y_continuous(limits = c(25, 35)) +
  labs(y="Temperaturas Máximas (°C)", x="Quinquênio")
## Warning: Removed 1 rows containing missing values (geom_point).

  • No quinquênio de 2005 a média e mediana das temperaturas máximas decresceu em relação ao quinquênio de 2000.

  • No quinquênio de 2015 a média e mediana das temperaturas máximas cresceu em relação ao quinquênio de 2010.

climas_inverno %>%
  mutate(quinquennium = as.numeric(levels(quinquennium))[quinquennium]) %>%
  ggplot(aes(quinquennium, tmax)) +
  geom_jitter(alpha = 0.35) +
  geom_smooth(method = 'loess', formula = 'y ~ x') +
  labs(y="Temperaturas Máximas (°C)", x="Quinquênio") +
  scale_y_continuous(limits = c(25, 35)) +
  scale_x_continuous(breaks=seq(1995, 2015, 5))
## Warning: Removed 1 rows containing missing values (geom_point).

  • O método loess (moving average mais regressão polinomial) descreve um decréscimo a partir de 2005 e um acréscimo a partir de 2010
climas_inverno %>%
  group_by(quinquennium) %>%
  summarise(mean = mean(tmax),
            sd = sd(tmax),
            median = median(tmax),
            mad = mad(tmax)) %>%
  ungroup()
  • Medianas e médias decresceram nos quinquênios de 2005 e 2010 e cresceram no quinquênio de 2015
  • A dispersão dos dados decresceu nos quinquênios de 2005 e 2010 e cresceu novamente no quinquênio de 2015
climas_inverno %>%
  mutate(ano = as.factor(ano)) %>%
  ggplot(aes(quinquennium, tmax)) +
  geom_boxplot() +
  scale_y_continuous(limits = c(25, 35)) +
  labs(y="Temperaturas Máximas (°C)", x="Quinquênio")

  • No quinquênio de 2005 os quartis das temperaturas máximas decresceu em relação ao quinquênio de 2000.

  • No quinquênio de 2015 os quartis das temperaturas máximas cresceu em relação ao quinquênio de 2010.

climas_inverno %>%
  mutate(ano = as.factor(ano)) %>%
  ggplot(aes(tmax)) +
  geom_density(alpha = .3) +
  facet_wrap(~ quinquennium) +
  labs(x="Temperaturas Máximas (°C)", y="Densidade de Frequência")

  • Distribuição de temperaturas máximas no quinquênio de 2005 e 2010 assimétrica à direita (valores mais baixos foram mais frequentes).

  • Distribuição de temperaturas máximas no quinquênio de 2015 assimétrica à esquerda (valores mais altos foram mais frequentes).

A simetria das distribuição está de acordo com os resultados em termos de boxplot e scatterplot:

No quinquênio de 2005 e 2010 as temperaturas máximas decresceram e no quinquênnio de 2015 as temperaturas máximas cresceram novamente.

Temperaturas Mínimas

climas_inverno %>%
  ggplot(aes(quinquennium, tmin)) +
  stat_summary(aes(color="Mediana"),
               fun.y = median, fun.ymin = median, fun.ymax = median,
               geom = "crossbar", width = 0.5) +
  stat_summary(aes(color="Média"),
               fun.y = mean, fun.ymin = mean, fun.ymax = mean,
               geom = "crossbar", width = 0.5) +
  geom_jitter(alpha = 0.35) +
  scale_color_manual(values = colors) +
  scale_y_continuous(limits = c(10, 25)) +
  labs(y="Temperaturas Mínimas (°C)", x="Quinquênio")

  • Existe forte intersecção entre os valores de temperatura mínima ao longo de todos os quinquênios.
    • Médias e medianas estão bem próximas
  • O quinquênio de 2005 é particularmente disperso.
climas_inverno %>%
  mutate(quinquennium = as.numeric(levels(quinquennium))[quinquennium]) %>%
  ggplot(aes(quinquennium, tmin)) +
  geom_jitter(alpha = 0.35) +
  geom_smooth(method = 'loess', formula = 'y ~ x') +
  labs(y="Temperaturas Mínimas (°C)", x="Quinquênio") +
  scale_y_continuous(limits = c(10, 25)) +
  scale_x_continuous(breaks=seq(1995, 2015, 5))

  • A curva criada pelo método loess (moving average mais regressão polinomial) não indica nenhum acréscimo ou decréscimo em particular.
climas_inverno %>%
  group_by(quinquennium) %>%
  summarise(mean = mean(tmin),
            sd = sd(tmin),
            median = median(tmin),
            mad = mad(tmin)) %>%
  ungroup()
  • Os valores das médias e das medianas são muito similares

  • Os quinquênio de 1995 e 2005 são os de maior dispersão
    • Em termos de desvio padrão o quinquênio de 2005 é o mais disperso
    • Em termos de desvio absoluto mediano o quinquênio de 1995 é o mais disperso
climas_inverno %>%
  mutate(ano = as.factor(ano)) %>%
  ggplot(aes(quinquennium, tmin)) +
  geom_boxplot() +
  scale_y_continuous(limits = c(10, 25)) +
  labs(y="Temperaturas Mínimas (°C)", x="Quinquênio")

  • Em termos de quartis não existe diferença clara ao longo dos quinquênios.
  • Existe uma forte intersecção ao longo dos quinquênios.
climas_inverno %>%
  mutate(ano = as.factor(ano)) %>%
  ggplot(aes(tmin)) +
  geom_density(alpha = .3) +
  facet_wrap(~ quinquennium) +
  labs(x="Temperaturas Mínimas (°C)", y="Densidade de Frequência")

  • Em termos de modas as distribuições ao longo dos quinquênios são relativamente similares

Não existe uma diferença clara ao longo dos quinquênios em termos de temperaturas mínimas.

Temperaturas Médias

climas_inverno %>%
  ggplot(aes(quinquennium, tmedia)) +
  stat_summary(aes(color="Mediana"),
               fun.y = median, fun.ymin = median, fun.ymax = median,
               geom = "crossbar", width = 0.5) +
  stat_summary(aes(color="Média"),
               fun.y = mean, fun.ymin = mean, fun.ymax = mean,
               geom = "crossbar", width = 0.5) +
  geom_jitter(alpha = 0.35) +
  scale_color_manual(values = colors) +
  scale_y_continuous(limits = c(15, 30)) +
  labs(y="Temperaturas Médias (°C)", x="Quinquênio")

  • É possível ver um decréscimo nas médias e medianas nos quinquênios de 2005 e 2010 em relação aos outros períodos.
climas_inverno %>%
  mutate(quinquennium = as.numeric(levels(quinquennium))[quinquennium]) %>%
  ggplot(aes(quinquennium, tmedia)) +
  geom_jitter(alpha = 0.35) +
  geom_smooth(method = 'loess', formula = 'y ~ x') +
  labs(y="Temperaturas Médias (°C)", x="Quinquênio") +
  scale_y_continuous(limits = c(15, 30)) +
  scale_x_continuous(breaks=seq(1995, 2015, 5))

  • A curva criada pelo método loess (moving average mais regressão polinomial) indica um decréscimo nos quinquênios de 2005 e 2010.
climas_inverno %>%
  group_by(quinquennium) %>%
  summarise(mean = mean(tmedia),
            sd = sd(tmedia),
            median = median(tmedia),
            mad = mad(tmedia)) %>%
  ungroup()
  • É possível a baixa na média e mediana das temperaturas médias nos quinquênios de 2005 e 2010.
  • O quinquênio começando em 2010 possui a menor dispersão de todos, tanto em desvio padrão como em desvio absoluto mediano.
climas_inverno %>%
  mutate(ano = as.factor(ano)) %>%
  ggplot(aes(quinquennium, tmedia)) +
  geom_boxplot() +
  scale_y_continuous(limits = c(0, 30)) +
  labs(y="Temperaturas Médias (°C)", x="Quinquênio")

  • É possível ver um decréscimo nos quartis dos quinquênios de 2005 e 2010 em relação aos outros quinquênios.
climas_inverno %>%
  ggplot(aes(tmedia)) +
  geom_density(alpha = .3) +
  facet_wrap(~ quinquennium) +
  labs(x="Temperaturas Médias (°C) por Quinquênios", y="Densidade de Frequência")

  • Nos quinquênios de 2005 e 2010 as distribuições estão mais assimétricas à direita (valores mais frequentes mais baixos) em relação aos outros quinquênios.

É possível perceber uma baixa nas temperaturas médias nos quinquênios de 2005 e 2010.


Conclusão


  • Nos quinquênios de 2005 e 2010, no período de inverno, houve um decréscimo nas temperaturas máximas e temperaturas médias em relação aos outros quinquênios.


Considerando temperaturas máximas e temperaturas médias nos quinquênios de 2005 e 2010, os invernos foram mais quentes


Chuva

O volume de chuvas tem diminuido em Campina Grande ao longo dos anos?

  • Começamos entendendo as distribuições dos dados semanais de chuva disponíveis no conjunto de dados.
climas %>% 
  filter(cidade == 'Campina Grande') %>%
  ggplot(aes(x = ano, y = chuva, group = ano)) + 
  geom_boxplot(alpha = .4, fill = "salmon") +
  scale_x_continuous(breaks=seq(min(climas$ano), max(climas$ano), 1)) +
  theme(axis.text.x = element_text(angle = 90, hjust = 1))

  • O IQR dos anos da década de 2010 está visivelmente menor do que o IQR dos anos da década de 2000. Como o 25-percentil está sempre bem próximo de zero devido à natureza da métrica sendo observada. Isso nos leva ao entendimento que essa última década teve um volume de chuvas reduzido em relação a anterior.

  • Alguns dos anos, como 2011 e 2004 possuem muitos outliers particularmente altos (exemplos pontuais de chuva semanal particularmente altos).

climas %>%
  filter(cidade == 'Campina Grande') %>%
  group_by(ano) %>%
  summarise(mean = mean(chuva),
            sd = sd(chuva),
            median = median(chuva),
            mad = mad(chuva)) %>%
  ungroup() %>%
  arrange(-sd)
  • Podemos ver que os anos de 2011 e 2004 tiveram alto grau de dispersão (standard deviation). Em outras palavras, nesses anos as chuvas semanais foram irregulares.

Agora que temos uma direção, desejamos uma visualização que nos indique o volume de chuvas durante a semana mais claramente.

climas %>%
  filter(cidade == "Campina Grande") %>%
  ggplot(aes(ano, chuva)) +
  geom_count() +
  geom_smooth(method = 'loess', formula = 'y ~ x') + # Utilizamos essa regressão polinomial para estudar o comportamento dos dados
  scale_x_continuous(breaks=seq(min(climas$ano), max(climas$ano), 1)) +
  theme(axis.text.x = element_text(angle = 90, hjust = 1)) +
  labs(y = "Volume de Chuvas Semanais", x = "Ano")

  • De acordo com os dados disponíveis, podemos observar que existe uma tendência de crescimento do volume de chuvas semanais até o período compreendido nos anos de 2008 e 2009. Após isso podemos observar uma tendência de diminuição do volume de chuva.
    • Para reafirmar essa tendência e obter uma curva mais interessante para nosso questionamento, podemos fazer uma agregação por ano de maneira a capturar o volume total de chuva em cada ano.
climas %>%
  filter(cidade == "Campina Grande") %>%
  group_by(ano) %>%
  summarise(chuva = sum(chuva)) %>%
  ungroup() %>%
  ggplot(aes(ano, chuva)) +
  geom_jitter() +
  geom_smooth(method = 'loess', formula = 'y ~ x') + # Utilizamos essa regressão polinomial para estudar o comportamento dos dados
  scale_x_continuous(breaks=seq(min(climas$ano), max(climas$ano), 1)) +
  theme(axis.text.x = element_text(angle = 90, hjust = 1)) +
  labs(y = "Volume de Chuva", x = "Ano")

  • Nesse momento então fica mais claro que, de acordo com os dados disponíveis, o volume de chuva é crescente até o momento em que acontece um pico no volume de chuva no período compreendido entre os anos de 2008 e 2009. Após esse período, há uma tendência de diminuição no volume de chuva com o passar dos anos.

Conclusão

  • O volume de chuvas tem diminuido em Campina Grande ao longo dos anos?

Não. De acordo com os dados disponíveis, observamos que há um aumento do volume de chuvas até o período compreendido pelos anos 2008 e 2009. Somente depois desse período observamos uma diminuição no volume de chuvas.