Grupowanie – świetne w muzyce i w danych
Częstym zadaniem analitycznym jest obliczanie statystyk podsumowujących dla poszczególnych grup danych. Na przykład możesz chcieć sprawdzić przychody ze sprzedaży według miesiąca lub regionu. W R proces polegający na podziale danych na grupy, zastosowaniu statystyki podsumowującej dla każdej grupy i połączeniu wyników w jedną strukturę danych nosi nazwę „split-apply-combine". Sam koncept jest jednak znacznie starszy – SQL ma instrukcję GROUP BY od dziesięcioleci. Podobnym podejściem jest „map-reduce", gdzie „map" odpowiada mniej więcej etapom „split" i „apply", a „reduce" – etapowi „combine". W dplyr/sparklyr używamy group_by() przed mutate() lub summarize(). Funkcja ta przyjmuje niecytowane nazwy kolumn, według których chcemy grupować. Na przykład, aby obliczyć średnią kolumny x dla każdej kombinacji wartości w kolumnach grp1 i grp2, piszemy:
a_tibble %>%
group_by(grp1, grp2) %>%
summarize(mean_x = mean(x))
Pamiętaj, że kolumny przekazywane do group_by() powinny zazwyczaj być zmiennymi kategorycznymi. Na przykład obliczanie średniej wagi osób względem ich wzrostu nie ma sensu przy grupowaniu po wzroście, bo każda osoba ma inny wzrost. Można jednak użyć cut(), aby podzielić wzrosty na kategorie i obliczyć średnią wagę dla każdej z nich.
To ćwiczenie jest częścią kursu
Wprowadzenie do Spark z pakietem sparklyr w R
Instrukcje do ćwiczenia
Połączenie ze Sparkiem zostało już utworzone jako spark_conn. Tibble powiązany z metadanymi utworów przechowywanymi w Sparku jest wstępnie zdefiniowany jako track_metadata_tbl.
- Zgrupuj zawartość
track_metadatawedługartist_name, a następnie:- Oblicz grupową średnią kolumny
durationjako nową kolumnęmean_duration. - Przypisz wyniki do
duration_by_artist.
- Oblicz grupową średnią kolumny
- Znajdź artystów z najkrótszymi utworami, sortując wiersze w rosnącej kolejności według
mean_duration. - Analogicznie znajdź artystów z najdłuższymi utworami, sortując malejąco według
mean_duration.
Interaktywne ćwiczenie praktyczne
Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.
# 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
___