Het Project: Open Data Omzetten in Waarde
Het RDW (Rijksdienst voor het Wegverkeer) biedt een schat aan open data over voertuigen in Nederland. Met miljoenen kentekens, voertuigkenmerken en historische data is dit een waardevolle bron voor data-analyse. In dit project hebben we deze data getransformeerd naar praktische tools die directe waarde bieden aan gebruikers.
De Resulterende Tools
Kenteken Check Tool
Directe toegang tot alle RDW gegevens van een voertuig op basis van het kenteken. Controleer snel technische specificaties, APK status en voertuighistorie.
Bekijk ToolAuto Inzicht Dashboard
Geavanceerde analyses en trends in de Nederlandse voertuigmarkt. Ontdek populairste modellen, brandstoftypes en voertuigkenmerken.
Bekijk DashboardData Engineering Architectuur
End-to-End Data Pipeline
RDW Open Data API
Brondata ophalen via de officiële RDW Open Data API's met Python requests
https://opendata.rdw.nl/resource/{dataset-id}.json
DuckDB Data Processing
Data transformeren en opslaan in DuckDB voor optimale query performance
CREATE TABLE voertuigen AS SELECT * FROM read_csv_auto('rdw_data.csv')
Data Modelling
Dimensionale modellen maken voor snelle query's en analyses
- Voertuig dimension
- Tijd dimension
- Locatie dimension
Technische Implementatie Details
Python ETL Script
Het hoofdscript dat dagelijks nieuwe data ophaalt en verwerkt:
import duckdb
import requests
import pandas as pd
from datetime import datetime
class RDWDataPipeline:
def __init__(self):
self.conn = duckdb.connect('rdw_data.db')
def extract_rdw_data(self):
"""Haal data op van RDW Open Data API"""
api_url = "https://opendata.rdw.nl/resource/m9d7-ebf2.json"
response = requests.get(api_url, params={'$limit': 50000})
return response.json()
def transform_data(self, raw_data):
"""Transformeer data voor analyse"""
df = pd.DataFrame(raw_data)
# Data cleaning en transformaties
df['datum_tenaamstelling'] = pd.to_datetime(df['datum_tenaamstelling'])
df['catalogusprijs'] = pd.to_numeric(df['catalogusprijs'], errors='coerce')
return df
def load_to_duckdb(self, df):
"""Laad data in DuckDB database"""
self.conn.execute("""
CREATE TABLE IF NOT EXISTS voertuigen AS
SELECT * FROM df
""")
def run_pipeline(self):
"""Voer volledige pipeline uit"""
print(f"Start pipeline: {datetime.now()}")
raw_data = self.extract_rdw_data()
transformed_data = self.transform_data(raw_data)
self.load_to_duckdb(transformed_data)
print(f"Pipeline voltooid: {datetime.now()}")
DuckDB Data Model
Geoptimaliseerde database structuur voor snelle query's:
-- Hoofd voertuig tabel
CREATE TABLE voertuigen (
kenteken VARCHAR PRIMARY KEY,
merk VARCHAR,
handelsbenaming VARCHAR,
datum_tenaamstelling DATE,
catalogusprijs DECIMAL(10,2),
massa_ledig_voertuig INTEGER,
datum_eerste_toelating DATE,
datum_eerste_afgifte_nederland DATE,
wacht_op_keuren BOOLEAN,
aantal_cilinders INTEGER,
cilinderinhoud INTEGER,
brandstof VARCHAR,
co2_uitstoot_gecombineerd DECIMAL(5,1)
);
-- Voertuighistorie tabel
CREATE TABLE voertuig_historie (
id INTEGER PRIMARY KEY,
kenteken VARCHAR,
mutatiedatum DATE,
mutatiesoort VARCHAR,
nieuwe_waarde VARCHAR,
oude_waarde VARCHAR
);
-- Merk/model aggregatie
CREATE TABLE merk_model_stats AS
SELECT
merk,
handelsbenaming,
COUNT(*) as aantal_voertuigen,
AVG(catalogusprijs) as gemiddelde_prijs,
MIN(datum_eerste_toelating) as oudste_toelating,
MAX(datum_eerste_toelating) as nieuwste_toelating
FROM voertuigen
GROUP BY merk, handelsbenaming;
Data Kwaliteit en Validatie
| Validatie Stap | Beschrijving | Tool | Resultaat |
|---|---|---|---|
| Data Compleetheid | Controleren op ontbrekende kentekens en verplichte velden | Python Pandas | 99.8% compleet |
| Data Consistentie | Valideren van relaties tussen tabellen | DuckDB Constraints | 100% consistente relaties |
| Data Actualiteit | Bijwerken volgens RDW release cyclus | GitHub Actions | Dagelijkse updates |
| Performance | Query response tijden meten | Locust Load Testing | < 100ms per query |
Tools in Actie
Tool 1: Kenteken Check
Functionaliteit: Directe toegang tot alle RDW voertuiggegevens via een gebruiksvriendelijke interface.
Snel Zoeken
- Kenteken invoeren voor directe resultaten
- Autocomplete functionaliteit
- Geschiedenis van recente zoekopdrachten
Uitgebreide Data
- Technische specificaties
- APK geschiedenis en vervaldatum
- Voertuig historische gegevens
- Brandstofverbruik en CO2 uitstoot
Tool 2: Auto Inzicht Dashboard
Functionaliteit: Geavanceerde analyses van de Nederlandse voertuigmarkt met interactieve visualisaties.
Markt Trends
- Voertuigregistraties per maand/jaar
- Populairste merken en modellen
- Brandstof type ontwikkeling (EV groei)
- Regionale verschillen in voertuigkeuze
Interactieve Filters
- Filteren op merk, model, bouwjaar
- Brandstof type selectie
- Prijsbereik filtering
- Regio-specifieke analyses
Performance Resultaten
DuckDB Performance
Web Tool Metrics
Pipeline Efficiency
Leerpunten en Best Practices
Succesfactoren
DuckDB voor Data Engineering
- Uitstekende performance voor analytische queries
- Eenvoudige integratie met Python
- Minimale infrastructuur nodig
- Parquet format voor efficiënte opslag
Incrementele Data Updates
- Alleen nieuwe/gewijzigde data ophalen
- Change Data Capture implementeren
- Historie bijhouden voor trendanalyse
- Data versiebeheer met timestamps
Monitoring en Alerting
- Pipeline health monitoring
- Data quality checks automatiseren
- Performance metrics bijhouden
- Proactieve alerts bij issues
Uitdagingen en Oplossingen
| Uitdaging | Oplossing | Resultaat |
|---|---|---|
| RDW API Rate Limiting | Implementatie van exponential backoff en caching | 99.9% succes rate API calls |
| Data Formaat Variaties | Robuste data parsing met foutafhandeling | Alle dataformaten ondersteund |
| Query Performance | Indexering en query optimalisatie in DuckDB | Sub-second query response |
| Data Volume Groei | Partitionering en archivering strategie | Lineaire schaalbaarheid |
Toekomstige Uitbreidingen
Real-time Notificaties
- APK herinneringen per email
- Voertuig recall meldingen
- Waardevermindering alerts
- Verzekering updates
AI Features
- Voertuig waardeschatting met ML
- Anomaly detection in voertuig data
- Predictive maintenance insights
- Personalized voertuig aanbevelingen
Mobile App
- Native iOS en Android apps
- QR code kenteken scanning
- Offline toegang tot voertuig data
- Push notificaties
Conclusie
Key Takeaways
Technische Inzichten
- DuckDB is uitstekend voor middelgrote data engineering projecten
- API-first design zorgt voor flexibele integraties
- Data kwaliteit is cruciaal voor bruikbare tools
- Performance optimalisatie begint bij data modellering
Business Waarde
- Open data kan omgezet worden in waardevolle producten
- Eenvoudige tools hebben grote gebruikersacceptatie
- Data democratisering vergroot impact
- Iteratieve ontwikkeling leidt tot betere producten
Tools in Productie
- Kenteken Check Tool - dagelijks gebruikt door honderden gebruikers
- Auto Inzicht Dashboard - waardevol voor marktanalyses
- API beschikbaar voor integraties
- Regelmatige updates met nieuwe features
Probeer de Tools Zelf
De tools die uit dit data engineering project zijn voortgekomen zijn gratis te gebruiken en bieden directe waarde voor iedereen die voertuiginformatie nodig heeft:
De volledige codebase en documentatie zijn beschikbaar op onze GitHub repository voor andere ontwikkelaars die willen leren van dit project.
Data Engineering Experts Nodig?
Vind ervaren Data Engineers voor jouw data pipeline en ETL projecten