Aller au contenu
DataLittéracie

Module 03

Transformer (ETL/ELT)

Nettoyer un fichier à la main une fois, c’est formateur. Le refaire chaque mois, c’est une corvée et une source d’erreurs. Découvre comment on automatise une chaîne de traitements… et pourquoi l’ordre des étapes change tout.

  • Environ 14 min
  • À voir avant : module 2
  • Mis à jour le

La situation

Chez Cap Sportif…Chaque mois, Nadia passe trois heures à refaire le nettoyage du tableur et le comptage des inscriptions pour le bureau. Et si une « recette » automatique le faisait à sa place, exactement de la même façon, à chaque fois ?

L’analogie

Palier 1 : En bref · j’ai 2 minutes

Un pipeline ETL extrait les données de leurs sources, les transforme (nettoyage, calculs, regroupements) puis les charge là où elles serviront ; l’ordre des étapes compte, et un bon pipeline peut être relancé sans rien casser.

Palier 2 : Je veux comprendre

Extraire, transformer, charger : ce que fait chaque étape

Trois verbes

  • Extraire (Extract) : aller chercher les données là où elles sont : le tableur partagé, le formulaire d’inscription en ligne, l’export de la plateforme de paiement des cotisations. Chaque source a son format, son rythme de mise à jour et ses défauts.
  • Transformer (Transform) : tout ce qu’on a vu au module 2 (dédoublonner, normaliser, écarter ce qui n’est pas valide) et au-delà : croiser des sources (rapprocher une inscription de son paiement), calculer (l’âge à partir de la date de naissance), agréger (compter par mois, par section).
  • Charger (Load) : écrire le résultat là où il sera utilisé : un tableau de bord, un Entrepôt de données : Une base conçue pour l’analyse, où l’on rassemble des données de plusieurs sources, historisées et harmonisées.Image : Le grand entrepôt d’un supermarché, qui reçoit les livraisons de tous les fournisseurs et les range pour que chaque magasin vienne y puiser. Voir dans le glossaire, un fichier envoyé à la fédération.

Enchaînées et automatisées, ces étapes forment un Pipeline de données : Une suite d’étapes automatisées qui fait passer les données d’une source à une destination.Image : Le tapis roulant d’une cuisine industrielle, qui porte les plats d’un poste à l’autre, dans l’ordre, sans qu’on les repose à la main. Voir dans le glossaire.

L’ordre n’est pas un détail

Dans un pipeline, chaque étape travaille sur le résultat de la précédente. Quelques règles de bon sens :

  • on nettoie avant d’agréger : une fois qu’on a compté « 37 inscriptions en septembre », on ne peut plus retirer les doublons, ils sont fondus dans le total ;
  • on normalise avant de filtrer ou de regrouper par date : un filtre « inscrits en septembre » ne reconnaîtra pas un 09/14/2024 ;
  • on charge en dernier : ce qui est transformé après le chargement n’arrive jamais à destination.

ETL ou ELT ?

ETL Extraire → Transformer → Charger

  1. Sourcesformulaire, tableur, paiements
  2. Transformersur un outil de traitement, avant le rangement
  3. Destinationreçoit des données déjà prêtes

La cuisine centrale prépare les plats, puis livre des plateaux prêts à servir.

ELT Extraire → Charger → Transformer

  1. Sourcesformulaire, tableur, paiements
  2. Entrepôtreçoit les données brutes, telles quelles
  3. Transformerdans l’entrepôt, à la demande

On range toutes les courses au frigo, et chacun cuisine ensuite ce dont il a besoin.

ETL et ELT font les mêmes opérations ; seul change le moment où l’on transforme. L’ELT s’est répandu avec les entrepôts de données en ligne, capables de stocker beaucoup de données brutes et de les transformer rapidement.

Dans l’approche ETL : Extract, Transform, Load : on extrait les données des sources, on les transforme (nettoyage, calculs), puis on les charge dans la destination.Image : La cuisine industrielle : réception des produits, préparation, dressage des assiettes. Voir dans le glossaire, on prépare tout avant de ranger. Dans l’approche ELT : Extract, Load, Transform : on charge d’abord les données brutes dans l’entrepôt, puis on les transforme sur place, à la demande.Image : On range toutes les courses au frigo, et chacun cuisine ensuite ce dont il a besoin. Voir dans le glossaire, on range d’abord les données brutes dans l’entrepôt, puis on les transforme sur place, selon les besoins. L’ELT garde une trace intacte des données d’origine (on peut refaire un calcul autrement plus tard) ; l’ETL évite de stocker des données brutes dont on n’a pas besoin, ce qui va dans le sens de la minimisation.

