Artikel top billede

(Foto: Computerworld)

Kom godt i gang med R-programmering

Er du hooked på statistik og kan Excel ikke klare jobbet, så læs med på R-programmeringssproget.

Af Tom Madsen, Alt om Data

Denne artikel er oprindeligt bragt på Alt om Data. Computerworld overtog i november 2022 Alt om Data. Du kan læse mere om overtagelsen her.

Velkommen til denne artikel om programmeringssproget og softwaren R. R er en softwarepakke og programmeringssprog, der er rettet imod anvendelser inden for statestik. R-sproget blev udviklet i de tidlige 1990’ere af Ross Ihaka og Robert Gentleman og er baseret på S, der er et andet programmeringssprog til statistik udviklet i Bell Labatorierne i 70’erne. R er et open source projekt under GNU, det er derfor gratis at downloade og bruge.

I skrivende stund er den seneste version af R, version 3.1. At R har kvaliteter kan man se af, at universiteterne såsom Københavns Universitet bruger R i deres kurser om statistik. Betyder det, at man skal være uddannet statistiker for at kunne bruge det? Nej. At R bliver brugt af statistikere, kan man se ud fra R projektets hjemmeside, hvor du kan downloade et R tidsskrift kaldet ’The R Journal’.

Af artiklerne i det, kan du se, at R bliver brugt til nogle MEGET tunge videnskabelige beregninger, men R bliver ligeledes brugt til ganske almindelig dataanalyse. Nu kan du selvfølgelig spørge dig selv, hvad der er i vejen med Excel? Ingenting. Excel og R er rettet imod forskellige anvendelser, og hvis Excel opfylder dine behov for dataanalyse, så skal du naturligvis bare fortsætte med det. Fordelen ved R er, at du har et værktøj, der kan bruges til at udvikle deciderede programmer til analysen. Det, og at R har analytiske funktioner, du ikke finder i Excel.

R er ikke den eneste softwarepakke, der er rettet imod statistiske anvendelser. Blandt statistisk software er der SAS fra SAS Institute. Men software som Mathemnatica og Maple har også statistik indbygget, men kun som en del af et større hele. R er til statistik, og kun statistik. Det betyder, at softwaren kan optimeres til det formål og i modsætning til SAS, så er R gratis at bruge.

Du kan se, hvordan R ser ud, lige når du åbner det på figur 1. Lad dig ikke narre af, at det ligner noget tilbage fra Windows 3.0 tiden! Bare rolig, der findes et utal af udvidelser til R, der giver dig et fuldt IDE, som du kender det fra f.eks. Visual Studio. Min personlige favorit er Rstudio. Du kan se, hvordan Rstudio ser ud på Figur 2. Der findes en del forskellige IDE’er til R.

Hvis du bruger Linux og Emacs, så findes der en udvidelse til Emacs kaldet ESS. ESS står for ’Emacs Speaks Statistics’. Jeg foretrækker Rstudio, fordi det er udviklet kun til R, mens en del andre IDE’er har R tilføjet, men er ikke de primære sprog for IDE’et. Jeg anbefaler, at du prøver nogle forskellige muligheder for at finde lige præcis det IDE, der passer til dig.

R-projektet har levet en stille tilværelse siden sin start, men er blevet umådeligt vigtigt i de seneste år på grund af Big Data, alle de fordele der kommer med det. Her kommer R ind i billedet, da det har alle værktøjerne til at analysere al den data, vi producerer på en daglig basis. At R er trådt frem på scenen kan også ses af, at for eksempel Oracle bundler R i nogle af deres softwareprodukter.

Udover selve R-softwaren, så er der udviklet et utal af pakker, der løser alle mulige forskellige opgaver. Disse pakker er udviklet af brugerne af R. Så hvis du løber ind i et problem, som du skal løse, så er du garanteret ikke den første, der har haft det problem. Defor giver det mening at tage et kig på de pakker, man kan tilføje til R. På figur 3, kan du se et lille udsnit af dem. Der findes tusinder af dem. Figur 2 og 3, er alle sammen skærmdumps fra Rstudio. Alle de skærmdumps, du ser fra nu af, kommer fra Rstudio.

Den vigtige hjælpefunktion

Noget af det vigtigste, når man skal lære et nyt programmeringssprog, er at finde ud af, hvordan hjælpefunktionerne fungerer. R kommer naturligvis med et integreret hjælpesystem, der er rimeligt nemt at bruge. Prøv f.eks. at taste ?mean i konsolvinduet. I Rstudio vil det åbne siden med hjælp for den funktion, der hedder mean i R.

Man kunne også skrive help(”mean”). Det vil give det samme resultat, bare med mere tastearbejde. Du kan søge efter emner på samme måde. Prøv at taste ??plotting. Det vil åbne en liste med emner i hjælp, der omhandler plotting. Inden vi går videre, så skal vi lige tage et kig på plotting. For R kommer selvfølgelig med muligheder for at lave grafisk billeder af det talmateriale, som man er igang med at analysere.

Prøv at taste example(plot), i konsolen. Taster retur, for at se det første eksempel, tast retur igen for at se det næste. Der er fire i alt. De ser måske lidt ’rå’ ud, men du skal huske på, at R er udviklet til videnskabelige statistiske formål, og ikke til præsentationer til den øverste ledelse. Når det er sagt, så er der ikke noget til hinder for, at du kan peppe dem lidt op. Tag f.eks. et kig på www.d3js.org. Det er et javascript bibliotek rettet imod at omdanne et talmateriale til en grafisk repræsentation.

