Pandas & NumPy Academy · Les

Pandas versus SQL: het juiste hulpmiddel kiezen

Vergelijk groupby/merge in Pandas met GROUP BY/JOIN in SQL en bepaal welke laag elke transformatie moet uitvoeren.

Les 4 van 413 stappen

Pandas versus SQL: het juiste hulpmiddel kiezen is een gratis Pandas & NumPy Academy-les op CoddyKit. Dit is les 4 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Pandas & NumPy Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Pandas & NumPy Academy bevat in totaal 4 lessen.

Twee hulpmiddelen met elkaar aanvullende sterke punten

Zowel Pandas als SQL zijn hulpmiddelen voor gegevensbewerking en beide worden gebruikt door professionele gegevensanalisten. Het belangrijkste inzicht is dat ze elkaar aanvullen en niet met elkaar concurreren: SQL blinkt uit in declaratieve bewerkingen op sets in grote tabellen die in relationele databases zijn opgeslagen, terwijl Pandas uitblinkt in imperatieve, rij-voor-rij uitgevoerde en complexe algoritmische transformaties op gegevens die al in het geheugen zijn geladen. De beste pijplijnen gebruiken elk hulpmiddel voor waar het het beste in is.

Sterke punten van SQL: waar SQL beter in is

SQL is doorgaans beter wanneer: de gegevens groot zijn (gigabytes tot terabytes) en vóór het laden moeten worden gefilterd; verbindingen meerdere grote tabellen omvatten en database-indexen een snelheidswinst van een orde van grootte opleveren; aggregaties eenvoudig zijn (SUM, COUNT, GROUP BY); resultaatsets klein zijn ten opzichte van de invoer; of gelijktijdig lezen en schrijven nodig is (de database handelt transacties en vergrendeling af). Dankzij de declaratieve syntaxis van SQL kunnen query-optimaliseerders bovendien automatisch het beste fysieke plan kiezen.

-- SQL excels at:
-- 1. Filtering billions of rows using an index
SELECT * FROM orders WHERE customer_id = 12345;

-- 2. Joining large tables efficiently
SELECT o.order_id, c.name, SUM(o.amount)
FROM orders o
JOIN customers c ON o.customer_id = c.id
GROUP BY o.order_id, c.name;

-- 3. Window functions on ordered data
SELECT order_id, amount,
       SUM(amount) OVER (PARTITION BY customer_id ORDER BY order_date)
FROM orders;

Sterke punten van Pandas: waar Pandas beter in is

Pandas is doorgaans beter wanneer: je aangepaste Python-logica nodig hebt die SQL niet kan uitdrukken (voorbewerking voor machine learning, aangepaste tekenreeksparsing, complexe algoritmen); ketens van gegevenstransformaties uit veel stappen bestaan; je direct na de analyse visualisaties nodig hebt; de gegevens al in het geheugen staan en extra SQL-rondritten latentie zouden toevoegen; of je verkennende analyse uitvoert waarbij je interactief wilt kunnen itereren. Pandas verwerkt ook niet-tabulaire bewerkingen, zoals matrixberekeningen en het gladstrijken van tijdreeksen.

import pandas as pd

# Pandas excels at:
# 1. Custom Python logic that SQL cannot express
df['clean_name'] = df['name'].str.strip().str.title().str.replace(r'[^a-zA-Z ]', '', regex=True)

# 2. Vectorised string parsing
df[['first', 'last']] = df['full_name'].str.split(' ', n=1, expand=True)

# 3. Rolling statistics and time series
df['7day_avg'] = df['daily_sales'].rolling(7).mean()

# 4. Direct visualisation
# df.groupby('category')['sales'].sum().plot(kind='bar')

SQL-bewerkingen vertalen naar Pandas

De meeste SQL-bewerkingen hebben directe equivalenten in Pandas. Als je beide syntaxis kent, ben je veelzijdiger en kun je gemakkelijker tussen beide vertalen wanneer je van hulpmiddel wisselt. WHERE wordt booleaanse indexering of .query(); GROUP BY + SUM wordt .groupby().sum(); JOIN wordt pd.merge(); ORDER BY wordt .sort_values(); en DISTINCT wordt .drop_duplicates(). De semantische betekenis is identiek; alleen de syntaxis verschilt.

import pandas as pd

df = pd.DataFrame({'region': ['N','S','N','E'], 'amount': [100,200,150,300]})

# SQL: SELECT region, SUM(amount) FROM df WHERE amount>100 GROUP BY region ORDER BY region
# Pandas:
result = (
    df[df['amount'] > 100]
    .groupby('region')['amount']
    .sum()
    .reset_index()
    .sort_values('region')
)
print(result)

Wanneer de omvang van de gegevens de keuze bepaalt

Een praktisch besliskader op basis van de omvang van de gegevens: minder dan 100 MB — gebruik uitsluitend Pandas, de extra overhead van SQL is het niet waard; 100 MB – 10 GB — filter en aggregeer in SQL en laad een samenvattend DataFrame in Pandas; 10 GB – 1 TB — gebruik SQL of Dask voor de verwerking en Pandas alleen voor de uiteindelijke samenvatting; meer dan 1 TB — gebruik gedistribueerde SQL (BigQuery, Spark SQL, Redshift). Probeer nooit een tabel van 100 GB in Pandas te laden op een laptop met 16 GB — het programma crasht of de schijf raakt overbelast.

