class: title-slide, center, middle <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.6.0/css/all.css" integrity="sha384-aOkxzJ5uQz7WBObEZcHvV5JvRW3TUc2rNPA7pe3AwnsUohiw1Vj2Rgx2KSOkF5+h" crossorigin="anonymous"> <style> .center2 { margin: 0; position: absolute; top: 50%; left: 50%; -ms-transform: translate(-50%, -50%); transform: translate(-50%, -50%); } .rcorners1 { margin: auto; border-radius: 25px; background: #ada500; padding: 10px; # width: 50%; } </style> <style type="text/css"> .right-column{ padding-top: 0; } .remark-code, .remark-inline-code { font-family: 'Source Code Pro', 'Lucida Console', Monaco, monospace; font-size: 90%; } </style> <div class="my-logo-left"> <img src="img/UA-eng-hor-1-RGB.jpg" width="110%"/> </div> <div class="my-logo-right"> <img src="img/logo_VLHORA.svg" width="110%"/> </div> # INPUT - OUTPUT Workshop R & RStudio .font160[ .SW-greenD[Deel 1] ] .font120[ .SW-greenD[*Intro in R en RStudio; Projecten; Externe data inlezen*] ] Sven De Maeyer .font80[ .UA-red[ 22/04/2022 ] ] --- class: inverse-green, left # Overzicht .center2[ - Wat praktische afspraken --- ([doorklikken](#part1)) - Wat en waarom `R`? --- ([doorklikken](#part2)) - `R` & `RStudio` installeren --- ([doorklikken](#part3)) - De `RStudio` interface --- ([doorklikken](#part4)) - De basis van `R` ([doorklikken](#part5)) - Pakketten installeren en gebruiken --- ([doorklikken](#part6)) - Werken met projecten --- ([doorklikken](#part7)) ] --- background-image: url(despicable_me2.jpeg) background-size: contain class: inverse ## .yellow[Over mezelf] - Universiteit van Antwerpen; Faculteit Sociale Wetenschappen; dept. Opleidings- en onderwijswetenschappen (OOW) - brede onderzoeksinteresse: verschillende topics (psychometrie, schrijfonderzoek, learning strategies, educatie voor duurzame ontwikkeling, linguïstiek, ...) - belangrijkste onderzoeksfocus: Comparative Judgement + Leren van vergelijken - fe`R`vent `R` gebruiker <br> <br> <br> Blog: https://svendemaeyer.netlify.app/ Twitter: @svawa github: https://github.com/Sdemaeyer2 --- background-image: url(we_like_you_too.jpg) background-size: contain class: inverse, center, bottom ## .green[Even elkaar leren kennen...] .black[Je functie?] .black[Onderzoek?] .black[Verwachtingen?] <br><br><br> --- class: inverse-green, center, middle name: part1 # 1. Praktische afspraken --- <div class="my-logo-right"> <img src="Dropbox.jpg" width="200%"/> </div> ## Materiaal <br> Verschillende types van files: - Rmarkdown files (voor slides en voorbeelden) - R-scripts (als voorbeeld) - datasets - html-versie van de slides <br> Allemaal via Dropbox beschikbaar. [https://www.dropbox.com/sh/37p15c6lcg6b0b3/AADbo4EYrjyoO7D4n0ldGNoUa?dl=0] <br> De slides als html kan je ook openen via mijn 'Talks site' [https://slides-sdemaeyer.netlify.app/] --- ## Teams <br> We zullen de sessies opnemen <br> .big[🙏] Maak het interactief! Interfereer gerust! <br> Zit je vast bij bepaalde oefeningen? `\(\rightarrow\)` Deel je scherm ... <br> .Large[☕] nodig? Laat het weten! --- class: inverse-green, center, middle name: part2 # 2. Wat is `R` en waarom `R`? --- <div class="my-logo-right"> <img src="Rlogo.svg" width="90%"/> </div> ## Wat is `R`? - Krachtig instrument voor * Data Science * Statistische analyses * Statistisch programmeren * Grafieken etc maken ... - Een 'TAAL' `\(\rightarrow\)` We moeten wat **woordenschat** en **grammatica** leren ... --- <div class="my-logo-right"> <img src="Rlogo.svg" width="90%"/> </div> ## Waarom `R`? - FREE OPEN SOURCE! - Constant in ontwikkeling - 1000'en "add-ins" (pakketten) - Statistici implementeren nieuwe of betere algoritmes en technieken in `R` - Loopt voor op commerciële statistische software - Vergemakkelijkt Open Science - GROTE COMMUNITY --- class: inverse-green, center, middle name: part3 # 3. `R` en `RStudio` installeren --- <div class="my-logo-right"> <img src="Rlogo.svg" width="90%"/> </div> ## `R` installeren https://cran.r-project.org/ <img src="Cran.jpg" width="80%" height="80%" /> <i class="fas fa-angle-double-right" style="color: #FF0035;"></i> * Mocht je R nog niet hebben geïnstalleerd, doe het nu... Zit je vast, laat het even weten.* --- ## Laat ons samen `R` even kort verkennen ... <img src="R_Screen1.jpg" width="80%" height="80%" /> --- ## `RStudio` installeren .pull-left[ https://www.rstudio.com/products/rstudio/ ] .pull-right[ <img src="RStudio1.jpg" width="80%" height="80%" /> ] --- ## `RStudio` installeren .pull-left[ https://www.rstudio.com/products/rstudio/ Scroll naar beneden en klik op *RStudio Desktop* Nu kan je `RStudio` downloaden ] .pull-right[ <img src="RStudio2.jpg" width="80%" height="80%" /> ] --- ## `RStudio` installeren .left-column[ https://www.rstudio.com/ Klik op *Products* Klik op *RStudio* Nu kan je `RStudio` installeren <i class="fas fa-angle-double-right" style="color: #FF0035;"></i> * Installeer `RStudio` op je computer indien je dit nog niet gedaan hebt... * ] .right-column[ <img src="RStudio1.jpg" width="80%" height="80%" /> ] --- class: inverse-green, center, middle name: part4 # 4. De `RStudio` interface --- class: inverse-blue, center, middle # `RStudio` omgeving .rcorners1[ .Large[ <i class="fas fa-desktop" style="color: #FF0035;"></i> * Laat ons samen `RStudio` verkennen!* ] ] ??? Dadelijk open ik RStudio. Uiteraard kan je zelf ook RStudio mee openen en kijken hoe het er bij jou uitziet... --- class: inverse-green, center, middle name: part5 # 5. De basis in `R` --- ## Type van objecten <br> .pull-left[ - vectors - matrices - arrays - data-frames - lists - functions ... ] .pull-right[ <img src="Data_Types.png" width="80%" height="80%" /> ] .footnote[.small[ <i class="fas fa-link" style="color: #FF0035;"></i> * Figure from https://www.edureka.co/blog/r-programming-language *] ] --- ### Vectoren <img src="Vectors.png" width="40%" height="40%" /> <br> .footnote[ .small[ <i class="fas fa-link" style="color: #FF0035;"></i> * Figure from https://www.edureka.co/blog/r-programming-language * ] ] --- class: inverse-blue, center, middle ## Eerste stappen in `R` ; we maken een script ... .rcorners1[.Large[ <i class="fas fa-code" style="color: #FF0035;"></i> * Tijd om onze handen 'vuil te maken' en samen te coderen* ] .small[De code die we straks hanteren staat ook op de volgende slides. Daarnaast is er een script `Fruit.R` waarin ook deze code is opgenomen (zie `Dropbox/VLHORA_R_2021/R_scripts`)] ] --- ### <i class="fas fa-code" style="color: #FF0035;"></i> .SW-greenD[Code-Blocks] We maken een vector met de naam *.UA-blue[Fruit]* ```r Fruit <- c("Apples", "Bananas", "Lemons", "Berries", "Peaches") ``` - .UA-red[`c()`] staat voor .SW-greenD[*concatenate* (= aaneenrijgen)], alle elementen tussen haakjes gescheiden door `,` worden samengevoegd tot één element - de .UA-red[`<-`] betekent dat we het resultaat willen wegschrijven in een object (een vector) die we `Fruit` noemen - doordat de elementen tussen .UA-red[`" "`] staan, geven we aan dat de elementen het type *Character* zijn Laat ons het object *.UA-blue[Fruit]* opvragen ```r Fruit ``` ``` ## [1] "Apples" "Bananas" "Lemons" "Berries" "Peaches" ``` We kunnen ook de structuur van het object *.UA-blue[Fruit]* checken via de .UA-red[`str()`] functie ```r str(Fruit) ``` ``` ## chr [1:5] "Apples" "Bananas" "Lemons" "Berries" "Peaches" ``` --- ### <i class="fas fa-code" style="color: #FF0035;"></i> .SW-greenD[Code-Blocks] We maken een vector met de naam *.UA-blue[Weight]* ```r Weight <- c(230, 191, 93, 100, 48) ``` nu worden de elementen weggeschreven als numerieke elementen ```r str(Weight) ``` ``` ## num [1:5] 230 191 93 100 48 ``` dus we kunnen ermee beginnen rekenen... bv. we kunnen de functie .UA-red[`mean( )`] toepassen ```r mean(Weight) ``` ``` ## [1] 132.4 ``` --- ### <i class="fas fa-code" style="color: #FF0035;"></i> .SW-greenD[Code-Blocks] We maken een vector met de naam *.UA-blue[Yellow]* ```r Yellow <- c(F, T, T, F, F) ``` nu zijn de elementen 'logische operatoren' (TRUE of FALSE) ```r str(Yellow) ``` ``` ## logi [1:5] FALSE TRUE TRUE FALSE FALSE ``` Laat ons kijken wat er in de vector *.UA-blue[Yellow]* zit ```r Yellow ``` ``` ## [1] FALSE TRUE TRUE FALSE FALSE ``` --- ### <i class="fas fa-code" style="color: #FF0035;"></i> .SW-greenD[Code-Blocks] We maken een data.frame met de naam *.UA-blue[Fruit_data]* via de .UA-red[data.frame( )] functie .small[ ```r Fruit_data <- data.frame(Fruit, Weight, Yellow) ``` ] Even *.UA-blue[Fruit_data]* bekijken .small[ ```r Fruit_data ``` ``` ## Fruit Weight Yellow ## 1 Apples 230 FALSE ## 2 Bananas 191 TRUE ## 3 Lemons 93 TRUE ## 4 Berries 100 FALSE ## 5 Peaches 48 FALSE ``` ] We kunnen ook opnieuw de structuur van .UA-blue[*Fruit_data*] bekijken .small[ ```r str(Fruit_data) ``` ``` ## 'data.frame': 5 obs. of 3 variables: ## $ Fruit : chr "Apples" "Bananas" "Lemons" "Berries" ... ## $ Weight: num 230 191 93 100 48 ## $ Yellow: logi FALSE TRUE TRUE FALSE FALSE ``` ] --- ### <i class="fas fa-code" style="color: #FF0035;"></i> .SW-greenD[Code-Blocks] .pull-left[ De .UA-red[`$`] operator om te verwijzen naar een vector (of ook kolom of variabele) .small[ ```r Fruit_data$Fruit ``` ``` ## [1] "Apples" "Bananas" "Lemons" "Berries" "Peaches" ``` ] ] .pull-right[ Of via *indexing*: verwijzen naar kolom- (en/of rij-) nummers tuseen .UA-red[`[rij, kolom]`] Element uit rij 1 en kolom 1 opvragen .small[ ```r Fruit_data[1,1] ``` ``` ## [1] "Apples" ``` ] Elementen in kolom 3 opvragen .small[ ```r Fruit_data[,3] ``` ``` ## [1] FALSE TRUE TRUE FALSE FALSE ``` ] Elementen in rij 3 opvragen .small[ ```r Fruit_data[3,] ``` ``` ## Fruit Weight Yellow ## 3 Lemons 93 TRUE ``` ] ] --- class: inverse-green, center, middle name: part6 # 6. Pakketten installeren en gebruiken --- ## Pakketten... .pull-left[ - Het `R` universum is constant in ontwikkeling - Pakketten = uitbreidingen van de functies die in `Base` zitten - .SW-greenD[Specialistisch] tot .SW-greenD[Generieke/Universele] pakketten - overzicht op https://cran.r-project.org/ (doorklikken naar Packages) - we maken een selectie... ] .pull-right[ <img src="R_packages.jpg" width="100%" height="100%" /> ] --- ## Welcome to the `tidyverse` een .UA-red[**MUST-HAVE**] voor iedereen! <img src="Tidyverse_screen.jpg" width="50%" height="50%" /> <i class="fas fa-link" style="color: #FF0035;"></i> * Meer informatie op https://tidyverse.org * --- ## .UA-red[ `ìnstall.packages( )`] en .SW-greenD[`library( )`] .pull-left[ Pakketten kan je .UA-red[**downloaden en installeren**] - via 'klikken' in RStudio - **via een functie in de Console of in een script** <br> wat ikzelf het vaakst doe: `install.packages()` Bv: ```r install.packages("tidyverse", dependencies = T) ``` ] .pull-right[ Pakketten kan je .SW-greenD[**activeren**] tijdens je sessie - via 'klikken' in RStudio - **via een functie in de Console of in een script** <br> wat ikzelf het vaakst doe: `library()` Bv: ```r library("tidyverse") ``` ] .rcorners1[.Large[ <i class="fas fa-code" style="color: #FF0035;"></i> .white[*Tijd om samen in `RStudio` aan de slag te gaan ...*] ] ] --- class: inverse-green, center, middle name: part7 # 7. Werken met projecten in `RStudio` --- ## Waarom? Tijdens analyses zullen we geregeld verschillende bestanden hanteren: - externe datasets - analyse scripts - output (html-files; figuren; ...) Gevolg: in code moeten we verwijzen naar die files via .SW-greenD[ABSOLUTE paden] ``` 'c:/Users/Sven/Mijn Documenten/UAntwerpen/Analyses/ProjectX/R_Script/Analysescript1.R' ``` <i class="fas fa-arrow-right" style="color: #FF0035;"></i> Superlastig om je werk te delen; verplaatsen van pc; ... <br> `RStudio` heeft het concept .UA-red[Project] geïntroduceerd om dit te omzeilen In een project hateer je .SW-greenD[RELATIEVE paden] (vertrekkend vanuit de folder waarin je een project opslaagt) ``` '~R_Script/Analysescript1.R' ``` --- class: inverse-blue, center, middle ## RIASEC_project .rcorners1[.Large[ <i class="fas fa-code" style="color: #FF0035;"></i> .white[*Samen een project maken in `RStudio` *] <br> .small[Op Dropbox kan je de map `RIASEC_project` vinden welke je ergens op je pc kan zetten. Dit wordt ons startpunt dadelijk.] ] ] --- ### Een project aanmaken in 'RStudio' Via .UA-red[`File/New Project...`] Vervolgens kan je kiezen: <img src="New_Project.jpg" width="50%" height="50%" /> --- ## Voorbeeld dataset voor de workshop .pull-left[ <img src="RIASEC-Hexagon-5.png" width="50%" height="50%" /> ] .pull-right[ .footnotesize[ | Schaal | Voorbeelditem | n items | |---------------|-----------------------------------------------|---------| | Realistic | Test the quality of parts before shipment | 8 | | Investigative | Study the structure of the human body | 8 | | Artistic | Design artwork for magazines | 8 | | Social | Give career guidance to people | 8 | | Enterprising | Operate a beauty salon or barber shop | 8 | | Conventional | Inventory supplies using a hand-held computer | 8 | ] ] .footnote[ <i class="fas fa-link" style="color: #FF0035;"></i> * Data afgehaald van https://openpsychometrics.org/_rawdata/ * ; Data uitgefilterd voor 'BE', 'NL' en 'GB' ] --- ## Externe data inlezen Data komt in allerlei formaten, maar de meest courante zijn: - MS Excel - SPSS / Stata / SAS - tekst (csv, tab-delimited) Verschillende methodes en pakketten zijn ontwikkeld om die externe bronnen van data in te lezen --- ## MS Excel data inlezen met het .UA-red[`readxls`] pakket Zorg dat het pakket geïnstalleerd is op je pc Vervolgens: ```r library(readxl) Data <- read_excel( path = "<verwijzing naar de map en het bestand>" ) ``` Stel: excel-file met de naam .SW-greenD[**Dataverzameling1**] met meerdere werkbladen Doel: werkblad met de naam .SW-greenD[**Groep2**] inlezen wegschrijven in .SW-greenD[**Data_Groep2**] ```r Data_Groep2 <- read_excel( path = "Dataverzameling1.xlsx", sheet = "Groep2" ) ``` `sheet` moet je niet gebruiken als: - er maar 1 werkblad in de file zit - er meerdere werkbladen in de file zitten, maar je wenst enkel het eerste werkblad in te lezen --- ## SPSS data inlezen met pakket .UA-red[`foreign`] Zorg dat het pakket geïnstalleerd is op je pc Vervolgens: ```r library(foreign) Data <- read.spss( file = "<verwijzing naar de map en het bestand>", use.value.labels = FALSE, to.data.frame = TRUE ) ``` > .SW-greenD[`use.value.labels`] argument: <br> <br> Labels in SPSS weerhouden in R data-frame? <br> <br> Bv. variabele met 3 categorieën: 1 = "Laag", 2 = "Gemiddeld", 3 = "Hoog". En deze labels zijn zo in SPSS file ingegeven. Dan kan je ervoor kiezen om de labels in de R data-frame weg te schrijven (`use.value.labels = TRUE`) of de getallen 1, 2 en 3 in de R data-frame weg te schrijven (`use.value.labels = FALSE`) --- ## CSV files inlezen met functie .UA-red[`read.table( )`] .pull-left[ CSV files zien er doorgaans zo uit (gescheiden door een .UA-red[.large[`,`]] of .UA-red[.large[`;`]]) ```r Kolom1, Kolom2, Kolom3 1, 3, 5 2, 4, 6 8, 10, 99 ``` Functie .UA-red[`read_table( )`] is het handigste... ```r Data <- read.table( file = "<verwijzing naar map en bestand>", header = TRUE, sep = ",", dec = "." ) ``` ] .pull-right[ - .SW-greenD[`header`] argument: <br> <br> Bevat de eerste rij kolomnamen (oftewel variabelenamen) of niet? - .SW-greenD[`sep`] argument: <br> <br> Welk teken onderscheid gegevens in verschillende kolommen van elkaar? - .SW-greenD[`dec`] argument: <br> <br> Welk teken is het decimaalteken? (soms is dat een punt en soms een komma) ]