-
Notifications
You must be signed in to change notification settings - Fork 0
/
script_adelaide.R
157 lines (120 loc) · 3.91 KB
/
script_adelaide.R
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
# Pacotes ------------------------------------------------------------------
# Pacotes utilizados. Caso não tenha instalado na sua máquina,
# basta descomentar e rodar o código embaixo de cada library para instalação.
library(tidyverse)
# install.packages(tidyverse)
library(koffing)
# install.packages("devtools")
# devtools::install_github("atmoschem/koffing")
# Definindo estações e parâmetros ------------------------------------------
# As estações disponíveis podem ser acessadas pelo objeto abaixo.
View(cetesb_station_ids)
# Os parâmetros disponíveis podem ser acessados pelo objeto abaixo.
View(cetesb_param_ids)
# Salvar os ids das estações e parâmetros nos objetos abaixo.
# Nesse exemplo, estamos pegando informação de O3 e NO para a estação
# Mauá e Dieadema.
stations_ids <- c(65, 92)
parameters_id <- c(63, 17)
# Funções ------------------------------------------------------------------
# Função para baixar os arquivos e não parar caso haja algum erro em alguma
# das tentativas. Substituir o login e senha com as suas informações de acesso
# ao sistema Qualar.
safe_scraper_cetesb <- possibly(
function(station, parameter, start, end) {
koffing::scraper_cetesb(
station = station,
parameter = parameter,
start = start,
end = end,
login = "seu_login", # colocar seu login entre as aspas
password = "sua_senha" # colocar sua senha entre as aspas
)
},
otherwise = NULL
)
# Função que acessa o sistema e baixa os dados.
# Por padrão, ela vai baixar todos os dados de um parâmetro para uma estação
# e um ano inteiro.
# Os dados serão salvos em arquivos separados no diretório de trabalho da
# sua sessão.
get_cetesb_data <- function(station, parameter, year) {
start <- str_c("01/01/", year)
end <- str_c("31/12/", year)
df <- safe_scraper_cetesb(station, parameter, start, end)
if(!is.null(df)) {
write_csv(
x = df,
path = str_c(
"df-",
parameter, "-", station, "-", year, ".csv"
)
)
print(
str_c(
"Dados de ", parameter, " da estação ",
station, " de ", year, " baixados com sucesso."
)
)
} else {
print(
str_c(
"Não foi possível baixar dados de ", parameter, " da estação ",
station, " de ", year
)
)
}
}
# Baixando os dados --------------------------------------------------------
# Definir os anos que você quer baixar.
# No exemplo, vamos baixar dados de 2016, 2017 e 2018
years <- 2016:2018
# Rodar código abaixo para baixar os dados
for(i in 1:length(years)) {
for(j in 1:length(parameters_id))
walk(
stations_ids$id,
get_cetesb_data,
parameter = parameters_id[j],
year = years[i]
)
}
# Juntando os arquivos -----------------------------------------------------
# Colocar o caminho para a pasta onde estão salvos os arquivos.
paths <- list.files(
path = "pasta-onde-estao-salvos-os-arquivos-baixados",
full.names = TRUE
)
paths <- paths[str_detect(paths, ".csv") & file.size(paths) > 2000]
# Lendo e juntando todos os arquivos. Ignorar os warnings.
df <- map_dfr(
paths,
read_csv,
col_types = str_c(rep("c", 17), collapse = "")
)
# Limpeza da base final. Opcional.
df <- df %>%
select(
parameter = `Nome Parâmetro`,
stationname = `Nome Estação`,
date = Data,
hour = Hora,
mass_conc = `Média Horária`
) %>%
mutate(
mass_conc = str_replace(mass_conc, ",", "."),
mass_conc = as.numeric(mass_conc),
date = lubridate::dmy(date),
hour = str_sub(hour, start = 1, end = 2),
hour = as.numeric(hour),
dayofweek = lubridate::wday(date, label = TRUE),
mass_conc = ifelse(abs(mass_conc) == 9999999, NA, mass_conc),
parameter = str_replace_all(parameter, " [(].*", "")
) %>%
spread(parameter, mass_conc)
# Salvando a base final em rds.
write_rds(
df,
path = "base-final.rds",
compress = "gz"
)