Práca s databázou – AI v európskych podnikoch

Autor

Júlia Kurčíková

Publikované

23. októbra 2026

Kód
knitr::opts_chunk$set(echo = TRUE, message = FALSE, warning = FALSE)

library(tidyverse)
── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ dplyr     1.2.1     ✔ readr     2.2.0
✔ forcats   1.0.1     ✔ stringr   1.6.0
✔ ggplot2   4.0.3     ✔ tibble    3.3.1
✔ lubridate 1.9.5     ✔ tidyr     1.3.2
✔ purrr     1.2.2     
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag()    masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
Kód
library(knitr)
library(kableExtra)

Attaching package: 'kableExtra'

The following object is masked from 'package:dplyr':

    group_rows
Kód
library(broom)
PoznámkaDatabáza

Použitá je databáza Eurostatu isoc_eb_ai. Obsahuje podiel podnikov používajúcich umelú inteligenciu podľa krajiny, roku a veľkosti podniku. K dispozícii sú údaje za roky 2021, 2023, 2024 a 2025; rok 2022 v tomto module nie je dostupný.

Otázky pre ďalšiu prácu s databázou:

  • Ako rýchlo sa AI v podnikoch šíri?
  • Kde je Slovensko v porovnaní s V4 a EÚ?
  • Závisí využívanie AI od veľkosti podniku?

1 Práca s údajmi

Tento dokument slúži ako ukážka základnej práce s databázou: vytvorenia tabuľky, importu .csv, výberu a úpravy premenných, sumarizácie, tabuliek a grafov. Výsledky sa tu vecne neinterpretujú.

1.1 Tradičná práca s data.frame

Krátky príklad demonštruje vytvorenie objektu typu data.frame, pridanie stĺpca, pridanie riadka, adresovanie premenných a filtrovanie riadkov. Použité sú hodnoty krajín V4 a EÚ z databázy Eurostatu.

Kód
# Vytvorenie tabuľky so štyrmi krajinami V4.
v4 <- data.frame(
  Krajina = c("Slovensko", "Česko", "Poľsko", "Maďarsko"),
  AI.2023 = c(7.04, 5.90, 3.67, 3.68),
  AI.2025 = c(18.00, 17.60, 8.36, 10.37)
)

# Pridanie nového stĺpca pomocou cbind().
v4 <- cbind(v4, Narast = v4$AI.2025 - v4$AI.2023)

# Pridanie porovnávacieho riadka EÚ pomocou rbind().
v4 <- rbind(
  v4,
  data.frame(Krajina = "EÚ (27 krajín)", AI.2023 = 8.06,
             AI.2025 = 19.95, Narast = 19.95 - 8.06)
)
v4
         Krajina AI.2023 AI.2025 Narast
1      Slovensko    7.04   18.00  10.96
2          Česko    5.90   17.60  11.70
3         Poľsko    3.67    8.36   4.69
4       Maďarsko    3.68   10.37   6.69
5 EÚ (27 krajín)    8.06   19.95  11.89
Kód
# Adresovanie jedného stĺpca a výber krajín nad priemerom V4 v roku 2025.
v4$AI.2025
[1] 18.00 17.60  8.36 10.37 19.95
Kód
v4[v4$AI.2025 > mean(v4$AI.2025[1:4]), c("Krajina", "AI.2025")]
         Krajina AI.2025
1      Slovensko   18.00
2          Česko   17.60
5 EÚ (27 krajín)   19.95
Kód
# Základný opis všetkých premenných tabuľky.
summary(v4)
      Krajina      AI.2023        AI.2025          Narast      
 Length   : 5   Min.   :3.67   Min.   : 8.36   Min.   : 4.690  
 N.unique : 5   1st Qu.:3.68   1st Qu.:10.37   1st Qu.: 6.690  
 N.blank  : 0   Median :5.90   Median :17.60   Median :10.960  
 Min.nchar: 5   Mean   :5.67   Mean   :14.86   Mean   : 9.186  
 Max.nchar:14   3rd Qu.:7.04   3rd Qu.:18.00   3rd Qu.:11.700  
                Max.   :8.06   Max.   :19.95   Max.   :11.890  

