library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.2     ✔ readr     2.1.4
## ✔ forcats   1.0.0     ✔ stringr   1.5.0
## ✔ ggplot2   3.4.2     ✔ tibble    3.2.1
## ✔ lubridate 1.9.2     ✔ tidyr     1.3.0
## ✔ purrr     1.0.1     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(here)
## here() starts at /Users/olaisaac/mestrado/fpcc2/fpcc2-lab2-matheusarauj
library(lubridate)
library(ggbeeswarm)
library(dplyr)
library(ggplot2)
theme_set(theme_bw())

dff <- read_csv("data/clima_cg_jp-semanal.csv", 
                  col_types = "cTdddddd")

average_temperature_by_city <- function(data) {
  avg_temperature <- aggregate(tmedia ~ cidade, data, mean)
  return(avg_temperature)
}
average_temperature_by_city_and_two_months <- function(data) {
  avg_temperature <- aggregate(tmedia ~ cidade, data[data$mes %in% c(1, 2), ], mean)
  return(avg_temperature)
}

average_temperature_by_city_and_month <- function(data) {
  agg_data <- aggregate(tmedia ~ mes, data, mean)
  
  agg_data <- agg_data[order(agg_data$tmedia), ]
  
  return(agg_data)
}
distribution_of_avg_precipitation_by_week_and_city <- function(data) {
  agg_data <- aggregate(chuva ~ cidade + semana, data, mean)
  
  plot <- ggplot(agg_data, aes(x = factor(semana), y = chuva, fill = cidade)) +
    geom_bar(stat = "identity", position = "dodge") +
    xlab("Week") +
    ylab("Average Precipitation") +
    ggtitle("Average Precipitation by Week and City") +
    theme(plot.title = element_text(hjust = 0.5))
  return(plot)
}

avg_precipitation_by_city <- function(data) {
  agg_data <- aggregate(chuva ~ cidade, data, mean)
  
  return(agg_data)
}

temperature_relationship <- function(data, city) {
  city_data <- subset(data, cidade == city)
  
  city_data$prev_avg_temperature <- lag(city_data$tmedia, 1)

  corr <- cor(city_data$prev_avg_temperature, city_data$tmedia, use = "complete.obs")
  
  plot(city_data$prev_avg_temperature, city_data$tmedia, 
       xlab = "Previous week's average temperature", ylab = "This week's average temperature",
       main = paste("", ""))
  
  return(corr)
}
precipitation_vs_temperature <- function(df, city){
  df_sub <- df[df$cidade == city & df$chuva > 0, ]
  
  corr <- cor(df_sub$chuva, df_sub$tmedia)
  
  plot(df_sub$tmedia, df_sub$chuva, xlab = "Temperature", ylab = "Average Precipitation", main = paste0("Relationship Between Precipitation and Temperature in ", city))
  
  return(corr)
}

Q1: Qual a cidade é mais quente? Isso muda se considerarmos apenas o período de janeiro e fevereiro (pico do verão)?

avg_temperature <- average_temperature_by_city(dff)
print(avg_temperature)
##           cidade   tmedia
## 1 Campina Grande 24.69077
## 2    João Pessoa 27.65318

Considerando a temperatura média de todo o período, a cidade de João Pessoa é a mais quente entre as duas.

avg_temperature <- average_temperature_by_city_and_two_months(dff)
print(avg_temperature)
##           cidade   tmedia
## 1 Campina Grande 25.85547
## 2    João Pessoa 28.65027

Considerando apenas os meses 1 e 2, João Pessoa continua sendo a cidade mais quente entre as duas.

Q2: Quais os meses mais quentes e mais frios? Como você descreveria a temperatura das festas juninas das cidades nos últimos anos?

avg_temperature <- average_temperature_by_city_and_month(dff)
print(avg_temperature)
##    mes   tmedia
## 7    7 24.35864
## 8    8 24.74613
## 6    6 24.82213
## 9    9 25.68724
## 5    5 26.16805
## 10  10 26.53556
## 4    4 26.91009
## 11  11 27.03070
## 1    1 27.28775
## 12  12 27.34363
## 2    2 27.44452
## 3    3 27.47566

Considerando as temperaturass médias de todo o período, os meses mais frios são Julho, Agosto e Junho. Enquanto Março, Fevereiro e Dezembro são os meses mais quentes. Eu consideraria o período junino como o mais frio do ano, já que compreende 2 dos meses mais frios do ano: Junho e Julho.

Q3: Quanto chove por semana em JP e CG? Descreva a distribuição do volume de chuvas para as cidades?

avg_precipitation <- avg_precipitation_by_city(dff)
print(avg_precipitation)
##           cidade    chuva
## 1 Campina Grande 13.99730
## 2    João Pessoa 32.64849

Segundo os dados informados, esta é a média semanal de chuva das duas cidades.

avg_precipitation <- distribution_of_avg_precipitation_by_week_and_city(dff)
print(avg_precipitation)

Segundo os dados informados, esta é a distribuição semanal de chuva das duas cidades.

Q4: Qual a relação entre a temperatura de uma semana e a temperatura da semana anterior (descreva para as duas cidades)?

avg_temperature <- temperature_relationship(dff, "Campina Grande")

print(avg_temperature)
## [1] 0.880168

Segundo os dados, esta é a relação entre a temperatura da semana atual com a temperatura da semana anterior na cidade de Campina Grande. Como visto no gráfico, os atributos apresentam uma correlação forte de 0.880168.

avg_temperature <- temperature_relationship(dff, "João Pessoa")

print(avg_temperature)
## [1] 0.8593719

Segundo os dados, esta é a relação entre a temperatura da semana atual com a temperatura da semana anterior na cidade de João Pessoa. Como visto no gráfico, os atributos apresentam uma correlação forte de 0.859371.

Q5: Qual a relação entre temperatura e chuvas nas semanas em que choveu (descreva para as duas cidades)?

avg_precipitation <- precipitation_vs_temperature(dff, "Campina Grande")

print(avg_precipitation)
## [1] -0.3354837

Segundo os dados, o resultado da correlação entre chuva e temperatura na cidade de Campina Grande foi igual a -0.335487 e segundo o gráfico os dois atributos apresentam uma correlação fraca

avg_precipitation <- precipitation_vs_temperature(dff, "João Pessoa")

print(avg_precipitation)
## [1] -0.4244459

Segundo os dados, o resultado da correlação entre chuva e temperatura na cidade de João Pessoa foi igual a -0.424445 e segundo o gráfico os dois atributos apresentam uma correlação moderada.