Cieľom je vybrať si databázu s aspoň tromi numerickými stĺpcami a
zoradením v čase, vykonať prieskumnú analýzu, vizualizácie a
interpretovať výsledky. Využijeme ročný dataset
Eurostatu une_rt_a (miera nezamestnanosti, %), ktorý spĺňa
časové zoradenie a umožní vytvoriť viac numerických stĺpcov (pivot podľa
krajín, resp. výpočet odvodených veličín). Súčasťou je aj
Heatmap korelačnej matice numerických veličín (extra
bod).
Ak máš CSV v inej ceste/názve, uprav parameter
data_pathnižšie.
need <- c("tidyverse","lubridate","janitor","scales","knitr","kableExtra")
to_install <- setdiff(need, rownames(installed.packages()))
if(length(to_install)) install.packages(to_install, quiet = TRUE)
invisible(lapply(need, library, character.only = TRUE))
# Nastav cestu k CSV súboru (umiestni rovno vedľa .Rmd alebo uprav nižšie):
data_path <- "une_rt_a__custom_18708117_linear.csv"
raw <- read_csv(
data_path,
show_col_types = FALSE,
na = c("", ":", "NA", "NaN")
) |> janitor::clean_names()
# Eurostat zvyčajne obsahuje: freq, unit, sex, age, geo, time, value (názvy sa môžu líšiť)
df <- raw
# Rok: 'time' alebo 'time_period' -> 'year'
if("time" %in% names(df)) {
df <- df |> mutate(year = readr::parse_number(as.character(time)))
} else if("time_period" %in% names(df)) {
df <- df |> mutate(year = readr::parse_number(as.character(time_period)))
} else {
stop("V dátach chýba stĺpec s časom (napr. 'time' alebo 'time_period').")
}
# Hodnota (nezamestnanosť v %): 'value' alebo príbuzné názvy
val_col <- if ("value" %in% names(df)) "value" else names(df)[stringr::str_detect(names(df), "^value$|_value$|^obs_value$")]
if(length(val_col) == 0) stop("Nenašiel som numerický stĺpec s hodnotou (napr. 'value').")
val_col <- val_col[1]
# Geografia: 'geo' alebo alternatíva
geo_col <- if ("geo" %in% names(df)) "geo" else names(df)[stringr::str_detect(names(df), "^geo($|_)|^location$|^country$")]
if(length(geo_col) == 0) stop("Nenašiel som stĺpec s krajinou (napr. 'geo').")
geo_col <- geo_col[1]
# Jednotka (pre kontrolu, nezúžime – zobrazíme len prehľad)
unit_col <- if ("unit" %in% names(df)) "unit" else character(0)
if(length(unit_col)) {
df |> dplyr::count(.data[[unit_col]], name = "n")
}
# Jadro datasetu
core <- df |>
dplyr::rename(geo = dplyr::all_of(geo_col), value = dplyr::all_of(val_col)) |>
dplyr::mutate(
geo = as.factor(geo),
year = as.integer(year),
value = as.numeric(value)
) |>
dplyr::filter(!is.na(year), !is.na(value)) |>
dplyr::arrange(geo, year)
# Rýchly rozsah
summary_core <- core |>
dplyr::summarise(
roky_min = min(year, na.rm = TRUE),
roky_max = max(year, na.rm = TRUE),
n_riadkov = dplyr::n()
)
summary_core
Aby sme mali prehľadné porovnanie a minimálne tri numerické stĺpce, vyberieme krajiny V4 + Nemecko (voľne uprav podľa dostupnosti v CSV):
selected_geos <- c("SK", "CZ", "PL", "HU", "DE")
avail_geos <- sort(unique(core$geo))
selected_geos <- selected_geos[selected_geos %in% avail_geos]
if(length(selected_geos) < 3) {
# fallback: ak CSV neobsahuje zvolených, zober prvých 5 dostupných
selected_geos <- head(avail_geos, 5)
}
selected_geos
## [1] Czechia Germany Slovakia
## Levels: Czechia Germany Slovakia
dat_sel <- core |>
dplyr::filter(geo %in% selected_geos)
knitr::kable(
dat_sel |>
dplyr::group_by(geo) |>
dplyr::summarise(rok_od = min(year), rok_do = max(year), n = dplyr::n(), priemer = mean(value, na.rm = TRUE)),
caption = "Pokrytie dát a priemer miery nezamestnanosti (%)"
) |>
kableExtra::kable_styling(full_width = FALSE)
| geo | rok_od | rok_do | n | priemer |
|---|---|---|---|---|
| Czechia | 2014 | 2024 | 11 | 3.190909 |
| Germany | 2014 | 2024 | 11 | 3.581818 |
| Slovakia | 2014 | 2024 | 11 | 7.745455 |
Interpretácia (pokrytie): Dataset pokrýva roky 2014 až 2024. Počty záznamov podľa krajín naznačujú, že máme porovnateľné ročné rady, vhodné na trendovú analýzu aj korelácie.
ggplot(dat_sel, aes(x = year, y = value, color = geo)) +
geom_line(linewidth = 1) +
geom_point(size = 1.8) +
scale_x_continuous(breaks = scales::pretty_breaks()) +
scale_y_continuous(labels = scales::label_percent(accuracy = 0.1, scale = 1)) +
labs(
title = "Miera nezamestnanosti v čase",
x = "Rok",
y = "Nezamestnanosť (%)",
color = "Krajina"
) +
theme_minimal(base_size = 12)
Interpretácia (trend): Graf ukazuje vývoj miery nezamestnanosti v rokoch 2014–2024. Vidíme, že minimá a maximá sa líšia podľa krajiny; najnižší dlhodobý priemer má Czechia; najvyšší zas Slovakia.
stats_tbl <- dat_sel |>
dplyr::group_by(geo) |>
dplyr::summarise(
n = dplyr::n(),
priemer = mean(value, na.rm = TRUE),
median = median(value, na.rm = TRUE),
sd = sd(value, na.rm = TRUE),
min = min(value, na.rm = TRUE),
max = max(value, na.rm = TRUE)
)
stats_tbl_fmt <- stats_tbl |>
dplyr::mutate(dplyr::across(c(priemer, median, sd, min, max), ~round(.x, 2)))
knitr::kable(stats_tbl_fmt, caption = "Deskriptívne štatistiky miery nezamestnanosti (%) podľa krajín") |>
kableExtra::kable_styling(full_width = FALSE)
| geo | n | priemer | median | sd | min | max |
|---|---|---|---|---|---|---|
| Czechia | 11 | 3.19 | 2.6 | 1.32 | 2.0 | 6.1 |
| Germany | 11 | 3.58 | 3.5 | 0.56 | 2.9 | 4.7 |
| Slovakia | 11 | 7.75 | 6.7 | 2.58 | 5.3 | 13.1 |
Interpretácia (štatistiky): Priemerná nezamestnanosť sa pohybuje približne od 3.19% do 7.75%. Rozptyl (SD) naznačuje volatilitu v čase; krajina s najvyšším SD je Slovakia.
yoy <- dat_sel |>
dplyr::arrange(geo, year) |>
dplyr::group_by(geo) |>
dplyr::mutate(yoy_pp = value - dplyr::lag(value)) |>
dplyr::ungroup()
knitr::kable(
yoy |>
dplyr::group_by(geo) |>
dplyr::summarise(
priemer_yoy = mean(yoy_pp, na.rm = TRUE),
sd_yoy = sd(yoy_pp, na.rm = TRUE),
max_narast = max(yoy_pp, na.rm = TRUE),
max_pokles = min(yoy_pp, na.rm = TRUE)
) |>
dplyr::mutate(dplyr::across(where(is.numeric), ~round(.x, 2))),
caption = "Medziročná zmena miery nezamestnanosti (v percentuálnych bodoch)"
) |>
kableExtra::kable_styling(full_width = FALSE)
| geo | priemer_yoy | sd_yoy | max_narast | max_pokles |
|---|---|---|---|---|
| Czechia | -0.35 | 0.64 | 0.6 | -1.1 |
| Germany | -0.13 | 0.39 | 0.7 | -0.5 |
| Slovakia | -0.78 | 0.91 | 1.0 | -1.9 |
Interpretácia (YoY): Medziročné zmeny vystihujú dynamiku. Najväčší jednorazový nárast dosiahla Slovakia; najväčší pokles Slovakia.
Pre koreláciu potrebujeme viac numerických stĺpcov. Urobíme pivot do šírky: každý vybraný štát ako samostatný numerický stĺpec (hodnota = nezamestnanosť v %). Následne spočítame korelačnú maticu medzi krajinami a zobrazíme ju ako heatmap.
wide <- dat_sel |>
dplyr::select(year, geo, value) |>
dplyr::distinct() |>
tidyr::pivot_wider(names_from = geo, values_from = value) |>
dplyr::arrange(year)
num_mat <- wide |> dplyr::select(where(is.numeric), -year)
cor_mat <- stats::cor(num_mat, use = "pairwise.complete.obs", method = "pearson")
cor_long <- as.data.frame(as.table(cor_mat)) |>
rlang::set_names(c("Var1","Var2","Cor")) |>
dplyr::mutate(Var1 = as.character(Var1),
Var2 = as.character(Var2))
ggplot(cor_long, aes(Var1, Var2, fill = Cor)) +
geom_tile(color = "white") +
scale_fill_gradient2(limits = c(-1,1), midpoint = 0, labels = scales::number_format(accuracy = 0.01)) +
geom_text(aes(label = sprintf("%.2f", Cor)), size = 3) +
labs(
title = "Korelačná matica miery nezamestnanosti (podľa krajín)",
x = NULL, y = NULL, fill = "r"
) +
theme_minimal(base_size = 12) +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
Interpretácia (korelácie): - Hodnoty blízke +1 znamenajú, že dve krajiny majú podobné pohyby nezamestnanosti v čase (spoločné šoky, regionálna prepojenosť). - Hodnoty pri 0 znamenajú slabú lineárnu súvislosť; záporné vzťahy sú menej časté a svedčia o odlišnom cykle. - Najvyššia kladná korelácia je medzi dvojicou: Czechia–Slovakia (r = 0.97).
stats_tbl <- dat_sel |>
dplyr::group_by(geo) |>
dplyr::summarise(priemer = mean(value, na.rm = TRUE), .groups = "drop")
rank_tbl <- stats_tbl |>
dplyr::arrange(priemer) |>
dplyr::mutate(poradie_podla_priemeru = dplyr::row_number())
knitr::kable(
rank_tbl |> dplyr::select(geo, priemer, poradie_podla_priemeru) |>
dplyr::mutate(priemer = round(priemer,2)),
caption = "Poradie krajín podľa dlhodobého priemeru nezamestnanosti (nižšie je lepšie)"
) |>
kableExtra::kable_styling(full_width = FALSE)
| geo | priemer | poradie_podla_priemeru |
|---|---|---|
| Czechia | 3.19 | 1 |
| Germany | 3.58 | 2 |
| Slovakia | 7.75 | 3 |
Interpretácia (ranking): Poradie je určené podľa dlhodobého priemeru miery nezamestnanosti. Nižší priemer = lepšie dlhodobé výsledky trhu práce.