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.
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")
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))