Úvod

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_path nižšie.

Balíčky

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))

Načítanie a príprava dát

# 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

Výber pracovnej vzorky

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)
Pokrytie dát a priemer miery nezamestnanosti (%)
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.

Trend miery nezamestnanosti v čase

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.

Deskriptívne štatistiky (percentá)

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)
Deskriptívne štatistiky miery nezamestnanosti (%) podľa krajín
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.

Odvodené veličiny: medziročná zmena (p.b.)

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)
Medziročná zmena miery nezamestnanosti (v percentuálnych bodoch)
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.

Korelačná analýza (Heatmap) – extra bod

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).

Bonus: Porovnanie dlhodobého priemeru (ranking)

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)
Poradie krajín podľa dlhodobého priemeru nezamestnanosti (nižšie je lepšie)
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.

Záver

  • Dataset pokrýva obdobie 2014–2024 a umožňuje porovnať viaceré krajiny.
  • Trendové grafy ukázali vývoj v čase a reakcie na ekonomické šoky.
  • Deskriptívne štatistiky charakterizujú úroveň aj volatilitu.
  • Heatmap korelácií potvrdila, že niektoré krajiny majú podobnú dynamiku (vysoké r), čo poukazuje na regionálne a cyklické väzby.