Cvičenie 4 – Čistenie a analýza údajov o udržateľnej energetike

Autor

Branislav Stríž

Publikované

19. októbra 2026

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

# Vyhľadanie skutočnej CSV databázy

priecinky <- unique(c(
  getwd(),
  ".",
  "..",
  file.path(path.expand("~"), "Downloads"),
  file.path(path.expand("~"), "Desktop"),
  file.path(path.expand("~"), "Documents")
))

subory <- unlist(lapply(priecinky, function(p) {
  if (dir.exists(p)) {
    list.files(
      p,
      pattern = "\\.csv$",
      full.names = TRUE,
      ignore.case = TRUE
    )
  } else {
    character(0)
  }
}), use.names = FALSE)

subory <- unique(subory)

kandidati <- subory[
  grepl(
    "global.data.on.sustainable.energy",
    basename(subory),
    ignore.case = TRUE
  )
]

# Overenie, či nájdený súbor obsahuje správne údaje

povinne <- c(
  "Entity",
  "Year",
  "Electricity from renewables (TWh)",
  "Electricity from fossil fuels (TWh)",
  "Electricity from nuclear (TWh)",
  "Renewable energy share in the total final energy consumption (%)",
  "Value_co2_emissions_kt_by_country",
  "gdp_per_capita"
)

energia <- NULL

for (subor in kandidati) {
  pokus <- tryCatch(
    read.csv(
      subor,
      check.names = FALSE,
      stringsAsFactors = FALSE,
      na.strings = c("", "NA", "N/A")
    ),
    error = function(e) NULL
  )

  if (!is.null(pokus) &&
      all(povinne %in% names(pokus))) {
    energia <- pokus
    break
  }
}

if (is.null(energia)) {
  stop(
    "Databáza sa nenašla. Vlož súbor ",
    "'global-data-on-sustainable-energy (1).csv' ",
    "do rovnakého priečinka ako QMD súbor."
  )
}

# Výber premenných z pôvodnej databázy

udaje1 <- energia[, povinne]

names(udaje1) <- c(
  "Krajina",
  "Rok",
  "Obnovitelna",
  "Fosilna",
  "Jadrova",
  "Podiel",
  "EmisieCO2",
  "HDP"
)

# Prevod numerických údajov

for (p in names(udaje1)[-1]) {
  udaje1[[p]] <- suppressWarnings(
    as.numeric(as.character(udaje1[[p]]))
  )
}

# Výber Slovenska

slovensko <- subset(
  udaje1,
  Krajina == "Slovakia"
)

slovensko <- slovensko[
  order(slovensko$Rok),
]

rownames(slovensko) <- NULL

if (nrow(slovensko) < 5) {
  stop("Nedostatok údajov o Slovensku.")
}

cat(
  "Databáza úspešne načítaná:",
  nrow(energia),
  "riadkov."
)
Databáza úspešne načítaná: 3649 riadkov.

Úvod

V tomto cvičení sa venujem čisteniu a analýze údajov v programovacom jazyku R. Pokračujem vo svojej téme Dátová analýza pre udržateľnú energetiku.

Cieľom je pracovať so skutočnou databázou, upravovať názvy premenných, identifikovať chýbajúce hodnoty, dopĺňať ich a následne vytvárať grafy, tabuľky a štatistické modely.

Používam databázu Global Data on Sustainable Energy (2000–2020) z platformy Kaggle.

Na rozdiel od ilustračných príkladov pracujem so skutočnými historickými údajmi o výrobe elektriny a ďalších energetických ukazovateľoch.

Zdroj: https://www.kaggle.com/datasets/anshtanwar/global-data-on-sustainable-energy

1. Čistenie údajov

Načítanie databázy

Najskôr zobrazím prvé riadky pôvodnej databázy.

Kód
head(energia)
       Entity Year Access to electricity (% of population)
1 Afghanistan 2000                                1.613591
2 Afghanistan 2001                                4.074574
3 Afghanistan 2002                                9.409158
4 Afghanistan 2003                               14.738506
5 Afghanistan 2004                               20.064968
6 Afghanistan 2005                               25.390894
  Access to clean fuels for cooking
1                               6.2
2                               7.2
3                               8.2
4                               9.5
5                              10.9
6                              12.2
  Renewable-electricity-generating-capacity-per-capita
1                                                 9.22
2                                                 8.86
3                                                 8.47
4                                                 8.09
5                                                 7.75
6                                                 7.51
  Financial flows to developing countries (US $)
1                                          20000
2                                         130000
3                                        3950000
4                                       25970000
5                                             NA
6                                        9830000
  Renewable energy share in the total final energy consumption (%)
1                                                            44.99
2                                                            45.60
3                                                            37.83
4                                                            36.66
5                                                            44.24
6                                                            33.88
  Electricity from fossil fuels (TWh) Electricity from nuclear (TWh)
1                                0.16                              0
2                                0.09                              0
3                                0.13                              0
4                                0.31                              0
5                                0.33                              0
6                                0.34                              0
  Electricity from renewables (TWh) Low-carbon electricity (% electricity)
1                              0.31                               65.95744
2                              0.50                               84.74577
3                              0.56                               81.15942
4                              0.63                               67.02128
5                              0.56                               62.92135
6                              0.59                               63.44086
  Primary energy consumption per capita (kWh/person)
