1 2 3 4 5 6
1 2 3 4 5 6
R is een open-source (vrij te gebruiken!) programmeertaal voor het werken met data
1 2 3 4 5 6
Mijn persoonlijke Excel nachtmerrie
Het magische van R is dat het reproduceerbaar is (door iemand anders of jouwzelf later)
Hou data apart van de code (stappen datavoorbereiding)
1 2 3 4 5 6
Je hebt de R-taal nodig
En ook de software
1 2 3 4 5 6
project files vind je hier
geïmporteerde data komen hier
code kan hier komen
1 2 3 4 5 6
project files komen hier
geïmporteerde data hier
code kan ook
hier komen
1 2 3 4 5 6
Je gebruikt R via pakketten
…die functies omvatten
…of gewoon werkwoorden zijn
1 2 3 4 5 6
faculteit
year | id | rank | dept1 | dept2 |
---|---|---|---|---|
2021-22 | 1005 | Lecturer | Chemistry | |
2021-22 | 1022 | Professor | Physics | Engineering |
2021-22 | 1059 | Professor | Physics | |
2021-22 | 1079 | Lecturer | Music | |
2021-22 | 1086 | Assistant Professor | Music | |
2021-22 | 1095 | Adjunct Instructor | Sociology |
1 2 3 4 5 6
cursussen
semester | course_id | faculty_id | dept | enrollment | level |
---|---|---|---|---|---|
20212202 | 10605 | 1772 | Physics | 7 | UG |
20212202 | 10605 | 1772 | Physics | 32 | GR |
20212202 | 11426 | 1820 | Political Science | 8 | UG |
20212202 | 12048 | 1914 | English | 24 | UG |
20212202 | 13269 | 1095 | Sociology | 48 | UG |
20212202 | 13517 | 1086 | Music | 17 | UG |
1 2 3 4 5 6
1 2 3 4 5 6
<-
“opslaan als”
opt + -
%>%
“en dan”
Cmd + shift + m
1 2 3 4 5 6
filter
rijen houden of laten verdwijnen (observaties)
select
kolommen houden of laten verdwijnen (variabelen)
arrange
sorteren van data op basis van bepaalde variabele(n)
count
telt data op basis van bepaalde variabele(n)
mutate
creëert nieuwe variabelen
group_by
/summarize
aggregeert data (pivot tables!)
str_*
functies werken makkelijk met tekst
1 2 3 4 5 6
function(data, argument(s))
is hetzelfde als
data %>%
function(argument(s))
1 2 3 4 5 6
filter
houdt of doet rijen verdwijnen (observaties)
de ==
operator zorgt voor gelijkheid
year | id | rank | dept1 | dept2 |
---|---|---|---|---|
2021-22 | 1095 | Adjunct Instructor | Sociology | |
2021-22 | 1118 | Assistant Professor | Sociology | |
2021-22 | 1161 | Assistant Professor | Sociology | |
2021-22 | 1191 | Professor | Sociology | |
2021-22 | 1216 | Associate Professor | Sociology | American Studies |
2021-22 | 1273 | Assistant Professor | Sociology |
1 2 3 4 5 6
de |
operator betekent “of”
year | id | rank | dept1 | dept2 |
---|---|---|---|---|
2021-22 | 1022 | Professor | Physics | Engineering |
2021-22 | 1059 | Professor | Physics | |
2021-22 | 1095 | Adjunct Instructor | Sociology | |
2021-22 | 1118 | Assistant Professor | Sociology | |
2021-22 | 1161 | Assistant Professor | Sociology | |
2021-22 | 1191 | Professor | Sociology |
1 2 3 4 5 6
de %in%
operator is toegestaan voor verschillende opties in een list
year | id | rank | dept1 | dept2 |
---|---|---|---|---|
2021-22 | 1022 | Professor | Physics | Engineering |
2021-22 | 1059 | Professor | Physics | |
2021-22 | 1079 | Lecturer | Music | |
2021-22 | 1086 | Assistant Professor | Music | |
2021-22 | 1095 | Adjunct Instructor | Sociology | |
2021-22 | 1118 | Assistant Professor | Sociology |
1 2 3 4 5 6
de &
operator combineert voorwaarden
year | id | rank | dept1 | dept2 |
---|---|---|---|---|
2021-22 | 1022 | Professor | Physics | Engineering |
2021-22 | 1059 | Professor | Physics | |
2021-22 | 1191 | Professor | Sociology | |
2021-22 | 1201 | Professor | Physics | |
2021-22 | 1209 | Professor | Music | |
2021-22 | 1421 | Professor | Physics | Engineering |
1 2 3 4 5 6
select
houdt of doet kolommen verdwijnen (variabelen)
1 2 3 4 5 6
kan kolommen weggooien met -column
1 2 3 4 5 6
de pipe %>%
verandert verschillende functies in een keer
1 2 3 4 5 6
arrange
sorteert dataset op basis van bepaalde variabele(n)
gebruik desc()
om volgorden te laten aflopen
semester | course_id | faculty_id | dept | enrollment | level |
---|---|---|---|---|---|
20212201 | 10511 | 1005 | Chemistry | 50 | UG |
20212201 | 15934 | 1421 | Physics | 50 | UG |
20192002 | 13850 | 1105 | Chemistry | 50 | UG |
20181901 | 17773 | 1942 | Music | 50 | UG |
20212202 | 13269 | 1095 | Sociology | 48 | UG |
20202101 | 16202 | 1816 | Political Science | 48 | UG |
1 2 3 4 5 6
kan sorteren op basis van verschillende variabelen
semester | course_id | faculty_id | dept | enrollment | level |
---|---|---|---|---|---|
20212201 | 10511 | 1005 | Chemistry | 50 | UG |
20192002 | 13850 | 1105 | Chemistry | 50 | UG |
20202102 | 13850 | 1258 | Chemistry | 39 | UG |
20202102 | 16606 | 1393 | Chemistry | 38 | UG |
20202101 | 16540 | 1784 | Chemistry | 38 | UG |
20181901 | 10511 | 1829 | Chemistry | 36 | UG |
1 2 3 4 5 6
count
telt dataset op basis van bepaalde variabele(n) (heel handig om de data te leren kennen)
1 2 3 4 5 6
kan sort = TRUE
gebruiken om resultaten te ordenen
1 2 3 4 5 6
mutate
creëert nieuwe variabelen (met een =
)
year | id | rank | dept1 | dept2 | new |
---|---|---|---|---|---|
2021-22 | 1005 | Lecturer | Chemistry | hello! | |
2021-22 | 1022 | Professor | Physics | Engineering | hello! |
2021-22 | 1059 | Professor | Physics | hello! | |
2021-22 | 1079 | Lecturer | Music | hello! | |
2021-22 | 1086 | Assistant Professor | Music | hello! | |
2021-22 | 1095 | Adjunct Instructor | Sociology | hello! |
1 2 3 4 5 6
veel handiger met een conditionele zoals ifelse()
, die drie argumenten heeft:
voorwaarde, als het waar is, als het niet waar is
1 2 3 4 5 6
de !
operator betekent niet
is.na()
identificeert lege waarden
1 2 3 4 5 6
met verschillende voorwaarden is case_when()
veel handiger!
dept1 | division |
---|---|
Chemistry | Sciences |
Physics | Sciences |
Physics | Sciences |
Music | Humanities |
Music | Humanities |
Sociology | Social Sciences |
1 2 3 4 5 6
group_by
/summarize
aggregeert data (pivot tables!)
group_by()
identificeert de groepvariabele(n) en summarize()
specificeert de aggregatie
1 2 3 4 5 6
bruikbare argumenten met summarize
:
mean
, median
, sd
, min
, max
, n
1 2 3 4 5 6
1 2 3 4 5 6
projectfiles komen hier
geïmporteerde data komen hier
code kan ook
hier komen
1 2 3 4 5 6
In de console typen
Het is zoiets als een post-it: makkelijk voor snelle handelingen maar voor eenmalig gebruik
acties worden doorgevoerd maar de code niet
maar een codechunck is een handeling per keer (Return
)
In een codefile typen
scriptfiles hebben een .R
extensie
code wordt bewaard en onderdelen van welke lengte ook kunnen opnieuw gerund worden (Cmd + Return
)
doe ~95% van jouw typen in een codefile in plaats van in de console!
1 2 3 4 5 6
pakketten moeten geïnstalleerd zijn op ieder computer die je gebruikt
pakketten moeten geladen worden met library()
aan het begin van elke sessie
krijg toegang tot helpfiles door ??tidyverse
of ??mutate
in de console in te typen
1 2 3 4 5 6
sterk aanbevolen om projects te gebruiken om georganiseerd te blijven
hou codefiles en datafiles bij elkaar voor betere filepad-navigatie en voor betere reproduceerbare werkgewoonten
1 2 3 4 5 6
projectfiles komen hier
geïmporteerde data verschijnen hier
code kan ook
hier komen
1 2 3 4 5 6
Klik op de groene Codeknop en selecteer “Download ZIP”, en open neair.Rproj
1 2 3 4 5 6
gebruik read_csv()
om een csv-file te importeren
het readxl pakket is behulpzaam voor Excelfiles
Bekijk de data met View(faculty)
of klik op de datanaam in het Environment paneel
1 2 3 4 5 6
1 2 3 4 5 6
functions van stringr
(die allemaal beginnen met str_
) zijn behulpzaam als je met tekstdata werkt
year | id | rank | dept1 | dept2 |
---|---|---|---|---|
2021-22 | 1022 | Professor | Physics | Engineering |
2021-22 | 1059 | Professor | Physics | |
2021-22 | 1086 | Assistant Professor | Music | |
2021-22 | 1118 | Assistant Professor | Sociology | |
2021-22 | 1158 | Assistant Professor | Political Science | |
2021-22 | 1161 | Assistant Professor | Sociology |
1 2 3 4 5 6
cheatsheet met functies hiervan vind je hier
1 2 3 4 5 6
de faculteit
data hebben een rij per departement, sommige met meerdere departementen (vaak bekend als wijde data)
year | id | rank | dept1 | dept2 |
---|---|---|---|---|
2021-22 | 1005 | Lecturer | Chemistry | |
2021-22 | 1022 | Professor | Physics | Engineering |
2021-22 | 1059 | Professor | Physics | |
2021-22 | 1079 | Lecturer | Music | |
2021-22 | 1086 | Assistant Professor | Music | |
2021-22 | 1095 | Adjunct Instructor | Sociology |
1 2 3 4 5 6
wat als je één rij per faculteit per department wilt? (vaak bekend als lange data)
year | id | rank | dept_no | dept |
---|---|---|---|---|
2021-22 | 1005 | Lecturer | dept1 | Chemistry |
2021-22 | 1022 | Professor | dept1 | Physics |
2021-22 | 1022 | Professor | dept2 | Engineering |
2021-22 | 1059 | Professor | dept1 | Physics |
2021-22 | 1079 | Lecturer | dept1 | Music |
2021-22 | 1086 | Assistant Professor | dept1 | Music |
1 2 3 4 5 6
de pivot_longer
functie verlengt data
1 2 3 4 5 6
en pivot_wider
werkt in tegengestelde richting!
semester | course_id | faculty_id | dept | enrollment | level |
---|---|---|---|---|---|
20212202 | 10605 | 1772 | Physics | 7 | UG |
20212202 | 10605 | 1772 | Physics | 32 | GR |
1 2 3 4 5 6
R heeft handige functies voor het omgaan met relationele data
alles wat je nodig hebt is een key variable die datasets met elkaar verbindt
left_join
is het meest algemeen, maar er zijn er meer
1 2 3 4 5 6
wat is de gemiddelde UG enrollment per year
per faculteits rang?
faculty
year | id | rank | dept1 | dept2 |
---|---|---|---|---|
2021-22 | 1005 | Lecturer | Chemistry | |
2021-22 | 1022 | Professor | Physics | Engineering |
2021-22 | 1059 | Professor | Physics | |
2021-22 | 1079 | Lecturer | Music |
courses
semester | course_id | faculty_id | dept | enrollment | level |
---|---|---|---|---|---|
20212202 | 10605 | 1772 | Physics | 7 | UG |
20212202 | 10605 | 1772 | Physics | 32 | GR |
20212202 | 11426 | 1820 | Political Science | 8 | UG |
20212202 | 12048 | 1914 | English | 24 | UG |
faculty$id
is hetzelfde als courses$faculty_id
1 2 3 4 5 6
wat is de gemiddelde UG enrollment per year, per faculty rang?
semester | course_id | faculty_id | dept | enrollment | level |
---|---|---|---|---|---|
20212202 | 10605 | 1772 | Physics | 7 | UG |
20212202 | 10605 | 1772 | Physics | 32 | GR |
20212202 | 11426 | 1820 | Political Science | 8 | UG |
20212202 | 12048 | 1914 | English | 24 | UG |
20212202 | 13269 | 1095 | Sociology | 48 | UG |
UG
cursussen alleenyear
variabele opnieuwenrollment
per year
en faculty_id
samen1 2 3 4 5 6
Gebruik de <-
operator om de nieuwe dataframe courses_UG
te creëren
1 2 3 4 5 6
filter
op ‘UG’ alleen en mutate
een nieuwe academisch year
-variable
1 2 3 4 5 6
group_by
op year
en faculty_id
; summarize
enrollment
year | faculty_id | enr |
---|---|---|
2018-19 | 1059 | 35 |
2018-19 | 1086 | 14 |
2018-19 | 1102 | 37 |
2018-19 | 1203 | 25 |
1 2 3 4 5 6
wat is de gemiddelde UGinschrijving per jaar, per faculteitsrang?
faculty
year | id | rank | dept1 | dept2 |
---|---|---|---|---|
2021-22 | 1005 | Lecturer | Chemistry | |
2021-22 | 1022 | Professor | Physics | Engineering |
2021-22 | 1059 | Professor | Physics | |
2021-22 | 1079 | Lecturer | Music | |
2021-22 | 1086 | Assistant Professor | Music | |
2021-22 | 1095 | Adjunct Instructor | Sociology |
courses_UG
year | faculty_id | enr |
---|---|---|
2021-22 | 1005 | 50 |
2021-22 | 1086 | 17 |
2021-22 | 1095 | 48 |
2021-22 | 1128 | 32 |
2021-22 | 1147 | 32 |
2021-22 | 1191 | 7 |
1 2 3 4 5 6
1
2
3
year | id | rank | dept1 | dept2 | enr |
---|---|---|---|---|---|
2021-22 | 1005 | Lecturer | Chemistry | 50 | |
2021-22 | 1022 | Professor | Physics | Engineering | |
2021-22 | 1059 | Professor | Physics | ||
2021-22 | 1079 | Lecturer | Music | ||
2021-22 | 1086 | Assistant Professor | Music | 17 | |
2021-22 | 1095 | Adjunct Instructor | Sociology | 48 |
1 2 3 4 5 6
wat is de gemiddelde UGinschrijving per jaar, per faculteitsrang?
year | rank | avg_enr |
---|---|---|
2021-22 | Adjunct Instructor | 34.66667 |
2021-22 | Assistant Professor | 23.60000 |
2021-22 | Associate Professor | 17.25000 |
2021-22 | Lecturer | 31.83333 |
2021-22 | Professor | 32.16667 |
2021-22 | Visiting Researcher |
1 2 3 4 5 6
1 2 3 4 5 6
ggplot2
is het datavisualizatiepakket dat geladen wordt met tidyverse
de grammar of graphics zorgt ervoor dat het geheel aan esthetische eisen voldoet
met het visueel hercoderen van gegevens (in bv. lengte, kleur, positie, grootte) kunnen veranderingen en vergelijkingen worden getoond
1 2 3 4 5 6
Om lijnen te combineren in een codechunk, gebruiken we +
in plaats van %>%
1 2 3 4 5 6
kan makkelijk een mooiere grafiek maken
faculty %>%
count(rank) %>%
ggplot(aes(x = reorder(rank, -n), y = n)) +
geom_bar(stat = "identity", fill = "#cc0000") +
scale_y_continuous(expand = expansion(mult = c(0, 0.1))) +
geom_text(aes(label = n), vjust = -0.5) +
labs(x = NULL, y = NULL,
title = "Aantal faculteit per rang, 2018-2021") +
theme_linedraw() +
theme(panel.grid.major.x = element_blank(),
axis.ticks = element_blank())
1 2 3 4 5 6
1 2 3 4 5 6
fac_enr %>%
filter(!is.na(avg_enr)) %>%
ggplot(aes(x = year, y = avg_enr, group = rank, color = rank)) +
geom_line() +
geom_point() +
scale_color_brewer(type = "qual", palette = "Dark2") +
labs(x = NULL, y = "Gemiddelde inschrijving",
title = "Gemiddelde UG per rang over tijd") +
theme_linedraw() +
theme(panel.grid.major.x = element_blank(),
axis.ticks = element_blank(),
legend.title = element_blank(),
legend.background = element_rect(fill = NA),
legend.key = element_rect(fill = NA),
legend.position = c(0.85, 0.82))
1 2 3 4 5 6
Data Visualization: a practical introduction
creëren custom themes
het ggplot2 boek
1 2 3 4 5 6
met alles wat we hebben gedaan, kan jouw .R
file:
en dat bestand zou het voor jou of iemand anders heel makkelijk maken om deze analyse over een tijdje te reproduceren met nieuwe gegevens
1 2 3 4 5 6
1 2 3 4 5 6
Gebruikt RStudio om .qmd
en .rmd
documenten te maken waarin tekst, code en grafieken zijn gecombineerd
verschillende soorten output: html, pdf, Word, presentaties etc
heel handig voor specifiek rapporteren: kan makkelijk een op R-gebaseerd PDFrapport maken en automatisch genereren voor, zeg, elk department
1 2 3 4 5 6
je kunt je eigen pakket maken!
jouw pakket omvat dan bijvoorbeeld:
ggplot2
themakan op een gedeelde schijf worden gezet om zo samenwerking te faciliteren
1 2 3 4 5 6
R Markdown
de officiële R Markdown website
R Markdown: The Definitive Guide
interne pakketten
een samenhangende theoretische uitleg
een praatje van Meghan Hall eerder dit jaar over dit onderwerp
R for Data Science: the ultimate guide
R for Excel users: a very useful workshop
STAT 545: een onlineboek over reproduceerbare dataanalysis in R
de RStudio Education site
de Learn tidyverse
site