# Carregando as bibliotecas das principais funcionalidades

library(tidyverse)
library(here)
library(lubridate)
library(ggbeeswarm)
theme_set(theme_bw())
# Carregando o arquivo de base no dataframe (climas)

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", "Campi...
## $ semana <dttm> 1992-12-27, 1993-01-03, 1993-01-10, 1993-01-31, 1993-02-07,...
## $ tmedia <dbl> 26.13333, 26.11905, 25.76667, 25.74000, 26.31429, 26.28571, ...
## $ tmax   <dbl> 30.4, 32.4, 32.2, 32.0, 32.7, 32.7, 32.3, 32.3, 32.1, 31.2, ...
## $ tmin   <dbl> 20.7, 19.3, 19.7, 19.9, 19.6, 20.0, 20.4, 21.2, 19.0, 19.0, ...
## $ 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, ...
## $ mes    <dbl> 12, 1, 1, 1, 2, 2, 2, 2, 10, 11, 11, 11, 11, 12, 12, 12, 12,...
## $ ano    <dbl> 1992, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, ...

Temperatura

Onde é mais quente?

# Criando um dataframe (df1) apenas com os campos que são necessários para responder a questão.

df1 <- climas %>% select(cidade, tmedia, ano)

# Agora vamos agrupar e sumarizar os dados do dataframe, agrupando por cidade e sumarizando o maior valor da variável "tmedia", assim podemos apresentar que a cidade com a maior temperatura média é João Pessoa com 30.11 graus. O comando para obter essa informação foi:
  
df1 %>% group_by(cidade) %>% summarise(Maximo=max(tmedia))
## # A tibble: 2 x 2
##   cidade         Maximo
##   <chr>           <dbl>
## 1 Campina Grande   28.6
## 2 João Pessoa      30.1
# Para uma melhor visualização dos dados foi construído um gráfico de pontos onde é possível verificar as temperaturas médias das duas cidades - João Pessoa e Campina Gradne. Onde é possivel visualizar que todas as temperaturas médias de João Pessoa estão acima da de Campina Grande e que vamos encontrar apenas 5 valores acima de 30 grau na cidade de João Pessoa.

df1 %>% group_by(cidade,ano) %>% summarise(Maximo=max(tmedia)) %>% ggplot() + geom_point(aes(x=ano,y=Maximo,color=cidade)) +   theme(legend.position="bottom") + ggtitle("Gráfico das temperaturas médias por ano")

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

# Foi criado um dataframe (df2) apenas com os campos: cidade, semana, tmax e tmedia, para separar das demais informações da base de dados.

df2 <- climas %>% select(cidade, semana, tmax, tmedia)

# Para uma melhor análise, vamos construir um gráfico que possa representar as temperaturas máximas (em pontos preto) com a temperatura média (em linha vermelha), assim podemos verificar que as temperaturas máximas semanais são superiores das médias.

# Gráfico com os dados das temperaturas Máxima e Média das duas cidades.

df2 %>% ggplot() + geom_point(aes(x = semana, y = tmax), color = "blue") + geom_point(aes(x = semana, y = tmedia), color = "red", stat = "identity") + ggtitle("Gráfico das temperaturas médias e máximo") + facet_grid(.~cidade) + scale_y_continuous(name="Temperatura Máxima",breaks=seq(0,35,2))

# CONCLUSÃO: Podemos verificar que as temperaturas máximas estão sempre acima do valor da temperatura média, podemos dizer que esse valor máximo pode ser uma outliers.

Quais os meses mais quentes e mais frios?

# Foi criado um dataframe (df3) apenas com os dados que vamos trabalhar, ou seja, mes e tmedia.

df3 <- climas %>% select(cidade, mes, tmedia)

# Em seguida, vamos atualizar o dataframe aplicando agora as funções de agregação group_by e summarise, pegando o maior valor (max) da variável tmedia e agrupando por cidade e mês.

df3 <- df3 %>% group_by(cidade, mes) %>% summarise(Maximo=max(tmedia))