1                                           302.5948
2                                           236.8919
3                                           210.8622
4                                           229.9682
5                                           204.2312
6                                           252.0691
  Energy intensity level of primary energy (MJ/$2017 PPP GDP)
1                                                        1.64
2                                                        1.74
3                                                        1.40
4                                                        1.40
5                                                        1.20
6                                                        1.41
  Value_co2_emissions_kt_by_country Renewables (% equivalent primary energy)
1                               760                                       NA
2                               730                                       NA
3                              1030                                       NA
4                              1220                                       NA
5                              1030                                       NA
6                              1550                                       NA
  gdp_growth gdp_per_capita Density\\n(P/Km2) Land Area(Km2) Latitude Longitude
1         NA             NA                60         652230 33.93911  67.70995
2         NA             NA                60         652230 33.93911  67.70995
3         NA       179.4266                60         652230 33.93911  67.70995
4   8.832278       190.6838                60         652230 33.93911  67.70995
5   1.414118       211.3821                60         652230 33.93911  67.70995
6  11.229715       242.0313                60         652230 33.93911  67.70995

Výber energetických údajov

Z databázy vyberiem údaje o Slovensku za roky 2000 až 2020.

Kód
head(slovensko)
   Krajina  Rok Obnovitelna Fosilna Jadrova Podiel EmisieCO2 HDP
1 Slovakia 2000        4.61    9.68   16.49   3.73        NA  NA
2 Slovakia 2001        5.08    9.65   17.10   6.00        NA  NA
3 Slovakia 2002        5.42    8.81   17.95   5.48        NA  NA
4 Slovakia 2003        3.58    9.52   17.86   5.35        NA  NA
5 Slovakia 2004        4.13    9.29   17.03   6.25        NA  NA
6 Slovakia 2005        4.68    8.93   17.73   6.31        NA  NA

Zobrazím rozmery databázy.

Kód
dim(slovensko)
[1] 21  8

Import údajov

Pri práci so skutočnými databázami sa údaje často načítavajú zo súborov CSV.

V tomto prípade bola databáza načítaná v úvodnom bloku setup.

Skontrolujem jej štruktúru.

Kód
str(energia)
'data.frame':   3649 obs. of  21 variables:
 $ Entity                                                          : chr  "Afghanistan" "Afghanistan" "Afghanistan" "Afghanistan" ...
 $ Year                                                            : int  2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 ...
 $ Access to electricity (% of population)                         : num  1.61 4.07 9.41 14.74 20.06 ...
 $ Access to clean fuels for cooking                               : num  6.2 7.2 8.2 9.5 10.9 ...
 $ Renewable-electricity-generating-capacity-per-capita            : num  9.22 8.86 8.47 8.09 7.75 7.51 7.4 7.25 7.49 7.5 ...
 $ Financial flows to developing countries (US $)                  : num  20000 130000 3950000 25970000 NA ...
 $ Renewable energy share in the total final energy consumption (%): num  45 45.6 37.8 36.7 44.2 ...
 $ Electricity from fossil fuels (TWh)                             : num  0.16 0.09 0.13 0.31 0.33 0.34 0.2 0.2 0.19 0.16 ...
 $ Electricity from nuclear (TWh)                                  : num  0 0 0 0 0 0 0 0 0 0 ...
 $ Electricity from renewables (TWh)                               : num  0.31 0.5 0.56 0.63 0.56 0.59 0.64 0.75 0.54 0.78 ...
 $ Low-carbon electricity (% electricity)                          : num  66 84.7 81.2 67 62.9 ...
 $ Primary energy consumption per capita (kWh/person)              : num  303 237 211 230 204 ...
 $ Energy intensity level of primary energy (MJ/$2017 PPP GDP)     : num  1.64 1.74 1.4 1.4 1.2 1.41 1.5 1.53 1.94 2.25 ...
 $ Value_co2_emissions_kt_by_country                               : num  760 730 1030 1220 1030 ...
 $ Renewables (% equivalent primary energy)                        : num  NA NA NA NA NA NA NA NA NA NA ...
 $ gdp_growth                                                      : num  NA NA NA 8.83 1.41 ...
 $ gdp_per_capita                                                  : num  NA NA 179 191 211 ...
 $ Density\n(P/Km2)                                               : chr  "60" "60" "60" "60" ...
 $ Land Area(Km2)                                                  : int  652230 652230 652230 652230 652230 652230 652230 652230 652230 652230 ...
 $ Latitude                                                        : num  33.9 33.9 33.9 33.9 33.9 ...
 $ Longitude                                                       : num  67.7 67.7 67.7 67.7 67.7 ...

Zobrazím základné štatistiky.

Kód
summary(slovensko)
      Krajina        Rok        Obnovitelna       Fosilna         Jadrova     
 Length   :21   Min.   :2000   Min.   :3.580   Min.   :5.280   Min.   :14.08  
 N.unique : 1   1st Qu.:2005   1st Qu.:4.810   1st Qu.:6.220   1st Qu.:15.15  
 N.blank  : 0   Median :2010   Median :5.420   Median :7.280   Median :15.49  
 Min.nchar: 8   Mean   :2010   Mean   :5.442   Mean   :7.358   Mean   :15.98  
 Max.nchar: 8   3rd Qu.:2015   3rd Qu.:6.240   3rd Qu.:8.810   3rd Qu.:17.03  
                Max.   :2020   Max.   :6.850   Max.   :9.680   Max.   :18.01  
                                                                              
     Podiel         EmisieCO2        HDP     
 Min.   : 3.730   Min.   : NA   Min.   : NA  
 1st Qu.: 6.295   1st Qu.: NA   1st Qu.: NA  
 Median :10.140   Median : NA   Median : NA  
 Mean   : 9.429   Mean   :NaN   Mean   :NaN  
 3rd Qu.:12.287   3rd Qu.: NA   3rd Qu.: NA  
 Max.   :17.640   Max.   : NA   Max.   : NA  
 NAs    :1        NAs    :21    NAs    :21   

