Groepen: geweldig voor muziek, geweldig voor data
Een veelvoorkomende analysetaak is het berekenen van samenvattingsstatistieken voor elke groep in je data. Zo wil je misschien je omzet per maand of per regio weten. In R heet het proces waarbij je je data opsplitst in groepen, op elke groep een samenvattingsfunctie toepast en de resultaten samenvoegt tot één datastructuur, "split-apply-combine". Het idee is echter veel ouder: SQL heeft al decennialang de GROUP BY-instructie. De term "map-reduce" is een vergelijkbaar concept, waarbij "map" grofweg overeenkomt met de stappen "split" en "apply", en "reduce" met "combine". De aanpak van dplyr/sparklyr is om group_by() te gebruiken voordat je mutate() of summarize() toepast. Je geeft de niet-geciteerde namen van de kolommen mee waarop je wilt groeperen. Als je bijvoorbeeld het gemiddelde van kolom x wilt berekenen voor elke combinatie van waarden in de kolommen grp1 en grp2, schrijf je het volgende.
a_tibble %>%
group_by(grp1, grp2) %>%
summarize(mean_x = mean(x))
Let op: de kolommen die je aan group_by() doorgeeft, zijn doorgaans categorische variabelen. Als je bijvoorbeeld het gemiddelde gewicht van mensen ten opzichte van hun lengte wilt berekenen, heeft het geen zin om op lengte te groeperen, omdat ieders lengte uniek is. Je kunt echter wel cut() gebruiken om lengtes in categorieën in te delen en zo het gemiddelde gewicht per categorie te berekenen.
Deze oefening maakt deel uit van de cursus
Introductie tot Spark met sparklyr in R
Oefeninstructies
Er is al een Spark-verbinding voor je gemaakt als spark_conn. Een tibble die is gekoppeld aan de trackmetadata die in Spark is opgeslagen, is vooraf gedefinieerd als track_metadata_tbl.
- Groepeer de inhoud van
track_metadataopartist_nameen:- Vat het groepsgewijze gemiddelde van
durationsamen in een nieuwe kolommean_duration. - Ken de resultaten toe aan
duration_by_artist.
- Vat het groepsgewijze gemiddelde van
- Zoek de artiesten met de kortste nummers door de rijen oplopend te sorteren op
mean_duration. - Zoek op dezelfde manier de artiesten met de langste nummers door aflopend te sorteren op
mean_duration.
Interactieve oefening met praktijkervaring
Probeer deze oefening door deze voorbeeldcode aan te vullen.
# track_metadata_tbl has been pre-defined
track_metadata_tbl
duration_by_artist <- track_metadata_tbl %>%
# Group by artist
___ %>%
# Calc mean duration
___
duration_by_artist %>%
# Sort by ascending mean duration
___
duration_by_artist %>%
# Sort by descending mean duration
___