# Agora vamos ordenar o dataframe com a função arrange, colocando por ordem da coluna máximo (vindo da base tmedia).

df3 <- arrange(df3,desc(Maximo))
df3
## # A tibble: 24 x 3
## # Groups:   cidade [2]
##    cidade           mes Maximo
##    <chr>          <dbl>  <dbl>
##  1 João Pessoa        3   30.1
##  2 João Pessoa        2   30.1
##  3 João Pessoa        4   29.8
##  4 João Pessoa       12   29.6
##  5 João Pessoa        1   29.6
##  6 João Pessoa       11   29.4
##  7 João Pessoa        5   29.4
##  8 João Pessoa       10   29.2
##  9 João Pessoa        9   28.7
## 10 Campina Grande     3   28.6
## # ... with 14 more rows
# CONCLUSÃO:
# Analisando o valor da variável temperatura média, os meses mais quentes foram: Fevereiro e Março  com valores empatados de 30.1 graus na cidade de João Pessoa, já na cidade de Campina Grande, os meses mais quentes foram também Fevereiro e Março, com as temperaturas de 27.97 e 28.56 respectivamente.

# Agora vamos analisar os meses mais frios, ainda com base na variável de temperatura média. Vamos encontrar inicialmente em Campina Grande com as temperaturas de 24,31 e 23,94 referente aos meses de agosto e julho respectivamente. Já na cidade de João Pessoa os meses mais frios foram julho e agosto, com valores de 27.06 e 27.52 respectivamente.

# Um gráfico de coluna foi construído para representar os valores da variável temperatura média em relação aos meses.

df3 %>% ggplot() + geom_col(aes(x=mes, y=Maximo, fill = cidade), position = "dodge") + scale_x_continuous(name="Mês",breaks=seq(1,12,1))+ scale_y_continuous(name="Temperatura Média",breaks=seq(10,30,10)) +   theme(legend.position="bottom") + ggtitle("Gráfico das temperaturas máximas por mês")

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

# Foi criado um dataframe (df4) apenas com os dados que vamos trabalhar, ou seja, cidade, semana, mes e tmedia, foi aplicado ainda um filtro para pegar apenas a cidade de Campina Grande e o mês 6, que é o mês do São João.

df4 <- climas %>% filter(cidade=="Campina Grande", mes==6) %>% select(cidade, semana, mes, tmedia)

# Agora vamos classificar os dados em ordem crescente por tmedia, para pegar o menor valor, e localizar a semana que ele ocorreu.

df4 <- arrange(df4,tmedia)

# Visualizando apenas a primeira linha do dataframe (df4)

df4[1,]
## # A tibble: 1 x 4
##   cidade         semana                mes tmedia
##   <chr>          <dttm>              <dbl>  <dbl>
## 1 Campina Grande 2008-06-29 00:00:00     6   21.3
# CONCLUSÃO: Podemos concluir que a semana de 29/06/2008 foi a semana mais fria com 21.33 graus em Campina Grande, segundo os dados.

Chuva

Quanto chove por semana em JP e CG?

# Foi criado um dataframe (df5) apenas com os dados que vamos trabalhar, ou seja, cidade, semana, mes e chuva.

df5 <- climas %>% select(cidade, semana, mes, chuva)

# Como existem cerca de 2.748 registros de leitura de chuva por semana, para a cidade de JP e CG, precisamos agrupar esses registros em um valor que possa melhor representar, sendo assim, vamos calcular o valor média de chuva por cidade.

df5 <- df5 %>% group_by(cidade) %>% summarise(MediaChuva=mean(chuva))
df5
## # A tibble: 2 x 2
##   cidade         MediaChuva
##   <chr>               <dbl>
## 1 Campina Grande       14.0
## 2 João Pessoa          32.6
# Em seguida vamos construir um gráfico para melhor representar esses valores.

