🛠️ Pré-processamento

Nesta etapa, vamos realizar um pré-processamento mais refinado dos dados, que inclui: visualização espacial dos pontos para identificar padrões geográficos e possíveis inconsistências de localização; Filtragem de Linhas e Variáveis e Seleção de observações e atributos relevantes para as próximas etapas da análise; Detecção de Inconsistências: Identificação de valores extremos ou incoerentes que podem comprometer a qualidade das análises futuras.

📄 Carregando dados de emissões

emissions_sources <- readr::read_rds("../data/emissions_sources.rds")

🔎 Validação dos dados (ano = 2021)

Após o tratamento, os dados foram analisados e comparados com as informações originais do site Climate TRACE, com o objetivo de verificar a consistência e a qualidade do processamento.

Ao buscar o município de “Jaboticabal” na plataforma, são apresentadas várias categorias de dados, referentes às emissões de gases de efeito estufa em diferentes níveis geográficos e fontes.

As principais categorias encontradas são:

  • City - Urban Area, BR: Refere-se à área urbana da cidade em questão, no caso, Jaboticabal e apresenta dados de emissões provenientes das atividades dentro dessa zona, como transporte, indústria e outros fatores urbanos.

emissions_sources |>
    dplyr::filter(
    stringr::str_detect(source_name, "Jaboticabal") | muni == "Jaboticabal",
    year == 2021,
    source_type == "Urban Area",
    # !subsector %in% c("forest-land-clearing",
    #                  "forest-land-degradation",
    #                  "forest-land-fires",
    #                  "removals",
    #                  "shrubgrass-fires",
    #                  "wetland-fires"),
    # sector != "forestry-and-land-use"
    ) |> 
  dplyr::summarise(
    emissions_quantity_sum = sum(emissions_quantity, na.rm = TRUE)
  ) |>
  dplyr::ungroup() |>
  dplyr::mutate(
   emissions_quantity_cumsum = cumsum(emissions_quantity_sum)
  )
## # A tibble: 1 × 2
##   emissions_quantity_sum emissions_quantity_cumsum
##                    <dbl>                     <dbl>
## 1                106788.                   106788.
  • Country - Jaboticabal Municipality, São Paulo State, BRA: Relacionado ao município de Jaboticabal como um todo, esta categoria inclui dados sobre as emissões em áreas rurais e urbanas, englobando fontes como agricultura e uso do solo.
emissions_sources |>
    dplyr::filter(
    stringr::str_detect(source_name, "Jaboticabal") | muni == "Jaboticabal",
    year == 2021,
    source_type == "Municipality",
    # !subsector %in% c("forest-land-clearing",
    #                  "forest-land-degradation",
    #                  "forest-land-fires",
    #                  "removals",
    #                  "shrubgrass-fires",
    #                  "wetland-fires"),
    # sector != "forestry-and-land-use"
    ) |> 
  dplyr::summarise(
    emissions_quantity_sum = sum(emissions_quantity, na.rm = TRUE)
  ) |>
  dplyr::ungroup() |>
  dplyr::mutate(
   emissions_quantity_cumsum = cumsum(emissions_quantity_sum)
  )
## # A tibble: 1 × 2
##   emissions_quantity_sum emissions_quantity_cumsum
##                    <dbl>                     <dbl>
## 1               1107669.                  1107669.
  • Asset: Refere-se a fontes específicas de emissões dentro da cidade ou município, como fábricas, usinas de energia ou instalações industriais. Cada “asset” tem dados específicos sobre suas emissões, permitindo uma análise mais detalhada.
emissions_sources |>
    dplyr::filter(
    stringr::str_detect(source_name, "Jaboticabal") | muni == "Jaboticabal",
    year == 2021,
    source_type != "Municipality",
    source_type != "Urban Area",
    # !subsector %in% c("forest-land-clearing",
    #                  "forest-land-degradation",
    #                  "forest-land-fires",
    #                  "removals",
    #                  "shrubgrass-fires",
    #                  "wetland-fires"),
    # sector != "forestry-and-land-use"
    ) |> 
  dplyr::group_by(source_name) |> 
  dplyr::summarise(
    emissions_quantity_sum = sum(emissions_quantity, na.rm = TRUE)
  ) |>
  dplyr::ungroup() |>
  dplyr::mutate(
   emissions_quantity_cumsum = cumsum(emissions_quantity_sum)
  )
## # A tibble: 2 × 3
##   source_name                emissions_quantity_sum emissions_quantity_cumsum
##   <chr>                                       <dbl>                     <dbl>
## 1 ETE JABOTICABAL   SP                        6193.                     6193.
## 2 Santa Adélia power station                     0                      6193.
emissions_sources |>
    dplyr::filter(stringr::str_detect(source_name, "Urban Area")) |> View()

⏳ Filtrando os dados para forestry-and-land-use e selecionando variáveis para a análise.