1.2 Tabuľka s kableExtra

Rovnaké údaje sú ďalej zobrazené vo formátovanej tabuľke s využitím balíkov knitr a kableExtra.

Kód
v4 %>%
  kable(
    digits = 1,
    col.names = c("Krajina", "2023 (%)", "2025 (%)", "Nárast (p. b.)"),
    caption = "Podniky využívajúce AI – krajiny V4 a EÚ"
  ) %>%
  kable_styling(
    bootstrap_options = c("striped", "hover", "condensed"),
    full_width = FALSE,
    position = "center"
  ) %>%
  row_spec(0, bold = TRUE, background = "#f2f2f2") %>%
  row_spec(1, bold = TRUE, background = "#fde9d9") %>%
  row_spec(5, italic = TRUE, color = "grey40")
Podniky využívajúce AI – krajiny V4 a EÚ
Krajina 2023 (%) 2025 (%) Nárast (p. b.)
Slovensko 7.0 18.0 11.0
Česko 5.9 17.6 11.7
Poľsko 3.7 8.4 4.7
Maďarsko 3.7 10.4 6.7
EÚ (27 krajín) 8.1 20.0 11.9

1.3 Import údajov z otvorenej databázy

Hlavný súbor bol stiahnutý z Eurostatu vo formáte .csv. Súbor krajiny.csv je pomocná tabuľka, ktorá prepája kódy Eurostatu so slovenskými názvami krajín.

Kód
# Import pomocnej tabuľky s názvami krajín.
krajiny <- read.csv2("udaje/krajiny.csv")

# Import dát Eurostatu a náhľad na prvých šesť riadkov.
udaje <- read.csv("udaje/isoc_eb_ai.csv")
head(udaje)
               DATAFLOW       LAST.UPDATE freq size_emp      nace_r2
1 ESTAT:ISOC_EB_AI(1.0) 15/06/26 11:00:00    A      0-9 C10-S951_X_K
2 ESTAT:ISOC_EB_AI(1.0) 15/06/26 11:00:00    A      0-9 C10-S951_X_K
3 ESTAT:ISOC_EB_AI(1.0) 15/06/26 11:00:00    A      0-9 C10-S951_X_K
4 ESTAT:ISOC_EB_AI(1.0) 15/06/26 11:00:00    A      0-9 C10-S951_X_K
5 ESTAT:ISOC_EB_AI(1.0) 15/06/26 11:00:00    A      0-9 C10-S951_X_K
6 ESTAT:ISOC_EB_AI(1.0) 15/06/26 11:00:00    A      0-9 C10-S951_X_K
         indic_is   unit geo TIME_PERIOD OBS_VALUE OBS_FLAG CONF_STATUS
1 E_AIX_CC1SIX_DA PC_ENT  ES        2023      5.74                     
2 E_AIX_CC1SIX_DA PC_ENT  ES        2024      5.66                     
3 E_AIX_CC1SIX_DA PC_ENT  ES        2025      5.49                     
4 E_AIX_CC1SIX_DA PC_ENT  PT        2023     13.36                     
5  E_AIX_CC1SI_DA PC_ENT  ES        2023      1.40                     
6  E_AIX_CC1SI_DA PC_ENT  ES        2024      1.44                     
Kód
# Názvy stĺpcov a stručná kontrola štruktúry importovaných údajov.
colnames(udaje)
 [1] "DATAFLOW"    "LAST.UPDATE" "freq"        "size_emp"    "nace_r2"    
 [6] "indic_is"    "unit"        "geo"         "TIME_PERIOD" "OBS_VALUE"  
