Práca s údajmi

Tradičná práca s databázou

Pre prácu s údajmi (databázou) používame najčastejšie dátový typ .data.frame.. Je to tabuľka, ktorá pozostáva zo stĺpcov rozličných typov. Jeden riadok pritom predstavuje jeden záznam databázy.

Príklad

Majme údaje o žiakoch, ktoré predstavujú tri premenné - Meno, Vek a Body:

# Nastavenie prostredia pre čistý výstup
knitr::opts_chunk$set(
  echo = TRUE,
  message = FALSE,
  warning = FALSE
)

# Vytvorenie samostatných premenných
Meno <- c("Jana", "Jozef", "Mária", "Peter", "Lucia")
Vek <- c(10, 11, 9, 12, 10)
Body <- c(85, 92, 78, 88, 95)

# Spojenie do jedného data.frame
udaje <- data.frame(Meno, Vek, Body)
print(udaje)
##    Meno Vek Body
## 1  Jana  10   85
## 2 Jozef  11   92
## 3 Mária   9   78
## 4 Peter  12   88
## 5 Lucia  10   95
# Adresovanie premenných a základné výpočty
cat("\n Priemerný vek žiakov je:", round(mean(udaje$Vek), 2), "rokov\n")
## 
##  Priemerný vek žiakov je: 10.4 rokov
cat("Najvyšší počet bodov získal:", udaje$Meno[which.max(udaje$Body)], "\n")
## Najvyšší počet bodov získal: Lucia
# Výber konkrétnych údajov
print(subset(udaje, Meno == "Jozef"))
##    Meno Vek Body
## 2 Jozef  11   92
print(udaje[, c("Vek", "Body")])
##   Vek Body
## 1  10   85
## 2  11   92
## 3   9   78
## 4  12   88
## 5  10   95
# Základná deskriptívna štatistika
summary(udaje)
##      Meno                Vek            Body     
##  Length:5           Min.   : 9.0   Min.   :78.0  
##  Class :character   1st Qu.:10.0   1st Qu.:85.0  
##  Mode  :character   Median :10.0   Median :88.0  
##                     Mean   :10.4   Mean   :87.6  
##                     3rd Qu.:11.0   3rd Qu.:92.0  
##                     Max.   :12.0   Max.   :95.0
# Pridanie nového stĺpca - napr. známka podľa bodov
udaje$Znamka <- ifelse(
  udaje$Body >= 90, "Výborný",
  ifelse(udaje$Body >= 80, "Chválitebný", "Dobrý")
)
print(udaje)
##    Meno Vek Body      Znamka
## 1  Jana  10   85 Chválitebný
## 2 Jozef  11   92     Výborný
## 3 Mária   9   78       Dobrý
## 4 Peter  12   88 Chválitebný
## 5 Lucia  10   95     Výborný
# Pridanie nového stĺpca typu TRUE/FALSE
udaje$MaAuto <- c(TRUE, FALSE, FALSE, TRUE, FALSE)
print(udaje)
##    Meno Vek Body      Znamka MaAuto
## 1  Jana  10   85 Chválitebný   TRUE
## 2 Jozef  11   92     Výborný  FALSE
## 3 Mária   9   78       Dobrý  FALSE
## 4 Peter  12   88 Chválitebný   TRUE
## 5 Lucia  10   95     Výborný  FALSE
# Pridanie nového riadku (s inými údajmi)
novy.ziak <- data.frame(Meno = "Diana", Vek = 13, Body = 81, Znamka = "Chválitebný", MaAuto = FALSE)
udaje <- rbind(udaje, novy.ziak)
print(udaje)
##    Meno Vek Body      Znamka MaAuto
## 1  Jana  10   85 Chválitebný   TRUE
## 2 Jozef  11   92     Výborný  FALSE
## 3 Mária   9   78       Dobrý  FALSE
## 4 Peter  12   88 Chválitebný   TRUE
## 5 Lucia  10   95     Výborný  FALSE
## 6 Diana  13   81 Chválitebný  FALSE
# Zoradenie podľa bodov (od najlepšieho)
udaje <- udaje[order(-udaje$Body), ]
print(udaje)
##    Meno Vek Body      Znamka MaAuto
## 5 Lucia  10   95     Výborný  FALSE
## 2 Jozef  11   92     Výborný  FALSE
## 4 Peter  12   88 Chválitebný   TRUE
## 1  Jana  10   85 Chválitebný   TRUE
## 6 Diana  13   81 Chválitebný  FALSE
## 3 Mária   9   78       Dobrý  FALSE

Tabuľky v prostredí kableextra

library(knitr)
library(kableExtra)
library(tidyverse)

# Pridáme percentuálny výkon a farebné zvýraznenie
udaje2 <- udaje %>%
  mutate(
    percent = round(Body/100*100,1),
    grade = case_when(
      Body >= 90 ~ "A",
      Body >= 80 ~ "B",
      Body >= 70 ~ "C",
      TRUE ~ "D"
    )
  )

# Tabuľka s farebným zvýraznením podľa bodov
udaje2 %>%
  kable(caption = "Výsledky žiakov s farebným zvýraznením",
        align = c("l","c","l","r","c","c")) %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"),
                full_width = FALSE, position = "center") %>%
  row_spec(which(udaje2$Body >= 90), bold = TRUE, color = "white", background = "green") %>%
  row_spec(which(udaje2$Body < 70), bold = TRUE, color = "white", background = "red") %>%
  column_spec(6, bold = TRUE, color = "blue")  # zvýrazníme stĺpec percent
Výsledky žiakov s farebným zvýraznením
Meno Vek Body Znamka MaAuto percent grade
5 Lucia 10 95 Výborný FALSE 95 A
2 Jozef 11 92 Výborný FALSE 92 A
4 Peter 12 88 Chválitebný TRUE 88 B
1 Jana 10 85 Chválitebný TRUE 85 B
6 Diana 13 81 Chválitebný FALSE 81 B
3 Mária 9 78 Dobrý FALSE 78 C

Import údajov z otv. databáz

  1. Mendeley Data Tuto sa dostaneme z Mendeley Data, kde si údaje viete voľne stiahnúť. Údaje sa vzťahujú k už publikovaným článkom vo vydavateľstve Elsevier. Výber sa dá urobiť jednoducho zadaním kľúčových slov.
  2. Kaggle Data Tuto sa dostaneme z Kaggle Datasets, kde si údaje viete voľne stiahnúť. Údaje sa vzťahujú k projektom podporovaným Kaggle. Výber sa dá urobiť jednoducho zadaním kľúčových slov.
  3. Databázy knižníc R - .library(datasets). alebo .library(wooldridge). ale aj iné - stačí si dať príkaz data()
library(datasets)
library(kableExtra)
library(dplyr)

# Získanie zoznamu datasetov z balíka 'datasets'
ds <- as.data.frame(utils::data(package = "datasets")$results)[, c("Item","Title")]

# Filter podľa kľúčového slova "Air"
ds_air <- ds %>% filter(grepl("Air", Title))

# Tabuľka prvých 10 datasetov obsahujúcich "Air"
ds_air %>%
  head(10) %>%
  kable(caption = "Datasety obsahujúce slovo 'Air'",
        col.names = c("Dataset", "Title"),
        align = c("l","l")) %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"),
                full_width = FALSE, position = "center") %>%
  row_spec(1, bold = TRUE, color = "white", background = "steelblue")
Datasety obsahujúce slovo ‘Air’
Dataset Title
AirPassengers Monthly Airline Passenger Numbers 1949-1960
airmiles Passenger Miles on Commercial US Airlines, 1937-1960
airquality New York Air Quality Measurements

Práca s Wooldridge

library(wooldridge)
ds_wool <- as.data.frame(utils::data(package = "wooldridge")$results)[, c("Item","Title")]

# Filter datasetov, kde názov obsahuje "wage"
ds_wool %>%
  filter(grepl("wage", Title, ignore.case = TRUE)) %>%
  kable(caption = "Datasety z Wooldridge obsahujúce 'wage'",
        col.names = c("Dataset", "Title"),
        align = c("l","l")) %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"),
                full_width = FALSE, position = "center") %>%
  row_spec(1, bold = TRUE, color = "white", background = "darkgreen")
Datasety z Wooldridge obsahujúce ‘wage’
Dataset Title
minwage minwage
wage1 wage1
wage2 wage2
wagepan wagepan
wageprc wageprc