Com base no arquivo de dados (no diretório data) responda as questões abaixo, gerando um relatório final com as respostas. Cada resposta deve gerar tabelas e/ou gráficos para apresentar os resultados obtidos, além de uma justificativa para a escolha de métricas, estatísticas e visualizações. Vocês podem se basear no arquivo R Markdown gerado em sala (no diretório reports). O relatório final deve ser adicionado ao repositório do seu lab (por exemplo, um arquivo PDF).
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.4 ✔ readr 2.1.5
## ✔ forcats 1.0.0 ✔ stringr 1.5.1
## ✔ ggplot2 3.5.0 ✔ tibble 3.2.1
## ✔ lubridate 1.9.3 ✔ tidyr 1.3.1
## ✔ purrr 1.0.2
## ── 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 C:/Users/s701257454/Documents/Mestrado/FPCC2/Lab 02/fpcc2-lab-2-matheusarauj
library(lubridate)
library(ggbeeswarm)
theme_set(theme_bw())
climas = read_csv(here::here("data/clima_cg_jp-semanal.csv"),
col_types = "cTdddddd")
glimpse(climas)
## Rows: 2,748
## Columns: 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, 19…
## $ 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.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, 199…
climas = climas %>%
mutate(temp_anterior = lag(tmedia, n = 1))
agrupa_resultados_por_cidade <- function(dff) {
dpr <- dff %>%
group_by(cidade) %>%
summarise(mens_media = mean(tmedia),
mens_median = median(tmedia))
return(dpr)
}
filtra_climas_por_temporada <- function (dff, conjunto) {
dpr <- filter(dff, mes %in% conjunto)
return(dpr)
}
monta_grafico_por_cidade <- function(dff) {
dpr <- ggplot(dff, aes(reorder(cidade, mens_media), mens_media, fill=cidade)) +
geom_bar(stat = 'identity') +
geom_point(aes(y=mens_median)) +
theme_bw() +
theme(legend.position = "none") +
xlab('Região') + ylab('Temperatura média') +
labs(title = "Temperatura média e mediana por região")
return(dpr)
}
monta_boxplot_por_cidade <- function(dados, categoria, valor_numerico, categoria1, categoria2, tituloy, reducao = 0.5) {
# Criar o gráfico de boxplot
p <- ggplot(dados, aes_string(x = categoria, y = valor_numerico, fill = categoria)) +
geom_boxplot(width = reducao) +
labs(x = "Cidade", y = tituloy, fill = categoria) +
scale_fill_manual(values = c("Campina Grande" = "lightblue", "João Pessoa" = "lightgreen")) +
theme_minimal()
return(p)
}
monta_boxplot_por_mes <- function(dados, categoria, valor_numerico, reducao = 0.5) {
dados[[categoria]] <- factor(dados[[categoria]], levels = c("Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho",
"Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"))
cores <- c("#FBB4AE", "#FDCDAC", "#FED9A6", "#FFFFCC", "#F2F2F2", "#E5D8BD",
"#CCEBC5", "#B3E2CD", "#B3CDE3", "#CBD5E8", "#CBD0E8", "#DECBE4")
# Criar o gráfico de boxplot
p <- ggplot(dados, aes_string(x = categoria, y = valor_numerico, fill = categoria)) +
geom_boxplot(width = reducao) +
labs(x = "Mês", y = "Temperatura (°C)", fill = categoria) +
scale_fill_manual(values = cores) +
guides(fill = "none") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
return(p)
}
adiciona_coluna_nome_mes <- function(dff) {
dpr <- dff %>%
mutate(nome_mes = case_when(
mes %in% c("1") ~ "Janeiro",
mes %in% c("2") ~ "Fevereiro",
mes %in% c("3") ~ "Março",
mes %in% c("4") ~ "Abril",
mes %in% c("5") ~ "Maio",
mes %in% c("6") ~ "Junho",
mes %in% c("7") ~ "Julho",
mes %in% c("8") ~ "Agosto",
mes %in% c("9") ~ "Setembro",
mes %in% c("10") ~ "Outubro",
mes %in% c("11") ~ "Novembro",
mes %in% c("12") ~ "Dezembro"
))
return(dpr)
}
monta_grafico_linha <- function(dff) {
dpr <- ggplot(dff, aes(x = semana, y = chuva, color = cidade)) +
geom_line() +
labs(x = "", y = "Chuva (mm)", title = "Índice Pluviométrico por Cidade") +
theme_minimal() +
theme(legend.position = "top") + # Posição da legenda
guides(color = guide_legend(title = NULL))
return(dpr)
}
filtra_climas_por_ano <- function (dff, conjunto) {
dpr <- filter(dff, ano %in% conjunto)
return(dpr)
}
monta_grafico_correlacao <- function(dff) {
dpr <- ggplot(dff, aes(x = temp_anterior, y = tmedia)) +
geom_point() +
geom_smooth(method = "lm", se = FALSE, color = "red") +
labs(x = "Temperatura Semana Anterior (°C)", y = "Temperatura Semana Atual (°C)", title = "Correlação entre Temperatura Semana Atual e Temperatura Semana Anterior") +
theme_minimal()
return(dpr)
}
monta_grafico_correlacao_chuva_temp <- function(dff) {
dpr <- ggplot(dff, aes(x = chuva, y = tmedia)) +
geom_point() +
geom_smooth(method = "lm", se = FALSE, color = "red") +
labs(x = "Chuva (mm)", y = "Temperatura (°C)", title = "Correlação entre Chuva e Temperatura nas semanas em que choveu") +
theme_minimal()
return(dpr)
}
filtra_climas_por_cidade <- function (dff, conjunto) {
dpr <- filter(dff, cidade %in% conjunto)
return(dpr)
}
filtra_climas_por_chuva <- function (dff) {
dpr <- filter(dff, chuva > 0.0)
return(dpr)
}
Qual a cidade é mais quente? Isso muda se considerarmos apenas o período de janeiro e fevereiro (pico do verão)?
Considerando apenas temperaturas médias e medianas podemos observar os seguintes valores:
agrupamento_por_cidade <- agrupa_resultados_por_cidade(climas)
print(agrupamento_por_cidade)
## # A tibble: 2 × 3
## cidade mens_media mens_median
## <chr> <dbl> <dbl>
## 1 Campina Grande 24.7 25.0
## 2 João Pessoa 27.7 27.8
print(monta_grafico_por_cidade(agrupamento_por_cidade))
Analisando uma distribuição mais precisa, e sem o viés de outliers, podemos observar os seguintes box-plots:
print(monta_boxplot_por_cidade(climas, "cidade", "tmedia", "João Pessoa", "Campina Grande", "Temperatura (°C)"))
## Warning: `aes_string()` was deprecated in ggplot2 3.0.0.
## ℹ Please use tidy evaluation idioms with `aes()`.
## ℹ See also `vignette("ggplot2-in-packages")` for more information.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
Com isso, podemos considerar que João Pessoa é a cidade mais quente.
Analisando agora apenas o pico de verão (Janeiro e Fevereiro):
climas_verao <- filtra_climas_por_temporada(climas, c("1", "2"))
agrupamento_por_cidade_verao <- agrupa_resultados_por_cidade(climas_verao)
print(agrupamento_por_cidade_verao)
## # A tibble: 2 × 3
## cidade mens_media mens_median
## <chr> <dbl> <dbl>
## 1 Campina Grande 25.9 25.9
## 2 João Pessoa 28.7 28.7
print(monta_grafico_por_cidade(agrupamento_por_cidade_verao))
Novamente, sem o viés de outliers, podemos observar os seguintes box-plots:
print(monta_boxplot_por_cidade(climas_verao, "cidade", "tmedia", "João Pessoa", "Campina Grande", "Temperatura (°C)"))
Com isso, podemos concluir que João Pessoa é uma cidade ainda mais
quente no pico de verão.
Quais os meses mais quentes e mais frios? Como você descreveria a temperatura das festas juninas das cidades nos últimos anos?
Podemos observar a distribuição de temperaturas com os seguintes box-plots:
climas_com_nome_mes <- adiciona_coluna_nome_mes(climas)
print(monta_boxplot_por_mes(climas_com_nome_mes, "nome_mes", "tmedia"))
Os meses de Dezembro, Janeiro, Fevereiro e Março podem ser definidos
como os mais quentes; enquanto os meses de Junho, Julho e Agosto podem
ser considerados os mais frios.
Historicamente, as festas juninas acontecem entre os meses de Junho e Julho, o que indica que 75% das temperaturas médias das semanas desses meses atingem até 26 °C.
Quanto chove por semana em JP e CG? Descreva a distribuição do volume de chuvas para as cidades?
Podemos observar o índice pluviométrico por semana ao longo do tempo nas cidades de João Pessoa e Campina Grande no gráfico a serguir:
print(monta_grafico_linha(climas))
Realizando um agrupamento desses dados, podemos ter outra observação com os seguintes box-plots:
print(monta_boxplot_por_cidade(climas, "cidade", "chuva", "João Pessoa", "Campina Grande", "Chuva (mm)"))
Pode-se afirmar que há uma maior concentração de chuvas na cidade de João Pessoa.
Qual a relação entre a temperatura de uma semana e a temperatura da semana anterior (descreva para as duas cidades)?
A correlação entre o índice pluviométrico da semana atual e o índice pluviométrico da semana anterior na cidade de Campina Grande pode ser observado no seguinte gráfico:
temperatura_campina_grande <- filtra_climas_por_cidade(climas, c("Campina Grande"))
temperatura_campina_grande <- temperatura_campina_grande[-1, ]
resultado_campina_grande <- monta_grafico_correlacao(temperatura_campina_grande)
print(resultado_campina_grande)
## `geom_smooth()` using formula = 'y ~ x'
Utilizando o método de Spearman, por não se observar uma distribuição
normal entre os dados, conseguimos definir a correlação como forte.
print(paste("Correlacao:", cor(temperatura_campina_grande$temp_anterior, temperatura_campina_grande$tmedia, method = "spearman")))
## [1] "Correlacao: 0.856283925237571"
Realizando o mesmo método para a cidade de João Pessoa:
temperatura_joao_pessoa <- filtra_climas_por_cidade(climas, c("João Pessoa"))
temperatura_joao_pessoa <- temperatura_joao_pessoa[-1, ]
resultado_joao_pessoa <- monta_grafico_correlacao(temperatura_joao_pessoa)
print(resultado_joao_pessoa)
## `geom_smooth()` using formula = 'y ~ x'
Utilizando o método de Spearman, por não se observar uma distribuição
normal entre os dados, conseguimos definir a correlação como forte.
print(paste("Correlacao:", cor(temperatura_joao_pessoa$temp_anterior, temperatura_joao_pessoa$tmedia, method = "spearman")))
## [1] "Correlacao: 0.860062308643224"
Qual a relação entre temperatura e chuvas nas semanas em que choveu (descreva para as duas cidades)?
A correlação entre o índice pluviométrico e temperatura nas semanas em que choveu na cidade de Campina Grande pode ser observado no seguinte gráfico:
temperatura_campina_grande_com_chuva <- filtra_climas_por_chuva(temperatura_campina_grande)
resultado_campina_grande_com_chuva <- monta_grafico_correlacao_chuva_temp(temperatura_campina_grande_com_chuva)
print(resultado_campina_grande_com_chuva)
## `geom_smooth()` using formula = 'y ~ x'
Utilizando o método de Spearman, por não se observar uma distribuição normal entre os dados, conseguimos definir a correlação como negativa moderada.
print(paste("Correlacao:", cor(temperatura_campina_grande_com_chuva$chuva, temperatura_campina_grande_com_chuva$tmedia, method = "spearman")))
## [1] "Correlacao: -0.448274589326887"
Realizando o mesmo método para a cidade de João Pessoa:
temperatura_joao_pessoa_com_chuva <- filtra_climas_por_chuva(temperatura_joao_pessoa)
resultado_joao_pessoa_com_chuva <- monta_grafico_correlacao_chuva_temp(temperatura_joao_pessoa_com_chuva)
print(resultado_joao_pessoa_com_chuva)
## `geom_smooth()` using formula = 'y ~ x'
Utilizando o método de Spearman, por não se observar uma distribuição normal entre os dados, conseguimos definir a correlação como negativa moderada.
print(paste("Correlacao:", cor(temperatura_joao_pessoa_com_chuva$chuva, temperatura_joao_pessoa_com_chuva$tmedia, method = "spearman")))
## [1] "Correlacao: -0.45928635996829"