2. Upravovanie názvov premenných

Pôvodné názvy

Najskôr si uložím pôvodné názvy stĺpcov vybraných z CSV.

Kód
old_names <- povinne

old_names
[1] "Entity"                                                          
[2] "Year"                                                            
[3] "Electricity from renewables (TWh)"                               
[4] "Electricity from fossil fuels (TWh)"                             
[5] "Electricity from nuclear (TWh)"                                  
[6] "Renewable energy share in the total final energy consumption (%)"
[7] "Value_co2_emissions_kt_by_country"                               
[8] "gdp_per_capita"                                                  

Úprava názvov

Názvy premenných upravím pomocou funkcie make.names(), aby boli použiteľné v programovacom jazyku R.

Kód
upraveny_nazov <- make.names(
  old_names,
  unique = TRUE
)

upraveny_nazov
[1] "Entity"                                                          
[2] "Year"                                                            
[3] "Electricity.from.renewables..TWh."                               
[4] "Electricity.from.fossil.fuels..TWh."                             
[5] "Electricity.from.nuclear..TWh."                                  
[6] "Renewable.energy.share.in.the.total.final.energy.consumption...."
[7] "Value_co2_emissions_kt_by_country"                               
[8] "gdp_per_capita"                                                  

Pre ďalšiu analýzu používam kratšie názvy premenných, ktoré som vytvoril pri importe databázy.

Kód
names(udaje1)
[1] "Krajina"     "Rok"         "Obnovitelna" "Fosilna"     "Jadrova"    
[6] "Podiel"      "EmisieCO2"   "HDP"        

Porovnanie názvov

Vytvorím tabuľku pôvodných a upravených názvov.

Kód
comparison <- data.frame(
  Povodny_nazov = old_names,
  Upraveny_nazov = names(udaje1)
)

knitr::kable(
  comparison,
  caption = "Porovnanie pôvodných a upravených názvov"
)
Porovnanie pôvodných a upravených názvov
Povodny_nazov Upraveny_nazov
Entity Krajina
Year Rok
Electricity from renewables (TWh) Obnovitelna
Electricity from fossil fuels (TWh) Fosilna
Electricity from nuclear (TWh) Jadrova
Renewable energy share in the total final energy consumption (%) Podiel
Value_co2_emissions_kt_by_country EmisieCO2
gdp_per_capita HDP

3. Počiatočné čistenie databázy

Kontrola chýbajúcich údajov

V reálnych databázach sa často nachádzajú neúplné záznamy.

Najskôr zistím počet chýbajúcich hodnôt v jednotlivých premenných.

Kód
colSums(is.na(udaje1))
    Krajina         Rok Obnovitelna     Fosilna     Jadrova      Podiel 
          0           0          21          21         126         194 
  EmisieCO2         HDP 
        428         282 

Celkový počet chýbajúcich údajov

Kód
sum(is.na(udaje1))
[1] 1072

Počet úplných záznamov

Kód
sum(complete.cases(udaje1))
[1] 3017

Počet neúplných záznamov

Kód
sum(!complete.cases(udaje1))
[1] 632

Zobrazenie neúplných riadkov

Kód
neuplne_riadky <- udaje1[
  !complete.cases(udaje1),
]

head(neuplne_riadky, 15)
       Krajina  Rok Obnovitelna Fosilna Jadrova Podiel EmisieCO2       HDP
1  Afghanistan 2000        0.31    0.16       0  44.99       760        NA
2  Afghanistan 2001        0.50    0.09       0  45.60       730        NA
21 Afghanistan 2020        0.68    0.12       0     NA        NA  516.7479
22     Albania 2000        4.55    0.14       0     NA      3170 1126.6833
23     Albania 2001        3.52    0.13       0     NA      3230 1281.6598
24     Albania 2002        3.48    0.16       0     NA      3760 1425.1242
25     Albania 2003        5.12    0.10       0     NA      4070 1846.1201
26     Albania 2004        5.41    0.13       0     NA      4250 2373.5813
27     Albania 2005        5.32    0.07       0     NA      4030 2673.7866
28     Albania 2006        4.95    0.09       0     NA      4010 2972.7429
29     Albania 2007        2.76    0.07       0     NA      4140 3595.0381
30     Albania 2008        3.76    0.07       0     NA      4080 4370.5399
31     Albania 2009        5.20    0.00       0     NA      4220 4114.1349
32     Albania 2010        7.49    0.00       0     NA      4450 4094.3484
33     Albania 2011        4.09    0.06       0     NA      4850 4437.1426

Kontrola duplicít

Kód
sum(duplicated(udaje1))
[1] 0

Odstránenie duplicít

Kód
udaje_bez_duplicit <- unique(udaje1)

dim(udaje_bez_duplicit)
[1] 3649    8

4. Vizualizácia chýbajúcich hodnôt