emissions_sources_forestry <- emissions_sources |> 
   dplyr::filter(
     gas == "co2e_100yr",
     sector == "forestry-and-land-use"
   ) |> 
   dplyr::mutate(
     source_name = stringr::str_to_title(source_name)
   ) |> 
  dplyr::select(
    -c(source_id,iso3_country,created_date,modified_date,lat_lon,directory,native_source_id,
       start_time,end_time,source_type,reporting_entity,sector_id,reporting_entity,geometry_ref)) |> 
  dplyr::relocate(year,month,lon,lat,source_name,muni,state,region)

📈📊

Usa a função vis_miss() do pacote {visdat} para visualizar graficamente os dados faltantes (NAs).

Ele gera um gráfico de calor onde:

As células preenchidas mostram dados presentes.

As células em branco ou coloridas indicam dados ausentes.
emissions_sources_forestry[1:20] |> 
  dplyr::sample_n(3e4) |> 
  visdat::vis_miss()

🗺️ Plotando espacialmente os ponto

Nesta etapa, vamos representar os dados no espaço geográfico, gerando mapas que permitem visualizar a distribuição dos pontos de interesse. A plotagem espacial é fundamental para identificar padrões, áreas de maior concentração e possíveis anomalias nos dados.

Vamos carregar os polígonos de interesse

country_br <- geobr::read_country(showProgress = FALSE)
conservation <- geobr::read_conservation_units(showProgress = FALSE)
indigenous <- geobr::read_indigenous_land(showProgress = FALSE)

Criando o mapa com sobreposição

Terras Indígenas reconhecidas

indigenous    |> 
  ggplot2::ggplot() +
  ggplot2::geom_sf(fill="white", color="black",
          size=.15, show.legend = FALSE) +
  ggplot2::geom_point(
    data = emissions_sources_forestry  |> 
      dplyr::filter(
        year == 2021,
        indigenous != "Other"),
     ggplot2::aes(lon,lat)) +
  ggplot2::theme_bw()

Áreas de conservação

conservation    |> 
  ggplot2::ggplot() +
  ggplot2::geom_sf(fill="white", color="black",
          size=.15, show.legend = FALSE) +
  ggplot2::geom_point(
    data = emissions_sources_forestry  |> 
      dplyr::filter(
        year == 2021,
        conservation != "Other"),
     ggplot2::aes(lon,lat)) +
  ggplot2::theme_bw()

📊📦 Visualização dos Dados

Nesta seção, serão construídos histogramas e boxplots para avaliar a distribuição das variáveis numéricas disponíveis no conjunto de dados.

  • Histogramas ajudam a identificar o comportamento geral dos dados, como simetria, caudas longas ou concentrações anormais de valores.

  • Boxplots facilitam a visualização de outliers, assimetria e amplitude interquartil (IQR), sendo ferramentas rápidas para checagem da qualidade e integridade dos dados.

A combinação dos dois gráficos para cada variável permite uma análise exploratória robusta e auxilia na identificação de possíveis inconsistências ou necessidades de transformação dos dados para as etapas seguintes.

📊📦 Conhecendo o banco de dados com a função skim do pacote {skimr}

emissions_sources_forestry |> 
  skimr::skim()
Data summary
Name emissions_sources_forestr…
Number of rows 2608580
Number of columns 45
_______________________
Column type frequency:
character 36
numeric 9
________________________
Group variables None

Variable type: character

skim_variable n_missing complete_rate min max empty n_unique whitespace
source_name 0 1.00 3 45 0 5789 0
muni 0 1.00 3 32 0 5083 0
state 0 1.00 2 5 0 28 0
region 85574 0.97 3 12 0 5 0
source_name_trat 0 1.00 3 32 0 5443 0
sector 0 1.00 21 21 0 1 0
subsector 0 1.00 8 23 0 10 0
gas 0 1.00 10 10 0 1 0
temporal_granularity 0 1.00 5 5 0 1 0
activity_units 0 1.00 2 26 0 2 0
emissions_factor_units 0 1.00 22 46 0 2 0
capacity_units 0 1.00 2 33 0 2 0
other1 0 1.00 0 8 90086 33 0
other1_def 0 1.00 16 49 0 2 0
other2 0 1.00 0 20 90086 5580 0
other2_def 0 1.00 12 16 0 2 0
other3 10050 1.00 1 7 0 2 0
other3_def 10050 1.00 16 16 0 1 0
other4 2608580 0.00 NA NA 0 0 0
other4_def 2608580 0.00 NA NA 0 0 0
other5 2608580 0.00 NA NA 0 0 0
other5_def 2608580 0.00 NA NA 0 0 0
other6 2608580 0.00 NA NA 0 0 0
other6_def 2608580 0.00 NA NA 0 0 0
other7 2608580 0.00 NA NA 0 0 0
other7_def 2608580 0.00 NA NA 0 0 0
other8 2517450 0.03 2 4 0 190 0
other8_def 10050 1.00 8 8 0 1 0
other9 2517450 0.03 13 16 0 298 0
other9_def 10050 1.00 19 19 0 1 0
other10 2608580 0.00 NA NA 0 0 0
other10_def 2608580 0.00 NA NA 0 0 0
biome 0 1.00 5 16 0 8 0
conservation 0 1.00 5 100 0 194 0
indigenous 0 1.00 3 26 0 61 0
biomes_sig 0 1.00 2 5 0 7 0

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
year 0 1 2022.59 1.20 2021.00 2022.00 2023.00 2024.00 2025.00 ▇▇▇▇▁
month 0 1 6.30 3.52 1.00 3.00 6.00 9.00 12.00 ▇▅▅▅▇
lon 0 1 -46.27 6.41 -73.44 -50.90 -46.59 -41.48 -30.04 ▁▁▇▇▃
lat 0 1 -16.52 8.26 -33.65 -22.84 -18.25 -8.61 4.68 ▃▇▅▆▁
emissions_quantity 0 1 318.12 93716.54 -8079988.60 0.00 0.00 275.32 42903557.89 ▇▁▁▁▁
activity 0 1 1175989.39 22261880.44 0.00 74.56 5572.15 99351.01 2614960000.00 ▇▁▁▁▁
emissions_factor 0 1 0.15 1.58 -0.73 0.00 0.00 0.15 1088.04 ▇▁▁▁▁
capacity 0 1 473529.22 21670241.90 0.00 86.46 130.73 176.58 2614960000.00 ▇▁▁▁▁
capacity_factor 0 1 2512.58 20609.01 0.00 0.57 50.57 878.12 1320784.13 ▇▁▁▁▁

