01. Programovací jazyk R a práce s ním Vít Gabrhel R101 2019-09-28 Harmonogram • Organizace kurzu • Představení jazyka R • Instalace R a RStudio, orientace v prostředí RStudio, úvod do psaní kódu v R • Základní operace - aritmetika, přiřazování hodnot proměnným, zjišťování třídy proměnných Organizace kurzu • Sylabus . Web 3/23 Představení jazyka R Co ie R? 1) Programovací jazyk umožňující tvorbu "statistického softwaru" (tj. analýzy) Y' = a + bx\-\-... -\-bxn MLR_Mode~l_l <- ~lm(y ~ xl + x2, data=MLR_Data) 5/23 CojeRZ 2) Prostředí na provádění analýz a vizualizací r There will be blood Blood donations and GDP per person 00 ■g 20 I -':- 0 Region Africa & Middle Fast 9 Americas • Asia & Oceania # Europe Greece* • • • South Korea—# Britain-*-# ♦ % * ^Germany — Denmark Sweden V ••/ */j.:ilc::Sl;ilo-, Si no • a pore • Oman ( • O Kuwait c J? nllir Qatar Saudi UUAF c • • ___ —•—• *-, Arama 1.CC0 10,000 GDP per person *, S, log scoie 5ources: Global Statui Rjeport on Blood S.ate7y and AvaiLahiLity 2016. WHO; Word Bank: T!k ffo.no™m 100,COO * At purihasing-power parity 6/23 Představení jazyka R „Historie" R je kombinací • Programovacího jazyka S, určeného pro analýzu dat (Bell Labs, J. Chambers, 1976) • Lexikálního scopingu, umožňujícího přiřazování dat k entitám označeným jménem R vyvinuli R. Ihaka a R. Gentlemen z University of Auckland - první verze byla spuštěna v roce 1994 • Název je slovní hříčkou - jednak parafrází na „S", ale i odkazem na iniciály obou autorů Myšlenkové zázemí a současny kontext Principy R Open-Source a s ním související „svobody" • Svoboda používat R pro jakékoliv účely, včetně svobody studovat to, jak R funguje a svoboda modifikovat ho ke svým vlastním potřebám • Svoboda šířit R a v něm vytvořené obsahy ° Svoboda zlepšovat R včetně sdílení těchto zlepšení komunitě ° Opensource ° Transparentnost ° Komunita Bez záruk -> větší míra odpovědnosti na uživatele Aktuální kontext: • Principy R a Replikační krize 8/23 Getting started . R . RStudio • Alternativy pro RStudio 9/23 Úvod do psaní kódu v R Čísla a Texty BitCoin =3+4 CryptoCurrency <- c("Bitcoin", "Sichuan") names(CryptoCurrency) <- c("Kryptoměna", "Provincie") U textové proměnné je nutné používat uvozovky. Had <-"Proč neprogramuješ v Pythonu?" Mřížka či hastag (#) odděluje kód od komentáře. # Luděk má 3 btc, Eleonora 4 eth. # Dohromady maji 7 jednotek kryptoměn. CryptoCurrency =3+4 Pozor na malá a velká písmena (= case sensitive)! "=" a "<-" jsou ekvivalentní formy zápisu Úvod do psaní kódu v R Česká klávesnice, Windows a psaní symbolů (třeba "<") skrze pravý alt. • Pravý alt + další písmeno na klávesnici, např.: o alt + . = > o alt + f=[ o alt + v = @ x = 3 + 4 versus 3 + 4 = y Error in 3 + 4 = y : target of assignment expands to non-language object Parametr (například vektor nebo datová matice) nemůže v jazyce R začínat číslem. 11/23 Úvod do psaní kódu v R Jak si "uklidit" pracovní prostor? • Příkaz remove() removeCcryptoCurrency) Jak vyčistit konzoli? • Cltr + 1 Jak si "říct o pomoc"? • Symbol"?" před funkcí pro vyhledávání v dokumentaci R ?remove • "??" před funkcí pro vyhledávání příkazu napříč knihovnami ??remove R jako kalkulačka • Sčítání:"+" 420 + 0 ## [1] 420 • Násobení: "*" 2*3 ## [1] 6 • Umocňování: "A" I 16 A 2 ## [1] 256 R jako kalkulačka • Odčítání:"-" 333 - 12 ## [1] 321 • Dělení:"/" 1 / 2 ## [1] 0.5 • Druhá odmocnina: sqrt(x) sqrt(256) ## [1] 16 Objekty a třídy Reprezentují hodnoty (např. "0" nebo "Hruška") nebo jiné objekty (např. proměnná jako objekt v rámci datové matice, dalšího objektu). • Skrze označení (name) je možné vyvolat hodnotu nebo sadu hodnot v tomto objektu. Bitcoin <- 3 Bitcoi n ## [1] 3 Etherium <- 4 Etheri um ## [1] 4 Kryptoměny = Bitcoin + Etherium Kryptoměny ## [1] 7 15/23 Objekty a třídy Numerické versus stringové objekty Bitcoin = Jedna Error: object 'Jedna' not found Bitcoin = "Jedna" Kryptoměny = Bitcoin + Etherium Error in Bitcoin + Etherium : non-numeric argument to binary operator 16/23 Objekty a třídy Předchozí příklady se týkaly vyvolání hodnoty. Co vyvolání sady hodnot? • Příkaz "cO" sloučí "argumenty" (např. 1, 0.5 nebo "Muž") do jednoho vektoru, tedy do sekvence dat # Nejdříve vytvoříme objekt se zeměmi, kde se "těží" kryptoměny: _ _ /■ 11 ^ '___II I ! ,X ,-. I I ll.-_.ll I I ' I I N zeme_CC <- c( Ona , CR , GB , Ona ) zeme_CC ## [1] "Čína" "CR" "GB" "Čína" # Názvy sítí, kde se sdružují těžaři: Network <- c("Antpool", "Slush", "Bítclub.Network", "Bíxín") Network ## [1] "Antpool" "Slush" "Bítclub.Network" "Bíxín" # Jaký je podíl zmíněných sítí na celku? Share_ín_Percents <- c(25, 3, 5, 8) Share_í n_Percents ## [1] 25 3 5 8 17/23 Objekty a třídy • Decimal values like 4.5 are called numerics. • Natural numbers like 4 are called integers. ° Integers are also numerics. • Boolean values (TRUE or FALSE) are called logical. • Text (or string) values are called characters. ° Uvozovky ("") indikují, že nějaký text je "character" 18/23 Objekty a třídy # Vytvořte objekt my_numeric s hodnotou 23.1 print(my_numeric <- 23.1) ## [1] 23.1 # Vytvořte objekt my_character s hodnotou "universe my_character <- "Čína" my_character ## [1] "Čína" # Vytvořte objekt my_logical s hodnotou FALSE my_~logi cal <- false my_~logi cal ## [1] false 19/23 Objektv a tfidv Logical • Boolean values (TRUE or FALSE) are called logical. ° as.logical - classifies 0 as FALSE and anything other than 0 as TRUE Share_in_Percents = c(25, 3, 5, 8) as.logi cal(Share_i n_Percents) ## [1] TRUE TRUE TRUE TRUE # is. logical - Create or test for objects of type "logical" i s.1ogical(Share_i n_Percents) ## [1] FALSE 20/23 Třídy objektů Jak poznat třídu dat? • Funkce class(): class(my_numeric) ## [1] "numeric" class(my_characte r) ## [1] "character" class(my_logi cal) ## [1] "logical" 21/23 Třídy objektů • Factor treatment <- c("A", "A", "B", "B", "Placebo", "Placebo") class(treatment) ## [1] "character" i s.factor(treatment) ## [1] FALSE treatment.f <- as.factor(treatment) class(treatment.f) ## [1] "factor" i s.factor(treatment.f) ## [1] TRUE 22/23 Doporučené zdroje • DataCamp - learning • GitHub - code management • R-bloggers - inspirace • Kaggle - data sources 23/23