Scripts ou outils visuels ?

Famille Exemples Pour qui ?
Scripts Python avec pandas, R, SQL Qui sait (ou veut apprendre à) programmer : puissant, versionnable, testable
Outils visuels (« no-code ») n8n, outils d’automatisation entre applications Qui préfère assembler des blocs : rapide à mettre en place, plus difficile à tester à grande échelle
Transformations dans l’entrepôt dbt, requêtes SQL planifiées Approche ELT, équipes qui ont déjà un entrepôt de données

Pour une association comme Cap Sportif, un simple script lancé chaque mois, ou un outil visuel auto-hébergé, suffit largement. L’essentiel n’est pas l’outil, c’est que la recette soit écrite plutôt que dans la tête d’une seule bénévole.

Rejouable et traçable

Deux qualités distinguent un pipeline fiable d’un bricolage :

  • l’Idempotence : Un traitement est idempotent si le relancer plusieurs fois donne le même résultat qu’une seule fois (pas de doublons en cas de relance).Image : Appuyer deux fois sur le bouton de l’ascenseur ne le fait pas venir deux fois. Voir dans le glossaire : relancer le pipeline (après une panne, par erreur, deux fois dans le mois) donne le même résultat qu’une seule exécution, sans doublons ni totaux gonflés ;
  • la Traçabilité (lignage) : Pouvoir retrouver d’où vient une donnée et quelles transformations elle a subies.Image : L’étiquette « origine » sur un produit alimentaire : savoir d’où il vient et par quelles étapes il est passé avant d’arriver dans l’assiette. Voir dans le glossaire : on sait d’où vient chaque chiffre du tableau de bord, quelles transformations il a subies, et quand le pipeline a tourné pour la dernière fois.

À toi de manipuler

Voici le pipeline écrit à la va-vite par un bénévole. Exécute-le, observe le tableau de bord, puis répare-le en ajoutant et en ordonnant les blocs.

Démonstration interactive

Le pipeline du bilan mensuel

Ajoute des blocs, change leur ordre avec les flèches, puis exécute. Le tableau de bord montre le résultat réel de ta recette.

Blocs disponibles

E extraire · T transformer · L charger

Ton pipeline (exécuté de haut en bas)

  1. 1. Extraire le tableur des adhérents
  2. 2. Compter les adhérents par mois
  3. 3. Charger dans le tableau de bord
Au chargement, le tableau de bord…

Tableau de bord du club

Adhérents : … (attendu : 104)

Le tableau de bord est vide. Exécute le pipeline pour l’alimenter.

Mois : septembre, octobre, novembre, décembre, janvier, février, mars, avril, mai, juin, juillet, août.

Démonstration interactive à retrouver en ligne : https://hylst.fr/datalitteracie/modules/transformer/#demo

Palier 3 : Je veux creuser

Orchestration, chargements incrémentaux, tests et lignage

L’orchestration

Un pipeline réel tourne tout seul : chaque nuit, chaque lundi, à chaque nouvel export. L’Orchestration : Le pilotage des pipelines : dans quel ordre, à quel moment, que faire en cas d’échec.Image : Le chef d’orchestre qui donne le départ à chaque pupitre. Voir dans le glossaire décide quand il se lance, dans quel ordre s’enchaînent plusieurs pipelines qui dépendent les uns des autres, et que faire en cas d’échec : réessayer, prévenir quelqu’un, s’arrêter proprement. C’est précisément la relance automatique après échec qui rend l’idempotence indispensable.

Rendre un chargement idempotent

Plusieurs techniques existent :

  • remplacer plutôt qu’ajouter : on recalcule tout et on écrase le résultat précédent (simple, parfait pour de petits volumes comme ceux d’une association) ;
  • fusionner sur une clé (on parle d’upsert, ou de MERGE en SQL) : chaque adhérent a un identifiant ; si la ligne existe déjà, on la met à jour, sinon on l’ajoute ;
  • charger par partition : on remplace uniquement les données du mois traité, sans toucher aux autres.

Le compteur par mois du widget s’écrirait ainsi en SQL :

SELECT strftime('%m', date_inscription) AS mois, COUNT(*) AS adherents
FROM adherents_nettoyes
GROUP BY mois;

