Úvodní hodina

Zpracovávání výzkumných dat pomocí jazyka R

Program

  • organizační a administrativní informace ke kurzu
  • seznámení se s prostředí IDE RStudio
  • datové typy v R
  • ukládání dat do proměnných
  • operátory
  • etiketa psaní kódu
  • working directory
  • RProjekty, .RData
  • funkce v R a jejich syntax

O kurzu

  • kurz s cílem poskytnout účastníkům solidní základy práce s R za účelem následné práce s vědeckými daty

  • zakončení mikrocerfikátem: oficiální certifikát uznávaný napříč EU s jasně definovanými dovednostmi

  • pokračování: do budoucna jsou plánována jednorázová školení na specifická pokročilá témata o která bude zájem

O vyučujícím

Mgr. Lucie Hošková

  • manažer repozitáře pro výzkumná data na UK

  • výuka R v rámci programu Charleston, Letní školy pro data stewardy, a akcí pod záštitou CpOS

  • datová práce všeho druhu

    • datová analýza pro Akademii Věd

    • konzultace pro dizertační, diplomové a bakalářské práce

    • KPZ (kolega poslední záchrany)

  • popularizačně naučné přednášky nejen o datové analýze

Organizace kurzu

  • 11 lekcí po třech hodinách
    • bloky 3 x cca 50 minut
    • výuka jednou za dva týdny, přes Vánoce pauza
  • 3 tématické okruhy
    • zpracovávání dat
    • vizualizace dat
    • analýza dat

Hodnocení kurzu

  1. průběžné domácí úkoly
  2. miniprojekt přes Vánoce
  3. 80% docházka
    • v případě nemoci/neschopnosti se účastnit prezenčně možnost připojení online, ale prosím choďte pokud můžete
    • v případě absence či online výuky povinné odevzdání cvičení navíc pro danou hodinu
    • je to vše o domluvě :]

Úkoly? To vážně?

Ano.

  • kontrola pro mě, jestli jste pochopili látku
  • R se nenaučíte jen poslechem, je potřeba ho aktivně používat
  • během tří hodin jednou za dva týdny není možné stihnout všechno; takto budete mít možnost řízeného samostudia
  • k úkolům vám vždy budu posílat zpětnou vazbu/opravu - nemusíte mi opravené úkoly znovu posílat, projdeme si to spolu na hodině

Průběh hodin

  1. úvodní opakování z předchozí hodiny

  2. výklad nové látky

    • kombinace prezentace, code-along a samostatné práce
  3. cvičení z probrané látky

    • kombinace nové látky a znalostí z předchozích hodin
  4. řešení “chuťovek” z minulých hodin a z dotazů

  5. zadání domácího úkolu

Práce s materiály

Před každou hodinou (maximálně pondělí ráno daného týdne) bude do výukových materiálů nahrána prezentace k dané lekci, stejně tak veškerá potřebná data co je třeba si stáhnout.

Pokud bude potřeba abyste si pro práci v hodině nějaká data stáhli, učiňte tak prosím a uložte si je do dedikované složky na vašem počítači.

Doporučuji mít prezentaci během hodiny otevřenou pro nahlížení a kopírování kódu.

Pokud si chcete psát ruční poznámky, zmáčknutí “e” a poté tisk obrazovky vám umožní vytisknout si snímky prezentace v PDF.

Cvičení a konzultace

  1. U každé hodiny budou cvičení na doma navíc. Bude se jednat o směs již probrané látky a problémů na zapřemýšlení. Jsou nepovinné - budete k nim mít i řešení, ale klidně mi je můžete poslat pro kontrolu / zpětnou vazbu.

  2. V horním menu stránek kurzu naleznete odkaz na rezervační stránku konzultací. Pokud něco budete potřebovat probrat, ať již obsah kurzu či pomoc s R, můžete mi bud´ napsat a nebo si zde přímo rezervovat termín. Součástí jsou i všeobecné R konzultace, pokud víte, že by je vaši kolegové využili, klidně odkaz předejte.

  3. V případě zájmu a dostatečné účasti je možné se domluvit na nepravidelných večerních code-along online sezení.

Programovací jazyk R

Open source programovací jazyk určený ke statistické analýze a datové vizualizaci.

  • v současnosti jeden ze standardů pro datovou analýzu ve vědecké sféře

  • aktivně využívaný, spravovaný a uržovaný globální vědeckou komunitou

    • dlouhá historie: spuštěn v roce 1993
  • nepřeberné množství specializovaných rozšíření

R vs RStudio

R

RStudio

  • IDE - vývojářské prostředí

  • usnadňuje práci s R

RStudio

Skript: místo pro psaní kódu

Konzole: samotné R, místo výpočtů a zobrazování výsledků či chybových hlášek

Terminal: psaní přímo do příkazové řádky

Globální prostředí: přehled uložených proměných

History: historie spuštěného kódu

Files: soubory v daném adresáři se kterými R může pracovat

Plots: místo pro zobrazování grafů

Packages: plug-iny pro R

Help: nápověda

Jak spustit kód?

  • Konzole: stisknutím Enter

  • Skript:

    • jeden řádek: kliknu si do řádku a poté Ctrl + Enter (u Mac Option + Enter)

    • více řádků: myší si vyberu všechny řádky co chci spouštět a poté Ctrl + Enter (u Mac Option + Enter)

    • alternativa: je možné místo Ctrů + Enter spustit kód ve skriptu příkazem Run

Datové typy v R

Numeric

  • integer

    • 5, 0, 123
  • double

    • 1.87, 0.3679

    • Inf

    • -Inf

Character

  • “Hello world!”
  • “žluťoučký”
  • “532”
  • ‘kolo’

Logical

  • taktéž popisovány jako boolean

  • TRUE

  • FALSE

Další typy se kterými se můžete setkat

NA

vektor <- 1:4
vektor[5]
[1] NA

Complex

as.complex(5.75 * sqrt(65))
[1] 46.35798+0i

NULL

radaCisel <- c(1, 2, NULL, 4)
radaCisel
[1] 1 2 4

NaN

0 / 0
[1] NaN
  • Přestože s komplexním číslem můžeme provádět aritmetické operace, R jej nebere jako numeric hodnotu!

  • NaN je naopak bráno jako numeric hodnota

Ukládání proměnných

R umožňuje uložit si informace pomocí proměnných.

Místo toho, abyste poté museli informaci znovu definovat, tak si můžete zavolat proměnnou.

Hodnota se uloží pomocí následujícího postupu:

název proměnné <- hodnota

Názvy proměnných jsou vždy bez uvozovek - nejedná se o text, ale o jméno specifického objektu.

mnozstviZkumavek <- 85554343
mnozstviKadinek <- 981100009

mnozstviZkumavek + mnozstviKadinek
[1] 1066654352

Název se nerovná charakter hodnotě

Uložené proměnné jsou vždy vypsané v globálním prostředí.

Zakázané způsoby pojmenovávání proměnných

  • mezera mezi slovy

    pet aut <- 5
  • začínat symbolem

    <6>4aut <- 5
  • začínat číslicí

    5aut <- 5

    Pozor na diakritiku!

Jaké proměnné mám uložené v globálním prostředí?

Seznam proměnných, které jsou v R uložené a se kterými můžete pracovat, naleznete v poli Environment v pravém horním rohu.

Můžete také ale využít funkce objects(). Ta do konzole vypíše názvy všech uložených hodnot.

Totožný výsledek získáte i pomocí funkce ls().

Je možné přepsat hodnoty?

Ano, pokud uděláte chybu v zápise či potřebujete změnit specifickou proměnnou či její část, není třeba ji mazat - stačí ji přepsat.

Co když chci hodnotu ale i tak smazat?

Funkce rm() umožňuje mazat uložené proměnné z globálního prostředí.

  • rm() - smaže VŠE

  • rm(název proměnné) - smaže specifickou proměnnou

Procvičení

Ulož do proměnné x číslo, do y text a do z boolean a následně je zobraz.

Jaký bude výsledek následujícího kódu?

Jaký bude výsledek následujícího kódu?

Operátory

Matematické operátory

+ - sčítání a odčítání

5 + 7
[1] 12
8 - 2
[1] 6

* násobení

10 * 7
[1] 70

/ dělení

10 / 5
[1] 2

%% zbytek po dělení

10 %% 7
[1] 3
10 %% 5
[1] 0

%/% dělení bez zbytku

10 %/% 7
[1] 1
10 %/% 5
[1] 2

** nebo ^ umocnění

5 ^ 2
[1] 25
5 ** 2
[1] 25

<= >= menší/větší nebo rovno

8 >= 8
[1] TRUE
5699 <= 3456
[1] FALSE

Logické operátory

Logické operátory lze použít při výběru (vyber x NEBO y, x A y) či spojování podmínek, ale také umí vracet boolean hodnoty.

& a, taktéž, zároveň

#zkontroluj, jestli plati oba vyrazy
34 > 44 & 56 > 8
[1] FALSE
34 < 44 & 56 > 8
[1] TRUE

| nebo

#jsou hodnoty v z nizsi nez 7 nebo vyssi nez 25
z <- c(13, 87, 2, 23)
(z < 7) | (z > 25)
[1] FALSE  TRUE  TRUE FALSE

%in% je v, nachází se v

hodnoty <- c(12, 87, 55, 1098)
55 %in% hodnoty
[1] TRUE
345 %in% hodnoty
[1] FALSE

== je přesně

x <- 5
x == 6
[1] FALSE
x == 5
[1] TRUE

! není, not, negace

!TRUE
[1] FALSE
x <- 3
!(x == 4)
[1] TRUE

Hierarchie operátorů

Stejně jako násobení má přednost před sčítáním, tak i logické operátory mají svoji hierarchii.

Operátor ! má vždy přednost před &, který má zase přednost před | .

Procvičení

Jaký zbytek nám zbyde po vydělení násobku devíti a desíti číslem čtyři?

Jaký bude výsledek tohoto výpočtu?

Na dopravní hřiště mohou pouze děti ve věku 15 a více, mladší pouze s povolením rodičů. Může toto dítě na hřiště?

Frantovi je 53 let. Chce si koupit jízdenku, u které je možnost slevy pro seniory od 65 let, pro děti a studenty až do 26 let včetně.
Ověř, zda má Franta na tuto slevu nárok.

Samostatné cvičení

Uzavírají se známky na konci semestru. Zápočet dostanou pouze ti, kteří mají dosavadní hodnocení na lepším stupni než 5 a v posledním testu získali jiný počet než nula bodů. Pokud tyto podmínky nesplňují, tak zápočet mohou dostat i tehdy pokud vypracovali seminární práci navíc a v písemce měli alespoň 50 bodů.
Julie má dosavadní hodnocení sice na 5, ani písemka se jí nepovedla a měla pouze 17 bodů. Napsala ale velmi povedenou semestrální práci na téma kyberbezpečnosti ve Vietnamu.
Dostane Julie zápočet?

Řešení

Dostane Julie zápočet?

Pro jednodušší práci s nimi si uložíme hodnoty do proměnných.

znamka <- 5
pocetBodu <- 17
semestralka <- TRUE

Hodnoty si dosadíme do výpočtu. Pozor na formulaci zadání!

znamka < 5 & pocetBodu != 0 | semestralka == TRUE & pocetBodu >= 50
[1] FALSE

Julie zápočet nedostane.

Etiketa psaní kódu

R je case sensitive!

identical("data", "Data")
[1] FALSE

Používejte co chcete ale buďte konzistentní.

Který styl se vám používá nejsnadněji? U kterého děláte nejvíc chyb?

Jaké jsou zvysklosti ve vašem oboru/laboratoři?

Možné styly zápisu:

  • camelCase

  • PascalCase

  • snake_case

  • kebab-dash

  • a jiné

Poznámky

# vše co je za hash symbolem počítač ignoruje

2 + 1 + 3
[1] 6
2 + 1 # + 3
[1] 3

Ctrl + Shift + C po výběru více linek kódu je všechny přemění na komentář.

Pište si poznámky, ale zase to nepřežeňte - není to román.

#VYPOCET PRUMERNE VYSKY 
#nahodny vyber peti reprezentantu z kazde tridy
ctvrtaTrida <- c(154, 155, 143, 156)
pataTrida <- c(171, 158, 162, 144)
mean(c(ctvrtaTrida, pataTrida)) #prumerna vyska obou trid v cm
[1] 155.375

Máme skript, pomocí kterého můžeme pracovat s daty, a který je dostatečně popsaný abychom ho mohli zaslat kolegům/sami pochopili, když se na něj podíváme později. Skripty v R se ukládají jako soubor s koncovkou .R.

Co když bychom si do R ale chtěli nahrát specifický dataset, který máme uložený v nějaké složce1? Když si otevřeme nějaký skript, tak R vždy automaticky otevře a používá nejzákladnější složku v počítači (ve Windows Dokumenty).

Working directory

Pokud chcete v skriptu načíst datasety a pak s nimi pracovat, je potřeba mít určené, z jaké složky má R datasety tahat - v jakém prostředí se R pohybuje.

Nastavení je možné buď skrz Session > Set working directory a nebo skrz setwd() funkci.

Caution

Pozor, při použití setwd() funkce je třeba nadefinovat přesně cestu v počítači (absolutní cestu) jak se má R ke složce dostat!

V jaké složce se nyní pohybujete lze zjistit pomocí funkce getwd().

getwd() #ukazka abolutni cesty
[1] "C:/Users/Lucie Hošková/Desktop/introR_CUNI/materialy/01_uvod/01_prezentace"

Nastavení pracovního adresáře ovlivňuje i další funkcionality R. Například, při ukládání skriptů se automaticky vybere jako možnost uložení právě složka pracovního adresáře.

Absolutní vs. relativní cesta

absolutní cesta:

"C:/Users/Jana/Desktop/vyzkum/M433/data/pribice.csv"

relativní cesta při nastaveném working directory v M433:

"./data/pribice.csv"

Relativní cesta odkazuje na soubor uvnitř specifického pracovního adresáře, nikoliv přímo na místo v počítači jako absolutní cesta.

Doporučuji absolutní cestu když už používat, tak pouze při nastavování setwd(). Sice lze teoreticky nahrávat soubory a provádět jiné akce uvnitř pracovního adresáře i pomocí absolutní cesty, ale jakmile by se například složka ve které se pracuje kamkoliv posunula, tak by absolutní cesta přestala fungovat.

RProjekty

Co kdybychom chtěli, aby se nám všechny naše skripty a jejich výsledky automaticky ukládaly do a tahaly rovnou z jednoho specifického adresáře bez potřeby ho při každém otevření RStudia nastavovat, a který bychom navíc mohli jednoduše vzít a přesunout či ho někomu zazipovaný poslat?

Toho můžete docílit pomocí vytvoření RProjektu.

Postup k vytvoření projektu

File > New Project > bud' existující složka a nebo vytvoření nové

RProjekt vytvoří “izolované” prostředí, kdy všechny vaše soubory uvnitř tohoto adresáře budou svázané dohromady, budou se vám automaticky znovu nahrávat uložené proměnné bez nutnosti opakovaného spouštění kódu, a hlavně k nim vždy bude relativní, nikoliv absolutní cesta = celý projekt si můžete přesouvat mezi složkami či počítači bez potřeby nastavování working directory.

RProjekty mají implicitně nastavený adresář

Tím, že si vytvoříte RProjekt, tak si vytváříte novou složku/nastavujete složku, do které se vám budou ukládat veškeré vznikající skripty a RData soubory. Nemusíte tak již adresář nastavovat pomocí setwd()!

Nahrávání uložených proměnných

V základním nastavení RProjekty umožňují ukládání a následné nahrávání proměnných, které jsme si vytvořili, zpět do globálního prostředí. Není proto potřeba při každém otevření projektu v RStudiu celý skript projíždět znovu a všechno znovu nahrávat. Je ovšem možné si uložit vybranné proměnné i ručně.

typVozidla <- "automobil"
pocetVozidel <- 6
jmenoModelu <- "škoda octavia"
save(typVozidla, pocetVozidel, jmenoModelu, file = "vozidla.RData")

Objekt RData v sobě obsahuje informace o jednotlivých proměnných. Do globálního prostředí se nahrají funcí load().

load("vozidla.RData")

Můžete svým kolegům tak například poslat již vyčištěná a připravená data, bez toho aby si sami museli nahrávat původní tabulku a provádět na ní veškeré kontroly.

Domácí práce

  1. Vytvořte RProjekt. Nahrajte do globálního prostředí proměnné z promenne.RData. Pomocí nich zjistěte, kolik zaměstnanců lze z rozpočtu platit po uvedenou dobu měsíců

    plat = jaký je plat jednoho zaměstnance za jeden měsíc
    pocetMesicu = kolik měsíců je potřeba všechny zaměstnance platit
    rozpocet = jaký finanční rozpočet máte na dobu pocetMesicu k dispozici

  2. Studentstvo může získat stipendium za následujících dvou situací: mají průměr známek menší než 1.8 a zároveň absolvovali alespoň 80 % docházky, a nebo pokud mají potřebný průměr a reprezentují školu na soutěžích.
    Saša má průměr 1.7, zameškáno 3 hodin z 10 a pravidelně vyhrává biologickou olympiádu.
    Zjisti, zda má Saša právo na stipendium.

  3. Zazipovanou složku RProjektu se skriptem a RData souborem zašlete nejpozději do pátku před příští hodinou na lucie.hoskova@ruk.cuni.cz