[11] "OBS_FLAG"    "CONF_STATUS"
Kód
glimpse(udaje)
Rows: 28,062
Columns: 12
$ DATAFLOW    <chr> "ESTAT:ISOC_EB_AI(1.0)", "ESTAT:ISOC_EB_AI(1.0)", "ESTAT:I…
$ LAST.UPDATE <chr> "15/06/26 11:00:00", "15/06/26 11:00:00", "15/06/26 11:00:…
$ freq        <chr> "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A"…
$ size_emp    <chr> "0-9", "0-9", "0-9", "0-9", "0-9", "0-9", "0-9", "0-9", "0…
$ nace_r2     <chr> "C10-S951_X_K", "C10-S951_X_K", "C10-S951_X_K", "C10-S951_…
$ indic_is    <chr> "E_AIX_CC1SIX_DA", "E_AIX_CC1SIX_DA", "E_AIX_CC1SIX_DA", "…
$ unit        <chr> "PC_ENT", "PC_ENT", "PC_ENT", "PC_ENT", "PC_ENT", "PC_ENT"…
$ geo         <chr> "ES", "ES", "ES", "PT", "ES", "ES", "ES", "PT", "ES", "ES"…
$ TIME_PERIOD <int> 2023, 2024, 2025, 2023, 2023, 2024, 2025, 2023, 2023, 2024…
$ OBS_VALUE   <dbl> 5.74, 5.66, 5.49, 13.36, 1.40, 1.44, 1.95, 5.04, 3.78, 4.3…
$ OBS_FLAG    <chr> "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""…
$ CONF_STATUS <chr> "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""…

2 Tidyverse – moderná práca s údajmi

Balík dplyr poskytuje funkcie na výber stĺpcov (select()), výber riadkov (filter()), vytváranie premenných (mutate()), triedenie (arrange()) a sumarizáciu (summarise()). Nasledujúce kroky vytvoria pracovnú verziu databázy s kratšími názvami premenných.

Kód
# Výber potrebných premenných, ich premenovanie a pripojenie názvov krajín.
udaje.ai <- udaje %>%
  select(
    geo,
    Velkost = size_emp,
    Ukazovatel = indic_is,
    Rok = TIME_PERIOD,
    Hodnota = OBS_VALUE,
    Poznamka = OBS_FLAG
  ) %>%
  left_join(krajiny, by = "geo")

head(udaje.ai)
  geo Velkost      Ukazovatel  Rok Hodnota Poznamka     Krajina
1  ES     0-9 E_AIX_CC1SIX_DA 2023    5.74           Španielsko
2  ES     0-9 E_AIX_CC1SIX_DA 2024    5.66           Španielsko
3  ES     0-9 E_AIX_CC1SIX_DA 2025    5.49           Španielsko
4  PT     0-9 E_AIX_CC1SIX_DA 2023   13.36          Portugalsko
5  ES     0-9  E_AIX_CC1SI_DA 2023    1.40           Španielsko
6  ES     0-9  E_AIX_CC1SI_DA 2024    1.44           Španielsko

2.1 Výber a triedenie

Vybraný je hlavný ukazovateľ E_AI_TANY, teda podiel podnikov používajúcich aspoň jednu technológiu AI. Kategória GE10 označuje podniky s najmenej 10 zamestnancami.

Kód
# Filter vyberie ukazovateľ, veľkostnú kategóriu a dostupné hodnoty.
ai.krajiny <- udaje.ai %>%
  filter(
    Ukazovatel == "E_AI_TANY",
    Velkost == "GE10",
    !is.na(Hodnota)
  ) %>%
  arrange(Rok, Krajina, desc(Hodnota))

head(ai.krajiny)
  geo Velkost Ukazovatel  Rok Hodnota Poznamka             Krajina
1  AL    GE10  E_AI_TANY 2021    3.67                     Albánsko
2  BE    GE10  E_AI_TANY 2021   10.32                     Belgicko
3  BA    GE10  E_AI_TANY 2021    2.07          Bosna a Hercegovina
4  BG    GE10  E_AI_TANY 2021    3.29                    Bulharsko
5  HR    GE10  E_AI_TANY 2021    8.74                   Chorvátsko
6  CY    GE10  E_AI_TANY 2021    2.59                       Cyprus

2.2 Vytváranie novej premennej

Funkcie mutate() a case_when() sú použité na vytvorenie kategórie Obdobie podľa dostupného roka.

Kód
# Vytvorenie novej kategórie podľa roku.
ai.krajiny <- ai.krajiny %>%
  mutate(
    Obdobie = case_when(
      Rok == 2021 ~ "2021",
      Rok == 2023 ~ "2023",
      Rok %in% c(2024, 2025) ~ "2024–2025",
      TRUE ~ "iné"
    )
  )

ai.krajiny %>%
  select(Krajina, Rok, Hodnota, Obdobie) %>%
  head()
              Krajina  Rok Hodnota Obdobie
1            Albánsko 2021    3.67    2021
2            Belgicko 2021   10.32    2021
3 Bosna a Hercegovina 2021    2.07    2021
4           Bulharsko 2021    3.29    2021
5          Chorvátsko 2021    8.74    2021
6              Cyprus 2021    2.59    2021

2.3 Zoskupenie a sumarizácia

Funkcie group_by() a summarise() vytvoria základnú tabuľku opisných štatistík pre každý dostupný rok.

Kód
ai.stats <- ai.krajiny %>%
  filter(!geo %in% c("EU27_2020", "EA")) %>%
  group_by(Rok) %>%
  summarise(
    Pocet.krajin = n(),
    Priemer = mean(Hodnota),
    Sm.odch = sd(Hodnota),
    Minimum = min(Hodnota),
    Median = median(Hodnota),
    Maximum = max(Hodnota),
    .groups = "drop"
  )

ai.stats %>%
  kable(
    digits = 2,
    caption = "Základné štatistiky podielu podnikov používajúcich AI"
  ) %>%
  kable_styling(
    bootstrap_options = c("striped", "hover", "condensed"),
    full_width = FALSE
  ) %>%
  column_spec(1, bold = TRUE)
Základné štatistiky podielu podnikov používajúcich AI
Rok Pocet.krajin Priemer Sm.odch Minimum Median Maximum
2021 33 7.01 4.97 0.90 6.17 23.89
2023 32 7.81 4.06 1.51 6.47 15.17
2024 33 13.36 7.15 3.07 10.78 27.58
2025 33 19.27 10.27 5.21 18.00 42.03

3 Grafy

3.1 Čiarový graf

Čiarový graf je ukážkou kombinácie funkcie ggplot() s vrstvami geom_line() a geom_point(). Vykreslené sú Slovensko, krajiny V4 a agregát EÚ vo všetkých dostupných rokoch.

Kód
udaje.ai %>%
  filter(
    Ukazovatel == "E_AI_TANY",
    Velkost == "GE10",
    geo %in% c("SK", "CZ", "PL", "HU", "EU27_2020")
  ) %>%
  ggplot(aes(x = Rok, y = Hodnota, color = Krajina)) +
  geom_line(linewidth = 1) +
  geom_point(size = 2) +
  scale_x_continuous(breaks = c(2021, 2023, 2024, 2025)) +
  labs(
    title = "Podiel podnikov používajúcich AI",
    subtitle = "Podniky s 10 a viac zamestnancami",
    x = "Rok", y = "% podnikov", caption = "Zdroj: Eurostat, isoc_eb_ai"
  ) +
  theme_minimal()

3.2 Stĺpcový graf

Stĺpcový graf zobrazuje hodnoty jednotlivých krajín v roku 2025. Slovensko je odlíšené farbou pomocou podmienky v estetike fill.

Kód
ai.krajiny %>%
  filter(Rok == 2025, !geo %in% c("EU27_2020", "EA")) %>%
  ggplot(aes(x = reorder(Krajina, Hodnota), y = Hodnota, fill = geo == "SK")) +
  geom_col() +
  coord_flip() +
  scale_fill_manual(values = c("grey70", "#E95420"), guide = "none") +
  labs(
    title = "Podiel podnikov používajúcich AI v roku 2025",
    x = NULL, y = "% podnikov", caption = "Zdroj: Eurostat, isoc_eb_ai"
  ) +
  theme_minimal()

3.3 Boxplot

Boxplot ukazuje rozdelenie hodnôt medzi krajinami v jednotlivých rokoch.

Kód
ai.krajiny %>%
  filter(!geo %in% c("EU27_2020", "EA")) %>%
  ggplot(aes(x = factor(Rok), y = Hodnota)) +
  geom_boxplot(fill = "lightblue", color = "darkblue") +
  labs(
    title = "Rozdelenie podielu podnikov používajúcich AI",
    x = "Rok", y = "% podnikov"
  ) +
  theme_minimal()

