DuckDBPythonPandasPerformanceData Analysis

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

GP
Gaël Penessot
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

  1. Compression : Un CSV de 4GB devient 1GB en Parquet
  2. Lecture Partielle : Parquet lit uniquement les colonnes nécessaires
  3. 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 :

  1. DuckDB in Action (PDF gratuit disponible)
  2. Getting Started with DuckDB
  3. 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

Voir le projet 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 :

  1. Convertissez-le en Parquet avec DuckDB
  2. Comparez les temps de lecture Pandas vs DuckDB
  3. 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€

Découvrir la Formation →

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.

Livre Business Intelligence avec Python

📚 Approfondir avec mon livre

"Business Intelligence avec Python" - Le guide complet pour maîtriser l'analyse de données

Voir sur Amazon →

📬 Ne manquez rien de l'actualité data

Rejoignez +1000 professionnels qui reçoivent chaque semaine mes analyses, conseils et découvertes data.

S'abonner gratuitement
Prochaine révision : Trimestre prochain