Môj projekt som sa rozhodla zamerať na tému, na ktorú mám aj diplomovú prácu - pričom som zatiaľ pracovala s dostupnými dátam. Moja diplomová práca sa má venovať deskriptívnej priestorovej analýze triedenia obyvateľstva v Českej republike na základe sčítania ľudu a údajov o kvalite ovzdušia. V projekte som sa venovala analýze údajov o kvalite ovzdušia.
Na začiatok som si načítala potrebné balíčky a nahrala svoje dáta, ktoré sú vo formáte shp a predstavujú 5-ročné priemerné koncentrácie v sieti 1x1 km (za obdobie 2018-2022).
library(sf)
library(ggplot2)
library(viridisLite)
library(dplyr)
shp_data <- st_read("~/Diplomová práca/Dáta/sit1000_5lprum_18_22_CReko_JTSK/sit1000_5lprum_18_22_JTSK_eko.shp", quiet = TRUE)
# Zobrazenie prvých pár riadkov dát
head(shp_data)
## Simple feature collection with 6 features and 5 fields
## Geometry type: MULTIPOLYGON
## Dimension: XY
## Bounding box: xmin: -774875.3 ymin: -1211324 xmax: -771274.5 ymax: -1209227
## Projected CRS: S-JTSK / Krovak East North
## ID CISLO SO2_rp_5l SO2_zp_5l NOx_rp_5l geometry
## 1 0 450380 2 1.8 4.8 MULTIPOLYGON (((-772491.6 -...
## 2 0 451380 2 1.9 5.1 MULTIPOLYGON (((-772491.6 -...
## 3 0 448381 2 1.8 4.2 MULTIPOLYGON (((-774275.7 -...
## 4 0 449381 2 1.8 4.7 MULTIPOLYGON (((-773324.9 -...
## 5 0 450381 2 1.8 4.8 MULTIPOLYGON (((-772395.5 -...
## 6 0 451381 2 1.9 5.1 MULTIPOLYGON (((-771371.6 -...
Vysvetlivky
Znečišťující látky, které mají stanoven imisní limit pro ochranu ekosystémů a vegetace:
SO2_rp_5l SO2 - roční průměrná koncentrace [μg.m^-3] -> oxid siričitý;
SO2_zp_5l SO2 – průměrná koncentrace za zimní období (1.10.-31.3.);
NOx_rp_5l NOx - roční průměrná koncentrace [μg.m^-3] - “NOx” sa používa na označenie skupiny znečisťujúcich látok z oxidu dusíka (NO) a oxidu dusičitého (NO2), ktoré sú produkované pri spaľovaní fosílnych palív v rôznych procesoch vrátane vykurovania, dopravy a priemyselných činností.
Dáta Na zoznámenie sa s dátami som si najprv spravila deskriptívnu štatistiku.
summary_stats <- shp_data %>%
summarize(
avg_SO2_rp = mean(SO2_rp_5l, na.rm = TRUE),
median_SO2_rp = median(SO2_rp_5l, na.rm = TRUE),
sd_SO2_rp = sd(SO2_rp_5l, na.rm = TRUE),
avg_NOx_rp = mean(NOx_rp_5l, na.rm = TRUE),
median_NOx_rp = median(NOx_rp_5l, na.rm = TRUE),
sd_NOx_rp = sd(NOx_rp_5l, na.rm = TRUE)
)
print(summary_stats)
## Simple feature collection with 1 feature and 6 fields
## Geometry type: POLYGON
## Dimension: XY
## Bounding box: xmin: -904593.6 ymin: -1227298 xmax: -431726 ymax: -935244
## Projected CRS: S-JTSK / Krovak East North
## avg_SO2_rp median_SO2_rp sd_SO2_rp avg_NOx_rp median_NOx_rp sd_NOx_rp
## 1 3.047057 2.9 0.8643994 9.743267 8.6 4.496051
## geometry
## 1 POLYGON ((-880478 -1085187,...
ggplot(data = shp_data) +
geom_sf(aes(fill = SO2_rp_5l)) +
scale_fill_gradientn(colours = viridisLite::viridis(256)) +
theme_minimal() +
labs(title = "Ročné priemerné koncentrácie SO2", fill = "SO2 [µg/m⁻³]")
V dátach sa nachádza ale veľa nízkych hodnôt, ktoré kvôli niektorým extrémnym hodnotám nie je dobre v mape vidieť. Preto som na pre ich lepšiu viditeľnosť použila logaritmickú farebnú škálu.
# Použitie logaritmickej farebnej škály - môže pomôcť zviditeľniť nízke hodnoty:
ggplot(data = shp_data) +
geom_sf(aes(fill = log1p(SO2_rp_5l))) +
scale_fill_viridis_c(option = "viridis") +
theme_minimal() +
labs(title = "Ročné priemerné koncentrácie SO2 (log škála)", fill = "log(SO2 + 1) [µg/m⁻³]")
# Overenie štruktúry a obsahu dát - sú tam extrémne hodnoty? -> áno
str(shp_data$SO2_rp_5l)
## num [1:80096] 2 2 2 2 2 2 2 2 2 2 ...
summary(shp_data$SO2_rp_5l)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 1.200 2.500 2.900 3.047 3.300 22.800
ggplot(data = shp_data, aes(y = SO2_rp_5l)) +
geom_boxplot() +
labs(title = "Boxplot koncentrácií SO2",
y = "SO2 [µg/m⁻³]") +
theme_minimal()
Keďže sa nachádza niekoľko vyšších hodnôt v dátach tak som si dala zobraziť boxplot aj bez nich.
# Identifikácia extrémnych hodnôt
outliers <- boxplot.stats(shp_data$SO2_rp_5l)$out
# Filtrovanie extrémnych hodnôt
shp_data_filtered <- shp_data[!shp_data$SO2_rp_5l %in% outliers, ]
# Vytvorenie boxplotu bez extrémnych hodnôt
ggplot(data = shp_data_filtered, aes(y = SO2_rp_5l)) +
geom_boxplot() +
labs(title = "Boxplot koncentrácií SO2 (bez extrémnych hodnôt)",
y = "SO2 [µg/m⁻³]") +
theme_minimal()
V ďalšom kroku som sa rozhodla spraviť histogram s normovanou hustotou pre SO2, aby som lepšie pochopila rozloženie hodnôt ročných priemerných koncentrácií SO2 v študovanej oblasti. Normovaná hustota umožňuje porovnať tvar rozloženia dát s teoretickými distribúciami, čo môže pomôcť identifikovať odchýlky a anomálie.
ggplot(data = shp_data, aes(x = SO2_rp_5l, y = ..density..)) +
geom_histogram(bins = 30, fill = "purple", alpha = 0.7) +
theme_minimal() +
labs(title = "Histogram ročných priemerných koncentrácií SO2", x = "SO2 [µg/m⁻³]", y = "Density")
# Histogram s normovanou hustotou - detailnejšia os X
ggplot(data = shp_data, aes(x = SO2_rp_5l, y = ..density..)) +
geom_histogram(bins = 30, fill = "violet", alpha = 0.7) +
scale_x_continuous(breaks = seq(ceiling(min(shp_data$SO2_rp_5l)), floor(max(shp_data$SO2_rp_5l)), by = 1)) +
theme_minimal() +
labs(title = "Histogram ročných priemerných koncentrácií SO2", x = "SO2 [µg/m⁻³]", y = "Density")
# Histogram s normovanou hustotou pre SO2 s explicitnými limitmi osi X
ggplot(data = shp_data, aes(x = SO2_rp_5l, y = ..density..)) +
geom_histogram(bins = 30, fill = "green", alpha = 0.7) +
scale_x_continuous(breaks = seq(floor(min(shp_data$SO2_rp_5l)), ceiling(max(shp_data$SO2_rp_5l)), by = 1),
limits = c(floor(min(shp_data$SO2_rp_5l)), ceiling(max(shp_data$SO2_rp_5l)))) +
theme_minimal() +
labs(title = "Histogram ročných priemerných koncentrácií SO2", x = "SO2 [µg/m⁻³]", y = "Density")
K dispozícii je aj mapa zimných priemerných koncentrácií SO2 a to za obdobie (1.10.-31.3.).
# Mapa zimných priemerných koncentrácií SO2
ggplot(data = shp_data) +
geom_sf(aes(fill = SO2_zp_5l)) +
scale_fill_gradientn(colours = viridisLite::viridis(256)) +
theme_minimal() +
labs(title = "Zimné priemerné koncentrácie SO2", fill = "SO2 [µg/m⁻³] (1.10.-31.3.)]")
Aj v tomto prípade som spravila logaritmizáciu.
# Použitie logaritmickej farebnej škály - môže pomôcť zviditeľniť nízke hodnoty:
ggplot(data = shp_data) +
geom_sf(aes(fill = log1p(SO2_zp_5l))) +
scale_fill_viridis_c(option = "viridis") +
theme_minimal() +
labs(title = "Zimné priemerné koncentrácie SO2 (log škála)", fill = "log(SO2 + 1) (1.10.-31.3.)]")
Rovnakú analýzu som následne použila aj na mapu ročných priemerných koncentrácií NOx.
# Mapa ročných priemerných koncentrácií NOx
ggplot(data = shp_data) +
geom_sf(aes(fill = NOx_rp_5l)) +
scale_fill_gradientn(colours = viridisLite::viridis(256)) +
theme_minimal() +
labs(title = "Ročné priemerné koncentrácie NOx", fill = "NOx [µg/m⁻³]")
# Použitie logaritmickej farebnej škály - môže pomôcť zviditeľniť nízke hodnoty:
ggplot(data = shp_data) +
geom_sf(aes(fill = log1p(NOx_rp_5l))) +
scale_fill_viridis_c(option = "viridis") +
theme_minimal() +
labs(title = "Ročné priemerné koncentrácie NOx (log škála)", fill = "log(NOx + 1) [µg/m⁻³]")
ggplot(data = shp_data) +
geom_boxplot(aes(y = NOx_rp_5l)) +
theme_minimal() +
labs(title = "Boxplot ročných priemerných koncentrácií NOx", y = "NOx [µg/m⁻³]")
# Identifikácia extrémnych hodnôt
outliers_nox <- boxplot.stats(shp_data$NOx_rp_5l)$out
# Filtrovanie extrémnych hodnôt
shp_data_filtered_nox <- shp_data[!shp_data$NOx_rp_5l %in% outliers_nox, ]
# Vytvorenie boxplotu bez extrémnych hodnôt
ggplot(data = shp_data_filtered_nox, aes(y = NOx_rp_5l)) +
geom_boxplot() +
labs(title = "Boxplot koncentrácií NOx (bez extrémnych hodnôt)",
y = "NOx [µg/m⁻³]") +
theme_minimal()
ggplot(data = shp_data, aes(x = NOx_rp_5l, y = ..density..)) +
geom_histogram(bins = 30, fill = "red", alpha = 0.7) +
scale_x_continuous(breaks = seq(ceiling(min(shp_data$NOx_rp_5l)), floor(max(shp_data$NOx_rp_5l)), by = 1)) +
theme_minimal() +
labs(title = "Histogram ročných priemerných koncentrácií NOx", x = "NOx [µg/m⁻³]", y = "Density")