4 Základné štatistické postupy

Nasledujúce postupy sú uvedené ako ukážka práce s databázou. Výstupy sa v tejto fáze vecne neinterpretujú; podrobnejšia analýza môže nasledovať na ďalších hodinách.

4.1 Párový t-test

Pre párový t-test sú pripravené pozorovania tých istých krajín v rokoch 2023 a 2025. Funkcia pivot_wider() ich prevedie do formátu, v ktorom má každý rok vlastný stĺpec.

Kód
ai.2023.2025 <- ai.krajiny %>%
  filter(Rok %in% c(2023, 2025), !geo %in% c("EU27_2020", "EA")) %>%
  select(Krajina, Rok, Hodnota) %>%
  pivot_wider(names_from = Rok, names_prefix = "AI.", values_from = Hodnota) %>%
  drop_na()

t.test(ai.2023.2025$AI.2025, ai.2023.2025$AI.2023, paired = TRUE)

    Paired t-test

data:  ai.2023.2025$AI.2025 and ai.2023.2025$AI.2023
t = 9.5902, df = 31, p-value = 8.621e-11
alternative hypothesis: true mean difference is not equal to 0
95 percent confidence interval:
  9.277995 14.290130
sample estimates:
mean difference 
       11.78406 

4.2 ANOVA podľa veľkosti podniku

Pre ukážku funkcie aov() sú pripravené tri veľkostné kategórie podnikov v roku 2025.

Kód
ai.velkost <- udaje.ai %>%
  filter(
    Ukazovatel == "E_AI_TANY",
    Velkost %in% c("10-49", "50-249", "GE250"),
    Rok == 2025,
    !geo %in% c("EU27_2020", "EA"),
    !is.na(Hodnota)
  ) %>%
  mutate(
    Velkost = factor(
      Velkost,
      levels = c("10-49", "50-249", "GE250"),
      labels = c("malé", "stredné", "veľké")
    )
  )

anova.velkost <- aov(Hodnota ~ Velkost, data = ai.velkost)
summary(anova.velkost)
            Df Sum Sq Mean Sq F value   Pr(>F)    
Velkost      2  18166    9083   44.24 2.89e-14 ***
Residuals   94  19302     205                     
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

4.3 Lineárna regresia

Posledný príklad používa lineárnu regresiu. Vysvetľovanou premennou je podiel podnikov s AI a vysvetľujúcou premennou je veľkostná kategória.

Kód
model <- lm(Hodnota ~ Velkost, data = ai.velkost)
summary(model)

Call:
lm(formula = Hodnota ~ Velkost, data = ai.velkost)

Residuals:
     Min       1Q   Median       3Q      Max 
-31.5850  -9.6803   0.1297   8.0950  30.3797 

Coefficients:
               Estimate Std. Error t value Pr(>|t|)    
(Intercept)      16.832      2.533   6.645 1.96e-09 ***
Velkoststredné   11.058      3.555   3.111  0.00247 ** 
Velkostveľké     33.083      3.582   9.235 7.79e-15 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 14.33 on 94 degrees of freedom
Multiple R-squared:  0.4849,    Adjusted R-squared:  0.4739 
F-statistic: 44.24 on 2 and 94 DF,  p-value: 2.889e-14
Kód
# Prehľadná tabuľka koeficientov pomocou balíka broom.
tidy(model, conf.int = TRUE) %>%
  kable(digits = 3, caption = "Koeficienty lineárneho modelu") %>%
  kable_styling(
    bootstrap_options = c("striped", "hover", "condensed"),
    full_width = FALSE
  )
Koeficienty lineárneho modelu
term estimate std.error statistic p.value conf.low conf.high
(Intercept) 16.832 2.533 6.645 0.000 11.802 21.861
Velkoststredné 11.058 3.555 3.111 0.002 4.000 18.117
Velkostveľké 33.083 3.582 9.235 0.000 25.970 40.196

5 Použité zdroje