import pandas as pd
import sqlalchemy as sa

engine = sa.create_engine('sqlite:///large.db')

# Right approach: SQL handles the heavy lifting
summary_df = pd.read_sql_query(
    '''
    SELECT region, product_category,
           SUM(revenue) AS total_revenue,
           COUNT(DISTINCT customer_id) AS unique_customers
    FROM orders
    WHERE order_date >= '2024-01-01'
    GROUP BY region, product_category
    ''',
    con=engine
)
# summary_df is small — now do Pandas things on it
print(summary_df.sort_values('total_revenue', ascending=False))

SQL-vensterfuncties versus voortschrijdende bewerkingen in Pandas

De windowfuncties van SQL (OVER (PARTITION BY ... ORDER BY ...)) zijn krachtig, maar hebben beperkingen: ze zijn geschikt voor het berekenen van oplopende rangen, vorige/volgende waarden en eenvoudige voortschrijdende aggregaties, maar complexe voortschrijdende statistieken (zoals voortschrijdende Pearson-correlatie) kunnen niet in SQL worden uitgedrukt. De rolling()- en expanding()-functies van Pandas ondersteunen een veel breder scala aan vensterberekeningen, waaronder aangepaste functies via .apply(). Gebruik voor standaardvensterfuncties op grote hoeveelheden gegevens bij voorkeur SQL; gebruik voor complexe vensterlogica bij voorkeur Pandas.

import pandas as pd

df = pd.DataFrame({
    'date': pd.date_range('2024-01-01', periods=30),
    'sales': [100 + i*10 + (i%7)*20 for i in range(30)]
})

# Pandas rolling — easy with arbitrary window functions
df['7d_mean'] = df['sales'].rolling(7).mean()
df['7d_std']  = df['sales'].rolling(7).std()
df['7d_corr'] = df['sales'].rolling(7).corr(df['sales'].shift(1))
print(df.tail())

Complexe joins: de flexibiliteit van Pandas

SQL-joins zijn gebaseerd op gelijkheid van sleutels (op enkele uitzonderingen na). Pandas ondersteunt met pd.merge_asof() fuzzy joins op basis van tijd (waarbij de dichtstbijzijnde sleutel wordt gekoppeld in plaats van een exact gelijke sleutel), wat bijzonder nuttig is voor het uitlijnen van tijdreeksen, bijvoorbeeld om aandelenkoersen te koppelen aan handelsgebeurtenissen bij de laatst voorafgaande koers. Pandas ondersteunt ook voorwaardelijke joins met merge gevolgd door filteren; in SQL heb je hiervoor een subquery of een LATERAL-join nodig. Deze geavanceerde joinpatronen zijn een gebied waarop Pandas duidelijk de betere keuze is.

import pandas as pd

trades = pd.DataFrame({
    'time': pd.to_datetime(['2024-01-01 10:00', '2024-01-01 10:05', '2024-01-01 10:12']),
    'symbol': ['AAPL', 'AAPL', 'AAPL'],
    'shares': [100, 200, 50]
})
prices = pd.DataFrame({
    'time': pd.to_datetime(['2024-01-01 10:00', '2024-01-01 10:10']),
    'price': [185.0, 186.5]
})

# Fuzzy join: match each trade to the nearest preceding price
result = pd.merge_asof(trades.sort_values('time'),
                       prices.sort_values('time'),
                       on='time', direction='backward')
print(result)

Pandas voor dataprofielen, SQL voor productie

Een veelgebruikt werkpatroon is: gebruik Pandas voor verkennende data-analyse en dataprofielen op een representatieve steekproef, bijvoorbeeld de eerste miljoen rijen, ontwikkel iteratief je transformatielogica en vertaal vervolgens de belangrijkste stappen naar SQL voor productieschaal. Met Pandas kun je snel itereren en krijg je direct visuele feedback; SQL draait betrouwbaar op grote schaal met minimale infrastructuur. Houd de twee synchroon: wanneer je een nieuwe functie toevoegt in Pandas, schrijf dan voor productie de equivalente opgeslagen SQL-procedure of view.

import pandas as pd
import sqlalchemy as sa

engine = sa.create_engine('sqlite:///data.db')

# Development: sample in Pandas for fast iteration
df_sample = pd.read_sql_query(
    'SELECT * FROM orders ORDER BY RANDOM() LIMIT 10000',
    con=engine
)
# Explore and prototype:
df_sample['revenue_tier'] = pd.cut(
    df_sample['amount'],
    bins=[0, 100, 500, float('inf')],
    labels=['low', 'mid', 'high']
)
print(df_sample['revenue_tier'].value_counts())
# Production: translate cut logic to SQL CASE WHEN

pandasql: SQL schrijven voor DataFrames

