prof404
← Retour aux ressources du module
Sommaire (6 sections) · 6 min
Ce que tu travailles iciCollecter et traiter les donnéesPourquoi ces compétences ?
  • BC01Collecter et traiter les données. Aller chercher la donnée et la rendre fiable : écrire les scripts qui l'extraient, repérer ce qui manque ou se contredit, et décider quoi en faire.

Ce sont les compétences du titre RNCP 38616, celles sur lesquelles le jury évalue.

Automatiser un transfert de données relançable

Tu reçois régulièrement un CSV de commandes. À chaque réception, tu dois contrôler la source, ne garder que les commandes livrées et produire un fichier pour l'analyse. Une copie manuelle peut laisser des lignes de la version précédente ou remplacer une sortie saine par un fichier incomplet.

Le script ne planifie aucun horaire : un traitement automatisé exécute les mêmes étapes sans manipulation intermédiaire ; une planification décide quand le lancer.

Les fichiers de l'expérience

Télécharge dans un même dossier :

Si un lien affiche le texte du fichier, fais un clic droit sur le lien puis choisis « Enregistrer le lien sous… ». Garde le nom et son extension .csv ou .py, sans ajouter .txt.

Le script utilise seulement Python 3.9 ou une version plus récente. Sous Windows, ouvre PowerShell dans ce dossier. Si la commande py n'existe pas mais que python fonctionne, remplace py par python dans la fiche.

Prédire la première sortie

Ouvre commandes_source.csv. Une ligne représente une commande. Le pipeline doit vérifier l'en-tête, le nombre de champs de chaque enregistrement, l'unicité de order_id et le format des dates, puis conserver seulement les lignes dont order_status vaut delivered.

Avant de le lancer, écris :

  1. le nombre de lignes de la source ;
  2. le nombre attendu dans la sortie ;
  3. ce qui doit arriver au fichier de sortie si le contrôle échoue.

Lance ensuite :

py transferer_commandes.py commandes_source.csv commandes_livrees.csv

La sortie du terminal donne 15 lignes lues, 10 lignes écrites et une empreinte SHA-256. Une empreinte est un texte calculé à partir des octets d'un fichier : deux fichiers strictement identiques donnent la même empreinte.

Ouvre commandes_livrees.csv. Son en-tête ne contient plus que order_id et date_achat, et ses onze lignes physiques sont l'en-tête plus dix commandes. Le pipeline vient d'enchaîner lecture, contrôle, transformation et écriture dans une seule commande.

Relancer sans doubler

Prédis ce qui arrivera au nombre de lignes et à l'empreinte si tu relances la même commande sans modifier la source. Puis relance-la.

Tu dois retrouver 10 lignes de données et la même empreinte. Le script réécrit la sortie complète à partir de la source complète. Il n'ajoute donc pas dix lignes aux dix précédentes.

Cette propriété s'appelle l'idempotence : relancer le même traitement avec la même entrée produit le même état final. Elle permet une reprise après une interruption sans fabriquer de doublons.

Faire échouer la source sans perdre la sortie

commandes_source_invalide.csv est une altération pédagogique : sa dernière ligne reprend un order_id déjà utilisé. Avant l'exécution, note l'empreinte de la dernière sortie saine affichée par le script.

Lance :

py transferer_commandes.py commandes_source_invalide.csv commandes_livrees.csv

Le résultat attendu est ECHEC, avec l'identifiant répété. Le terminal affiche aussi l'empreinte de la sortie restée en place : elle doit être celle notée avant l'échec. Compare ces deux valeurs avant toute autre relance.

Une ligne trop courte ou trop longue est aussi refusée : le nombre de champs doit correspondre aux trois colonnes de l'en-tête. Si ce message apparaît, ouvre l'enregistrement indiqué et compare ses virgules et ses guillemets à ceux de l'en-tête. Un champ vide n'est pas la même chose qu'un champ absent : A,delivered, contient trois champs, dont une date vide ; A,delivered n'en contient que deux. Les deux échouent, mais pas au même contrôle. Après la correction, relance le traitement et vérifie son résultat.

Le contrôle se termine avant l'écriture. Le script prépare ensuite le nouveau CSV dans un fichier temporaire, puis utilise os.replace pour remplacer la destination en une opération. Ce remplacement atomique évite qu'un lecteur voie la moitié de l'ancien fichier et la moitié du nouveau. Si la validation échoue, cette étape n'est jamais atteinte.

Tu peux demander à ChatGPT de relire les fonctions lire_et_controler et ecrire_atomiquement :

Donne le chemin exact suivi lors d'un doublon. Quelle instruction d'écriture n'est jamais atteinte ? Propose une expérience qui le prouve sans modifier le script.

Vérifie sa réponse avec l'empreinte avant et après l'échec. Une description du code ne remplace pas l'observation du fichier conservé.

Modification guidée : choisir une autre population

Dans transformer, remplace la condition :

if ligne["order_status"] == "delivered"

par :

if ligne["order_status"] in {"delivered", "shipped"}

Prédis la variation de l'effectif avant de relancer. Vérifie ensuite trois points : la sortie contient la commande expédiée, une seconde relance ne change pas l'empreinte, et la source invalide échoue encore sans écraser la sortie.

La modification change la population métier, pas les garanties de reprise. Ton compte rendu doit donc nommer la nouvelle population et garder les trois contrôles techniques.

Transfert autonome sur un lot inédit

lot_suivant.csv contient cinq commandes Olist qui ne figurent pas dans la première source. Construis source_etendue.csv avec un seul en-tête et les lignes des deux lots. Dans un éditeur de texte, conserve l'encodage UTF-8 et les virgules comme séparateurs. Si l'en-tête apparaît comme une seule grande colonne séparée par des points-virgules, corrige le séparateur avant de lancer le pipeline. Ne modifie plus le script.

Avant l'exécution, prédis l'effectif source et la variation de l'effectif destination. Lance le pipeline deux fois sur source_etendue.csv, puis provoque un échec contrôlé en vidant un order_id dans une copie de cette source.

Ton transfert est vérifiable si tu rends :

  • les commandes exactes des trois exécutions ;
  • l'effectif source et l'effectif destination après les deux succès ;
  • les deux empreintes identiques de la reprise ;
  • l'erreur de la source altérée et l'empreinte inchangée de la dernière sortie saine ;
  • une phrase qui distingue le traitement relançable de son éventuelle planification.

Si les deux lots portent le même identifiant, ne supprime pas une ligne au hasard. Arrête le transfert et établis avec la source s'il s'agit du même événement reçu deux fois ou de deux événements qui devraient avoir des clés différentes.

À la fin de la leçon

Le quiz de la leçon

Choisis une réponse, puis lis l’explication avant de continuer.

  • 5 questions
  • 3 min par question
  • Une explication après chaque réponse

Le chrono démarre à la première question. Un clic sur une réponse valide ton choix.