---
format:
  revealjs:
    slide-number: true
    theme: [default, ../theme/presentation_theme.scss, ../theme/presentation_components.scss]
    embed-resources: true
    preview-links: false
    output-file: "presentation"
    output-ext: "html"
    highlight-style: github-light
    include-in-header: "../theme/fonts-include.html"
filters:
  - ../theme/rn-shorthand.lua
  - ../_extensions/EmilHvitfeldt/roughnotation/rough.lua
---

```{r}
#| label: setup
#| include: false
options(htmltools.dir.version = FALSE)
knitr::opts_chunk$set(
  fig.width = 7,
  fig.height = 5,
  fig.align = "center",
  out.width = "100%"
)

here::i_am("Presentation/presentation.qmd")
source(here::here("R", "set_r_theme.R"))

path_materials <- "Presentation/Materials"

include_local_figure <- function(data_source) {
  knitr::include_graphics(
    path = here::here(path_materials, data_source),
    error = TRUE
  )
}
```

```{r}
#| label: dynamic-link-generation
#| include: false
project_name <-
  basename(here::here())

display_name <-
  paste("Biostatistika", "-", project_name)

github_url <-
  paste0(
    "https://github.com/CUNI-NATUR-Biostatistics/",
    project_name
  )

slides_url <-
  paste0(
    "https://CUNI-NATUR-Biostatistics.github.io/",
    project_name,
    "/"
  )
```

## Jak vytvoříme obrázek z měření tučňáků a uchováme jeho postup? {.course-title .bg-indigo}

::: {.course-title-mark}
![Logo kurzu Biostatistika](../theme/course-logo-reversed.svg) BIOSTATISTIKA
:::

::: {.course-title-number}
L00
:::

::: {.course-title-formal}
První kroky v R a RStudiu
:::

::: {.course-title-link}
[cuni-natur-biostatistics.github.io/materialy.html](https://cuni-natur-biostatistics.github.io/materialy.html)
:::

::: {.notes}
0-1 min. Nechte titulní snímek zobrazený a požádejte všechny, aby otevřeli RStudio. Kontrolujeme pouze to, že se otevře okno. Do žádného panelu zatím nic nepíšeme.
:::

## Jak vytvoříme obrázek z měření tučňáků a uchováme jeho postup?

```{r}
#| label: data-a-obrazek-na-uvod
#| include: false
data_tucnaci_uvod <-
  read.csv(
    file = here::here("data", "palmer_penguins.csv")
  )
```

:::: {.columns .align-top}

::: {.column width="45%"}

```{r}
#| label: tabulka-na-uvod
#| echo: false
knitr::kable(
  x = head(
    x = data_tucnaci_uvod,
    n = 4
  ),
  col.names = c(
    "druh",
    "délka křídla (mm)",
    "hmotnost (g)"
  )
)
```

:::

::: {.column .fragment width="55%"}

```{r}
#| label: obrazek-na-uvod
#| echo: false
#| fig-alt: "Bodový graf délky křídla a tělesné hmotnosti tučňáků."
plot(
  x = data_tucnaci_uvod$flipper_length_mm,
  y = data_tucnaci_uvod$body_mass_g,
  xlab = "Délka křídla (mm)",
  ylab = "Tělesná hmotnost (g)",
  pch = 16,
  col = "grey40",
  cex = 0.8,
  cex.lab = 1.2,
  cex.axis = 1.0
)
```

:::

::::

::: {.fragment .strip-olive .text-center}
Měření v tabulce, obrázek a postup, který je spojuje.
:::

::: {.notes}
1-4 min. Začněte tabulkou a nechte studenty pojmenovat, co vidí. Odhalte graf jako cílový výstup, ale nevykládejte vztah mezi měřeními. Dvojice krátce odpoví: Co bychom potřebovali uchovat, kdyby příští týden přišla nová tabulka a chtěli jsme stejný obrázek? Odhalte závěrečný proužek.
:::

## Výsledky učení

Po absolvování této lekce budete schopni:

::: {.incremental}
- orientovat se v [okně RStudia]{.text-hgl-graphite}
- [uložit a spustit]{.text-hgl-indigo_velvet} zapsané pokyny
- otevřít tabulku CSV a vytvořit [obrázek]{.text-hgl-indigo_velvet}
- po čistém spuštění R [obnovit výsledek]{.text-hgl-orange}
:::

::: {.notes}
4-5 min. Jen přečtěte cíle. Technické pojmy jako objekt, funkce, relativní cesta a restart zde nepřidávejte.
:::

## Kdy je užitečnější uložit postup než opakovat klikání?

:::: {.columns .align-top}

::: {.column width="48%"}

### Tabulkový procesor

- rychlé otevření malé tabulky
- pohodlná ruční kontrola
- několik drobných změn

:::

::: {.column .fragment width="48%"}

### Uložený textový postup

- stejné kroky pro nová data
- přesná kontrola provedených kroků
- oprava jednoho kroku bez hádání

:::

::::

::: {.fragment .takeaway-strip}
Tabulkový procesor a R se mohou doplňovat. Uložený postup je výhodný hlavně tehdy, když potřebujeme práci přesně opakovat.
:::

::: {.notes}
5-7 min. Nejprve komentujte levou stranu a zdůrazněte, že Excel není špatný nástroj. Odhalte uložený textový postup. Nechte hlasovat rukou: Která možnost se snáze přesně zopakuje za týden? Závěr odhalte po hlasování.
:::

## R provádí zapsané příkazy, RStudio poskytuje pracovní okno

:::: {.layout-grid-2}

::: {.panel-result}
[R]{.panel-title}

Programovací jazyk a program, který provádí přesné textové pokyny zvané **kód**.
:::

::: {.fragment .panel-note}
[RStudio]{.panel-title}

Okno, ve kterém kód píšeme, ukládáme, posíláme do R a kontrolujeme výsledky.
:::

::::

::: {.notes}
7-9 min. Vysvětlete nejprve R. Odhalte RStudio, přepněte do jeho živého okna a řekněte doslova: R je program, který příkaz provede. RStudio nám dává pracovní okno. Studenti zatím jen sledují.
:::

## Kde hledat zapsané příkazy, odpověď R, paměť a obrázek?

```{r}
#| label: cele-okno-rstudia
#| echo: false
#| out-width: "92%"
include_local_figure("rstudio-overview.png")
```

::: {.fragment .text-center}
**1 Source** · **2 Console** · **3 Environment** · **4 Files, Plots, Packages a Help**
:::

::: {.footer}
Snímek: [Rcragun, Wikimedia Commons](https://commons.wikimedia.org/wiki/File:RStudio_-_Fresh_Install.png), CC BY-SA 4.0; číselné značky doplněny pro tuto lekci.
:::

::: {.notes}
9-12 min. Před odhalením názvů studenti ve dvojici ukážou čtyři oblasti podle toho, co by v nich hledali. Po odhalení přepněte do živého RStudia a pojmenujte oblasti ve stejném pořadí.
:::

## Source uchovává skript, Console ukazuje odpověď R

:::: {.columns .align-top}

::: {.column width="50%"}

```{r}
#| label: panel-source
#| echo: false
include_local_figure("rstudio-source.png")
```

**Source** je textový editor. Skript je uložený soubor s kódem a koncovkou `.R`.

:::

::: {.column .fragment width="50%"}

```{r}
#| label: panel-console
#| echo: false
include_local_figure("rstudio-console.png")
```

**Console** je přímé spojení s běžícím R. Značka `>` znamená, že R čeká na příkaz.

:::

::::

::: {.fragment .strip-orange .text-center}
Klikněte za `>`, napište `1 + 1` a stiskněte **Enter**.
:::

::: {.footer}
Snímek: [Rcragun, Wikimedia Commons](https://commons.wikimedia.org/wiki/File:RStudio_-_Fresh_Install.png), CC BY-SA 4.0; výřezy upraveny pro tuto lekci.
:::

::: {.notes}
12-15 min. Ukažte blikající kurzor, čísla řádků a uložení v Source. Odhalte Console, ukažte značku větší než a napište 1 + 1. Odhalte pokyn; studenti příkaz zopakují a ukážou, kde je příkaz a kde výsledek.
:::

## Co ukazují dvě pravé oblasti RStudia?

:::: {.columns .align-top}

::: {.column width="50%"}

```{r}
#| label: panel-environment
#| echo: false
include_local_figure("rstudio-environment.png")
```

**Environment** ukazuje pojmenované výsledky v paměti právě běžícího R.

:::

::: {.column .fragment width="50%"}

```{r}
#| label: panel-zalozky
#| echo: false
include_local_figure("rstudio-tabs.png")
```

**Files** ukazuje soubory, **Plots** obrázky a **Help** nápovědu. Záložky sdílejí jedno místo.

:::

::::

::: {.notes}
15-17 min. Vysvětlete Environment jako aktuální paměť a přepněte do živého RStudia. Odhalte druhou oblast; studenti kliknou na Files, Plots a Help a ukážou, kde by hledali soubor, obrázek a nápovědu. Neprobírejte typy objektů.
:::

## Jak se řádek ze skriptu dostane k R?

| Source | Klávesa | Console |
|---|---|---|
| `2 + 3` | **Ctrl + Enter** | příkaz a výsledek |

<br>

:::: {.layout-grid-2}

::: {.fragment .panel-note}
[Ctrl + S]{.panel-title}

Uloží text skriptu do souboru.
:::

::: {.fragment .panel-result}
[Ctrl + Enter]{.panel-title}

Pošle aktuální řádek nebo označenou část do R.
:::

::::

::: {.notes}
17-23 min. Projděte nejprve cestu v tabulce. Odhalte Ctrl + S, otevřete nový R Script, napište komentář a 2 + 3 a soubor uložte. Odhalte Ctrl + Enter a řádek proveďte. Studenti postup zopakují a sousedovi vysvětlí rozdíl obou zkratek.
:::

## Co znamená značka `+` na začátku řádku?

::: {.text-center .text-size-large .text-font-monospace}
`> (2 + 3`

`+`
:::

::: {.text-center .text-size-large}
Na co R čeká?
:::

::: {.fragment}
::: {.panel-warning}
[Příkaz není dokončený]{.panel-title}

Chybí pravá závorka. Klávesa **Esc** vrátí běžnou značku `>`; opravený příkaz je `(2 + 3)`.
:::
:::

::: {.notes}
23-28 min. V Console zadejte neúplný příkaz, chvíli ponechte značku plus viditelnou a teprve po odpovědích vysvětlete čekání. Studenti chybu vytvoří, zruší Esc a spustí opravený výraz. Pokračujte, až všichni znovu vidí větší než.
:::

## Projekt je jedna složka práce otevřená v RStudiu

:::: {.columns .align-top}

::: {.column width="50%"}

```text
prvni-kroky-r/
├── prvni-kroky-r.Rproj
├── data/
│   └── palmer_penguins.csv
├── vystupy/
└── prvni_kroky.R
```

:::

::: {.column width="50%"}

::: {.fragment}
- `.Rproj` otevře složku jako projekt
- `data` obsahuje vstupní tabulku
:::

::: {.fragment}
- `vystupy` obsahuje uložené výsledky
- `prvni_kroky.R` uchovává kód
:::

:::

::::

::: {.fragment .strip-orange}
Zkontrolujte stejnou strukturu v záložce Files a název projektu vpravo nahoře.
:::

::: {.notes}
28-42 min. Nechte viditelný strom složek a po dvojicích odhalte význam jeho položek. Vytvořte projekt prvni-kroky-r, složky data a vystupy a uložte rozpracovaný skript jako prvni_kroky.R. Odhalte kontrolní pokyn; studenti postup opakují. Soubor CSV zkopírujte do data, ale relativní cestu zatím nevysvětlujte.
:::

## Kdy se pojmenovaný výsledek objeví v Environment?

:::: {.columns}

::: {.column width="52%"}

```{r}
#| label: prvni-objekt-na-snimku
#| echo: true
#| eval: false
# Uložíme délku lekce v minutách
delka_lekce_min <- 90
```

:::

::: {.column width="44%"}

::: {.text-center .text-size-large}
Stačí řádek napsat?
:::

::: {.fragment}
::: {.panel-result}
[Objekt vznikne až po spuštění]{.panel-title}

Po **Ctrl + Enter** se `delka_lekce_min` objeví v Environment.
:::
:::

:::

::::

::: {.notes}
42-47 min. Napište řádek, ale nespouštějte jej. Studenti předpoví stav Environment. Po spuštění vyslovte poprvé pojem objekt. Pak změňte 90 na 80 bez spuštění a nechte studenty vysvětlit, proč se paměť nezměnila.
:::

## Co změní nastavení `digits`?

:::: {.columns}

::: {.column width="52%"}

::: {.fragment}

```{r}
#| label: funkce-round-na-snimku
#| echo: true
#| eval: false
round(
  x = 3.14159,
  digits = 2
)
```

:::

::: {.fragment .text-center}
Očekávaný výsledek: **`r round(x = 3.14159, digits = 2)`**
:::

:::

::: {.column width="44%"}

- `round` je **funkce**, která číslo zaokrouhlí
- `x` je pojmenovaný **argument**: zaokrouhlované číslo
- `digits` je pojmenovaný **argument**: počet desetinných míst

:::

::::

::: {.fragment .strip-orange}
Změňte `digits` a spusťte příkaz. Do Console napište `?round`; v Help najděte části Usage a Arguments.
:::

::: {.notes}
47-53 min. Vysvětlete viditelné významy funkce a argumentů. Odhalte konkrétní příkaz a nechte studenty odhadnout výsledek. Odhalte výsledek, v živém RStudiu změňte digits a otevřete ?round. Kontrola: jiný výsledek a otevřená stránka Help.
:::

## Odkud se v R berou další možnosti?

::: {.fragment}
**Balíček** je nainstalovaný doplněk, který může přidat funkce, dokumentaci nebo data.
:::

:::: {.layout-grid-2}

::: {.fragment .panel-note}
[Instalace v Console]{.panel-title}

Obvykle ji provedeme pouze jednou.

`install.packages(pkgs = "palmerpenguins")`
:::

::: {.fragment .panel-result}
[Použití konkrétního obsahu]{.panel-title}

Dvojitá dvojtečka vybírá obsah z balíčku.

`names(x = palmerpenguins::penguins)`
:::

::::

::: {.strip-orange}
Pokud instalace do pěti minut nefunguje, pokračujeme s připraveným CSV. Další kroky balíček nepotřebují.
:::

::: {.notes}
53-63 min. Záložní cesta s pětiminutovým limitem je viditelná od začátku. Nechte nejprve zaznít návrhy, odkud R získává další možnosti, a odhalte definici balíčku. Odhalte instalaci a příkaz zadejte živě pouze do Console. Odhalte použití obsahu a ukažte dvojitou dvojtečku. Studenti opakují, pokud instalace funguje. Po pěti minutách ukončete řešení instalace a pokračujte se souborem v data. Nepoužívejte library().
:::

## Jeden řádek patří jednomu tučňákovi

```{r}
#| label: tabulka-jeden-tucnak
#| include: false
data_tucnaci_pribeh <-
  read.csv(
    file = here::here("data", "palmer_penguins.csv")
  )
```

```{r}
#| label: zobrazit-tabulku-jeden-tucnak
#| echo: false
knitr::kable(
  x = head(
    x = data_tucnaci_pribeh,
    n = 5
  ),
  col.names = c(
    "druh",
    "délka křídla (mm)",
    "tělesná hmotnost (g)"
  )
)
```

::: {.fragment .panel-data}
První řádek popisuje jednoho tučňáka druhu **`r data_tucnaci_pribeh[["species"]][[1]]`**: délka křídla **`r data_tucnaci_pribeh[["flipper_length_mm"]][[1]]` mm**, tělesná hmotnost **`r data_tucnaci_pribeh[["body_mass_g"]][[1]]` g**.
:::

::: {.footer}
Data: Gorman, Williams a Fraser; [Palmer Penguins](https://allisonhorst.github.io/palmerpenguins/), CC0.
:::

::: {.notes}
63-66 min. Zopakujte úvodní otázku doslova: Jak vytvoříme obrázek z měření tučňáků a uchováme jeho postup? Studenti nejprve ukážou jeden řádek a tři zaznamenané údaje. Odhalte slovní popis prvního řádku. Nezavádějte typy proměnných ani popisné statistiky.
:::

## Cesta k datům začíná ve složce projektu

:::: {.columns .align-top}

::: {.column width="42%"}

```text
prvni-kroky-r/
└── data/
    └── palmer_penguins.csv
```

`data/palmer_penguins.csv` popisuje cestu od hlavní složky projektu.

:::

::: {.column .fragment width="58%"}

```{r}
#| label: nacist-csv-na-snimku
#| echo: true
#| eval: false
# Načteme CSV ze složky data
data_tucnaci <-
  read.csv(
    file = "data/palmer_penguins.csv"
  )
```

:::

::::

::: {.fragment .strip-indigo}
Po spuštění se `data_tucnaci` objeví v Environment.
:::

::: {.notes}
66-71 min. Vysvětlete cestu pomocí známé složky. Odhalte příkaz, napište jej do Source a spusťte. Studenti zopakují postup. Odhalte očekávané umístění objektu a nechte je zkontrolovat Environment. V jejich skriptu nesmí být adresa začínající uživatelskou složkou konkrétního počítače.
:::

## Jak poznáme, že jsme otevřeli správnou tabulku?

```{r}
#| label: data-pro-kontrolu
#| include: false
data_tucnaci_kontrola <-
  read.csv(
    file = here::here("data", "palmer_penguins.csv")
  )
```

:::: {.columns .align-top}

::: {.column width="48%"}

1. Jak vypadají první řádky?
2. Jak se jmenují sloupce?
3. Kolik řádků tabulka obsahuje?

:::

::: {.column .fragment width="48%"}

```{r}
#| label: kontrola-dat-na-snimku
#| echo: true
#| eval: false
head(
  x = data_tucnaci,
  n = 6
)
names(x = data_tucnaci)
nrow(x = data_tucnaci)
```

:::

::::

::: {.fragment .strip-olive}
Očekáváme sloupce **`r paste(names(data_tucnaci_kontrola), collapse = ", ")`** a **`r nrow(data_tucnaci_kontrola)` řádků**.
:::

::: {.notes}
71-75 min. Nechte nejprve zaznít tři otázky, teprve potom ukažte funkce. Studenti příkazy přidají do Source a porovnají výstup s očekáváním. Neotvírejte summary(), missing values ani typy dat.
:::

## Jeden tučňák vytvoří jeden bod

```{r}
#| label: data-pro-prvni-bod
#| include: false
data_tucnaci_graf <-
  read.csv(
    file = here::here("data", "palmer_penguins.csv")
  )
```

:::: {.columns .align-top}

::: {.column width="42%"}

::: {.panel-data}
[První řádek]{.panel-title}

Vodorovně: **`r data_tucnaci_graf[["flipper_length_mm"]][[1]]` mm**

Svisle: **`r data_tucnaci_graf[["body_mass_g"]][[1]]` g**
:::

Jeden řádek dodá bodu dvě souřadnice.

::: {.fragment}
Znak `$` vybírá pojmenovaný sloupec tabulky.

```{r}
#| label: kod-pro-prvni-graf
#| echo: true
#| eval: false
plot(
  x = data_tucnaci$flipper_length_mm,
  y = data_tucnaci$body_mass_g
)
```

`x` určuje vodorovnou a `y` svislou osu.
:::

:::

::: {.column width="58%"}

```{r}
#| label: zvyraznit-prvni-bod
#| echo: false
#| fig-alt: "Bodový graf délky křídla a tělesné hmotnosti tučňáků se zvýrazněným bodem prvního tučňáka."
plot(
  x = data_tucnaci_graf$flipper_length_mm,
  y = data_tucnaci_graf$body_mass_g,
  xlab = "Délka křídla (mm)",
  ylab = "Tělesná hmotnost (g)",
  pch = 16,
  col = "grey70",
  cex = 0.8,
  cex.lab = 1.2,
  cex.axis = 1.0
)
points(
  x = data_tucnaci_graf[["flipper_length_mm"]][[1]],
  y = data_tucnaci_graf[["body_mass_g"]][[1]],
  pch = 16,
  col = biostat_cols[["orange"]],
  cex = 1.5
)
```

:::

::::

::: {.strip-orange}
Najděte přibližnou polohu prvního tučňáka. Obrazec zatím statisticky nevykládáme.
:::

::: {.notes}
75-80 min. Studenti nejprve přibližně najdou zvýrazněný bod podle dvou hodnot. Potom odhalte význam znaku $ a argumentů x a y. V živém RStudiu napište základní plot() přímo s oběma sloupci; studenti postup zopakují. Až poté vyslovte název bodový graf, anglicky scatter plot.
:::

## Plots ukazuje obrázek, PNG zůstává jako soubor

:::: {.columns}

::: {.column width="55%"}

```{r}
#| label: vysledny-bodovy-graf
#| echo: false
#| fig-alt: "Výsledný bodový graf délky křídla a tělesné hmotnosti tučňáků."
plot(
  x = data_tucnaci_graf$flipper_length_mm,
  y = data_tucnaci_graf$body_mass_g,
  xlab = "Délka křídla (mm)",
  ylab = "Tělesná hmotnost (g)",
  pch = 16,
  col = "grey40",
  cex = 0.8,
  cex.lab = 1.2,
  cex.axis = 1.0
)
```

:::

::: {.column width="41%"}

::: {.incremental}
1. `png()` otevře cílový soubor.
2. Stejný `plot()` do něj nakreslí obrázek.
3. `dev.off()` soubor dokončí.
:::

::: {.fragment .panel-result}
[Soubor na disku]{.panel-title}

`vystupy/tucnaci.png`
:::

:::

::::

::: {.notes}
80-84 min. Nechte graf viditelný a po jednom odhalte tři kroky ukládání. V Source zkopírujte stejný příkaz plot() mezi png(filename = "vystupy/tucnaci.png") a dev.off(). Studenti postup zopakují. Odhalte cílový soubor, přepněte do Files a otevřete vystupy. Kontrolou je existující PNG, nikoli interpretace vztahu.
:::

## Co se při restartu R změní?

**Restart R ukončí právě běžící R uvnitř RStudia a spustí čistý běh. RStudio zůstane otevřené.**

::: {.fragment}
| Co sledujeme | Zůstane, nebo zmizí? |
|---|---|
| uložený skript `prvni_kroky.R` | ? |
| vstupní CSV ve složce `data` | ? |
| PNG ve složce `vystupy` | ? |
| objekty v Environment | ? |
:::

::: {.fragment}
::: {.takeaway-strip}
Soubory zůstanou na disku. Environment se vyčistí. Uložený skript může potřebné objekty a výstup obnovit.
:::
:::

::: {.notes}
84-88 min. Přečtěte definici a nechte studenty vlastními slovy popsat, co restart neudělá. Odhalte tabulku a vyžádejte předpověď čtyř položek. Uložte skript, zvolte Session, Restart R a porovnejte stav. Odhalte závěr a tlačítkem Source spusťte celý skript od začátku. Studenti provedou stejný test.
:::

## Co už umíme

::: {.incremental}
- [R]{.text-hgl-indigo_velvet} provádí příkazy; RStudio poskytuje pracovní okno.
- [Source]{.text-hgl-indigo_velvet} uchovává skript; Console komunikuje s běžícím R.
- [Environment]{.text-hgl-orange} je dočasná paměť; Files ukazuje soubory na disku.
- Plots ukazuje obrázek; [PNG]{.text-hgl-indigo_velvet} je uložený soubor.
- Uložený skript obnovil výsledek z [uloženého CSV]{.text-hgl-graphite}.
:::

::: {.notes}
88-89 min. Shrnutí opřete o to, co studenti právě viděli po restartu a spuštění celého skriptu. Nezavádějte formální definici reprodukovatelnosti.
:::

## Co byste poslali spolužákovi, aby výsledek obnovil?

:::: {.columns .align-top}

::: {.column width="31%"}
::: {.panel-note .text-center}
[A]{.panel-title}

Pouze obrázek `tucnaci.png`
:::
:::

::: {.column width="31%"}
::: {.panel-note .text-center}
[B]{.panel-title}

Pouze skript `prvni_kroky.R`
:::
:::

::: {.column width="31%"}
::: {.panel-note .text-center}
[C]{.panel-title}

Celou složku projektu se skriptem a vstupními daty
:::
:::

::::

::: {.fragment}
::: {.takeaway-strip .text-center}
**C.** Obrázek ukazuje výsledek. Projekt se skriptem a daty navíc ukazuje, jak výsledek vznikl.
:::
:::

::: {.notes}
89-90 min. Studenti vyberou odpověď a jednou větou ji obhájí sousedovi. Výstupní kontrola: každý ukáže skript, CSV, objekt v Environment, graf v Plots a PNG v Files.
:::
