SZZ materiály

Základy zpracování dat

Základní datové typy

numeric

x <- 10
y <- 3.14

logical

x <- 5 > 3

character

name <- "Ondra"
city <- "Ústí nad Labem"

factor

gender <- factor(c("Male", "Female"))

Základní datové struktury

Vektor

numbers <- c(1, 2, 3, 4)

Přístup k prvku:

numbers[1]

Matice

matrix_data <- matrix(c(1, 2, 3, 4), nrow = 2, ncol = 2)

Přístup k prvku:

matrix_data[1, 2] # [řádek, sloupec]

Datová tabulka

students <- data.frame(name = c("Anna", "Petr"), age = c(20, 21))

Přístup ke sloupci:

students$name

Seznam

anna_list <- list(name = "Anna", age = 20, grades = c(1, 2, 1))

Přístup k položce:

anna_list$name

Základní matematické operace

Sčítání

5 + 3

Odčítání

5 - 3

Násobení

5 * 3

Dělení

5 / 3

Mocnina

5 ^ 2

Zbytek po dělení

5 %% 2

Celočíselné dělení

5 %/% 2

Základní logické operace

Rovnost

x == y

Nerovnost

x != y

Větší než

x > y

Menší než

x < y

Větší nebo rovno

x >= y

Menší nebo rovno

x <= y

Logické AND

x & y

Logické OR

x | y

Logická negace

!x

Operace nad řetězci

Vytvoření řetězce

name <- "Ondra"

Spojení řetězců

paste("Hello", "World")

Výsledek:

"Hello World"

Bez mezery:

paste0("Hello", "World")

Výsledek:

"HelloWorld"

Délka řetězce

nchar("Ondra")

Převod na malá písmena

tolower("ONDRA")

Převod na velká písmena

toupper("ondra")

Nahrazení textu

gsub(
  "World",
  "R",
  "Hello World"
)

Rozdělení řetězce

strsplit(
  "a,b,c",
  ","
)

Regulární výrazy

Obsahuje text

grepl(
  "high school",
  education
)

Začíná textem

grepl(
  "^high",
  education
)

Končí textem

grepl(
  "school$",
  education
)

Libovolný znak

grepl(
  "a.c",
  text
)

Příklady:

abc
axc
a7c

Opakování znaku

grepl(
  "a+",
  text
)

Příklady:

a
aa
aaa

Číslice

grepl(
  "[0-9]",
  text
)

Písmeno

grepl(
  "[A-Za-z]",
  text
)

Více možností

grepl(
  "cat|dog",
  text
)

Příklady:

cat
dog

Načítání a ukládání dat

Načtení CSV souboru

data <- read.csv(
  "data.csv"
)

Načtení CSV souboru s oddělovačem ;

data <- read.csv2(
  "data.csv"
)

Uložení CSV souboru

write.csv(
  data,
  "output.csv",
  row.names = FALSE
)

Načtení XLSX souboru

library(readxl)

data <- read_excel(
  "data.xlsx"
)

Načtení konkrétního listu

data <- read_excel(
  "data.xlsx",
  sheet = "Sheet1"
)

Uložení XLSX souboru

library(writexl)

write_xlsx(
  data,
  "output.xlsx"
)

Podmíněné příkazy

if

if (x > 0) {
  print("kladné číslo")
}

if else

if (x > 0) {
  print("kladné číslo")
} else {
  print("záporné číslo nebo nula")
}

if else if

if (x > 0) {
  print("kladné číslo")
} else if (x < 0) {
  print("záporné číslo")
} else {
  print("nula")
}

Cykly

for

for (i in 1:5) {
  print(i)
}

for přes vektor

numbers <- c(10, 20, 30)

for (number in numbers) {
  print(number)
}

while

x <- 1

while (x <= 5) {
  print(x)
  x <- x + 1
}

break

for (i in 1:10) {
  if (i == 5) {
    break
  }

  print(i)
}

next

for (i in 1:5) {
  if (i == 3) {
    next
  }

  print(i)
}

Manipulace s datovými tabulkami

Výběr sloupců

data %>%
  select(
    name,
    age
  )

Přejmenování sloupců

data %>%
  rename(
    full_name = name
  )

Přidání nového sloupce

data %>%
  mutate(
    age_plus_one = age + 1
  )

Filtrování řádků

data %>%
  filter(
    age >= 18
  )

Filtrování pomocí regulárního výrazu

data %>%
  filter(
    grepl(
      "high school",
      education
    )
  )

Řazení vzestupně

data %>%
  arrange(age)

Řazení sestupně

data %>%
  arrange(desc(age))

Seskupování a sumarizace

Seskupení podle jedné proměnné

data %>%
  group_by(gender) %>%
  summarise(
    avg_age = mean(age)
  )

Seskupení podle více proměnných

data %>%
  group_by(
    gender,
    race
  ) %>%
  summarise(
    avg_age = mean(age),
    .groups = "drop"
  )

Slučování tabulek

Inner Join

inner_join(
  table1,
  table2,
  by = "id"
)

Left Join

left_join(
  table1,
  table2,
  by = "id"
)

Right Join

right_join(
  table1,
  table2,
  by = "id"
)

Full Join

full_join(
  table1,
  table2,
  by = "id"
)

Převod mezi formáty

Dlouhý → Široký formát

pivot_wider(
  data,
  names_from = gender,
  values_from = avg.score
)

Široký → Dlouhý formát

pivot_longer(
  data,
  cols = c(
    female,
    male
  ),
  names_to = "gender",
  values_to = "avg.score"
)

Kontingenční tabulky

Absolutní četnosti

table(
  data$gender
)

Dvourozměrná kontingenční tabulka

table(
  data$gender,
  data$race
)

Relativní četnosti

prop.table(
  table(data$gender)
)

Relativní četnosti po řádcích

prop.table(
  table(
    data$gender,
    data$race
  ),
  margin = 1
)

Tvorba grafů

Bodový graf (Scatter Plot)

plot(
  x = data$height,
  y = data$weight
)

Interpretace:


Spojnicový graf (Line Plot)

plot(
  data$year,
  data$value,
  type = "l"
)

Interpretace:


Sloupcový graf (Bar Plot)

barplot(
  table(data$gender)
)

Interpretace:


Koláčový graf (Pie Chart)

pie(
  table(data$gender)
)

Interpretace:

Histogram

hist(
  data$age
)

Interpretace:

Možné tvary:

Boxplot

boxplot(
  data$age
)

Pro skupiny:

boxplot(
  age ~ gender,
  data = data
)

Interpretace:

Pokročilé grafy

Více histogramů pomocí ggplot2

library(ggplot2)

ggplot(
  data,
  aes(x = age)
) +
  geom_histogram()

Boxplot podle kategorií

ggplot(
  data,
  aes(
    x = gender,
    y = age
  )
) +
  geom_boxplot()

Bodový graf s regresní přímkou

ggplot(
  data,
  aes(
    x = height,
    y = weight
  )
) +
  geom_point() +
  geom_smooth(
    method = "lm",
    se = FALSE
  )

Interpretace: