Aggregasjon og Gruppering i Python
Sveip for å vise menyen
Aggregasjon er prosessen med å oppsummere flere rader med data til én meningsfull verdi, for eksempel en sum, et gjennomsnitt eller et antall. Gruppering gjør det mulig å bruke slike oppsummeringer på bestemte kategorier, som å finne det totale salget for hver enkelt region.
Det er sjelden nødvendig å se på millioner av individuelle rader med rådata. Vanligvis ønsker du å få oversikt – totaler, gjennomsnitt eller antall per kategori. I Spark kan du oppnå dette ved å kombinere to kraftige metoder: groupBy() og agg().
Det grunnleggende groupBy-mønsteret
For å oppsummere data etter en bestemt kategori, bruker du først metoden groupBy(). Dette forteller Spark at alle rader med samme verdi (som "cut" i diamonds-tabellen) skal samles i en gruppe. Gruppering alene gjør imidlertid ingenting; du må følge opp med en aggregering.
# Group by cut and count how many rows are in each
count_df = df.groupBy("cut").count()
display(count_df)
Utføre matematiske operasjoner med sum(), avg() og max()
Når du har gruppert dataene dine, kan du bruke matematiske funksjoner på de numeriske kolonnene. Hvis du vil se total fortjeneste per varetype, bruker du .sum().
# Total total_depth per cut category
total_depth = df.groupBy("cut").sum("x")
display(total_depth)
Legg merke til at Spark automatisk gir kolonnen navnet sum(x). I neste kapittel skal vi lære hvordan vi kan gjøre disse navnene mer profesjonelle.
agg()-metoden for flere måleverdier
Hvis du trenger å beregne mer enn én ting samtidig—for eksempel både gjennomsnittlig fortjeneste og maksimal omsetning for hver region—bruker du .agg() (aggregate)-metoden. Dette er den profesjonelle standarden for å lage komplekse sammendrag.
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 å få tilgang til disse kraftige matematiske verktøyene.
Gruppering etter flere kolonner
Du er ikke begrenset til å gruppere etter kun én kategori. Du kan sende inn en liste med kolonner for å se data på et mer detaljert nivå, for eksempel total x for hver Color Type innenfor hver Cut.
multi_group_df = df.groupBy("cut", "color").sum("x")
display(multi_group_df)
Sortering av resultater
Aggregerte data er ofte lettere å lese når de er sortert. Du kan kjede metoden .orderBy() til slutten av aggregeringen for å vise de best presterende kategoriene øverst på listen.
# Show highest profit categories first
sorted_df = summary_df.orderBy("sum(x)", ascending=False)
display(sorted_df)
1. Hvilken metode må du kalle FØR du bruker sum() eller avg() hvis du vil ha resultatene fordelt etter kategori?
2. Hva er fordelen med å bruke .agg()-metoden i stedet for bare .sum()?
Takk for tilbakemeldingene dine!
Spør AI
Spør AI
Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår