Anexo II: Série histórica da poluição atmosférica (MP2,5) e do volume pluviométrico

Nas páginas a seguir documento a rotina de análise dos dados quantitativos que fazem parte da minha tese, concernentes a poluição atmosférica - especificamente o material particulado fino [MP2,5 ug/m³] - e ao volume pluviométrico dos últimos 10 anos em São Paulo. Os dados sobre o regime de chuva advieram do Instituto Nacional de Meteorologia << https://portal.inmet.gov.br/ >>, ao passo que a série histórica da poluição atmosférica é fornecida pelo sistema Qualar, da CETESB << https://cetesb.sp.gov.br/ar/qualar/ >>.

Bem, para executar o script é necessário carregar a seguinte livraria:

library(tidyr)
library(purrr)
library(dplyr)
library(readr)
library(tidyr)
library(tidyselect)
library(lubridate)
library(ggplot2)

Então, carregamos as planilhas cvs, individualmente, através do comando read.delim ou coletivamente, por meio do comando list.files, utilizando como critério o mesmo pattern do arquivo. Subsequentemente, transformamos a lista em data frame.

Poluição atmosférica

No que concerne a poluição atmosférica, notem que trabalhamos com duas localizações, a saber: (i) Tietê/Ponte dos Remédios (uma estação que registra um dos maiores valores de poluição do ar) e IPEN-USP (que registra um dos menores níveis de poluição do ar de São Paulo).

mp_tiete <- map_df(lista_tiete, function(x) {
  mp_teste <- read.table(x, header= F, sep = ";")
})

mp_usp <- map_df(lista_usp, function(x){
  mp_usp1 <- read.table(x, header = F, sep = ";")
})

Então, aplicamos um filtro no banco de dados, selecionando as variáveis de interesse, e posteriormente agrupamos os dados por data. Ademais, convertemos a variável data para o formato de interesse, por meio dos comandos a seguir:

mp_usp <- mp_usp %>% 
  filter(!is.na(V3)) %>% 
  rename(data = "V1",
         mp25 = "V3")

mp_tiete <- mp_tiete %>% 
  filter(!is.na(V3)) %>% 
  rename(data = "V1",
         mp25 = "V3")

mp_tiete <- aggregate(mp_tiete$mp25, by = list(mp_tiete$data), mean)

mp_usp <- aggregate(mp_usp$mp25, by = list(mp_usp$data), mean)

mp_tiete <- mp_tiete %>% 
  mutate(Group.1 = dmy(Group.1)) %>% 
  rename(data_ano = "Group.1",
         mp25 = "x")

mp_usp <- mp_usp %>% 
  mutate(Group.1 = dmy(Group.1)) %>% 
  rename(data_ano = "Group.1",
         mp25 = "x")

Volume de chuvas

Repetimos o processo com os dados do INMET, selecionando e renomeando as variáveis de interesse, tornando possível unir os dados de poluição atmosférica e de volume pluviométrico. Repetimos o mesmo script para IPEN-USP, alterando apenas o nome do arquivo. Por isso, o segundo script foi suprimido.

inmet_chuva <- inmet_chuva %>% 
  mutate(`Data Medicao` = ymd(`Data Medicao`)) %>% 
  rename(data_ano = "Data Medicao",
         chuva_mm = "PRECIPITACAO TOTAL, DIARIO (AUT)(mm)",
         temperatura = "TEMPERATURA MEDIA, DIARIA (AUT)(°C)",
         umidade = "UMIDADE RELATIVA DO AR, MEDIA DIARIA (AUT)(%)")

total_tiete <- mp_tiete %>% 
  inner_join(inmet_chuva, by = "data_ano") %>% 
  arrange(data_ano) %>% 
  mutate(data_ano = as.Date(data_ano),
         mp25 = as.numeric(mp25))

Para produzir os gráficos, entretanto, é preciso que todos os dados sejam numéricos. Como o tipo de separador é inadequado, e as colunas são de classes distintas, foi necessário corrigir o data frame, conforme segue (repito o mesmo script para o data frame USP):

tiete_numeric <- total_tiete
tiete_numeric[] <- lapply(tiete_numeric, function(x) as.numeric(gsub(",", ".", x)))

tiete_numeric <- tiete_numeric %>% 
  bind_cols(total_tiete$data_ano) %>%
  select(!data_ano) %>% 
  rename("data_ano" = "...6")

total_tiete <- tiete_numeric

total_tiete <- total_tiete %>%
  mutate_at(vars(chuva_mm, temperatura, umidade), funs(as.numeric(.))) %>% 
  mutate_at(vars(mp25,chuva_mm, temperatura, umidade), funs(round(., 1))) %>% 
  mutate(data_ano = as.Date(data_ano))

Com a panilha organizada e formatada, finalmente é possível elaborar os gráficos. Notem que a coluna d’água, em azul claro, é inversamente proporcional à coluna cinza, representando os dados de material particulado fino. Por conseguinte, períodos de maior chuva (primavera e verão) correspondem a menores valores de poluição atmosférica. Ademais, Tietê/Remédios registra valores muito superiores a estação IPEN-USP.

total_tiete %>% ggplot() +
  geom_line(aes(x = data_ano, y = mp25, colour=mp25), size = 1.3) +
  geom_step(aes(x= data_ano, y = chuva_mm, size = "Chuva (mm)"), colour = "light blue", alpha = 0.6) +
  scale_colour_gradient(low = "light grey", high = "black") +
  labs(x = "Período (ano)", 
       y = expression(paste(MP[2.5]  (ug/m^3))), 
       colour = expression(paste(MP[2.5])),
       size = "Pluviometria") +
  scale_y_continuous(breaks = seq(0, 90, by = 15), limits = c(0,90)) +
  scale_x_date(date_breaks = "1 years", date_labels = "%Y") +
  theme_classic() +
  theme(axis.text.x = element_text(angle = 45, vjust = 0.8, hjust=0.7, size = 15),
        axis.text.y = element_text(size = 15, hjust=0.7),
        text = element_text(size = 17))

total_usp %>% ggplot() +
  geom_line(aes(x = data_ano, y = mp25, colour=mp25), size = 1.3) +
  geom_step(aes(x= data_ano, y = chuva_mm, size = "Chuva (mm)"), colour = "light blue", alpha = 0.6) +
  scale_colour_gradient(low = "light grey", high = "black") +
  labs(x = "Período (ano)", 
       y = expression(paste(MP[2.5]  (ug/m^3))), 
       colour = expression(paste(MP[2.5])),
       size = "Pluviometria") +
  scale_y_continuous(breaks = seq(0, 90, by = 15), limits = c(0,90)) +
  scale_x_date(date_breaks = "1 years", date_labels = "%Y") +
  theme_classic() +
  
  theme(axis.text.x = element_text(angle = 45, vjust = 0.8, hjust=0.7, size = 15),
        axis.text.y = element_text(size = 15, hjust=0.7),
        text = element_text(size = 17))