Maak een NumPy-functie om aangepaste gegevensaggregatie uit te voeren
description
Door deze prompt te gebruiken, kunt u gegevensaggregatietaken automatiseren, handmatige inspanning verminderen en de gegevensanalysecapaciteiten verbeteren met geoptimaliseerde prestaties voor grote datasets.
prompt
try_prompt
Help me bij het ontwerpen van een NumPy-functie die mijn dataset aggregeert op basis van specifieke criteria, zoals het optellen van waarden of het berekenen van gemiddelden. Beschrijf de structuur ... more
generate_helper
...
tags
ai_answers
provider: openai
model: gpt-4.1-nano
Hier is een voorbeeld van hoe u een efficiënte NumPy-functie kunt ontwerpen om uw dataset te aggregeren op basis van de regio, waarbij de totale verkoop per regio wordt berekend. De dataset is een 2D-array met kolommen voor product, regio en verkoop.
Stap 1: Data structureren
- Kolom 0: product
- Kolom 1: regio
- Kolom 2: verkoop
Stap 2: Functie definiëren
Gebruik NumPy’s functies zoals `np.unique` met `return_inverse=True` om de regio’s te identificeren en vervolgens snel de verkoopgegevens te groeperen en op te tellen.
Hier is de voorbeeldcode:
```python
import numpy as np
def aggregate_sales_by_region(data):
# data: 2D-array met kolommen [product, regio, verkoop]
# Extract regio en verkoop kolommen
regio = data[:, 1]
verkoop = data[:, 2]
# Vind unieke regio's en de index van elk regio in de unieke lijst
unieke_regio's, indices = np.unique(regio, return_inverse=True)
# Initialiseer een array voor de sommen per regio
som_per_regio = np.zeros(len(unieke_regio's))
# Voeg verkoopgegevens toe aan de juiste regio
np.add.at(som_per_regio, indices, verkoop)
# Returneer een structuur met regio en de bijbehorende som
return unieke_regio's, som_per_regio
```
Gebruik van de functie:
```python
# Voorbeeld dataset
dataset = np.array([
['product1', 'RegioA', 100],
['product2', 'RegioB', 200],
['product3', 'RegioA', 150],
['product4', 'RegioB', 50],
['product5', 'RegioC', 300]
], dtype=object)
regio’s, totaal_verkoop = aggregate_sales_by_region(dataset)
print("Regio's:", regio’s)
print("Totale verkoop per regio:", totaal_verkoop)
```
Deze aanpak is efficiënt voor grote datasets doordat:
- `np.unique` snel regio’s identificeert.
- `np.add.at` geschikt is voor het accumuleren van waarden op grote schaal.
- Geen lussen worden gebruikt, wat de prestaties verbetert.
Indien je dataset zeer groot is, overweeg dan om NumPy’s geheugen- en prestatietools verder te optimaliseren of over te stappen op een meer geoptimaliseerde bibliotheek zoals pandas met `groupby`.
provider: deepseek
model: deepseek-chat
Hier is een geoptimaliseerde NumPy-functie voor jouw dataset:
```python
import numpy as np
def aggregeer_verkopen_per_regio(dataset):
"""
Aggregeert verkoopcijfers per regio met optimale prestaties voor grote datasets.
Parameters:
dataset : np.ndarray
2D-array met kolommen: [product, regio, verkoop]
Returns:
np.ndarray: Unieke regio's en bijbehorende verkooptotalen
"""
# Scheid de kolommen voor efficiënte verwerking
regios = dataset[:, 1] # Tweede kolom: regio
verkopen = dataset[:, 2].astype(float) # Derde kolom: verkoop (omzetten naar float)
# Vind unieke regio's en hun indices
unieke_regios, inverse_indices = np.unique(regios, return_inverse=True)
# Bereken som per regio met np.bincount (zeer efficiënt voor grote datasets)
totale_verkopen = np.bincount(inverse_indices, weights=verkopen)
# Combineer resultaten in een 2D-array
resultaat = np.column_stack((unieke_regios, totale_verkopen))
return resultaat
# Voorbeeld gebruik:
# Dataset structuur: [product, regio, verkoop]
voorbeeld_data = np.array([
['Product_A', 'Noord', 100],
['Product_B', 'Zuid', 150],
['Product_A', 'Noord', 200],
['Product_C', 'Oost', 75],
['Product_B', 'Zuid', 125],
['Product_A', 'Oost', 300]
])
resultaat = aggregeer_verkopen_per_regio(voorbeeld_data)
print(resultaat)
```
**Prestatie-optimalisaties:**
1. **`np.unique` met `return_inverse=True`**: Vermijdt dure Python-loops
2. **`np.bincount` met weights**: Zeer geoptimaliseerde C-implementatie voor aggregatie
3. **Geen Pandas dependency**: Pure NumPy voor minimale overhead
4. **Geheugenefficiënt**: Werkt direct op arrays zonder tussenconversies
**Output voorbeeld:**
```
[['Noord' 300.0]
['Oost' 375.0]
['Zuid' 275.0]]
```
**Alternatieve versie voor gemiddelden:**
```python
def gemiddelde_verkopen_per_regio(dataset):
regios = dataset[:, 1]
verkopen = dataset[:, 2].astype(float)
unieke_regios, inverse_indices = np.unique(regios, return_inverse=True)
# Bereken som en aantal voor gemiddelde
totale_verkopen = np.bincount(inverse_indices, weights=verkopen)
aantallen = np.bincount(inverse_indices)
gemiddelden = totale_verkopen / aantallen
return np.column_stack((unieke_regios, gemiddelden))
```
Deze aanpak schaalt lineair O(n) met de datasetgrootte en is ideaal voor datasets met miljoenen rijen.

