Programmering i R

Föreläsning 5: Basgrafik, knitr, markdown och externa data

Josef Wilzén

STIMA, Linköpings universitet

2021-02-22

Föreläsning 5: Innehåll

  • Praktisk information om del II.
  • Basgrafik
  • Slumptal och simulering
  • knitr och markdown
  • Externa data och pxweb

Del II i kursen

R-programmering - del II

  • Del 1: Grunderna i programmering
    • Variabler, tilldelning
    • Datastrukturer
    • Kontrollstrukturer
    • Funktioner
    • Debugging
  • Del 2: Tillämpningar

R-programmering - del II

  • Del 1: Grunderna i programmering
  • Del 2: Tillämpningar:
    • Grafik
    • Statistik och analys
    • Externa data
    • Datum
    • Texthantering och regular expression
    • Linjär algebra
    • knitr, markdown, Literate programming

R-programmering - del II:

  • Labbarna görs nu i par
  • Parprogrammering:
    • Turas om att skriva koden
    • Den som inte kodar är engagerad i koden och problemet
    • Byter person var 30:e minut
    • Viktigt att kommentera koden: ROxygen, inline
    • Båda är delaktiga i programmeringen
  • Använd Teams och Zoom
    • Utgå från chatten i Teams

Miniprojekt del 1

Info här

  • Hitta data på webben (eller lägg upp eget)
    • Kommunala (tvärsnitt) data
    • Tidsseriedata
  • Presentera med basgrafik, knitr och markdown
  • Ska kunna vara reproducerbart
  • Lämna in PDF och .Rmd
  • Egen inlämning på Lisam
  • Två veckors tid

Basgrafik

Basgrafik

  • Grafiken är en av styrkorna med R
  • Olika paket: ggplot2, lattice m.m.
  • Hög nivå (funktioner, plot)
  • Låg nivå (bygga upp en plot steg för steg)
  • Används ofta för att snabbt visualisera data

Enkel grafik: plot()

  • plot() - kan plotta många olika objekt:
    • plot(x,y), ger en scatterplot, här är x och y vektorer som ger x- och y-koordinater
    • plot(X), om X en data.frame så skapas en matrix-plot
    • Vanliga argument: “type=”,“main=”, “xlab=,”ylab=“,”xlim=,“ylim=”, “col=

Exempel: plot()

data(iris)
plot(x = iris$Sepal.Length, y = iris$Petal.Length, main = "Iris")

plot of chunk unnamed-chunk-1

Olika diagramtyper

  • hist(x=,breaks=,freq=) ger ett histogram,
    • x”- numerisk vektor
    • breaks=” - antal bins, default är att variationsområdet delas in i \( log_{2}(n)+1 \) intervall
  • boxplot() ger boxplot
  • barplot() ger stapeldiagram
  • pie() ger en piechart

Exempel: hist()

hist(iris$Sepal.Length)

plot of chunk unnamed-chunk-2

Exempel: boxplot()

boxplot(iris$Sepal.Length)

plot of chunk unnamed-chunk-3

Exempel: pie()

tab <- table(iris$Species)
pie(tab)

plot of chunk unnamed-chunk-4

Exempel: barplot()

tab <- table(iris$Species)
barplot(tab)

plot of chunk unnamed-chunk-5

Lågnivågrafik

  • Kan användas för att bygga upp en graf från grunden

Lägger till “lager på lager”:

  • points(x, y, ...) lägger till punkter
  • lines(x, y) lägger till linjer
  • abline(a, b, h, v, ...) lägger till räta linjer
  • legend(x, y, legend, ...) lägger till en förklaringsruta
  • par(): Fler grafiska alternativ

Lågnivågrafik

  • Går att bygga upp många olika sorters plottar
  • Dock är ggplot2 MYCKET “smidigare”

Demo: Basgrafik

Slumptal och simulering

Slumptal och simulering

  • I R finns en uppsättning funktioner för fördelningar
prefix Beskrivning Exempel
r simulera från fördelningen rnorm()
d täthetsfunktionen (pdf) dnorm()
p kulmulativ fördelninsgfunktion (cdf) pnorm()
q inversa kulmulativa fördelningsfunktionen qnorm()
  • ?Distributions
  • Se CRAN task view: Distributions här

Slumptal och simulering: Urval och slumpfrön

  • Det finns ingen riktig slump i datorer
  • Det finns slumptalsgeneratorer
  • Kan styra “slumpen” med “slumpfrön” (set.seed())
  • För att dra ett (obundet) slumpmässigt urval använder vi sample()

Slumptal och simulering: Exempel

rnorm(n = 3, mean = 10, sd = 1)
[1] 10.012673  9.753187 11.129120
set.seed(20180218)
rnorm(n = 3, mean = 10, sd = 1)
[1] 10.19380 10.74998 11.32583
set.seed(20180218)
rnorm(n=3, mean=10, sd=1)
[1] 10.19380 10.74998 11.32583

Slumptal och simulering: Exempel sample()

text <- c("Linköpings", "Universitet")
set.seed(20180218)
sample(x=text, size=4, replace=TRUE)
[1] "Universitet" "Universitet" "Universitet" "Linköpings" 
sample(x=text, size=4, replace=TRUE)
[1] "Universitet" "Universitet" "Linköpings"  "Universitet"

Demo: Slumptal

R-Markdown, Notebooks och knitr

R-Markdown, Notebooks och knitr

  • Kombinera text, kod och grafik i en fil.
  • Förenkla för era laborationer i andra kurser
  • Del av R-Studio
  • Två delar:
    • Markdown (för text)
    • knitR (för R-kod)
  • Kan skapa PDF, Word och/eller HTML (och presentationer)

Markdown

  • Markupspråk (som HTML)
  • Ersätter ofta HTML
  • Enkelt
  • Kan hantera matematik (med LaTeX)
  • Integrerat med R-Studio
    • Kan behöva installera LaTeX för att skapa PDF

knitr

  • Kör R-kod och ersätter med resultatet
  • “Stickar ihop” text och kod
  • “Dynamiska rapporter”
  • För att skapa tabeller: kable()
  • Kan hantera R och Python (och ev. SAS)

R-Studio Notebooks

  • Är Rmd-filer
  • Kan köras interaktivt direkt i R-Studio
  • Inspiration från Jypyter Notebooks
  • Skillnad mellan Markdown och Notebooks, läs här

Demo: Markdown och knitr

(Webbaserade) externa datakällor

Varför?

  • Mer och mer data finns på webben
  • Vill hantera detta programatiskt
  • Kan vara lite klurigt i början
  • Centralt för reproducerbarhet

Ladda ned och läsa in från webben

  • Vill vi bara ladda ned: downloader
  • Vill vi ladda in direkt i R: repmis

repmis hanterar:

  • .Rdata
  • .csv
  • .txt

Vanliga källor att använda

  • Dropbox
  • Google Docs
  • Github

Öppen data med pxweb

pxweb api

  • En “dörr” till pxweb apier
  • pxweb är ett paket för att “gå in” genom dörren
  • Fler och fler myndigheter använder pxweb api
  • Kan användas för:
    • Navigera i datalager
    • Ladda ned förutbestämd data med kod (för produktion)

pxweb

install.packages("pxweb")
library(pxweb)
# gamla
mitt_data <- interactive_pxweb()
mitt_data <- interactive_pxweb(api = "scb", language = "sv")
# nya
mitt_data<-pxweb_interactive()

Se även denna vignette

Demo: pxweb