Buscamos todos arquivos NetCDF (.nc) no diretório e subdiretórios da
pasta data-raw
e retorna caminhos completos para
processamento. Posteriormente a função de leitura, semelhante à anterior
abre cada arquivo NetCD, extrai \(7\)
variáveis-chave para análise e fecha a conexão após leitura retornando
um dataframe padronizado
Variáveis extraídas:
xch4: Concentração de metano (ppb)
xch4_quality_flag: Indicador de qualidade
xch4_incerteza: Margem de erro das medições
## Lista com caminho e nomes dos arquivo a serem lidos - xco2
list_of_files <- list.files("data-raw/CH4_GOS_OCPR/",
pattern = ".nc",
full.names = TRUE,
all.files = TRUE,
recursive = TRUE)
## função para ler arquivos NCD4
ncdf_reader <- function(file_path){
nc_file <- ncdf4::nc_open(file_path)
df <- data.frame(
"longitude"=ncdf4::ncvar_get(nc_file,varid="longitude"),
"latitude"=ncdf4::ncvar_get(nc_file,varid="latitude"),
"time"=ncdf4::ncvar_get(nc_file,varid="time"),
"xch4"=ncdf4::ncvar_get(nc_file,varid="xch4"),
"xch4_quality_flag"=ncdf4::ncvar_get(nc_file,varid="xch4_quality_flag"),
"xch4_incerteza"=ncdf4::ncvar_get(nc_file,varid="xch4_uncertainty"),
"path" = file_path
)
ncdf4::nc_close(nc_file)
return(df)
}
Processamento em Lote dos Dados
Semelhante ao processamento anterior, seleciona apenas dados dentro
da “caixa delimitadora” do Brasil e utiliza um filtro rápido antes da
análise espacial precisa. Usa o polígono exato do Brasil
({pol_br}
) para filtrar pontos costeiros/ilhas e retorma
como resultado um dataframe unificado (dff)
com apenas
medições válidas. Cada lote preserva metadados originais (path do
arquivo). A paralelização pode ser usada nesse momento.
dff_1 <- purrr::map_df(list_of_files[1:1000],ncdf_reader)
readr::write_rds(dff_1,"data-raw/dff_1.rds")
dff_2 <- purrr::map_df(list_of_files[1001:2000],ncdf_reader)
readr::write_rds(dff_2,"data-raw/dff_2.rds")
dff_3 <- purrr::map_df(list_of_files[2001:3000],ncdf_reader)
readr::write_rds(dff_3,"data-raw/dff_3.rds")
dff_4 <- purrr::map_df(list_of_files[3001:length(list_of_files)],ncdf_reader)
readr::write_rds(dff_4,"data-raw/dff_4.rds")
df1 <- readr::read_rds("data-raw/dff_1.rds")
df1 <- df1 |>
dplyr::filter(longitude >= -80 &
longitude <= -32,
latitude >= -34 &
latitude <= 10)
dplyr::glimpse(df1)
df2 <- readr::read_rds("data-raw/dff_2.rds") |>
dplyr::filter(longitude >= -80 &
longitude <= -32,
latitude >= -34 &
latitude <= 10)
dplyr::glimpse(df2)
df3 <- readr::read_rds("data-raw/dff_3.rds") |>
dplyr::filter(longitude >= -80 &
longitude <= -32,
latitude >= -34 &
latitude <= 10)
dplyr::glimpse(df3)
df4 <- readr::read_rds("data-raw/dff_4.rds") |>
dplyr::filter(longitude >= -80 &
longitude <= -32,
latitude >= -34 &
latitude <= 10)
dplyr::glimpse(df3)
dff <- rbind(df1,df2,df3,df4)
dff <- dff |>
dplyr::mutate(
flag_br = def_pol(longitude, latitude, pol_br)
)
Extraímos os contornos das \(5\)
regiões do Brasil usando {geobr}
e posteriormente ajustamos
os polígonos para remover pontos a leste da longitude -34° (ilhas
oceânicas) e corrigir distorções em áreas costeiras específicas. A saída
é objeto pol_br
, o polígono do Brasil ajustado e o
pol_nordeste
, o polígono do Nordeste ajustado.
regiao <- geobr::read_region(showProgress = FALSE)
pol_norte <- regiao$geom |> purrr::pluck(1) |> as.matrix()
pol_nordeste <- regiao$geom |> purrr::pluck(2) |> as.matrix()
pol_sudeste <- regiao$geom |> purrr::pluck(3) |> as.matrix()
pol_sul <- regiao$geom |> purrr::pluck(4) |> as.matrix()
pol_centroeste<- regiao$geom |> purrr::pluck(5) |> as.matrix()
# Retirando alguns pontos
pol_br <- pol_br[pol_br[,1]<=-34,]
pol_br <- pol_br[!((pol_br[,1]>=-38.8 & pol_br[,1]<=-38.6) &
(pol_br[,2]>= -19 & pol_br[,2]<= -16)),]
pol_nordeste <- pol_nordeste[pol_nordeste[,1]<=-34,]
pol_nordeste <- pol_nordeste[!((pol_nordeste[,1]>=-38.7 & pol_nordeste[,1]<=-38.6) & pol_nordeste[,2]<= -15),]
# Retirando alguns pontos
pol_br <- pol_br[pol_br[,1]<=-34,]
pol_br <- pol_br[!((pol_br[,1]>=-38.8 & pol_br[,1]<=-38.6) &
(pol_br[,2]>= -19 & pol_br[,2]<= -16)),]
pol_nordeste <- pol_nordeste[pol_nordeste[,1]<=-34,]
pol_nordeste <- pol_nordeste[!((pol_nordeste[,1]>=-38.7 & pol_nordeste[,1]<=-38.6) & pol_nordeste[,2]<= -15),]
# Recriando o flag_nordeste
dff <- dff |>
dplyr::mutate(
flag_br = def_pol(longitude, latitude, pol_br),
flag_nordeste = def_pol(longitude, latitude, pol_nordeste)
)
Correções, - mantém apenas pontos dentro do Brasil
(flag_br
) ou Nordeste (flag_nordeste
)
removendo valores inválidos. Tratamento de Datas extrai informações
temporais do caminho do arquivo:
- `date`: Data no formato `YYYY-MM-DD`
- `year`/`month`/`day`: Componentes separados
Classificação por Estado pela função get_geobr_state
para identificar o estado de cada coordenada resultado armazenado na
coluna state
.
gosat-xch4.rds
data_set <- dff |>
dplyr::filter(flag_br|flag_nordeste) |>
dplyr::filter(
xch4 > 0,
xch4_quality_flag == 0) |>
dplyr::mutate(
path = stringr::str_remove(path, "data-raw/CH4_GOS_OCPR/20...|\\.nc"),
date = lubridate::as_date(stringr::str_sub(path,27,34)),
year = lubridate::year(date),
month = lubridate::month(date),
day = lubridate::day(date),
.after = "time"
)
dplyr::glimpse(data_set)
# Criando a coluna para os estados.
# carregando os poligonos e funções
# Classificando pontos
state <- 0
x <- data_set |> dplyr::pull(longitude)
y <- data_set |> dplyr::pull(latitude)
for(i in 1:nrow(data_set)) state[i] <- get_geobr_state(x[i],y[i])
data_set <- data_set |> cbind(state)
dplyr::glimpse(data_set)
# readr::write_rds(data_set,"data/gosat-xch4.rds")
dff <- readr::read_rds("../data/gosat-xch4.rds")
br |>
ggplot2::ggplot() +
ggplot2::geom_sf(fill="white", color="#FEBF57",
size=.15, show.legend = FALSE) +
ggplot2::geom_point(data= dff |>
dplyr::sample_n(1000) |>
dplyr::filter(flag_br|flag_nordeste) ,
ggplot2::aes(x=longitude,y=latitude),
shape=3,
col="red",
alpha=0.2)