Remarque : cette requête suppose que date_inscription est une vraie date normalisée. Sur la colonne brute du vieux tableur, elle renverrait des résultats faux sans le moindre message d’erreur.

Les chargements incrémentaux

Avec de gros volumes, on ne retraite pas tout à chaque fois : on ne traite que ce qui a changé depuis la dernière exécution (les nouvelles inscriptions de la semaine). Plus rapide, mais plus délicat : il faut mémoriser où l’on s’est arrêté, et gérer les modifications de lignes anciennes.

Tester un pipeline

Un pipeline peut « réussir » techniquement tout en produisant des chiffres faux. D’où l’intérêt de tests de données automatiques après chaque exécution : « aucune date illisible », « aucun e-mail en double », « le total ne varie pas de plus de 20 % d’un mois sur l’autre ». Des outils comme dbt permettent d’écrire ces règles à côté des transformations. Pour Cap Sportif, une simple vérification « le total est-il plausible ? » aurait évité l’incident de l’étude de cas ci-dessous.

Le lignage des données

Dans les grandes organisations, on dessine le lignage (data lineage) : la carte qui relie chaque indicateur à ses sources et à ses transformations. Quand un chiffre surprend, on remonte le fil. C’est aussi une exigence croissante de la réglementation : savoir d’où viennent les données qui alimentent une décision, ou un système d’IA (module 9).

Exercice corrigé

Un nouveau pipeline, avec deux sources à rapprocher : les inscriptions et les paiements de cotisation.

Les adhérents actifs, mois par mois

Le bureau veut suivre chaque mois le nombre d’adhérents à jour de leur cotisation. Il faut rapprocher deux sources : le formulaire d’inscription et la plateforme de paiement. Remets les étapes du pipeline dans le bon ordre.

Utilise les boutons « monter » et « descendre » pour réordonner les étapes.

  1. Extraire les inscriptions et les paiements
  2. Compter les adhérents actifs par mois
  3. Ne garder que les adhérents à jour de cotisation
  4. Rapprocher chaque inscription de son paiement (par e-mail)
  5. Dédoublonner les inscriptions
  6. Normaliser les formats (dates, e-mails en minuscules)
  7. Charger dans le tableau de bord, en remplaçant l’existant

Étude de cas

Fil rouge · Cap Sportif

Le pipeline qui avait tourné deux fois

Un lundi matin, le tableau de bord de Cap Sportif affiche 208 adhérents. Le président, ravi, commence à commander 208 t-shirts pour la fête du club. Heureusement, la trésorière trouve le chiffre étrange : le club n’a jamais dépassé 120 membres.

Que s’était-il passé ?

Pendant la nuit, le pipeline a échoué une première fois à cause d’une coupure de réseau, après avoir déjà chargé ses résultats. L’outil d’orchestration l’a automatiquement relancé. Comme le chargement était réglé sur « ajouter à la suite », les 104 adhérents ont été écrits deux fois. Le pipeline n’était pas idempotent.

Comment éviter que ça recommence ?
  1. Passer le chargement en mode remplacer (ou fusionner sur l’identifiant de l’adhérent).
  2. Ajouter un test de plausibilité : si le total change de plus de 20 % d’un coup, le pipeline s’arrête et envoie une alerte au lieu de publier.
  3. Afficher sur le tableau de bord la date et l’heure de la dernière mise à jour, pour que chacun puisse juger de la fraîcheur des chiffres.

Et garder un réflexe humain : un chiffre qui surprend mérite toujours une vérification avant d’agir.

Pour aller plus loin

  • 10 minutes to pandas (en anglais)pandas (bibliothèque libre, Python)

    La prise en main de la bibliothèque la plus utilisée pour transformer des tableaux de données en Python.

  • Documentation de n8n (en anglais)n8n (outil d’automatisation auto-hébergeable)

    Un outil visuel pour enchaîner des traitements entre applications sans écrire de code, installable sur ses propres serveurs.

  • What is dbt? (en anglais)dbt Core (libre)

    Un outil qui organise les transformations en SQL directement dans l’entrepôt de données (approche ELT), avec tests et documentation.

Mini-quiz

Quelques questions pour vérifier l’essentiel et débloquer le badge du module. Aucune note, aucune limite d’essais.

Question 1 sur 4
Dans « ETL », que recouvre le T de « Transformer » ?