Graf počtu chýbajúcich údajov

Pomocou stĺpcového grafu zobrazím počet chýbajúcich hodnôt v jednotlivých premenných.

Kód
chybajuce <- colSums(
  is.na(udaje1)
)

barplot(
  chybajuce,
  col = "steelblue",
  main = "Počet chýbajúcich údajov v databáze",
  xlab = "Premenné",
  ylab = "Počet NA",
  las = 2,
  cex.names = 0.75
)

Mapa chýbajúcich hodnôt

Vytvorím mapu, ktorá ukazuje rozloženie chýbajúcich hodnôt.

Kód
matica_na <- is.na(
  udaje1[, -1]
)

image(
  x = seq_len(nrow(matica_na)),
  y = seq_len(ncol(matica_na)),
  z = matica_na,
  col = c("lightblue", "red"),
  xlab = "Pozorovanie",
  ylab = "Premenná",
  main = "Mapa chýbajúcich hodnôt",
  yaxt = "n"
)

axis(
  2,
  at = seq_len(ncol(matica_na)),
  labels = names(matica_na),
  las = 2,
  cex.axis = 0.7
)

Červená farba označuje chýbajúce hodnoty a modrá dostupné údaje.

5. Imputácia chýbajúcich údajov

Imputácia znamená nahrádzanie chýbajúcich hodnôt odhadnutými hodnotami.

Pri analýze energetických časových radov môžeme použiť nahradenie priemerom alebo lineárnu interpoláciu.

Na ukážku využijem údaje o Slovensku.

Pôvodné údaje Slovenska

Kód
udaje_slovensko <- slovensko[, c(
  "Rok",
  "Obnovitelna",
  "Fosilna",
  "Jadrova",
  "Podiel",
  "EmisieCO2",
  "HDP"
)]

head(udaje_slovensko)
   Rok Obnovitelna Fosilna Jadrova Podiel EmisieCO2 HDP
1 2000        4.61    9.68   16.49   3.73        NA  NA
2 2001        5.08    9.65   17.10   6.00        NA  NA
3 2002        5.42    8.81   17.95   5.48        NA  NA
4 2003        3.58    9.52   17.86   5.35        NA  NA
5 2004        4.13    9.29   17.03   6.25        NA  NA
6 2005        4.68    8.93   17.73   6.31        NA  NA

Nahradenie chýbajúcich hodnôt priemerom

Vytvorím kópiu databázy a chýbajúce numerické hodnoty nahradím priemerom danej premennej.

Kód
udaje_priemer <- udaje_slovensko

numericke_stlpce <- setdiff(
  names(udaje_priemer),
  "Rok"
)

for (stlpec in numericke_stlpce) {

  hodnoty <- udaje_priemer[[stlpec]]

  if (any(!is.na(hodnoty))) {

    priemer <- mean(
      hodnoty,
      na.rm = TRUE
    )

    hodnoty[is.na(hodnoty)] <- priemer
  }

  udaje_priemer[[stlpec]] <- hodnoty
}

head(udaje_priemer)
   Rok Obnovitelna Fosilna Jadrova Podiel EmisieCO2 HDP
1 2000        4.61    9.68   16.49   3.73        NA  NA
2 2001        5.08    9.65   17.10   6.00        NA  NA
3 2002        5.42    8.81   17.95   5.48        NA  NA
4 2003        3.58    9.52   17.86   5.35        NA  NA
5 2004        4.13    9.29   17.03   6.25        NA  NA
6 2005        4.68    8.93   17.73   6.31        NA  NA

Kontrola po doplnení priemerom

Kód
colSums(is.na(udaje_priemer))
        Rok Obnovitelna     Fosilna     Jadrova      Podiel   EmisieCO2 
          0           0           0           0           0          21 
        HDP 
         21 

Lineárna interpolácia

Pri časových údajoch môžem použiť interpoláciu medzi známymi hodnotami v susedných rokoch.

Interpoláciu vykonám samostatne pre každú numerickú premennú.

Kód
udaje_interpolacia <- udaje_slovensko

for (stlpec in numericke_stlpce) {

  hodnoty <- udaje_slovensko[[stlpec]]

  platne <- which(
    !is.na(hodnoty) &
    !is.na(udaje_slovensko$Rok)
  )

  if (length(platne) >= 2) {

    udaje_interpolacia[[stlpec]] <- approx(
      x = udaje_slovensko$Rok[platne],
      y = hodnoty[platne],
      xout = udaje_slovensko$Rok,
      rule = 2
    )$y

  } else if (length(platne) == 1) {

    udaje_interpolacia[[stlpec]] <- rep(
      hodnoty[platne],
      nrow(udaje_slovensko)
    )
  }
}

head(udaje_interpolacia)
   Rok Obnovitelna Fosilna Jadrova Podiel EmisieCO2 HDP
1 2000        4.61    9.68   16.49   3.73        NA  NA
2 2001        5.08    9.65   17.10   6.00        NA  NA
3 2002        5.42    8.81   17.95   5.48        NA  NA
4 2003        3.58    9.52   17.86   5.35        NA  NA
5 2004        4.13    9.29   17.03   6.25        NA  NA
6 2005        4.68    8.93   17.73   6.31        NA  NA

Kontrola po interpolácii

