Genereer aangepaste NumPy data-analyse scripts
description
Helpt gebruikers snel kant-en-klare NumPy-scripts te genereren die zijn aangepast aan hun unieke data-analysebehoeften, wat tijd bespaart bij handmatig coderen en efficiënte verwerking van datasets mogelijk maakt met duidelijke en bruikbare resultaten.
prompt
Maak een NumPy-script voor de volgende data-analysetaak: <beschrijf je data-analyse doel> met de dataset: <geef een korte beschri ...
try_prompt
generate_helper
disclaimerOnPageApi
tags
ai_answers
provider: openai
model: gpt-4.1-nano
Hier is een voorbeeld van een NumPy-script dat het voortschrijdend gemiddelde van dagelijkse aandelenkoersen over de laatste 30 dagen berekent, gebaseerd op een CSV-bestand met kolommen "Datum" en "Prijs". Het script leest de data in, voert de nodige array-bewerkingen uit en visualiseert de resultaten met Matplotlib.
```python
import numpy as np
import matplotlib.pyplot as plt
import csv
from datetime import datetime
# Stap 1: Data inlezen uit CSV-bestand
filename = 'aandelenkoersen.csv' # Vervang dit door jouw bestandsnaam
datums = []
prijzen = []
with open(filename, 'r', newline='') as csvfile:
reader = csv.DictReader(csvfile)
for row in reader:
datums.append(datetime.strptime(row['Datum'], '%Y-%m-%d'))
prijzen.append(float(row['Prijs']))
# Convert prijzen naar numpy array
prijzen_array = np.array(prijzen)
# Stap 2: Sorteren op datum (indien nodig)
# Als data niet gesorteerd is
sort_indices = np.argsort(datums)
datums = np.array(datums)[sort_indices]
prijzen_array = prijzen_array[sort_indices]
# Stap 3: Berekenen van het voortschrijdend gemiddelde over 30 dagen
# Gebruik np.convolve met een venster van 30
window_size = 30
venster = np.ones(window_size) / window_size
# 'valid' geeft alleen de volledig overlappende delen
gemiddelden = np.convolve(prijzen_array, venster, mode='valid')
# Omdat 'valid' korter is, moeten we de datums aanpassen
datums_gemiddeld = datums[window_size - 1:]
# Stap 4: Visualisatie
plt.figure(figsize=(12, 6))
plt.plot(datums, prijzen_array, label='Dagelijkse Slotkoersen', alpha=0.5)
plt.plot(datums_gemiddeld, gemiddelden, label='Voortschrijdend Gemiddelde (30 dagen)', color='orange', linewidth=2)
plt.xlabel('Datum')
plt.ylabel('Prijs')
plt.title('Aandelenkoersen en Voortschrijdend Gemiddelde')
plt.legend()
plt.grid(True)
plt.show()
```
**Uitleg:**
- Het script leest de data in en converteert datums naar `datetime`-objecten.
- Data wordt gesorteerd op datum.
- Het voortschrijdend gemiddelde wordt berekend met `np.convolve` en een venster van 30 dagen.
- De visualisatie toont zowel de dagelijkse slotkoersen als het voortschrijdend gemiddelde.
Pas de bestandsnaam aan en zorg dat het CSV-bestand correct is opgemaakt.
provider: deepseek
model: deepseek-chat
Hier is een volledig NumPy-script voor uw taak:
```python
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from datetime import datetime, timedelta
# Laad de dataset
data = pd.read_csv('aandelenkoersen.csv')
# Zet Datum kolom om naar datetime object
data['Datum'] = pd.to_datetime(data['Datum'])
# Sorteer op datum (voor het geval dat niet gesorteerd is)
data = data.sort_values('Datum')
# Converteer naar NumPy arrays
datums = data['Datum'].values
prijzen = data['Prijs'].values.astype(float)
# Bereken voortschrijdend gemiddelde over 30 dagen
voortschrijdend_gemiddelde = np.zeros_like(prijzen)
voortschrijdend_gemiddelde[:] = np.nan # Eerste 29 dagen zijn niet gedefinieerd
for i in range(29, len(prijzen)):
voortschrijdend_gemiddelde[i] = np.mean(prijzen[i-29:i+1])
# Alternatieve methode met NumPy convolutie (efficiënter)
window_size = 30
window = np.ones(window_size) / window_size
voortschrijdend_conv = np.convolve(prijzen, window, mode='valid')
# Voeg NaN waarden toe aan het begin voor alignment
voortschrijdend_conv_full = np.concatenate([np.full(window_size-1, np.nan), voortschrijdend_conv])
# Visualisatie
plt.figure(figsize=(12, 6))
plt.plot(datums, prijzen, label='Dagelijkse slotkoersen', alpha=0.7, linewidth=1)
plt.plot(datums, voortschrijdend_gemiddelde, label='30-dagen voortschrijdend gemiddelde',
color='red', linewidth=2)
plt.title('Voortschrijdend gemiddelde van aandelenkoersen (30 dagen)')
plt.xlabel('Datum')
plt.ylabel('Prijs (€)')
plt.legend()
plt.grid(True, alpha=0.3)
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()
# Toon statistieken
print("Dataset statistieken:")
print(f"Aantal dagen: {len(prijzen)}")
print(f"Gemiddelde prijs: €{np.mean(prijzen):.2f}")
print(f"Hoogste prijs: €{np.max(prijzen):.2f}")
print(f"Laagste prijs: €{np.min(prijzen):.2f}")
print(f"Standaarddeviatie: €{np.std(prijzen):.2f}")
# Toon laatste 10 waarden van het voortschrijdend gemiddelde
print("\nLaatste 10 voortschrijdende gemiddelden:")
recente_data = data.tail(10).copy()
recente_data['Voortschrijdend_gem'] = voortschrijdend_gemiddelde[-10:]
print(recente_data[['Datum', 'Prijs', 'Voortschrijdend_gem']].to_string(index=False))
```
**Extra functionaliteiten die u kunt toevoegen:**
```python
# Bereken afwijking van het voortschrijdend gemiddelde
afwijking = prijzen - voortschrijdend_gemiddelde
# Signalen voor koop/verkoop (eenvoudige strategie)
koop_signaal = np.where(prijzen > voortschrijdend_gemiddelde * 1.02, 1, 0)
verkoop_signaal = np.where(prijzen < voortschrijdend_gemiddelde * 0.98, -1, 0)
# Exporteer resultaten naar CSV
resultaat_df = pd.DataFrame({
'Datum': datums,
'Prijs': prijzen,
'Voortschrijdend_gemiddelde_30d': voortschrijdend_gemiddelde,
'Afwijking': afwijking
})
resultaat_df.to_csv('voortschrijdend_gemiddelde_resultaten.csv', index=False)
```
**Belangrijke aantekeningen:**
- Zorg dat uw CSV-bestand de kolommen 'Datum' en 'Prijs' bevat
- Het script verwerkt automatisch ontbrekende handelsdagen (weekenden)
- De eerste 29 dagen hebben geen voortschrijdend gemiddelde (NaN waarden)
- De visualisatie toont zowel de ruwe data als het gladgestreken gemiddelde
Dit script biedt een complete oplossing voor uw technische analyse van aandelenkoersen.