Programmering i R

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

Måns Magnusson

Avdelningen för statistik, Linköpings universitet

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
  • Del 2: Tillämpningar:
    • Grafik
    • Statistik och analys
    • Externa data
    • Datum
    • Texthantering och regular expression
    • Linjär algebra
    • knitr och markdown

R-programmering - del II:

  • Labbarna görs nu i par
  • Skapa grupper på Lisam
  • Parprogrammering:
    • Turas om att sitta vid tagentbordet
    • Den som inte kodar är engagerad i koden och problemet
    • Byter person var 30:e minut
    • Viktigt att kommentera koden: ROxygen, inline

Miniprojektet

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

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 steg för steg)
  • Används ofta för att snabbt visualisera

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 \) interval
  • 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ägg 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

Lågnivågrafik

  • Går att bygga upp vad vi vill
  • Dock är ggplot2 “smidigare”

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()
  • 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=5, mean=10, sd=1)
[1] 10.620622 11.236939  9.197733  8.645954  9.970567
set.seed(20140730)
rnorm(n=5, mean=10, sd=1)
[1] 10.560777  9.566493 11.179174 10.557180  8.353219
set.seed(20140730)
rnorm(n=5, mean=10, sd=1)
[1] 10.560777  9.566493 11.179174 10.557180  8.353219

Slumptal och simulering: Exempel sample()

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

R-Markdown, Notebooks och knitr

R-Markdown och knitr

  • 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)
  • Grunden i “litarate programming”

Markdown

  • Markupspråk (som HTML)
  • Snabbt och enkelt
  • Kan hantera matematik (med LaTeX)
  • Integrerat med R-Studio
    • Kan behöva installera LaTeX för PDF

knitr

  • Lägga in R-kod i markdown-dokument
  • Ersätter R-kod med resultatet
  • Dynamiska rapporter
  • Literate programming
  • Inbyggt i R-Studio
  • För att skapa tabeller: kable()

R-Studio Notebooks

  • Är Rmd-filer
  • Kan köras interaktivt direkt i R-Studio
  • Nytt iom R-Studio 1.0

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)
mitt_data <- interactive_pxweb()
mitt_data <- interactive_pxweb(api = "scb", language = "sv")

Demo: pxweb