DuckDB : Pourquoi Pandas N'est Plus Suffisant pour l'Analyse de Données Moderne

Si vous analysez des fichiers CSV de plusieurs gigaoctets avec Pandas, vous avez probablement déjà vécu ce moment frustrant :
df = pd.read_csv("sales_data.csv") # ⏳ 45 secondes...
# MemoryError: Unable to allocate...
Votre machine freeze, la RAM explose, et vous vous demandez s'il est vraiment nécessaire d'acheter 64GB de RAM juste pour analyser vos données.
La bonne nouvelle : Non, vous n'avez pas besoin de plus de RAM. Vous avez juste besoin d'un meilleur outil.
Aujourd'hui, je vais vous montrer comment DuckDB peut transformer vos analyses lentes et gourmandes en requêtes ultra-rapides et efficaces.
Le Problème Fondamental de Pandas
Pandas a révolutionné l'analyse de données en Python. Mais il a un défaut majeur : il charge TOUT en mémoire.
Imaginez que vous avez un fichier CSV de 50 colonnes et 10 millions de lignes. Vous voulez juste analyser 3 colonnes : date, region, sales.
Voici ce que fait Pandas :
df = pd.read_csv("huge_file.csv")
# ⚠️ Charge les 50 colonnes en RAM
# ⚠️ Consomme 4GB de mémoire
# ⚠️ Prend 30 secondes
result = df[['date', 'region', 'sales']].groupby('region')['sales'].sum()
Pandas charge TOUTES les colonnes même si vous n'en utilisez que 3. C'est comme commander un buffet complet alors que vous voulez juste une salade.
DuckDB : Une Approche Radicalement Différente
DuckDB fonctionne différemment : il lit directement depuis le fichier et ne charge que ce dont vous avez besoin.
import duckdb
result = duckdb.sql("""
SELECT region, SUM(sales) as total_sales
FROM read_csv('huge_file.csv')
GROUP BY region
""").df()
DuckDB ne charge que les colonnes region et sales. Les 47 autres colonnes ? Ignorées. Résultat :
- ✅ 5x moins de mémoire utilisée
- ✅ 5x plus rapide
- ✅ Pas de MemoryError
OLAP vs OLTP : Comprendre la Différence
Pour comprendre pourquoi DuckDB est si performant, il faut comprendre la différence entre OLAP et OLTP.
OLTP (Online Transaction Processing)
Pensez à McDonald's : des milliers de commandes par seconde, chacune petite et rapide.
Outils OLTP : PostgreSQL, MySQL, SQLite Cas d'usage : Applications web, e-commerce, CRM
OLAP (Online Analytical Processing)
Pensez à un traiteur de mariage : analyser de larges tendances sur des volumes importants.
Outils OLAP : DuckDB, ClickHouse, Snowflake Cas d'usage : Analytics, BI, Data Science
DuckDB est optimisé pour l'OLAP : analyser rapidement de gros volumes de données.
Benchmark Réel : DuckDB vs Pandas
J'ai testé sur le dataset NYC Yellow Taxi : 38MB Parquet, 2.4 millions de trajets.
Test 1 : Agrégation Simple
# Pandas
df = pd.read_parquet("yellow_tripdata_2023-01.parquet")
result = df.groupby('PULocationID')['fare_amount'].sum()
# ⏱️ 0.55 secondes
# DuckDB
result = duckdb.sql("""
SELECT PULocationID, SUM(fare_amount) as total_fare
FROM 'yellow_tripdata_2023-01.parquet'
GROUP BY PULocationID
""").df()
# ⏱️ 0.11 secondes
Résultat : DuckDB est 5x plus rapide ⚡
Test 2 : Window Functions Complexes
# Calculer le rang de chaque course par zone
result = duckdb.sql("""
SELECT
trip_id,
PULocationID,
fare_amount,
RANK() OVER (PARTITION BY PULocationID ORDER BY fare_amount DESC) as rank
FROM 'yellow_tripdata_2023-01.parquet'
""").df()
Résultat : DuckDB est 4x plus rapide que l'équivalent Pandas avec rank()
CSV → Parquet : Le Passage Obligatoire
Avant d'aller plus loin, parlons format de fichiers.
CSV : Format texte, stocke les données ligne par ligne Parquet : Format binaire, stocke les données colonne par colonne
Pourquoi Parquet est Supérieur
- Compression : Un CSV de 4GB devient 1GB en Parquet
- Lecture Partielle : Parquet lit uniquement les colonnes nécessaires
- Typage : Les types sont préservés (pas de parsing à chaque lecture)
Conversion en Une Ligne
# CSV → Parquet avec DuckDB
duckdb.sql("""
COPY (SELECT * FROM 'sales_data.csv')
TO 'sales_data.parquet' (FORMAT PARQUET)
""")
C'est tout ! Votre fichier est converti, compressé, et optimisé.
Les Erreurs de Débutant à Éviter
Après avoir formé des centaines de professionnels, je vois toujours les mêmes erreurs :
1. Chemins Windows Mal Formés
# ❌ Mauvais
duckdb.sql("SELECT * FROM 'C:\Users\data.csv'")
# ✅ Bon
duckdb.sql("SELECT * FROM 'C:/Users/data.csv'")
Utilisez des slashes / même sous Windows.
2. Oublier la Conversion .df()
# ❌ Retourne un objet DuckDB Relation
result = duckdb.sql("SELECT * FROM data.parquet")
# ✅ Retourne un DataFrame Pandas
result = duckdb.sql("SELECT * FROM data.parquet").df()
3. Confondre Base In-Memory et Persistante
# Base temporaire (perdue à la fermeture)
duckdb.sql("CREATE TABLE temp_data AS SELECT * FROM 'data.csv'")
# Base persistante (sauvegardée sur disque)
con = duckdb.connect('my_database.duckdb')
con.sql("CREATE TABLE permanent_data AS SELECT * FROM 'data.csv'")
con.close()
4. Formats de Dates Ambigus
# ❌ Format ambigu (US ou EU ?)
'12/01/2024' # 12 janvier ou 1er décembre ?
# ✅ Format ISO 8601
'2024-01-12' # Toujours non-ambigu
Installation : 2 Minutes Chrono
pip install duckdb
Pas de serveur à configurer, pas de daemon à lancer. C'est tout.
import duckdb
# Analyser directement un CSV
result = duckdb.sql("""
SELECT region, AVG(sales) as avg_sales
FROM 'sales.csv'
WHERE date >= '2024-01-01'
GROUP BY region
ORDER BY avg_sales DESC
""").df()
Architecture Technique (Pour les Curieux)
Pourquoi DuckDB est-il si rapide ?
1. Architecture Columnaire
Pandas stocke les données ligne par ligne en mémoire. DuckDB stocke les données colonne par colonne sur disque.
Avantage : Pour calculer SUM(sales), DuckDB lit uniquement la colonne sales. Les autres colonnes sont ignorées.
2. Vectorization
DuckDB traite des milliers de valeurs simultanément grâce au SIMD (Single Instruction Multiple Data).
Au lieu de traiter ligne par ligne :
for row in data:
total += row['sales'] # Lent
DuckDB traite par blocs de 1024 valeurs :
total = sum(block_of_1024_values) # Rapide
3. Optimisation de Requêtes
DuckDB réorganise automatiquement vos requêtes pour maximiser les performances.
SELECT * FROM sales
WHERE region = 'EU'
AND date >= '2024-01-01'
DuckDB applique d'abord le filtre le plus sélectif pour réduire le dataset au maximum avant les calculs.
4. Parallélisation Automatique
DuckDB utilise automatiquement tous les cœurs de votre CPU sans configuration.
Votre machine a 8 cœurs ? DuckDB les utilise tous. Pas besoin de multiprocessing ou de configuration complexe.
5. Out-of-Core Processing
DuckDB peut traiter des fichiers plus gros que votre RAM en utilisant intelligemment le disque comme extension mémoire.
Fichier de 50GB sur une machine avec 16GB de RAM ? Pas de problème.
Ressources pour Aller Plus Loin
Trois livres incontournables :
- DuckDB in Action (PDF gratuit disponible)
- Getting Started with DuckDB
- DuckDB: Up and Running (O'Reilly, 2025)
Projet Pratique : App Streamlit + DuckDB
J'ai créé une application Streamlit qui analyse les données NYC Taxi avec DuckDB :
- ✅ Visualisations interactives
- ✅ Requêtes SQL personnalisées
- ✅ Benchmarks de performance
- ✅ Code source complet sur GitHub
Bonus : DuckLake, le Lakehouse Simplifié
DuckDB vient de lancer DuckLake, qui simplifie l'architecture Lakehouse :
- ✅ Transactions ACID natives
- ✅ Snapshots automatiques
- ✅ Time-travel (requêter l'état passé des données)
- ✅ Tout gérable en SQL pur
Plus besoin de Delta Lake ou Apache Iceberg pour les petites et moyennes équipes.
Challenge : Convertissez Vos CSV
Défi pour vous : Prenez votre plus gros fichier CSV et :
- Convertissez-le en Parquet avec DuckDB
- Comparez les temps de lecture Pandas vs DuckDB
- Mesurez les gains de performance
Partagez vos résultats en commentaire ou sur LinkedIn en me taguant !
🚀 Maîtrisez DuckDB, Polars et l'Analyse Moderne
DuckDB fait partie d'un écosystème moderne d'outils data qui transforment la façon dont nous analysons les données.
Dans ma formation Streamlit Unleashed, je vous montre comment :
Intégrer DuckDB dans vos Applications Streamlit
✅ Dashboards Temps Réel avec requêtes DuckDB ✅ Analyse de Gros Volumes sans MemoryError ✅ Visualisations Interactives avec filtres SQL dynamiques ✅ Performance Production avec cache intelligent
Combiner DuckDB + Polars + Streamlit
Le trio gagnant pour l'analyse de données moderne :
- DuckDB : Requêtes SQL rapides sur gros fichiers
- Polars : Manipulation de DataFrames ultra-performante
- Streamlit : Interfaces utilisateur modernes
Ce que vous allez apprendre :
✅ Architecture de Données Efficace
- Quand utiliser DuckDB vs Polars vs Pandas
- Optimisation de pipelines data
- Gestion de datasets multi-gigabytes
✅ Applications Streamlit Production-Ready
- Dashboards avec requêtes SQL personnalisées
- Cache stratégique pour performances optimales
- Déploiement cloud avec DuckDB
✅ Projets Concrets
- App d'analyse NYC Taxi (2.4M lignes)
- Dashboard analytics temps réel
- Interface de requêtage SQL interactive
🚀 Formation Streamlit Unleashed
Créez des applications data modernes avec DuckDB, Polars et Streamlit
20 heures de contenu pratique • Projets concrets • Accès à vie
297€ 197€
Conclusion : L'Ère Post-Pandas
Pandas restera un outil formidable pour des datasets de taille petite à moyenne (< 1GB). Mais pour l'analyse moderne de gros volumes, DuckDB change la donne :
- 🚀 5x plus rapide que Pandas sur agrégations
- 💾 4x moins de mémoire utilisée
- 📦 Aucune configuration requise
- 🎯 SQL natif pour requêtes complexes
La question n'est plus "Dois-je apprendre DuckDB ?" mais "Pourquoi est-ce que je ne l'utilise pas déjà ?".
Si vous analysez régulièrement des fichiers de plusieurs gigaoctets, DuckDB vous fera gagner des heures chaque semaine.
Prêt à passer à l'analyse moderne ?
👉 Découvrez Streamlit Unleashed
Envie d'aller plus loin ? Rejoignez ma newsletter DataGyver où je partage chaque mois des benchmarks, case studies et analyses approfondies sur les technologies data modernes.
Des questions sur DuckDB ? Contactez-moi sur LinkedIn où je partage quotidiennement des tips avec 25K+ professionnels.

📚 Approfondir avec mon livre
"Business Intelligence avec Python" - Le guide complet pour maîtriser l'analyse de données
Voir sur Amazon →