100 anos do posto meteorológico da ESALQ
No dia 31 de dezembro de 2016 o Posto Meteorológico da ESALQ/USP completou 100 anos de funcionamento. Em “comemoração” a este belo banco de dados, pretendo fazer alguns gráficos para analisar, sem muita pretensão, como o clima variou de lá pra cá.
No site do Posto podemos encontrar os dados nas escalas diária e mensal. Separei apenas os dados mensais para vermos aqui. Fiz algumas poucas adaptações no banco para poder pelo menos iniciar a análise. Não considerei nenhuma consistência e preenchimento de falhas (tem bastante, o que é completamente compreensível!).
Minha primeira movimentação é criar colunas para identificar o ano e as décadas, precisaremos delas mais para frente.
if (!require("pacman")) install.packages("pacman")
pacman::p_load(readr, dplyr, RcppRoll, lubridate, stringr, ggplot2, ggridges)
clima <- read_csv2("https://raw.githubusercontent.com/italocegatta/italocegatta.github.io_source/master/content/dados/posto_esalq.csv") %>%
mutate(
data = dmy(data),
ano = year(data),
decada_label = cut(ano, breaks = seq(1910, 2020, by = 10), dig.lab = 100, right = FALSE),
decada = as.numeric(str_extract(decada_label, "[0-9]+"))
)
clima
## # A tibble: 1,200 x 9
## data prec ur t_max t_min t_med ano decada_label decada
## <date> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <fct> <dbl>
## 1 1917-01-01 296. NA 28.1 18.3 23.2 1917 [1910,1920) 1910
## 2 1917-02-01 136. NA 28.3 18.4 23.3 1917 [1910,1920) 1910
## 3 1917-03-01 58.9 NA 28.6 16.9 22.7 1917 [1910,1920) 1910
## 4 1917-04-01 116. NA 26.7 13.9 20.3 1917 [1910,1920) 1910
## 5 1917-05-01 58.5 NA 22.2 8.6 15.4 1917 [1910,1920) 1910
## 6 1917-06-01 13 NA 23.3 6.3 14.8 1917 [1910,1920) 1910
## 7 1917-07-01 13.3 NA 24 7.7 15.9 1917 [1910,1920) 1910
## 8 1917-08-01 5.4 NA 26.4 7.5 16.9 1917 [1910,1920) 1910
## 9 1917-09-01 62.2 NA 27.8 12.2 20 1917 [1910,1920) 1910
## 10 1917-10-01 58.4 NA 27.6 13.8 20.7 1917 [1910,1920) 1910
## # ... with 1,190 more rows
Vou começar pela precipitação mensal. Para visualizar a distribuição dos dados a melhor abordagem é fazer um histograma. Vamos criar um histograma com intervalo de classe de 15 mm de chuva para cada mês do ano considerando os 100 anos de dados.
clima %>%
mutate(mes = month(data)) %>%
ggplot(aes(prec, rev(factor(mes)), height = ..density..)) +
geom_density_ridges(stat = "binline", binwidth = 15, fill = "grey20", color = "grey90") +
labs(
x = "Chuva mensal (mm)",
y = "Mês"
) +
scale_fill_viridis_c() +
scale_x_continuous(breaks = seq(0,700, 30)) +
scale_y_discrete(labels = format(ISOdate(2000, 12:1, 1), "%b")) +
theme_bw(16) +
theme(panel.grid.minor = element_blank())
E qual a década que mais choveu? Como variou a chuva anual ao longo desses 100 anos? Primeiro precisamos calcular quanto choveu em cada década. Em seguida vamos calcular quanto choveu em cada ano e juntar as duas informações. No gráfico abaixo, representei a média da década numa linha de tendência suavizada. Notem que a seca de 2014 Não foi a maior do século, houveram outros 4 anos mais secos desde de 1917.
prec_decada <- clima %>%
group_by(decada, ano) %>%
summarise(prec = sum(prec)) %>%
group_by(decada) %>%
summarise(prec = mean(prec))
clima %>%
group_by(decada, ano) %>%
summarise(prec = sum(prec)) %>%
ungroup() %>%
ggplot(aes(ano, prec)) +
geom_line() +
geom_point() +
geom_smooth(
data = prec_decada,
aes(decada + 5, prec)
) +
labs(
x = "Ano",
y = "Precipitação anual (mm)"
) +
scale_x_continuous(breaks = seq(1917, 2017, 10)) +
theme_bw(16)
Passando para a temperatura média, podemos construir um painel com a densidade de probabilidade para valores que variam entre 12,5 a 27,7 (amplitude dos dados).
ggplot(clima, aes(t_med)) +
geom_density(fill = "cadetblue", alpha = 0.8) +
facet_wrap(~ano) +
labs(
x = "Temperatura média mensal (°C)",
y = "Densidade"
) +
theme_bw(9)
Considerando as décadas, podemos fazer um gráfico um pouco mais simples para facilitar a visualização. Agora, cada década tem sua distribuição de probabilidade. Aparentemente, a calda da direita está se deslocando para maiores temperaturas.
ggplot(clima, aes(t_med, factor(decada), fill = ..x..)) +
geom_density_ridges_gradient(show.legend = FALSE, color = "white") +
labs(
x = "Temperatura média mensal (°C)",
y = "Década"
) +
scale_fill_viridis_c() +
theme_bw(9)
E quanto a variação da temperatura nos meses do ano? Quanto podemos esperar de frio ou calor em cada mês?
clima %>%
mutate(mes = month(data)) %>%
ggplot(aes(t_med, rev(factor(mes)), fill = ..x..)) +
geom_density_ridges_gradient(color = "white", show.legend = FALSE) +
labs(
x = "Temperatura média mensal (°C)",
y = "Mês"
) +
scale_fill_viridis_c() +
scale_x_continuous(breaks = seq(0,40, 4)) +
scale_y_discrete(labels = format(ISOdate(2000, 12:1, 1), "%b")) +
theme_bw(16)
Podemos também visualizar a amplitude da temperatura máxima e mínima ao longo dos anos.
ggplot(clima, aes(month(data))) +
geom_ribbon(aes(ymax = t_max, ymin = t_min), alpha = 0.8) +
facet_wrap(~ano) +
labs(
x = "Mês",
y = "Amplitude da temperatura mínima e máxima mensal (°C)"
) +
scale_x_continuous(
breaks = seq(1, 12, 2),
labels = format(ISOdate(2000, seq(1, 12, 2), 1), "%b")
) +
theme_bw(10)
Para finalizar, vamos calcular a média móvel de 30 anos para a temperatura média. Sem dúvida, dos anos 90 pra cá a temperatura média só vem subindo. A minha grande dúvida é: como será que a produção de alimentos e biomassa vai se comportar com essa mudança de clima? Será um grande desafio para a nossa geração, sem dúvida.
clima_normal <- clima %>%
filter(!is.na(t_med)) %>%
group_by(ano = year(data)) %>%
summarise(t_med = mean(t_med, na.rm = TRUE)) %>%
ungroup() %>%
mutate(t_med_movel = roll_mean(t_med, 30, align = "right", fill = NA)) %>%
filter(!is.na(t_med_movel))
ggplot(clima_normal, aes(t_med_movel, ano)) +
geom_path() +
geom_point(shape = 21, color = "white", fill = "black", alpha = 0.8, size = 4) +
labs(
x = "Média móvel da temperatura média (°C)",
y = "Ano"
) +
scale_y_reverse(breaks = seq(1940, 2017, by = 5)) +
theme_bw(16)
Caso tenha alguma dúvida ou sugestão sobre o post, fique à vontade para fazer um comentário ou me contatar por E-mail.
sessioninfo::session_info(c("readr", "dplyr", "ggplot2", "RcppRoll", "lubridate", "stringr", "ggridges"))
## - Session info ----------------------------------------------------------
## setting value
## version R version 3.5.3 (2019-03-11)
## os Windows 10 x64
## system x86_64, mingw32
## ui RTerm
## language (EN)
## collate Portuguese_Brazil.1252
## ctype Portuguese_Brazil.1252
## tz America/Sao_Paulo
## date 2019-08-25
##
## - Packages --------------------------------------------------------------
## package * version date lib source
## assertthat 0.2.1 2019-03-21 [1] CRAN (R 3.5.3)
## backports 1.1.4 2019-04-10 [1] CRAN (R 3.5.3)
## BH 1.69.0-1 2019-01-07 [1] CRAN (R 3.5.2)
## cli 1.1.0 2019-03-19 [1] CRAN (R 3.5.3)
## clipr 0.7.0 2019-07-23 [1] CRAN (R 3.5.3)
## colorspace 1.4-1 2019-03-18 [1] CRAN (R 3.5.3)
## crayon 1.3.4 2017-09-16 [1] CRAN (R 3.5.1)
## digest 0.6.20 2019-07-04 [1] CRAN (R 3.5.3)
## dplyr * 0.8.3 2019-07-04 [1] CRAN (R 3.5.3)
## ellipsis 0.2.0.1 2019-07-02 [1] CRAN (R 3.5.3)
## fansi 0.4.0 2018-10-05 [1] CRAN (R 3.5.1)
## ggplot2 * 3.2.1 2019-08-10 [1] CRAN (R 3.5.3)
## ggridges * 0.5.1 2018-09-27 [1] CRAN (R 3.5.2)
## glue 1.3.1 2019-03-12 [1] CRAN (R 3.5.3)
## gtable 0.3.0 2019-03-25 [1] CRAN (R 3.5.3)
## hms 0.5.0 2019-07-09 [1] CRAN (R 3.5.3)
## labeling 0.3 2014-08-23 [1] CRAN (R 3.5.0)
## lattice 0.20-38 2018-11-04 [2] CRAN (R 3.5.3)
## lazyeval 0.2.2 2019-03-15 [1] CRAN (R 3.5.3)
## lubridate * 1.7.4 2018-04-11 [1] CRAN (R 3.5.1)
## magrittr 1.5 2014-11-22 [1] CRAN (R 3.5.1)
## MASS 7.3-51.1 2018-11-01 [2] CRAN (R 3.5.3)
## Matrix 1.2-17 2019-03-22 [1] CRAN (R 3.5.3)
## mgcv 1.8-28 2019-03-21 [1] CRAN (R 3.5.3)
## munsell 0.5.0 2018-06-12 [1] CRAN (R 3.5.1)
## nlme 3.1-137 2018-04-07 [2] CRAN (R 3.5.3)
## pillar 1.4.2 2019-06-29 [1] CRAN (R 3.5.3)
## pkgconfig 2.0.2 2018-08-16 [1] CRAN (R 3.5.1)
## plogr 0.2.0 2018-03-25 [1] CRAN (R 3.5.1)
## plyr 1.8.4 2016-06-08 [1] CRAN (R 3.5.1)
## purrr 0.3.2 2019-03-15 [1] CRAN (R 3.5.3)
## R6 2.4.0 2019-02-14 [1] CRAN (R 3.5.2)
## RColorBrewer 1.1-2 2014-12-07 [1] CRAN (R 3.5.0)
## Rcpp 1.0.2 2019-07-25 [1] CRAN (R 3.5.3)
## RcppRoll * 0.3.0 2018-06-05 [1] CRAN (R 3.5.2)
## readr * 1.3.1 2018-12-21 [1] CRAN (R 3.5.2)
## reshape2 1.4.3 2017-12-11 [1] CRAN (R 3.5.1)
## rlang 0.4.0 2019-06-25 [1] CRAN (R 3.5.3)
## scales 1.0.0 2018-08-09 [1] CRAN (R 3.5.1)
## stringi 1.4.3 2019-03-12 [1] CRAN (R 3.5.3)
## stringr * 1.4.0 2019-02-10 [1] CRAN (R 3.5.2)
## tibble 2.1.3 2019-06-06 [1] CRAN (R 3.5.3)
## tidyselect 0.2.5 2018-10-11 [1] CRAN (R 3.5.1)
## utf8 1.1.4 2018-05-24 [1] CRAN (R 3.5.1)
## vctrs 0.2.0 2019-07-05 [1] CRAN (R 3.5.3)
## viridisLite 0.3.0 2018-02-01 [1] CRAN (R 3.5.1)
## withr 2.1.2 2018-03-15 [1] CRAN (R 3.5.1)
## zeallot 0.1.0 2018-01-28 [1] CRAN (R 3.5.2)
##
## [1] C:/Users/Italo/Documents/R/win-library/3.5
## [2] C:/Program Files/R/R-3.5.3/library