Met de bibliotheek pandasql kun je rechtstreeks SQL-query's uitvoeren op Pandas DataFrames, waarbij onderliggend SQLite wordt gebruikt. sqldf('SELECT * FROM df WHERE amount > 100', locals()) voert de query uit op het df-DataFrame. Dit is nuttig als je in SQL denkt maar je gegevens al in Pandas staan, of om SQL-concepten te onderwijzen met gegevens in het geheugen. Het is voor de meeste bewerkingen echter trager dan native Pandas — gebruik het vanwege de vertrouwdheid, niet vanwege de prestaties.

# pip install pandasql
import pandas as pd
# from pandasql import sqldf

df = pd.DataFrame({
    'product': ['A', 'B', 'A', 'C', 'B'],
    'sales': [100, 200, 150, 80, 220]
})

# With pandasql (commented out as it requires install):
# result = sqldf('SELECT product, SUM(sales) AS total FROM df GROUP BY product', locals())

# Equivalent native Pandas:
result = df.groupby('product')['sales'].sum().reset_index()
print(result)

Besliskader: een snelle naslaggids

Gebruik deze beslisgids wanneer je tussen SQL en Pandas kiest:

  • Staan de gegevens in een database en zijn ze omvangrijk? Filter en aggregeer dan eerst in SQL.
  • Heb je aangepaste Python-logica nodig? Gebruik Pandas na een voorfiltering in SQL.
  • Voer je verkennende analyse uit op een steekproef? Met Pandas kun je sneller itereren.
  • Werk je met tijdreeksen en complexe voortschrijdende statistieken? Gebruik Pandas rolling/ewm.
  • Heb je een eenvoudige GROUP BY op miljoenen rijen nodig? Gebruik SQL met indexen.
  • Heb je al meerdere kleine DataFrames in het geheugen? Dan is pd.merge() prima.
  • Heb je ACID-transacties nodig? Gebruik een SQL-database, niet Pandas.

Beide combineren: de hybride pijplijn

De meest praktische aanpak is een hybride pijplijn die de sterke punten van elk hulpmiddel benut. SQL verwerkt het inladen, grove filteren en standaardaggregaties op grote onbewerkte tabellen. De uitvoer — een hanteerbaar DataFrame — wordt aan Pandas doorgegeven voor feature-engineering, aangepaste metrieken, voortschrijdende statistieken en visualisatie. De resultaten kunnen optioneel naar de database worden teruggeschreven om ze beschikbaar te maken. Deze pijplijn is leesbaar, schaalbaar en onderhoudbaar voor elke analist die zowel SQL als Python kent.

import pandas as pd
import sqlalchemy as sa

engine = sa.create_engine('sqlite:///pipeline.db')

# Step 1: SQL coarse aggregation
df = pd.read_sql_query('''
    SELECT DATE(order_date) AS date, region, SUM(amount) AS daily_revenue
    FROM orders WHERE status = 'completed'
    GROUP BY DATE(order_date), region
    ORDER BY date
''', con=engine, parse_dates=['date'])

# Step 2: Pandas rolling and pivoting (hard in SQL)
df['7d_avg'] = df.groupby('region')['daily_revenue'].transform(
    lambda x: x.rolling(7, min_periods=1).mean()
)
pivot = df.pivot(index='date', columns='region', values='7d_avg')
print(pivot.tail())

Snelle controle

Test je begrip van de concepten voor data-analyse uit deze les.

Samenvatting van de les

In deze les heb je geleerd dat SQL uitblinkt in grootschalig filteren, joinen en eenvoudige aggregaties op geïndexeerde gegevens, dat Pandas uitblinkt in aangepaste Python-logica, complexe voortschrijdende statistieken en verkennende analyse, en dat de beste strategie een hybride pijplijn is die SQL gebruikt voor grove reductie en Pandas voor complexe transformaties op het hanteerbare resultaat. Hierna beginnen we met inferentiële statistiek met SciPy: normaliteitstoetsen en beschrijvende statistieken.

Gratis beginnen

Leer Python met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
30
Lessen
120

Veelgestelde vragen

Is de les “Pandas versus SQL: het juiste hulpmiddel kiezen” gratis?

Ja — de volledige tekst van “Pandas versus SQL: het juiste hulpmiddel kiezen” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus Pandas & NumPy Academy wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus Pandas & NumPy Academy bevat in totaal 4 lessen.

Wat leer ik in “Pandas versus SQL: het juiste hulpmiddel kiezen”?

Vergelijk groupby/merge in Pandas met GROUP BY/JOIN in SQL en bepaal welke laag elke transformatie moet uitvoeren. Je oefent met Pandas & NumPy Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met Pandas & NumPy Academy te beginnen?

Ervaring vooraf is niet nodig. Pandas & NumPy Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 4 van 4.

Hoe lang duurt de les “Pandas versus SQL: het juiste hulpmiddel kiezen”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over Pandas & NumPy Academy?

Ja. Elke les over Pandas & NumPy Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. Verbinden met een database met SQLAlchemy
  2. SQL-query's uitvoeren vanuit Pandas
  3. DataFrames naar databasetabellen schrijven
  4. Pandas versus SQL: het juiste hulpmiddel kiezen
← Terug naar Pandas & NumPy Academy