Aggregering og Gruppering i Python
Stryg for at vise menuen
Aggregation er processen med at opsummere flere rækker af data til en enkelt meningsfuld værdi, såsom en sum, gennemsnit eller optælling. Gruppering gør det muligt at anvende disse opsummeringer på specifikke kategorier, for eksempel at finde det samlede salg for hver enkelt region.
Det er sjældent nødvendigt at gennemgå millioner af individuelle rækker med rå data. Normalt ønsker man at få det "store billede" – totaler, gennemsnit eller optællinger pr. kategori. I Spark kan dette opnås ved at kombinere to kraftfulde metoder: groupBy() og agg().
Det grundlæggende groupBy-mønster
For at opsummere data efter en bestemt kategori bruges først metoden groupBy(). Dette instruerer Spark i at samle alle rækker, der deler samme værdi (som "cut" i diamonds-tabellen), i en gruppe. Gruppering i sig selv gør dog ikke noget; det skal følges op med en aggregering.
# Group by cut and count how many rows are in each
count_df = df.groupBy("cut").count()
display(count_df)
Udførelse af matematiske operationer med sum(), avg() og max()
Når dataene er grupperet, kan der anvendes matematiske funktioner på de numeriske kolonner. For at se den samlede profit pr. varetype anvendes .sum().
# Total total_depth per cut category
total_depth = df.groupBy("cut").sum("x")
display(total_depth)
Bemærk, at Spark automatisk omdøber kolonnen til sum(x). I næste kapitel lærer vi, hvordan disse navne kan gøres mere professionelle.
Metoden agg() til flere målinger
Hvis du har behov for at beregne mere end én ting ad gangen—for eksempel både gennemsnitligt overskud og maksimalt omsætning for hver region—anvendes .agg() (aggregate) metoden. Dette er den professionelle standard til opbygning af komplekse sammenfatninger.
from pyspark.sql import functions as F
# Calculate multiple metrics at once
summary_df = df.groupBy("cut").agg(
F.sum("x"),
F.avg("y"),
F.max("z")
)
display(summary_df)
Vi importerer pyspark.sql.functions as F for at få adgang til disse kraftfulde matematiske værktøjer.
Gruppering efter flere kolonner
Det er ikke begrænset til kun at gruppere efter én kategori. Du kan angive en liste af kolonner for at se data på et mere detaljeret niveau, såsom den samlede x for hver Color Type inden for hver Cut.
multi_group_df = df.groupBy("cut", "color").sum("x")
display(multi_group_df)
Sortering af resultaterne
Aggregerede data er ofte nemmere at læse, når de er sorteret. Du kan kæde metoden .orderBy() til slutningen af din aggregering for at se dine bedst præsterende kategorier øverst på listen.
# Show highest profit categories first
sorted_df = summary_df.orderBy("sum(x)", ascending=False)
display(sorted_df)
1. Hvilken metode skal du kalde FØR du anvender en sum() eller avg() hvis du vil have resultaterne opdelt efter kategori?
2. Hvad er fordelen ved at bruge .agg()-metoden i stedet for kun .sum()?
Tak for dine kommentarer!
Spørg AI
Spørg AI
Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat