Ontgrendel de kracht van Pandas GroupBy voor data-analyse. Deze gids verkent aggregatie- en transformatietechnieken met praktische voorbeelden voor internationale data.
Pandas GroupBy-bewerkingen onder de knie krijgen: Aggregatie versus Transformatie
Pandas, de hoeksteen van datamanipulatie in Python, biedt een krachtig hulpmiddel voor het analyseren en begrijpen van data: de GroupBy-bewerking. Met deze functie kunt u uw data segmenteren in groepen op basis van gedeelde kenmerken en vervolgens functies toepassen op deze groepen, waardoor inzichten worden onthuld die anders verborgen zouden blijven. Dit artikel duikt diep in twee belangrijke GroupBy-bewerkingen: aggregatie en transformatie, en biedt praktische voorbeelden en uitleg die geschikt zijn voor dataprofessionals wereldwijd.
Het GroupBy-concept begrijpen
In de kern is GroupBy een proces dat bestaat uit drie hoofdstappen: splitsen van de data in groepen op basis van een of meer criteria, toepassen van een functie op elke groep onafhankelijk, en combineren van de resultaten in een nieuwe datastructuur. Deze "split-apply-combine"-strategie is een fundamenteel concept in data-analyse en biedt een flexibel raamwerk voor het verkennen van complexe datasets.
De kracht van GroupBy ligt in het vermogen om verschillende datatypes en structuren te verwerken, waardoor het toepasbaar is in diverse domeinen. Of u nu verkoopdata uit meerdere regio's, sensorwaarden van verschillende apparaten of social media-activiteit over verschillende demografieën analyseert, GroupBy kan u helpen betekenisvolle inzichten te extraheren.
Aggregatie: Data samenvatten binnen groepen
Aggregatie is het proces van het berekenen van samenvattende statistieken voor elke groep. Deze statistieken geven een beknopt overzicht van de kenmerken van de groep, waardoor u verschillende segmenten van uw data kunt vergelijken en contrasteren. Veelvoorkomende aggregatiefuncties zijn:
sum(): Berekent de som van de waarden binnen elke groep.mean(): Berekent de gemiddelde waarde binnen elke groep.median(): Berekent de middelste waarde binnen elke groep.min(): Vindt de minimumwaarde binnen elke groep.max(): Vindt de maximumwaarde binnen elke groep.count(): Telt het aantal niet-null waarden binnen elke groep.size(): Retourneert de grootte van elke groep (inclusief nullen).std(): Berekent de standaarddeviatie binnen elke groep.var(): Berekent de variantie binnen elke groep.
Praktische voorbeelden van aggregatie
Laten we een dataset van internationale verkoopdata voor een hypothetisch e-commercebedrijf bekijken. De data bevat informatie over de productcategorie, het land van verkoop en het verkoopbedrag.
import pandas as pd
# Voorbeelddata
data = {
'Category': ['Electronics', 'Clothing', 'Electronics', 'Clothing', 'Home Goods', 'Electronics', 'Clothing', 'Home Goods'],
'Country': ['USA', 'UK', 'Canada', 'USA', 'Germany', 'UK', 'Canada', 'Germany'],
'Sales': [100, 50, 75, 60, 80, 90, 45, 70]
}
df = pd.DataFrame(data)
print(df)
Dit zal uitvoeren:
Category Country Sales
0 Electronics USA 100
1 Clothing UK 50
2 Electronics Canada 75
3 Clothing USA 60
4 Home Goods Germany 80
5 Electronics UK 90
6 Clothing Canada 45
7 Home Goods Germany 70
Voorbeeld 1: Totale verkopen per categorie berekenen
Om de totale verkopen voor elke productcategorie te berekenen, kunnen we de groupby()-methode gebruiken, gevolgd door de sum()-aggregatiefunctie.
category_sales = df.groupby('Category')['Sales'].sum()
print(category_sales)
Dit zal uitvoeren:
Category
Clothing 155
Electronics 265
Home Goods 150
Name: Sales, dtype: int64
Voorbeeld 2: Gemiddelde verkopen per land berekenen
Evenzo kunnen we, om de gemiddelde verkopen per land te berekenen, de mean()-aggregatiefunctie gebruiken.
country_sales = df.groupby('Country')['Sales'].mean()
print(country_sales)
Dit zal uitvoeren:
Country
Canada 60.0
Germany 75.0
UK 70.0
USA 80.0
Name: Sales, dtype: float64
Voorbeeld 3: Meerdere aggregatiefuncties gebruiken
Pandas stelt u in staat om meerdere aggregatiefuncties tegelijkertijd toe te passen met behulp van de agg()-methode. Dit biedt een uitgebreide samenvatting van de kenmerken van de groep.
category_summary = df.groupby('Category')['Sales'].agg(['sum', 'mean', 'median', 'count'])
print(category_summary)
Dit zal uitvoeren:
sum mean median count
Category
Clothing 155 51.666667 50.0 3
Electronics 265 88.333333 90.0 3
Home Goods 150 75.000000 75.0 2
Voorbeeld 4: Aangepaste aggregatiefuncties
U kunt ook uw eigen aangepaste aggregatiefuncties definiëren met behulp van lambda-expressies of benoemde functies. Hiermee kunt u specifieke statistieken berekenen die niet beschikbaar zijn in de standaard aggregatiefuncties.
# Aangepaste functie om het bereik te berekenen (max - min)
def custom_range(x):
return x.max() - x.min()
category_summary = df.groupby('Category')['Sales'].agg(['sum', 'mean', custom_range])
print(category_summary)
Dit zal uitvoeren:
sum mean custom_range
Category
Clothing 155 51.666667 15
Electronics 265 88.333333 25
Home Goods 150 75.000000 10
Transformatie: Data wijzigen binnen groepen
Transformatie daarentegen omvat het wijzigen van de data binnen elke groep op basis van een of andere berekening. In tegenstelling tot aggregatie, die een samengevatte waarde voor elke groep retourneert, retourneert transformatie een waarde voor elke rij in de originele data, maar de waarde wordt berekend op basis van de groep waartoe die rij behoort. Transformatiebewerkingen behouden de originele index en vorm van de DataFrame.
Veelvoorkomende use cases voor transformatie zijn:
- Data standaardiseren binnen elke groep.
- Rang of percentiel berekenen binnen elke groep.
- Ontbrekende waarden invullen op basis van groepsstatistieken.
Praktische voorbeelden van transformatie
Laten we verdergaan met onze internationale verkoopdata. We kunnen transformatie toepassen om berekeningen uit te voeren met betrekking tot de verkoopcijfers binnen elk land.
Voorbeeld 1: Verkoopdata standaardiseren binnen elk land (Z-score)
Het standaardiseren van data omvat het transformeren van de waarden zodat ze een gemiddelde van 0 en een standaarddeviatie van 1 hebben. Dit is handig voor het vergelijken van data over verschillende schalen en verdelingen. We kunnen de transform()-methode gebruiken in combinatie met een lambda-expressie om dit te bereiken.
from scipy.stats import zscore
df['Sales_Zscore'] = df.groupby('Country')['Sales'].transform(zscore)
print(df)
Dit zal uitvoeren:
Category Country Sales Sales_Zscore
0 Electronics USA 100 1.000000
1 Clothing UK 50 -1.000000
2 Electronics Canada 75 1.000000
3 Clothing USA 60 -1.000000
4 Home Goods Germany 80 1.000000
5 Electronics UK 90 1.000000
6 Clothing Canada 45 -1.000000
7 Home Goods Germany 70 -1.000000
De kolom Sales_Zscore bevat nu de gestandaardiseerde verkoopwaarden voor elk land. Waarden boven 0 liggen boven de gemiddelde verkopen voor dat land, en waarden onder 0 liggen onder het gemiddelde.
Voorbeeld 2: Verkooprang berekenen binnen elke categorie
Om de rang van elke verkoop binnen zijn categorie te berekenen, kunnen we de rank()-methode gebruiken binnen de transform()-functie.
df['Sales_Rank'] = df.groupby('Category')['Sales'].transform(lambda x: x.rank(method='dense'))
print(df)
Dit zal uitvoeren:
Category Country Sales Sales_Zscore Sales_Rank
0 Electronics USA 100 1.000000 3.0
1 Clothing UK 50 -1.000000 2.0
2 Electronics Canada 75 1.000000 1.0
3 Clothing USA 60 -1.000000 3.0
4 Home Goods Germany 80 1.000000 2.0
5 Electronics UK 90 1.000000 2.0
6 Clothing Canada 45 -1.000000 1.0
7 Home Goods Germany 70 -1.000000 1.0
De kolom Sales_Rank geeft de rang aan van elke verkoop binnen de respectieve categorie. Het argument `method='dense'` zorgt ervoor dat opeenvolgende rangen zonder hiaten worden toegewezen.
Voorbeeld 3: Ontbrekende waarden invullen op basis van het groepsgemiddelde
Laten we enkele ontbrekende waarden in de verkoopdata introduceren en deze vervolgens invullen op basis van de gemiddelde verkopen voor elk land.
import numpy as np
# Ontbrekende waarden introduceren
df.loc[[0, 3], 'Sales'] = np.nan
print(df)
# Ontbrekende waarden invullen op basis van het landgemiddelde
df['Sales_Filled'] = df['Sales'].fillna(df.groupby('Country')['Sales'].transform('mean'))
print(df)
De initiële DataFrame met ontbrekende waarden zou er zo uitzien:
Category Country Sales Sales_Zscore Sales_Rank
0 Electronics USA NaN 1.000000 3.0
1 Clothing UK 50 -1.000000 2.0
2 Electronics Canada 75 1.000000 1.0
3 Clothing USA NaN -1.000000 3.0
4 Home Goods Germany 80 1.000000 2.0
5 Electronics UK 90 1.000000 2.0
6 Clothing Canada 45 -1.000000 1.0
7 Home Goods Germany 70 -1.000000 1.0
En na het invullen van de ontbrekende waarden:
Category Country Sales Sales_Zscore Sales_Rank Sales_Filled
0 Electronics USA NaN 1.000000 3.0 NaN
1 Clothing UK 50 -1.000000 2.0 50.0
2 Electronics Canada 75 1.000000 1.0 75.0
3 Clothing USA NaN -1.000000 3.0 NaN
4 Home Goods Germany 80 1.000000 2.0 80.0
5 Electronics UK 90 1.000000 2.0 90.0
6 Clothing Canada 45 -1.000000 1.0 45.0
7 Home Goods Germany 70 -1.000000 1.0 70.0
Belangrijke opmerking: Omdat er geen bestaand gemiddelde was voor `USA`, zijn de resulterende waarden in `Sales_Filled` `NaN`. Het afhandelen van edge cases zoals deze is cruciaal voor betrouwbare data-analyse en moet worden overwogen tijdens de implementatie.
Aggregatie vs. Transformatie: Belangrijkste verschillen
Hoewel zowel aggregatie als transformatie krachtige GroupBy-bewerkingen zijn, dienen ze verschillende doelen en hebben ze verschillende kenmerken:
- Output Shape: Aggregatie vermindert de grootte van de data en retourneert een enkele waarde voor elke groep. Transformatie behoudt de originele datagrootte en retourneert een getransformeerde waarde voor elke rij.
- Purpose: Aggregatie wordt gebruikt om data samen te vatten en inzicht te krijgen in groepskenmerken. Transformatie wordt gebruikt om data binnen groepen te wijzigen, vaak voor standaardisatie of normalisatie.
- Return Value: Aggregatie retourneert een nieuwe DataFrame of Series met de geaggregeerde waarden. Transformatie retourneert een Series met de getransformeerde waarden, die vervolgens als een nieuwe kolom aan de originele DataFrame kan worden toegevoegd.
De keuze tussen aggregatie en transformatie hangt af van uw specifieke analytische doelen. Als u data moet samenvatten en groepen moet vergelijken, is aggregatie de juiste keuze. Als u data binnen groepen moet wijzigen met behoud van de originele datastructuur, is transformatie de betere optie.
Geavanceerde GroupBy-technieken
Naast basisaggregatie en transformatie biedt Pandas GroupBy een reeks geavanceerde technieken voor meer geavanceerde data-analyse.
Aangepaste functies toepassen met apply()
De apply()-methode biedt de meeste flexibiliteit, waardoor u elke aangepaste functie op elke groep kunt toepassen. Deze functie kan elke bewerking uitvoeren, inclusief aggregatie, transformatie of zelfs complexere berekeningen.
def custom_function(group):
# Berekent de som van de verkopen voor elke categorie in een groep, alleen als er meer dan één rij in de groep is
if len(group) > 1:
group['Sales_Sum'] = group['Sales'].sum()
else:
group['Sales_Sum'] = 0 # Of een andere standaardwaarde
return group
df_applied = df.groupby('Country').apply(custom_function)
print(df_applied)
In dit voorbeeld definiëren we een aangepaste functie die de som van de verkopen binnen elke groep (land) berekent. De apply()-methode past deze functie toe op elke groep, wat resulteert in een nieuwe kolom met de som van de verkopen voor die groep.
Belangrijke opmerking: De functie apply kan meer rekenintensief zijn dan de andere methoden. Optimaliseer uw code en overweeg alternatieve implementaties bij het werken met enorme datasets.
Groeperen op meerdere kolommen
U kunt uw data groeperen op meerdere kolommen om meer granulare segmenten te creëren. Hiermee kunt u data analyseren op basis van de kruising van meerdere kenmerken.
category_country_sales = df.groupby(['Category', 'Country'])['Sales'].sum()
print(category_country_sales)
Dit zal de data groeperen op zowel Category als Country, waardoor u de totale verkopen voor elke categorie binnen elk land kunt berekenen. Dit biedt een meer gedetailleerd beeld van de verkoopprestaties in verschillende regio's en productlijnen.
Itereren door groepen
Voor meer complexe analyse kunt u door de groepen itereren met behulp van een for-loop. Hiermee kunt u elke groep afzonderlijk openen en er aangepaste bewerkingen op uitvoeren.
for name, group in df.groupby('Category'):
print(f"Category: {name}")
print(group)
Dit zal door elke productcategorie itereren en de bijbehorende data afdrukken. Dit kan handig zijn voor het uitvoeren van aangepaste analyses of het genereren van rapporten voor elke categorie.
Best practices voor het gebruik van GroupBy
Om efficiënt en effectief gebruik van GroupBy te garanderen, kunt u de volgende best practices overwegen:
- Uw data begrijpen: Neem, voordat u
GroupBytoepast, de tijd om uw data te begrijpen en de relevante groeperingscriteria en aggregatie-/transformatiefuncties te identificeren. - De juiste bewerking kiezen: Overweeg zorgvuldig of aggregatie of transformatie de juiste keuze is voor uw analytische doelen.
- Optimaliseren voor prestaties: Overweeg voor grote datasets om uw code te optimaliseren door vectorized bewerkingen te gebruiken en onnodige loops te vermijden.
- Ontbrekende waarden afhandelen: Wees u bewust van ontbrekende waarden in uw data en handel ze op de juiste manier af met behulp van methoden zoals
fillna()ofdropna(). - Uw code documenteren: Documenteer uw code duidelijk om het doel van elke
GroupBy-bewerking en de redenering achter uw keuzes uit te leggen.
Conclusie
Pandas GroupBy is een krachtig hulpmiddel voor data-analyse, waarmee u uw data kunt segmenteren, functies op elke groep kunt toepassen en waardevolle inzichten kunt extraheren. Door aggregatie- en transformatietechnieken onder de knie te krijgen, kunt u het volledige potentieel van uw data ontsluiten en een dieper inzicht krijgen in de onderliggende patronen en trends. Of u nu verkoopdata, sensorwaarden of social media-activiteit analyseert, GroupBy kan u helpen data-gedreven beslissingen te nemen en uw analytische doelen te bereiken. Omarm de kracht van GroupBy en til uw data-analysevaardigheden naar een hoger niveau.
Deze gids heeft een uitgebreid overzicht gegeven van Pandas GroupBy-bewerkingen met een focus op Aggregatie versus Transformatie. Door deze technieken te gebruiken op internationale data, zijn datawetenschappers wereldwijd in staat om cruciale zakelijke inzichten uit diverse datasets te halen. Oefen, experimenteer en stem deze technieken af op uw specifieke behoeften om het volledige potentieel van Pandas te benutten.