Do sada smo objasnili najvažnije načine prikupljanja, pohrane i analize podataka. Posljednji dio pipeline-a u podatkovnoj znanosti se odnosi na komunikaciju i dijeljenje rezultata analize. R Markdown je platforma koja omogućuje integraciju svih navedenih elemenata analize pri čemu je analitički izvještaj moguće prilagoditi mnoštvu različitih potreba za komunikacijom i dijeljenjem rezulatata analize. Široki spektar mogućnosti komunikacije i dijeljenja rezulatata analize je najsnažniji motiv i najvažniji razlog za bolje upoznavanje sa R Markdown-om. Platforma omogućava export analize u razne formate: word, pdf, html, prezentacije, interaktivni dashboard i app. To znači da je u okviru R Markdown-a analizu moguće prezentirati kao web stranicu, blog, akademski članak, knjigu ili aplikaciju. Pregled svih formata je dostupan u službenoj dokumentaciji. Osim mnoštva export formata, neke od mogućnosti R Markdown-a su i korištenje mnoštva programskih jezika (npr. python-a kroz paket reticulate) i jednostavnost izrade analize u skladu s reproducible research principima.
R Markdown platforma je kompatibilna sa Open Source principima, od kojih je za modernu obradu podataka među najvažnijima reproducible research princip. Platforma podržava reproducible research na 5 načina:
Pristup analizi je dostupan svima, primjerice istraživačima koji nemaju resurse za komercijalni software iz manje razvijenih djelova svijeta.
Replikacija analize je moguća u budućnosti i od strane drugih istraživača.
Uklanjanje i kontrola grešaka je automatizirana i olakšana jer je svaki korak analize eksplicitno definiran.
Revidiranje analize je efikasnije, što znači brže i lakše dostupno. To također uključuje i mogućnost proširenja analize.
Dijeljenje analize kroz izvrsnu GitHub integraciju.
U ovom predavanju se pretpostavlja da ste već upoznati sa osnovama R programskog jezika i ekosistema te da imate instaliran R + R Studio (ili alternativno Visual Studio Code). Ukoliko su ti uvjeti zadovoljeni, za rad sa R Markdown-om je potrebno (preporučljivo):
install.packages(c('tinytex','rmarkdown'))
tinytex::install_tinytex()
install.packages(c("rmarkdown", "knitr", "kableExtra","stargazer", "plotly", "knitr","bookdown"))
Markdown je pojednostavljena vezija “markup” jezika pri čemu su Markdown file-ovi “čisti” tekstualni fileovi pa ih je moguće editirati korištenjem “običnih”tekstualnih editora (npr. Notepad). Glavna razlika u odnosu na Word je što se formatiranje događa unutar samog dokumenta, a ne u pozadini. Zbog toga je potrebno naučiti nekoliko osnovnih (standardnih) pravila za formatiranje i organizaciju dokumenta. Važno je razumjeti da se željeno formatiranje prikazuje tek kada je je dokument render-an (i.e. procesuiran, pretvoren) u neki od željenih formata (pdf, html, word…).
Za razliku od uobičajnih programa za procesuiranje riječi, tekst napisan u Markdown-u ima jednostavan i intuitivan format (i.e. standardan format) koji je lako dijeliti među računalima, mobilnim uređajima i ljudima. U posljednje vrijeme je markdown postao standard za rad u akademiji, znanosti, novinarstvu, obrazovanju i dr. Primjerice, stranice poput GitHub-a i Reddit-a koriste Markdown za menadžment komentara.
U ovom predavanju koristimo varijantu Markdown-a koja se zove R Markdown. R Markdown ima sve opcije za formatiranje koje postoje u Markdown-u, a dodatno omogućava ugrađuvanje, prikaz i provedbu R koda u korištenim dokumentima. Kombiniranjem R koda i (običnog) teksta je moguće stvoriti dinamičke izvještaje analitičkih procesa, prikazati korišteni code
, analitički output (deskriptivnu statistiku, tablice, grafikone, rezultate statističkih modela) i ugraditi tekstualna objašnjenja koja prate korištene procedure ili diskusiju o rezultatima.
Formatiranje teksta u Markdown-u nije komplicirano i ne uključuje high-level prilagodbe poput promjene veličine fonta, boje ili vrste teksta. Glavni estetski aspekti oblikovanja teksta su bold-anje, izrada naslova i podnaslova, organizacija listi i sl. U ovom ćemo pregledu dati osnovne upute za oblikovanje i uređivanje teksta u R Markdown-u. Za više detalja pogledajte službenu dokumentaciju
Za prikaz riječi ili fraze kosim slovima u Markdown-u je potrebno staviti (_
) ili (*
) oko izraza. Primjerice, ova riječ će biti koso napisana.
Slično tome, za bold isticanje riječi u Markdown stavite dvije crtice (__
) ili dvije zvjezdice ( **
). Tako dobivamo bold prikaz riječi.
Moguće je koristiti i obje varijante za postizanje kosih bold fraza koristeći (**_
) sintaksu. To također vrijedi i za više riječi.
Naslovi se često koriste na webstranicama, člancima u časopisima i sl. kako bi se skrenula pozornost na orđeni dio teksta
Headers are frequently used on websites, magazine articles, and notices, to draw attention to a section. As their name implies, they act like titles or subtitles above sections.
Postoji šest vrsta naslova (prema veličini od najvećeg prema manjem):
# Naslov jedan
## Naslov dva
### Naslov tri
#### Naslov četiri
##### Naslov pet
###### Naslov šest
Za izradu naslova u Markdown-u je potrebno staviti hash mark (#
) prije fraze. Broj hash mark-ova pri tome određuje željenu veličinu naslova. Za najveći naslov koristite hash mark (# Najveći naslov
), dok za podnaslov treće razine koristite (### Manji naslov
). Odluka o korištenju je na autoru analize.
Novi paragraf se označava praznom linijom između dva pragrafa:
Ovo je jedan paragraf.
Ovo je drugi paragraf.
Za prelazak u novi red je potrebno ostaviti dva pazna mjesta nakon prekida:
Ovo je jedan red. Ovo je drugi red.
U Markdown-u postoje dvije vrste linkova i obje vrste funkcioniraju na jednak način. Prva vrsta se naziva inline link. Za stvaranje inline link-a, stavite tekst linka u ([ ]
) te nako toga link u (( )
). Primjerice za hiper link na www.github.com s tekostom koji kaže “Posjeti GitHub!” je potrebno napisati sljedeće: Posjeti GitHub!.
Druga vrsta linka je reference link. Kao što i sami naziva ukazujem riječ je o linku koji upućuje na neko mjesto ubutar samog dokumenta. Primjrice:
Ovdje je link.
Ovo je još jedan link.
Vratimo se sada na prvi link.
Linkovi na reference se ne pojavljuju u render-anom Markdown dokumentu. One se definiraju uglatim zagradama i dvotočkom kao u prethodnom primjeru.
Nakon što ste naučili kako napraviti linkove u Markdown-u, dodavanje slika je jednostavno. Sintasa je skoro ista.
Slike imaju dva stila, baš kao i linkovi, a oba su render-ana na jednak način. Razlika između linkova i slika je da slikama prethodi uskličnik (!
).
Prvi stil se naziva inline image link. Za stvaranje linka na sliku unesite uskličnik (!
), a nakon toga alt tekst u zagradama ([ ]
), i konačno link u zagradama (( )
).
Primjerice, za stvaranje inline image linka na https://octodex.github.com/images/bannekat.png, s tekstom “Benjamin Bannekat”, napišite sljedeće u Markdown-u:
![Benjamin Bannekat](https://octodex.github.com/images/bannekat.png){ width=50% }
Iako ne morate dodati tekst, često će to doprinijeti estetskoj dimenziji i čitljivosti. Slika iz primjera je velika pa je zbog toga skalirana pomoću sintakse{ width=50% }
.
Za reference image, napravite isto kao kod reference link-a. Procedura izgleda ovako:
Prva referenca je “Prvi otac”, i povezuje na http://octodex.github.com/images/founding-father.jpg; druga slika je drugi otac povezuje na http://octodex.github.com/images/foundingfather_v2.png.
![Prvi otac][Prvi otac]
![Drugi prvi otac][Drugi otac]
: http://octodex.github.com/images/founding-father.jpg { width=50% }
[Prvi otac]
:http://octodex.github.com/images/foundingfather_v2.png { width=50% } [Drugi otac]
Postoje dvije vrste listi: poredane and ne-poredane, odnosno liste s brojevima i bez brojeva.
Za izradu ne-poredane liste, dodajte zvjezdicu (*
) ispred svakog elementa. Svaki element mora biti u svom redu. Primjerice, za listu kupnji u dućanu:
Poredana lista ima brojeve umjesto zvjezdica. Na primjer:
Vrlo jednostavno, zar ne?!.
Dokumenti (poput ovog) koji sadržavaju R code i markdown su R Markdown
filei. rmarkdown
je R paket koji olakšava korištenje R Markdown
kroz knitr
i neke dodatne alate. Za više detalja o R Markdown
formatu i rmarkdown
paketu pogledajte http://rmarkdown.rstudio.com.
Kada pokrente render
iz rmarkdown
paketa (klikom na Knit izbornik), .Rmd
file-a se šalje u knitr
, koji izvršava sav kod i stvara (.md
) dokument koji sadržava tekst i output koda.
Markdown file-a je generirana kroz knitr
koji je procesuiran kroz pandoc, sustav zaslužan za stvaranje završnog formata. Prikaz ovih koraka je na donjoj slici:
Za pokretanje novog R MArkdown dokumenta napravite sljedeće:
File -> New File -> R Markdown...
knitr
je R paket koji se koristi za statistical literate programming, što omogućuje integraciju koda i teksta u jednostavne dokumente. PodržavaR Markdown
, R LaTex
, i R HTML
kao dokumentacijske jezike, i može exportati markdown
, PDF
i HTML
dokumente.
Sjajna stvar u R Markdown
sa knitr
-om je što finalni dokument neće biti renderan ukoliko postoje errori u kodu. To znantno olakšava kontrolu grešaka pri procesu knitting-a
.Rmd
filea.
Provjerite da li ste instalirali zadnju verziju knitr
paketa: install.packages("knitr")
.
Svaki .Rmd
file započinje s YAML zaglavljem. YAML definira opće postavke dokumenta i nalazi se između tri uzastopne crte na početku i na kraju:
---
: "Testni dokument"
title: "Luka Sikic"
author: html_document
output---
YAML ima i niz drugih opcija za fomatiranje, a ovdje su prikazane samo osnovne. Primjerice, za izvoz dokumenta u .pdf format je potrebno podesiti output
iz html_document
u pdf_document
i ponovno kliknuti Knit
. Ukoliko želite prilagoditi veličinu slova, moguće je dodati još jedan YAML argument ispod output:html_document
:
: 12pt fontsize
Promjena fonta je malo složenija. U pozadini R Markdown pretvara dokument u Latex kod, koji je potom pretvoren u pdf. Zbog toga je potrebno specificirati formating opcije na način da ih Latex može razumjeti. Da biste specificirali npr. Arial
font, Latex-u je potrebno definirati sljedeće postavke u YAML-u:
title: "Obrada podataka"
subtitle: "R Markdown"
author: "Luka Sikic"
date: "2021-01-11"
output:
pdf_document:
latex_engine: xelatex
mainfont: Arial
Kada kliknete Knit na izborniku, dokument koji uključuje tekst i output na osnovi koda iz R “code chunks” će se generirati. Uvijek je cilj vidjeti kod i output, a izostavljanje koda iz .Rmd
file-a će smanjiti kvalitetu finalnog izvještaja. Za vježbu pokušajte napraviti .html
izvještaj sami.
Za isticanje citata koristite >
što će napraviti:
Svi su modeli netočni!
Postoje tri načina za stvaranje code chunk-ova:
```{r}
za inicijaciju code chunk-a i za kraj chunk-a ```
Pogledajmo primjer s ugrađenim podatkovnim skupom pressure
, koji sadžrava podatke o pritisku pare na planetu Mercury kao funkciju temperature. R code chunk možete ugraditi na sljedeći način:
head(pressure)
## temperature pressure
## 1 0 0.0002
## 2 20 0.0012
## 3 40 0.0060
## 4 60 0.0300
## 5 80 0.0900
## 6 100 0.2700
summary(pressure)
## temperature pressure
## Min. : 0 Min. : 0.0002
## 1st Qu.: 90 1st Qu.: 0.1800
## Median :180 Median : 8.8000
## Mean :180 Mean :124.3367
## 3rd Qu.:270 3rd Qu.:126.5000
## Max. :360 Max. :806.0000
Chunkovi koda imaju mnogo opcija i određuju što se prikazuje u dokumentu. Te opcije idu nakon ```{r}
, a prije zatvaranja zagrade }
. Za popis svih opcija stavite kursor nakon {r,
stisnite space, a nakon toga tab
. Neke često korištene opcije su:
echo = FALSE
prikazuje samo output koda, a ne i sami kodinclude = FALSE
izvršava kod ali ne prikazuje kod niti outputeval = FALSE
prikazuje kod ali ga ne izvršavawarning = FALSE
i message = FALSE
isključuje error poruke i upozorenjacahce = TRUE
save-a rezultate i ne re-izvršava chunk koda dok nije promijenjenout.height
i out.width
određuju veličinu i širinu grafikona (npr. ´out.height=5
)cache
opcijaSvi code chunks moraju biti re-izračunati svaki put kada re-knit-amo file. Ako vaš dokument sadrži kodove koji se dugo procesuiraju, razmislite o korištenju cache = TRUE
opcije koja pohranjuje i loada cacheane rezultate nakon prvog knittanja. Na taj način možete uštediti dosta vremena. Ova je opcija dostupna na chunk-by-chunk osnovi. Valja naglasiti da opcija ima smisla samo ako se radi o neizmjenjenim code chunk-ovima (nakon prvog knit-anja). U slučaju da se podatci ili kod promijeni, potrebno je ponovno izvrtiti kod kako bi se rezultati prilagodili. Za pregled svih opcija pogledajte službenu R Markdown stranicu.
Ponekad je korisno postaviti default opcije za sve chunk-ove nego, npr. specificirati warning=FALSE
na početku svakog pojedinačnog. Da biste postavili default opcije, specificirajte ovo na početku dokumenta:
Moguće je premostiti defaultne postavke u svakom chunk-u ukoliko je potrebno, a savjet za povećanje brzine je “nizvodno” učitavanje paketa.
Izrada grafikona u R Markdownu je jednostavna i moguće je koristiti sve opcije koje smo do sada spominjali. Za primjer pogledajmo jednostavnu vizualizaciju odnosa tjelesne težine i težine srca kod mačaka:
library(MASS)
data(cats)
plot(Hwt ~ Bwt, data = cats, title = "Odnos težine tijela i srca kod mačaka", xlab = "Tjelesna težina (kg)", ylab = " Težina srca (g)")
Za prikaz matrica i data frame-ova u R Markdownu koristite kable()
funkciju:
library(knitr)
kable(head(mtcars))
mpg | cyl | disp | hp | drat | wt | qsec | vs | am | gear | carb | |
---|---|---|---|---|---|---|---|---|---|---|---|
Mazda RX4 | 21.0 | 6 | 160 | 110 | 3.90 | 2.620 | 16.46 | 0 | 1 | 4 | 4 |
Mazda RX4 Wag | 21.0 | 6 | 160 | 110 | 3.90 | 2.875 | 17.02 | 0 | 1 | 4 | 4 |
Datsun 710 | 22.8 | 4 | 108 | 93 | 3.85 | 2.320 | 18.61 | 1 | 1 | 4 | 1 |
Hornet 4 Drive | 21.4 | 6 | 258 | 110 | 3.08 | 3.215 | 19.44 | 1 | 0 | 3 | 1 |
Hornet Sportabout | 18.7 | 8 | 360 | 175 | 3.15 | 3.440 | 17.02 | 0 | 0 | 3 | 2 |
Valiant | 18.1 | 6 | 225 | 105 | 2.76 | 3.460 | 20.22 | 1 | 0 | 3 | 1 |
Dobra praktična opcija za poboljšanje estetike tablica je kableExtra
paket.
Output je moguće “ugraditi” u sredinu rečenice. Primjerice, generirajmo dva slučajna broja, x i y:
<- rnorm(1)
x <- rnorm(1) y
…i ugradimo njihove generirane vrijednosti direktno u tekst:
Sada možemo napisati x = -0.5006442 dok je y = -1.4157653.
Ako ste upoznati sa latex jezikom, korištenje jednadžbi je vrlo jednostavno. Koristi se jednaka sintaksa!Primjer inline jednadžbe izgleda ovako: \(A = \pi*r^{2}\). jednadžbu je moguće i centrirati na ovakav način:
\[\begin{equation} \mathbb{E}[Y] = \beta_0 + \beta_1x \end{equation}\]
Kod knitr
je moguće koristiti purl()
kako bi se izvadio sav R code s ciljem pohranjivanja u .R
file, odnosno skriptu. To će zanemariti sav tekst izvan code chunk-ova. Sljedeća naredba će izvući cijeli kod iz ovog dokumenta u zasebnu intro-to-rmarkdown.R
skriptu koja će se generirati u radni direktorij.
library(knitr)
purl("intro-to-rmarkdown.Rmd", documentation = 0)
R Markdown može renderati PDF, beamer prezentacije, HTML prezentacije, iosides, slidy i reveal.js. U R Markdown-u je također moguće napisati cijeli akademski članak. Iz njega možete napraviti webstranice i različite interaktivne dokumente poput aplikacija i dashboard-ova.
Službeni R Markdown tutorial. Izvsno za opći pregled funkcionalnosti.
Detaljniji R Markdown tutorial. Preporučeno kao nadopuna uz ovo predavanje.
Koristan tutorial ukoliko želite isprobati razumjevanje R Markdown-a na praktičnom primjeru.
Detaljan i kvalitetan R Markdown tutorial.
Bookdown za one koji žele dubinski razumjeti R Markdown i aktivne/profesionalne korisnike.
Način integracije R Markdown-a u statistički kurikulum k
R Markdown u lingvistici