Mange af de eksempler, du kan finde på forsiden, er lavet på bagrund af R. I slutningen af denne artikel vil jeg give dig nogle bøger, du kan bruge til at komme videre med R, inklusiv integration mellem R og D3js.

Inden vi går videre til nogle mere hardcore R kodeeksempler, så skal vi lige runde selv R -proget. R er et fortolket programmerings- sporg. Det vil side, at det ikke bliver kompileret som f.eks. C# gør det. Den gængse visdom siger, at fortolkede sprog er langsommere end dem, der er kompilerede.

Betyder det, at R er langsom at bruge til analyser? Nej. Finten ved R er, at R bringer hele det talmateriale, der skal analyseres ind i ram. Det betyder, at R er fantastisk hurtig, men det betyder også, at hvis det datamateriale, du skal analysere, fylder meget, så skal du tage højde for det. Her kommer der en anden fordel ved Rstudio ind i billedet. Rstudio kan forbinde sig til en R-installation, der kører på en server, der har al den ram, du kunne ønske dig. På den måde kan du lave analyser fra din laptop, på en server med hundredvis af gigabyte ram.

I gang med R-kode

Lad os komme i gang med at skrive noget R-kode. Prøv at skrive mean(1:5) i konsolen. Du skulle gerne få resultatet tre tilbage fra R. mean() er en funktion, der beregner gennemsnittet af et sæt af værdier. I det her tilfælde giver jeg funktionen 1:5. Den notation giver funktionen det, som R betragter som en vektor bestående af værdierne 1 til 5.

Helt basalt, så kan man betragte R som videnskabelig regnemaskine på steroider. R kommer med alle de regnefunktioner, du kender. Prøv nu at taste 1:5 + 6:10. Ud kommer der 7 9 11 13 15. Hvad er nu det for noget? Fordi R betragter de to tal serier som vektorer, så bliver de lagt sammen individuelt. Det vil sige, at 1 fra serien 1:5, bliver lagt sammen med 6 fra serien 6:10, 2 med 7 og så videre.

Hvis du i løbet af dine eksperimenter med R løber ind i noget, der virker underligt, så tjek hvordan du har angivet data til de R-funktioner, du bruger. R har alle de matematiske funktioner, du kunne ønske dig, inklusiv funktioner fra trigonometri.

Når man skal tildele værdier til variable i R, så sker det ved enten at bruge =, som du kender det eller <-. For historiske grunde, så er <-, den foretrukne metode. Prøv nu at taste y <-10 i konsollen. Hvis du bruger Rstudio, så vil du kunne se en liste over de variabler, du har erklæret i R i øverste højre vindue.

På figur 4 kan du se en serie af variabler, jeg har erklæret i Rstudio. Den feature i Rstudio gør underværker for at bevare overblikket under udvikling af et længere R-program. Prøv nu at taste y * 3 ind. Du skulle nu meget gerne få værdien 30 ud. Hvad sker der nu, hvis du bruger den samme variable y og giver den værdien 20? Så forsvinder den oprindelige værdi 10, og y har nu værdien 20. lad os prøve noget lidt mere komplekst.

R kommer med de boolske værdier: TRUE og FALSE, og hvor vi gerne vil have en vektor med resultatet af en sammenligning af en vektor med en værdi, så sker det på denne måde: (x <- 1:10 >= 5). Vi tager den et skridt af gangen. Det første, der sker, er at variablen x får tildelt en vektor med tallene 1 til 10. Det næste der sker er, at den vektor med værdierne 1 til 10 bliver sammen-lignet med 5. Det sker ved, at tallene et for et bliver sammenlignet. Altså 1 bliver sammen-lignet først, og fordi det ikke er større end eller lig med 5, så får den sammenligning værdien FALSE.

Hvis du prøver at eksekvere koden, så vil R give dig en vektor med FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE TRUE. Hvad nu hvis du gerne vil have en vektor med værdier, der bevæger sig nedaf, altså istedet for 1 til 10, skulle det være 10 til 1? Nemt, det eneste, du behøver at gøre, er at vende rækkefølgen om i vektoren: 10:1, og voila en vektor med tal fra 10 og ned til 1.

På figur 5 kan du se et kort R-program med kommentarer til, hvad der sker i de enkelte linjer kode. Prøv at taste det ind og se, om du kan gætte hvad resultatet er af de enkelte linjer. Jeg bruger nogle funktioner, som jeg ikke har beskrevet i artiklen, så her er muligheden for at øve dig i at bruge hjælpesystemet til at finde ud af, hvad de gør.

Det her var en hurtig introduktion R, med nogle simple eksempler. Hvis du gerne vil vide mere, så kan jeg anbefale bogen Learning R fra O’Reilly. For yderligere information om hvordan du integrerer R med 3Djs, er der bogen Pro Data Visualization using R and JavaScript fra Apress. Hvis du stiler imod en karriere i Big Data og Business Intelligence, så er indsatsten i at lære R givet godt ud! God fornøjelse.

[themepacific_accordion]
[themepacific_accordion_section title="Fakta"]

Den gænge visdom siger, at fortolkede sprog er langsommere end dem, der er kompilerede. Betyder det, at R er langsom at bruge til analyser? Nej.

[/themepacific_accordion_section]
[/themepacific_accordion]