Data Analyse met Python: Pandas en NumPy
Ontdek hoe je krachtige data analyse kunt uitvoeren met Python's populairste libraries: Pandas en NumPy.
Inleiding tot Data Analyse
Data analyse is een essentieel onderdeel van moderne business en wetenschappelijk onderzoek. Python heeft zich ontwikkeld tot een van de meest populaire tools voor data analyse, dankzij krachtige libraries zoals Pandas en NumPy. In dit artikel leren we hoe je deze tools effectief kunt gebruiken.
Waarom Python voor Data Analyse?
Python biedt verschillende voordelen voor data analyse:
- Eenvoudige syntax: Makkelijk te leren en lezen
- Uitgebreide ecosystem: Vele gespecialiseerde libraries
- Actieve community: Veel ondersteuning en documentatie
- Integratie: Werkt goed samen met databases en web services
- Visualisatie: Krachtige plotting capabilities
NumPy: De Basis van Data Science
NumPy (Numerical Python) is de fundamentele library voor numerieke berekeningen in Python. Het biedt:
Installatie
pip install numpy
Basis Arrays
import numpy as np
# Een array maken
getallen = np.array([1, 2, 3, 4, 5])
print(getallen) # [1 2 3 4 5]
# Multidimensionele arrays
matrix = np.array([[1, 2, 3], [4, 5, 6]])
print(matrix.shape) # (2, 3)
# Arrays met specifieke waardes
nullen = np.zeros((3, 4))
enen = np.ones((2, 3))
reeks = np.arange(0, 10, 2) # [0 2 4 6 8]
Array Operaties
# Wiskundige operaties
a = np.array([1, 2, 3, 4])
b = np.array([5, 6, 7, 8])
som = a + b # [6 8 10 12]
product = a * b # [5 12 21 32]
kwadraat = a ** 2 # [1 4 9 16]
# Statistische functies
gemiddelde = np.mean(a) # 2.5
mediaan = np.median(a) # 2.5
std_dev = np.std(a) # 1.29
Pandas: Data Manipulatie Made Easy
Pandas is gebouwd bovenop NumPy en biedt hoogwaardige datastructuren en analysefuncties:
Installatie
pip install pandas
DataFrames en Series
import pandas as pd
# Een Series (1D data)
temperaturen = pd.Series([20, 22, 19, 21, 23],
index=['Maandag', 'Dinsdag', 'Woensdag', 'Donderdag', 'Vrijdag'])
# Een DataFrame (2D data, zoals een spreadsheet)
werknemers = pd.DataFrame({
'Naam': ['Jan Peeters', 'Maria Jansen', 'Sophie Claes'],
'Leeftijd': [28, 34, 29],
'Salaris': [45000, 52000, 48000],
'Afdeling': ['IT', 'Marketing', 'Data']
})
print(werknemers)
Data Laden en Opslaan
# CSV bestanden
df = pd.read_csv('data.csv')
df.to_csv('output.csv', index=False)
# Excel bestanden
df = pd.read_excel('data.xlsx')
df.to_excel('output.xlsx', index=False)
# JSON bestanden
df = pd.read_json('data.json')
df.to_json('output.json')
# Database connectie
import sqlite3
conn = sqlite3.connect('database.db')
df = pd.read_sql_query('SELECT * FROM tabel', conn)
Data Exploratie
Het eerste wat je doet bij data analyse is je data verkennen:
Basis Informatie
# Dataset overzicht
print(df.head()) # Eerste 5 rijen
print(df.tail()) # Laatste 5 rijen
print(df.info()) # Kolom informatie
print(df.describe()) # Statistische samenvatting
print(df.shape) # (rijen, kolommen)
Data Kwaliteit Controleren
# Ontbrekende waarden
print(df.isnull().sum())
# Duplicaten
print(df.duplicated().sum())
# Unieke waardes
print(df['Afdeling'].unique())
print(df['Afdeling'].value_counts())
Data Cleaning
Echte data is zelden perfect. Hier zijn veelgebruikte cleaning technieken:
Ontbrekende Waarden
# Rijen met ontbrekende waarden verwijderen
df_clean = df.dropna()
# Ontbrekende waarden opvullen
df['Salaris'] = df['Salaris'].fillna(df['Salaris'].mean())
# Voorwaardelijk opvullen
df.loc[df['Afdeling'].isnull(), 'Afdeling'] = 'Onbekend'
Data Types Converteren
# Kolom types wijzigen
df['Leeftijd'] = df['Leeftijd'].astype(int)
df['Datum'] = pd.to_datetime(df['Datum'])
# Categorische data
df['Afdeling'] = df['Afdeling'].astype('category')
Data Manipulatie
Filteren en Selecteren
# Specifieke kolommen
namen_salaris = df[['Naam', 'Salaris']]
# Rijen filteren
jonge_werknemers = df[df['Leeftijd'] < 30]
hoge_salarissen = df[df['Salaris'] > 50000]
# Meerdere condities
it_jong = df[(df['Afdeling'] == 'IT') & (df['Leeftijd'] < 30)]
Groeperen en Aggregeren
# Groeperen per afdeling
per_afdeling = df.groupby('Afdeling').agg({
'Salaris': ['mean', 'min', 'max'],
'Leeftijd': 'mean'
})
# Pivot tabellen
pivot = df.pivot_table(
values='Salaris',
index='Afdeling',
columns='Ervaring_Niveau',
aggfunc='mean'
)
Praktisch Voorbeeld: Verkoopcijfer Analyse
Laten we een complete analyse doen van verkoopcijfers:
import pandas as pd
import numpy as np
# Sample data maken
np.random.seed(42)
data = {
'Datum': pd.date_range('2024-01-01', periods=365),
'Product': np.random.choice(['Laptop', 'Mouse', 'Keyboard', 'Monitor'], 365),
'Verkoper': np.random.choice(['Jan', 'Maria', 'Sophie', 'Tom'], 365),
'Aantal': np.random.randint(1, 20, 365),
'Prijs_per_stuk': np.random.uniform(10, 1000, 365)
}
df = pd.DataFrame(data)
df['Totaal_Omzet'] = df['Aantal'] * df['Prijs_per_stuk']
# Analyse
print("=== VERKOOPCIJFER ANALYSE ===")
# 1. Totale omzet per maand
df['Maand'] = df['Datum'].dt.month
maandelijkse_omzet = df.groupby('Maand')['Totaal_Omzet'].sum()
print("\nMaandelijkse omzet:")
print(maandelijkse_omzet.head())
# 2. Top verkoper
top_verkopers = df.groupby('Verkoper')['Totaal_Omzet'].sum().sort_values(ascending=False)
print(f"\nTop verkoper: {top_verkopers.index[0]} (€{top_verkopers.iloc[0]:,.2f})")
# 3. Populairste product
populair_product = df.groupby('Product')['Aantal'].sum().sort_values(ascending=False)
print(f"\nPopulairste product: {populair_product.index[0]} ({populair_product.iloc[0]} verkocht)")
# 4. Gemiddelde transactie waarde
avg_transactie = df['Totaal_Omzet'].mean()
print(f"\nGemiddelde transactie: €{avg_transactie:.2f}")
Data Visualisatie met Matplotlib
Visualisatie is cruciaal voor data analyse. Pandas integreert naadloos met Matplotlib:
import matplotlib.pyplot as plt
# Installeer eerst: pip install matplotlib
# Lijnplot voor tijdseries
maandelijkse_omzet.plot(kind='line', title='Maandelijkse Omzet 2024')
plt.ylabel('Omzet (€)')
plt.show()
# Barplot voor categorieën
top_verkopers.plot(kind='bar', title='Omzet per Verkoper')
plt.ylabel('Totale Omzet (€)')
plt.xticks(rotation=45)
plt.show()
# Histogram voor verdeling
df['Totaal_Omzet'].hist(bins=30, title='Verdeling Transactie Waardes')
plt.xlabel('Transactie Waarde (€)')
plt.ylabel('Frequentie')
plt.show()
Geavanceerde Technieken
Time Series Analysis
# Datum als index instellen
df_ts = df.set_index('Datum')
# Resampling naar wekelijks
wekelijkse_omzet = df_ts['Totaal_Omzet'].resample('W').sum()
# Rolling window berekeningen
df_ts['Omzet_7d_avg'] = df_ts['Totaal_Omzet'].rolling(window=7).mean()
# Seizoenspatronen
df_ts['Dag_van_week'] = df_ts.index.dayofweek
dag_patroon = df_ts.groupby('Dag_van_week')['Totaal_Omzet'].mean()
Data Merging en Joining
# Twee DataFrames samenvoegen
klanten = pd.DataFrame({
'Verkoper': ['Jan', 'Maria', 'Sophie'],
'Regio': ['Noord', 'Zuid', 'Oost']
})
# Left join
df_merged = df.merge(klanten, on='Verkoper', how='left')
# Concatenatie
df_q1 = df[df['Datum'].dt.quarter == 1]
df_q2 = df[df['Datum'].dt.quarter == 2]
df_half_year = pd.concat([df_q1, df_q2])
Performance Tips
Voor grote datasets zijn er verschillende optimalisaties mogelijk:
Vectorisatie
# Vermijd loops, gebruik vectoroperaties
# SLECHT:
for i in range(len(df)):
df.loc[i, 'Categorie'] = 'Hoog' if df.loc[i, 'Salaris'] > 50000 else 'Laag'
# GOED:
df['Categorie'] = np.where(df['Salaris'] > 50000, 'Hoog', 'Laag')
Chunking voor Grote Files
# Grote CSV in chunks lezen
chunk_size = 10000
for chunk in pd.read_csv('grote_file.csv', chunksize=chunk_size):
# Verwerk elke chunk
resultaat = chunk.groupby('kolom').sum()
# Sla resultaten op of combineer ze
Best Practices
- Documenteer je code: Gebruik duidelijke variabelenamen en comments
- Valideer je data: Controleer altijd de kwaliteit van je input
- Backup originele data: Bewaar altijd een kopie van de oorspronkelijke dataset
- Gebruik version control: Git voor code en data versioning
- Reproduceerbare analyses: Maak je analyses herhaalbaar met scripts
Volgende Stappen
Nu je de basics van data analyse met Python kent, kun je:
- Meer geavanceerde libraries verkennen (Seaborn, Plotly, SciPy)
- Machine learning toevoegen met scikit-learn
- Big data tools leren (Dask, PySpark)
- Databases integreren (SQLAlchemy, PostgreSQL)
- Web dashboards maken (Streamlit, Dash)
Conclusie
Pandas en NumPy vormen samen een krachtige combinatie voor data analyse in Python. Met deze tools kun je complexe datasets laden, verkennen, transformeren en analyseren. De mogelijkheden zijn eindeloos, van eenvoudige spreadsheet-achtige bewerkingen tot geavanceerde statistische analyses.
Wil je je data science vaardigheden verder ontwikkelen? Bekijk onze Data Science cursus of neem contact met ons op voor meer informatie!