Kód
colSums(is.na(udaje_interpolacia))
        Rok Obnovitelna     Fosilna     Jadrova      Podiel   EmisieCO2 
          0           0           0           0           0          21 
        HDP 
         21 

Porovnanie metód

Porovnám pôvodné údaje o výrobe obnoviteľnej elektriny s hodnotami doplnenými priemerom a interpoláciou.

Kód
porovnanie <- data.frame(
  Rok = udaje_slovensko$Rok,
  Povodna_hodnota = udaje_slovensko$Obnovitelna,
  Priemer = udaje_priemer$Obnovitelna,
  Interpolacia = udaje_interpolacia$Obnovitelna
)

knitr::kable(
  porovnanie,
  digits = 2,
  caption = "Porovnanie metód dopĺňania chýbajúcich údajov"
)
Porovnanie metód dopĺňania chýbajúcich údajov
Rok Povodna_hodnota Priemer Interpolacia
2000 4.61 4.61 4.61
2001 5.08 5.08 5.08
2002 5.42 5.42 5.42
2003 3.58 3.58 3.58
2004 4.13 4.13 4.13
2005 4.68 4.68 4.68
2006 4.81 4.81 4.81
2007 4.93 4.93 4.93
2008 4.57 4.57 4.57
2009 4.92 4.92 4.92
2010 5.95 5.95 5.95
2011 5.00 5.00 5.00
2012 5.47 5.47 5.47
2013 6.36 6.36 6.36
2014 6.24 6.24 6.24
2015 6.05 6.05 6.05
2016 6.63 6.63 6.63
2017 6.54 6.54 6.54
2018 5.81 5.81 5.81
2019 6.65 6.65 6.65
2020 6.85 6.85 6.85

Lineárna interpolácia zohľadňuje časové poradie pozorovaní. Je však potrebné uvedomiť si, že interpolované hodnoty predstavujú odhady, nie skutočné merania.

Ak pôvodná premenná neobsahuje chýbajúce hodnoty, obe metódy ponechajú jej hodnoty nezmenené.

6. Príprava vyčistenej databázy

Na ďalšiu analýzu použijem databázu s interpolovanými hodnotami.

Kód
udaje_ciste <- udaje_interpolacia

head(udaje_ciste)
   Rok Obnovitelna Fosilna Jadrova Podiel EmisieCO2 HDP
1 2000        4.61    9.68   16.49   3.73        NA  NA
2 2001        5.08    9.65   17.10   6.00        NA  NA
3 2002        5.42    8.81   17.95   5.48        NA  NA
4 2003        3.58    9.52   17.86   5.35        NA  NA
5 2004        4.13    9.29   17.03   6.25        NA  NA
6 2005        4.68    8.93   17.73   6.31        NA  NA

Vytvorenie novej premennej

Vypočítam celkovú výrobu elektriny zo sledovaných zdrojov.

Kód
udaje_ciste$CelkovaVyroba <-
  udaje_ciste$Obnovitelna +
  udaje_ciste$Fosilna +
  udaje_ciste$Jadrova

head(udaje_ciste)
   Rok Obnovitelna Fosilna Jadrova Podiel EmisieCO2 HDP CelkovaVyroba
1 2000        4.61    9.68   16.49   3.73        NA  NA         30.78
2 2001        5.08    9.65   17.10   6.00        NA  NA         31.83
3 2002        5.42    8.81   17.95   5.48        NA  NA         32.18
4 2003        3.58    9.52   17.86   5.35        NA  NA         30.96
5 2004        4.13    9.29   17.03   6.25        NA  NA         30.45
6 2005        4.68    8.93   17.73   6.31        NA  NA         31.34

Výpočet podielu obnoviteľnej elektriny

Vypočítam podiel obnoviteľnej elektriny na súčte výroby z obnoviteľných, fosílnych a jadrových zdrojov.

Kód
udaje_ciste$PodielVyroby <- ifelse(
  udaje_ciste$CelkovaVyroba > 0,
  100 * udaje_ciste$Obnovitelna /
    udaje_ciste$CelkovaVyroba,
  NA_real_
)

head(udaje_ciste)
   Rok Obnovitelna Fosilna Jadrova Podiel EmisieCO2 HDP CelkovaVyroba
1 2000        4.61    9.68   16.49   3.73        NA  NA         30.78
2 2001        5.08    9.65   17.10   6.00        NA  NA         31.83
3 2002        5.42    8.81   17.95   5.48        NA  NA         32.18
4 2003        3.58    9.52   17.86   5.35        NA  NA         30.96
5 2004        4.13    9.29   17.03   6.25        NA  NA         30.45
6 2005        4.68    8.93   17.73   6.31        NA  NA         31.34
  PodielVyroby
1     14.97726
2     15.95979
3     16.84276
4     11.56331
5     13.56322
6     14.93299

Tento vypočítaný podiel nie je totožný s premennou Podiel, ktorá označuje podiel obnoviteľnej energie na konečnej spotrebe energie.

Výber údajov od roku 2010

Kód
udaje_2010 <- subset(
  udaje_ciste,
  Rok >= 2010
)

udaje_2010
    Rok Obnovitelna Fosilna Jadrova Podiel EmisieCO2 HDP CelkovaVyroba
11 2010        5.95    6.90   14.57  10.28        NA  NA         27.42
12 2011        5.00    7.80   15.41  10.36        NA  NA         28.21
13 2012        5.47    7.28   15.49  10.47        NA  NA         28.24
14 2013        6.36    6.36   15.72  10.68        NA  NA         28.44
15 2014        6.24    5.30   15.50  12.24        NA  NA         27.04
16 2015        6.05    5.34   15.15  13.41        NA  NA         26.54
17 2016        6.63    5.28   14.77  13.09        NA  NA         26.68
18 2017        6.54    5.67   15.08  12.43        NA  NA         27.29
19 2018        5.81    5.92   14.84  12.43        NA  NA         26.57
20 2019        6.65    6.26   15.28  17.64        NA  NA         28.19
21 2020        6.85    6.22   15.44  17.64        NA  NA         28.51
   PodielVyroby
11     21.69949
12     17.72421
13     19.36969
14     22.36287
15     23.07692
16     22.79578
17     24.85007
18     23.96482
19     21.86677
20     23.58993
21     24.02666

Triedenie podľa celkovej výroby

Kód
udaje_zoradene <- udaje_ciste[
  order(
    udaje_ciste$CelkovaVyroba,
    decreasing = TRUE
  ),
]

head(udaje_zoradene)
   Rok Obnovitelna Fosilna Jadrova Podiel EmisieCO2 HDP CelkovaVyroba
3 2002        5.42    8.81   17.95   5.48        NA  NA         32.18
2 2001        5.08    9.65   17.10   6.00        NA  NA         31.83
6 2005        4.68    8.93   17.73   6.31        NA  NA         31.34
7 2006        4.81    8.39   18.01   6.57        NA  NA         31.21
4 2003        3.58    9.52   17.86   5.35        NA  NA         30.96
1 2000        4.61    9.68   16.49   3.73        NA  NA         30.78
  PodielVyroby
3     16.84276
2     15.95979
6     14.93299
7     15.41173
4     11.56331
1     14.97726

7. Tabuľky a grafy

Bodový graf

Vytvorím graf zobrazujúci vzťah medzi výrobou obnoviteľnej a fosílnej elektriny.

Kód
plot(
  udaje_ciste$Obnovitelna,
  udaje_ciste$Fosilna,
  pch = 19,
  col = "darkgreen",
  xlab = "Obnoviteľná elektrina (TWh)",
  ylab = "Fosílna elektrina (TWh)",
  main = "Vzťah obnoviteľnej a fosílnej výroby"
)

Vývoj obnoviteľnej elektriny

Kód
plot(
  udaje_ciste$Rok,
  udaje_ciste$Obnovitelna,
  type = "b",
  pch = 19,
  col = "darkgreen",
  xlab = "Rok",
  ylab = "Výroba (TWh)",
  main = "Vývoj obnoviteľnej elektriny na Slovensku"
)

Porovnanie energetických zdrojov

Kód
matplot(
  udaje_ciste$Rok,
  udaje_ciste[, c(
    "Obnovitelna",
    "Fosilna",
    "Jadrova"
  )],
  type = "b",
  pch = 19,
  lty = 1,
  col = c(
    "darkgreen",
    "darkorange",
    "steelblue"
  ),
  xlab = "Rok",
  ylab = "Výroba (TWh)",
  main = "Porovnanie zdrojov elektriny na Slovensku"
)

legend(
  "topleft",
  legend = c(
    "Obnoviteľná",
    "Fosílna",
    "Jadrová"
  ),
  col = c(
    "darkgreen",
    "darkorange",
    "steelblue"
  ),
  lty = 1,
  pch = 19,
  bty = "n"
)

Boxplot

Pomocou boxplotu porovnám rozdelenie výroby elektriny podľa zdroja.

Kód
boxplot(
  udaje_ciste[, c(
    "Obnovitelna",
    "Fosilna",
    "Jadrova"
  )],
  col = c(
    "lightgreen",
    "orange",
    "lightblue"
  ),
  names = c(
    "Obnoviteľná",
    "Fosílna",
    "Jadrová"
  ),
  main = "Rozdelenie výroby elektriny",
  ylab = "Výroba (TWh)"
)

8. Základné štatistiky

Výpočet základných štatistík

Pre jednotlivé zdroje vypočítam priemer, štandardnú odchýlku, minimum, maximum a medián.

Kód
zdroje <- udaje_ciste[, c(
  "Obnovitelna",
  "Fosilna",
  "Jadrova"
)]

statistiky <- data.frame(
  Zdroj = c(
    "Obnoviteľná",
    "Fosílna",
    "Jadrová"
  ),
  Priemer = sapply(zdroje, mean),
  SD = sapply(zdroje, sd),
  Minimum = sapply(zdroje, min),
  Median = sapply(zdroje, median),
  Maximum = sapply(zdroje, max)
)

rownames(statistiky) <- NULL

knitr::kable(
  statistiky,
  digits = 2,
  caption = "Základné štatistiky výroby elektriny"
)
Základné štatistiky výroby elektriny
Zdroj Priemer SD Minimum Median Maximum
Obnoviteľná 5.44 0.92 3.58 5.42 6.85
Fosílna 7.36 1.52 5.28 7.28 9.68
Jadrová 15.98 1.22 14.08 15.49 18.01

Kvartily

Vypočítam prvý a tretí kvartil výroby obnoviteľnej elektriny.

Kód
quantile(
  udaje_ciste$Obnovitelna,
  probs = c(0.25, 0.75)
)
 25%  75% 
4.81 6.24 

Kvartily fosílnej elektriny:

Kód
quantile(
  udaje_ciste$Fosilna,
  probs = c(0.25, 0.75)
)
 25%  75% 
6.22 8.81 

Súhrnná tabuľka

Kód
summary(
  udaje_ciste[, c(
    "Obnovitelna",
    "Fosilna",
    "Jadrova",
    "Podiel"
  )]
)
  Obnovitelna       Fosilna         Jadrova          Podiel     
 Min.   :3.580   Min.   :5.280   Min.   :14.08   Min.   : 3.73  
 1st Qu.:4.810   1st Qu.:6.220   1st Qu.:15.15   1st Qu.: 6.31  
 Median :5.420   Median :7.280   Median :15.49   Median :10.28  
 Mean   :5.442   Mean   :7.358   Mean   :15.98   Mean   : 9.82  
 3rd Qu.:6.240   3rd Qu.:8.810   3rd Qu.:17.03   3rd Qu.:12.43  
 Max.   :6.850   Max.   :9.680   Max.   :18.01   Max.   :17.64  

9. Testovanie hypotéz

T-test: Porovnanie obnoviteľnej výroby v dvoch obdobiach

Pomocou t-testu porovnám priemernú výrobu obnoviteľnej elektriny v rokoch 2000 až 2009 a 2010 až 2020.

Kód
prve_obdobie <-
  udaje_ciste$Obnovitelna[
    udaje_ciste$Rok <= 2009
  ]

druhe_obdobie <-
  udaje_ciste$Obnovitelna[
    udaje_ciste$Rok >= 2010
  ]

t_test_result <- t.test(
  prve_obdobie,
  druhe_obdobie
)

print(t_test_result)

    Welch Two Sample t-test

data:  prve_obdobie and druhe_obdobie
t = -6.272, df = 18.995, p-value = 5.07e-06
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -1.9577746 -0.9780435
sample estimates:
mean of x mean of y 
 4.673000  6.140909 

Nulová hypotéza predpokladá rovnakú priemernú výrobu obnoviteľnej elektriny v oboch obdobiach.

Pri interpretácii je potrebné zohľadniť, že ide o historické časové údaje, pri ktorých nemusí byť splnená nezávislosť pozorovaní.

ANOVA: Porovnanie zdrojov elektriny

Pomocou analýzy rozptylu porovnám výrobu obnoviteľnej, fosílnej a jadrovej elektriny.

Najskôr vytvorím databázu v dlhom formáte.

Kód
anova_udaje <- data.frame(
  Zdroj = factor(
    rep(
      c(
        "Obnoviteľná",
        "Fosílna",
        "Jadrová"
      ),
      each = nrow(udaje_ciste)
    )
  ),
  Vyroba = c(
    udaje_ciste$Obnovitelna,
    udaje_ciste$Fosilna,
    udaje_ciste$Jadrova
  )
)

head(anova_udaje)
        Zdroj Vyroba
1 Obnoviteľná   4.61
2 Obnoviteľná   5.08
3 Obnoviteľná   5.42
4 Obnoviteľná   3.58
5 Obnoviteľná   4.13
6 Obnoviteľná   4.68

Vykonám ANOVA test.

Kód
anova_result <- aov(
  Vyroba ~ Zdroj,
  data = anova_udaje
)

summary(anova_result)
            Df Sum Sq Mean Sq F value Pr(>F)    
Zdroj        2 1322.8   661.4   427.3 <2e-16 ***
Residuals   60   92.9     1.5                   
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

ANOVA porovnáva priemerné hodnoty viacerých skupín. Keďže jednotlivé roky a zdroje energie môžu byť navzájom závislé, ide o orientačnú didaktickú analýzu.

10. Lineárna regresia

Modelovanie výroby obnoviteľnej elektriny

Pomocou lineárnej regresie preskúmam vzťah medzi výrobou obnoviteľnej elektriny, rokom a výrobou elektriny z ostatných sledovaných zdrojov.

Model má tvar:

\[ REN_t = \beta_0 + \beta_1 ROK_t + \beta_2 FOS_t + \beta_3 JAD_t + \varepsilon_t \]

Kde:

  • \(REN_t\) je výroba obnoviteľnej elektriny,
  • \(ROK_t\) je rok,
  • \(FOS_t\) je výroba fosílnej elektriny,
  • \(JAD_t\) je výroba jadrovej elektriny,
  • \(\beta_0\) je konštanta,
  • \(\beta_1\), \(\beta_2\) a \(\beta_3\) sú regresné koeficienty,
  • \(\varepsilon_t\) je náhodná chyba.
Kód
model <- lm(
  Obnovitelna ~ Rok + Fosilna + Jadrova,
  data = udaje_ciste
)

summary(model)

Call:
lm(formula = Obnovitelna ~ Rok + Fosilna + Jadrova, data = udaje_ciste)

Residuals:
    Min      1Q  Median      3Q     Max 
-0.8796 -0.3400 -0.0750  0.4446  0.8280 

Coefficients:
              Estimate Std. Error t value Pr(>|t|)
(Intercept) -119.53564   94.71264  -1.262    0.224
Rok            0.06283    0.04647   1.352    0.194
Fosilna       -0.30017    0.21050  -1.426    0.172
Jadrova        0.05654    0.15298   0.370    0.716

