Aggregazione e Raggruppamento in Python
Scorri per mostrare il menu
L'aggregazione è il processo di sintesi di più righe di dati in un singolo valore significativo, come una somma, una media o un conteggio. Il raggruppamento consente di applicare queste sintesi su categorie specifiche, ad esempio trovando le vendite totali per ciascuna regione distinta.
Raramente è necessario esaminare milioni di singole righe di dati grezzi. Solitamente si desidera avere una visione d'insieme: totali, medie o conteggi per categoria. In Spark, è possibile ottenere questo risultato combinando due metodi potenti: groupBy() e agg().
Schema base di groupBy
Per sintetizzare i dati in base a una categoria specifica, si utilizza innanzitutto il metodo groupBy(). Questo indica a Spark di raggruppare tutte le righe che condividono lo stesso valore (come "cut" nella tabella diamonds) in un gruppo. Tuttavia, il solo raggruppamento non produce alcun risultato; è necessario applicare successivamente un'aggregazione.
# Group by cut and count how many rows are in each
count_df = df.groupBy("cut").count()
display(count_df)
Esecuzione di operazioni matematiche con sum(), avg() e max()
Dopo aver raggruppato i dati, è possibile applicare funzioni matematiche alle colonne numeriche. Per visualizzare il profitto totale per tipo di articolo, si utilizza .sum().
# Total total_depth per cut category
total_depth = df.groupBy("cut").sum("x")
display(total_depth)
Nota che Spark rinomina automaticamente la colonna in sum(x). Nel prossimo capitolo, vedremo come rendere questi nomi più professionali.
Il metodo agg() per metriche multiple
Se è necessario calcolare più valori contemporaneamente—ad esempio, sia il profitto medio che il ricavo massimo per ogni regione—si utilizza il metodo .agg() (aggregate). Questo rappresenta lo standard professionale per costruire riepiloghi complessi.
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)
Importazione di pyspark.sql.functions as F per accedere a questi potenti strumenti matematici.
Raggruppamento per più colonne
Non si è limitati a raggruppare per una sola categoria. È possibile passare un elenco di colonne per visualizzare i dati a un livello più dettagliato, come il totale x per ogni Color Type all'interno di ogni Cut.
multi_group_df = df.groupBy("cut", "color").sum("x")
display(multi_group_df)
Ordinamento dei risultati
I dati aggregati sono spesso più leggibili quando sono ordinati. È possibile concatenare il metodo .orderBy() alla fine dell'aggregazione per visualizzare le categorie con le migliori prestazioni in cima all'elenco.
# Show highest profit categories first
sorted_df = summary_df.orderBy("sum(x)", ascending=False)
display(sorted_df)
1. Quale metodo è necessario chiamare PRIMA di applicare sum() o avg() se si desidera che i risultati siano suddivisi per categoria?
2. Qual è il vantaggio di utilizzare il metodo .agg() invece di solo .sum()?
Grazie per i tuoi commenti!
Chieda ad AI
Chieda ad AI
Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione