As análises neste documento são da caixinha de sensores da qualidade do ar instalado na sede do data_labe, na rua Flavia Farnese 652, Maré.
Os sensores ativos foram de: qualidade do ar, material particulado, humidade, luz, som, temperatura, raios uv e ozônio.
Todos os sensores estão acoplados em uma placa arduíno e programados para enviar os dados via conexão Wifi com a Internet do local. Os dados são armazenados na nuvem da Google e, não passam por nenhum enriquecimento na nuvem. São acessados através do serviço de BigQuery, baixados via internet local e analisados em R, de forma local.
A versão dos programas de análise, foram: R - versão 4.2.1 Rstudio - 2022.02.2
A base de dados conta com 394.892 linhas e com 10 colunas originais.
options(scipen=999)
#setando o diretorio
setwd("~/doutorado/caixinhas")
#importando o arquivo
caixa <- read.csv("caixinhas_05_09_22.csv", sep=",")
#dimensão da base
dim(caixa)
## [1] 394892 10
names(caixa)
## [1] "deviceId" "timestamp" "airquality" "dust" "humidity"
## [6] "light" "sound" "temperature" "uv" "ozone"
O período de coleta foi de 10/06/2021 a 05/09/2022. Os sensores ficam ligados ininterruptamente e o resumo das horas mostra que eles tem funcionado de forma geral de 00:00 às 23:00.
#transformando o timestamp em data
library(lubridate)
##
## Attaching package: 'lubridate'
## The following objects are masked from 'package:base':
##
## date, intersect, setdiff, union
#apenas a data
caixa$timestamp <- ymd_hms(caixa$timestamp)
#resumo da data
summary(caixa$timestamp)
## Min. 1st Qu. Median
## "2021-06-10 09:23:16" "2021-09-06 17:55:15" "2021-11-21 07:53:55"
## Mean 3rd Qu. Max.
## "2021-12-18 17:57:09" "2022-04-13 19:45:02" "2022-09-05 13:26:16"
#apenas o dia
caixa$data <- substr(caixa$timestamp, 1, 10)
caixa$data <- ymd(caixa$data)
#apenas a hora
caixa$hora <- substr(caixa$timestamp, 12, 19)
caixa$hora <- hms(caixa$hora)
#deixando apenas o valor da hora, sem minuto ou segundo
caixa$hora2 <- hour(caixa$timestamp)
summary(caixa$hora2)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.00 5.00 12.00 11.51 18.00 23.00
O indicador de qualidade do ar é calculado pelo sensor instalado na própria placa. Este índice variou de no mínimo 2 a no máximo 249. Com média e mediana próximas, 32,53 e 32 respectivamente.
#summary do airquality
summary(caixa$airquality)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 2.00 27.00 32.00 32.53 36.00 249.00
No gráfico abaixo é possível vermos os dados para a qualidade do ar, uma linha pontilhada em vermelho demonstrado o limiar saudável postulado pela OMS e, em azul uma linha gerada pelo método gam resumindo os dados. É possível notar que em média a qualidade do ar ficou sempre abaixo do limiar superior estipulado pela OMS, mas com picos acima deste limiar em algumas datas principalmente no mês de Novembro. Outra observação importante é a ausência dos dados deste sensor para os meses de Março e Junho.
#gráfico
library(ggplot2)
ggplot(caixa, aes(data, airquality))+
geom_point()+
geom_smooth()+
geom_hline(yintercept = 50, colour= "red", linetype="dotted")
## `geom_smooth()` using method = 'gam' and formula 'y ~ s(x, bs = "cs")'
Os dados podem ser melhor analisados e visualizados na tabela abaixo,
contendo a média, o desvio padrão e os valores máximo e mínimo
diários:
#tabela qualidade do ar
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(rmarkdown)
tbair <- caixa%>%group_by(data)%>% summarise(media=mean(airquality), desvio=sd(airquality),
maximo=max(airquality), minimo=min(airquality))
paged_table(tbair)
O material particulado coletado pelo sensor é o de 2,5ug. Que variou de no mínimo -1 a máximo 6.072,5, com valores de média e mediada de 363,6 e 315,8 respectivamente
#summary do dust
summary(caixa$dust)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## -1.0 193.4 315.8 363.6 472.9 6072.5
No gráfico abaixo é possível ver os mesmos marcadores do gráfico anterior. Entretanto a linha azul gerada pela regressão indica que em valores médios a quantidade de material particulado se manteve sempre acima do limiar superior esstipulado pela OMS de 120ug.
#gráfico do dust
ggplot(caixa, aes(data, dust))+
geom_point()+
geom_smooth()+
geom_hline(yintercept = 120, colour= "red", linetype="dotted")
## `geom_smooth()` using method = 'gam' and formula 'y ~ s(x, bs = "cs")'
Os dados podem ser melhor analisados e visualizados na tabela abaixo, contendo a média, o desvio padrão e os valores máximo e mínimo diários:
#tabela do mp 2,5
tbdust <- caixa%>%group_by(data)%>% summarise(media=mean(dust), desvio=sd(dust),
maximo=max(dust), minimo=min(dust))
paged_table(tbdust)
Na dissertação do Marquinhos, ele demonstrou que esses sensores precisavam ser corrigidos por uma constante devido à descalibração do próprio sensor. Essa constante foi aplicada ao sensor para verificar quais as mudanças que acarretaria caso a mudança fosse aplicada em nosso trabalho
###corrigindo os dados do mp2,5 pela constante da dissertação do Markin
caixa$dust2 <- caixa$dust*0.42899422036
As mesmas análises para o material particulado foram repetidas. Os valores médios, medianos e máximos sofreram grandes reduções.
# resumo do dust 2
summary(caixa$dust2)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## -0.429 82.980 135.494 156.003 202.888 2605.080
Entretando mesmo aplicando o coeficiente de correção os valores da concentração do material particulado ficaram acima do limiar estabelecido pela OMS:
#realizando o gráfico agora corrigido, tendo como valor básico a concentração por hora de 25
ggplot(caixa, aes(data, dust2))+
geom_point()+
geom_smooth()+
geom_hline(yintercept = 25, colour= "red", linetype="dotted")+
labs(x="Junho/21 a Setembro/22", y="Média de MP2,5 em 24hr")
## `geom_smooth()` using method = 'gam' and formula 'y ~ s(x, bs = "cs")'
Os dados podem ser melhor analisados e visualizados na tabela abaixo,
contendo a média, o desvio padrão e os valores máximo e mínimo
diários:
#tabela do mp 2,5
tbdust2 <- caixa%>%group_by(data)%>% summarise(media=mean(dust2), desvio=sd(dust2),
maximo=max(dust2), minimo=min(dust2))
paged_table(tbdust2)
Os sensores de temperatura são programados para colherem a informação em graus Celsius. Os valores da temperatura variaram de no mínimo 16,6 a 41,4 graus máximo. Os valores médios e medianos da temperatura foram de 26 e 25,5 graus respectivamente
summary(caixa$temperature)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 16.6 23.0 25.5 26.0 28.5 41.4
#gráfico do temperature
ggplot(caixa, aes(data, temperature))+
geom_point()+
geom_smooth()+
geom_hline(yintercept = 35, colour= "red", linetype="dotted")
## `geom_smooth()` using method = 'gam' and formula 'y ~ s(x, bs = "cs")'
O gráfico da temperatura foi setado para exibir uma linha pontilhada a 35 graus, entretanto a OMS estipula que a sensação térmica saudável depende de outros fatores como a umidade do ar, portanto considere essa linha pontilhada apenas para fins didáticos, não se trata de um limiar estipulado. Os valores médios ficaram sempre abaixo dos 35 graus, mas nos meses de Setembro de 2021 a Fevereiro é possível ver valores altos acima desse limiar.
#gráfico do temperature
ggplot(caixa, aes(data, temperature))+
geom_point()+
geom_smooth()+
geom_hline(yintercept = 35, colour= "red", linetype="dotted")
## `geom_smooth()` using method = 'gam' and formula 'y ~ s(x, bs = "cs")'
Os dados da temperatura diárias podem ser melhor analisados e
visualizados na tabela abaixo, contendo a média, o desvio padrão e os
valores máximo e mínimo diários:
#tabela do mp 2,5
tbtemp <- caixa%>%group_by(data)%>% summarise(media=mean(temperature), desvio=sd(temperature),
maximo=max(temperature), minimo=min(temperature))
paged_table(tbtemp)
Os valores da concentração de ozônio variaram de no mínimo 169,5 a no máximo 897,0. E com valores médios e medianos de 284,5 e 286,2 respectivamente
#summary do ozone
summary(caixa$ozone)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 169.5 239.5 286.2 287.5 321.2 897.0
A concentração de ozônio diário alcançou valores limiares e acima de 240 estipulados pela OMS principalmente entre os meses de Novemnbro a Fevereiro de 2021.
#gráfico do temperature
ggplot(caixa, aes(data, ozone))+
geom_point()+
geom_smooth()+
geom_hline(yintercept = 240, colour= "red", linetype="dotted")
## `geom_smooth()` using method = 'gam' and formula 'y ~ s(x, bs = "cs")'
Os dados da concentração de ozônio diáros podem ser melhor analisados e
visualizados na tabela abaixo, contendo a média, o desvio padrão e os
valores máximo e mínimo diários:
#tabela do mp 2,5
tbozone <- caixa%>%group_by(data)%>% summarise(media=mean(ozone), desvio=sd(ozone),
maximo=max(ozone), minimo=min(ozone))
paged_table(tbozone)