Residual standard error: 0.5257 on 17 degrees of freedom
Multiple R-squared:  0.7201,    Adjusted R-squared:  0.6707 
F-statistic: 14.58 on 3 and 17 DF,  p-value: 5.925e-05

Regresné koeficienty

Kód
koeficienty <- as.data.frame(
  summary(model)$coefficients
)

koeficienty$Premenna <- rownames(
  koeficienty
)

rownames(koeficienty) <- NULL

knitr::kable(
  koeficienty,
  digits = 4,
  caption = "Regresné koeficienty modelu"
)
Regresné koeficienty modelu
Estimate Std. Error t value Pr(>|t|) Premenna
-119.5356 94.7126 -1.2621 0.2240 (Intercept)
0.0628 0.0465 1.3521 0.1941 Rok
-0.3002 0.2105 -1.4260 0.1720 Fosilna
0.0565 0.1530 0.3696 0.7163 Jadrova

Skutočné a predikované hodnoty

Porovnám skutočné hodnoty výroby obnoviteľnej elektriny s hodnotami odhadnutými regresným modelom.

Kód
udaje_ciste$PredikovanaVyroba <- predict(
  model,
  newdata = udaje_ciste
)

porovnanie_predikcie <- data.frame(
  Rok = udaje_ciste$Rok,
  SkutocnaVyroba = udaje_ciste$Obnovitelna,
  PredikovanaVyroba = udaje_ciste$PredikovanaVyroba
)

knitr::kable(
  porovnanie_predikcie,
  digits = 2,
  caption = "Skutočná a predikovaná obnoviteľná výroba"
)
Skutočná a predikovaná obnoviteľná výroba
Rok SkutocnaVyroba PredikovanaVyroba
2000 4.61 4.15
2001 5.08 4.25
2002 5.42 4.61
2003 3.58 4.46
2004 4.13 4.54
2005 4.68 4.76
2006 4.81 5.00
2007 4.93 5.15
2008 4.57 5.33
2009 4.92 5.41
2010 5.95 5.50
2011 5.00 5.34
2012 5.47 5.56
2013 6.36 5.92
2014 6.24 6.28
2015 6.05 6.32
2016 6.63 6.37
2017 6.54 6.34
2018 5.81 6.31
2019 6.65 6.30
2020 6.85 6.38

Graf regresného modelu

Kód
plot(
  udaje_ciste$Rok,
  udaje_ciste$Obnovitelna,
  type = "b",
  pch = 19,
  col = "darkgreen",
  ylim = range(
    c(
      udaje_ciste$Obnovitelna,
      udaje_ciste$PredikovanaVyroba
    )
  ),
  xlab = "Rok",
  ylab = "Výroba (TWh)",
  main = "Skutočná a predikovaná obnoviteľná výroba"
)

lines(
  udaje_ciste$Rok,
  udaje_ciste$PredikovanaVyroba,
  type = "b",
  pch = 17,
  col = "darkblue"
)

legend(
  "topleft",
  legend = c(
    "Skutočná výroba",
    "Regresný odhad"
  ),
  col = c(
    "darkgreen",
    "darkblue"
  ),
  lty = 1,
  pch = c(19, 17),
  bty = "n"
)

Vyhodnotenie modelu

Kód
model_summary <- summary(model)

statistiky_modelu <- data.frame(
  R_squared = model_summary$r.squared,
  Adjusted_R_squared = model_summary$adj.r.squared,
  Pocet_pozorovani = nobs(model)
)

knitr::kable(
  statistiky_modelu,
  digits = 4,
  caption = "Štatistiky regresného modelu"
)
Štatistiky regresného modelu
R_squared Adjusted_R_squared Pocet_pozorovani
0.7201 0.6707 21

Regresný model umožňuje analyzovať štatistické vzťahy medzi energetickými premennými. Výsledky však nedokazujú príčinnú súvislosť a nemusia predstavovať spoľahlivú predpoveď budúcej výroby.

11. Výber databázy na ďalšie hodiny

Na ďalšie hodiny som si vybral databázu Global Data on Sustainable Energy (2000–2020).

Databáza obsahuje historické údaje o energetike jednotlivých krajín.

Pri ďalšej analýze plánujem pracovať najmä s týmito premennými:

  • krajina,
  • rok pozorovania,
  • výroba elektriny z obnoviteľných zdrojov,
  • výroba elektriny z fosílnych palív,
  • výroba jadrovej elektriny,
  • podiel obnoviteľnej energie,
  • emisie CO₂,
  • HDP na obyvateľa.

Chcem skúmať vývoj udržateľnej energetiky na Slovensku a porovnávať ho s ďalšími krajinami.

Údaje budem analyzovať chronologicky a využívať pri tvorbe grafov, štatistických modelov a ďalšom čistení databáz.

Zdroj databázy:

https://www.kaggle.com/datasets/anshtanwar/global-data-on-sustainable-energy

Záver

V tomto cvičení som sa venoval čisteniu a analýze skutočnej databázy v programovacom jazyku R.

Na historických údajoch o udržateľnej energetike som demonštroval import CSV, úpravu názvov premenných, identifikáciu chýbajúcich hodnôt a ich dopĺňanie pomocou priemeru a lineárnej interpolácie.

Následne som vytvoril grafy, tabuľky základných štatistík a použil t-test, analýzu rozptylu a lineárnu regresiu.

Získané postupy budem môcť využiť pri ďalšom spracovaní a analýze údajov o udržateľnej energetike.