df5 %>% ggplot() + geom_col(aes(x=cidade, y=MediaChuva, fill = cidade), position = "dodge") + geom_text(aes(x=cidade, y=MediaChuva, label=signif(MediaChuva, digits = 5)), position = position_stack(vjust = 0.5), size=5) + theme(legend.position="bottom") + ggtitle("Gráfico da média de Chuva por cidade")

# CONCLUSÃO:
# Diante dos dados sumarizados é possível verificar que João Pessoa apresenta uma média de chuva por semana no valor de 32.65, já em Campina Grande essa média é menor com valor de 13.99.

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?

# Foi criado um dataframe (df6) apenas com os dados que vamos trabalhar, ou seja, cidade, chuva e tmedia.

df6 <- climas %>% select(cidade, chuva, tmedia)

# Vamos agora criar um outro dataframe (df6geral) onde valor agrupar por cidade e calcular o Desvio Padrão da Chuva e da Tmedia, e as médias da Chuva e da Tmedia. 

df6geral <- climas %>% group_by(cidade) %>% summarise(DesvPadChuva=sd(chuva), MediaChuva=mean(chuva) ,DesvPadTemp=sd(tmedia), MediaTemp=mean(tmedia))

df6geral
## # A tibble: 2 x 5
##   cidade         DesvPadChuva MediaChuva DesvPadTemp MediaTemp
##   <chr>                 <dbl>      <dbl>       <dbl>     <dbl>
## 1 Campina Grande         21.7       14.0        1.53      24.7
## 2 João Pessoa            44.5       32.6        1.18      27.7
# CONCLUSÃO: O Desvio Padrão da Temperatura é menor que o Desvio Padrão da Chuva, ou seja, a vairação dos valores da Temperatura é menor em relação a sua média do que os valores da chuva em relação a sua média. A curva de distribuição da temperatura é mais estreita em relação a da chuva.

No geral, onde chove mais?

# Foi criado um dataframe (df7) apenas com os dados que vamos trabalhar, ou seja, cidade e chuva.

df7 <- climas %>% select(cidade, chuva)

df7 <- df7 %>% group_by(cidade) %>% summarise(Media=mean(chuva))

# Agora vamos criar um gráfico para melhor representar por cidade a média da chuva.

df7 %>% ggplot() + geom_bar(aes(x=cidade, y=Media, fill = cidade), stat="identity") + ggtitle("Gráfico da Média da chuva por cidade") + geom_text(aes(x=cidade,y=Media,label=signif(Media, digits = 5)), position = position_stack(vjust = 0.5), size=5)

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

# Foi criado um dataframe (df8) apenas com os dados que vamos trabalhar, ou seja, mes, tmedia, chuva.

df8 <- climas %>% select(mes, tmedia, chuva)

# Agora vamos criar um outro dataframe (df8geral) com o desvio padrão e a média da chuva e temperatura, agrupados pelo mês.

df8geral <- df8 %>% group_by(mes) %>% summarise(sdchuva=sd(chuva),mdchuva=mean(chuva),sdtemp=sd(tmedia),mdtemp=mean(tmedia))

df8geral
## # A tibble: 12 x 5
##      mes sdchuva mdchuva sdtemp mdtemp
##    <dbl>   <dbl>   <dbl>  <dbl>  <dbl>
##  1     1   26.9    15.1    1.53   27.3
##  2     2   31.9    21.2    1.64   27.4
##  3     3   37.4    27.7    1.70   27.5
##  4     4   42.8    40.6    1.75   26.9
##  5     5   48.2    42.7    1.82   26.2
##  6     6   56.3    55.4    1.90   24.8
##  7     7   41.1    41.9    1.89   24.4
##  8     8   26.4    23.2    1.85   24.7
##  9     9   23.6    11.1    1.68   25.7
## 10    10    8.59    5.44   1.43   26.5
## 11    11    6.68    3.75   1.35   27.0
## 12    12   12.2     6.27   1.37   27.3
#CONCLUSÃO: Podemos verificar que existe uma variação em todos os meses tanto na média da chuva quanto na média da temperatura. Isso também vale para identificar o Desvio Padrão que tanto na chuva como na temperatura existe uma variação.