emissions_quantity

x <- emissions_sources_forestry |> dplyr::pull(emissions_quantity)
x <- na.omit(x)
q1 <- quantile(x,.25)
q3 <- quantile(x,.75)
iiq <- q3-q1
emissions_sources_forestry |>
  dplyr::filter(emissions_quantity > q1-1.5*iiq, emissions_quantity<q3+1.5*iiq) |>
  ggplot2::ggplot(ggplot2::aes(x =emissions_quantity, y=..density.., fill=biomes_sig)) +
  ggplot2::geom_histogram(boundary=0, color="black",
                          bins = 100) +
  ggplot2::facet_wrap(~biomes_sig)+
  ggplot2::theme_bw()

activity

x <- emissions_sources_forestry |> dplyr::pull(activity)
x <- na.omit(x)
q1 <- quantile(x,.25)
q3 <- quantile(x,.75)
iiq <- q3-q1
emissions_sources_forestry |>
  dplyr::filter(activity > q1-0.5*iiq, activity<q3*.01) |>
  ggplot2::ggplot(ggplot2::aes(x =activity, y=..density.., fill=biomes_sig)) +
  ggplot2::geom_histogram(boundary=0, color="black",
                          bins = 50) +
  ggplot2::facet_wrap(~biomes_sig)+
  ggplot2::theme_bw()

emissions_factor

x <- emissions_sources_forestry |> dplyr::pull(emissions_factor)
x <- na.omit(x)
q1 <- quantile(x,.25)
q3 <- quantile(x,.75)
iiq <- q3-q1
emissions_sources_forestry |>
  dplyr::filter(emissions_factor > q1-0.5*iiq, emissions_factor<q3+0.5*iiq) |>
  ggplot2::ggplot(ggplot2::aes(x =emissions_factor, y = ..density.. ,fill=biomes_sig)) +
  ggplot2::geom_histogram(boundary=0, color="black",
                          bins = 50) +
  ggplot2::facet_wrap(~biomes_sig)+
  ggplot2::theme_bw()

capacity

x <- emissions_sources_forestry |> dplyr::pull(capacity)
x <- na.omit(x)
q1 <- quantile(x,.25)
q3 <- quantile(x,.75)
iiq <- q3-q1
emissions_sources_forestry |>
  dplyr::filter(capacity > q1-3.5*iiq, capacity<q3+3.5*iiq) |>
  ggplot2::ggplot(ggplot2::aes(x =capacity, y=..density.., fill=biomes_sig)) +
  ggplot2::geom_histogram(boundary=0, color="black",
                          bins = 100) +
  ggplot2::facet_wrap(~biomes_sig)+
  ggplot2::theme_bw()

capacity_factor

x <- emissions_sources_forestry |> dplyr::pull(capacity_factor)
x <- na.omit(x)
q1 <- quantile(x,.25)
q3 <- quantile(x,.75)
iiq <- q3-q1
emissions_sources_forestry |>
  dplyr::filter(capacity_factor > q1-0.5*iiq, capacity_factor<q3*.001) |>
  ggplot2::ggplot(ggplot2::aes(x =capacity_factor, y=..density..,fill=biomes_sig)) +
  ggplot2::geom_histogram(boundary=0, color="black",
                          bins = 50) +
  ggplot2::facet_wrap(~biomes_sig)+
  ggplot2::theme_bw()