bonjour à tous et bienvenue dans cette vidéo nous allons parler d'un concept qui est central en data engineering et ce concept c'est le TL ETL ça veut dire extract transform and load et comme son nom l'indique le TL est en fait un processus constitué de trois blocs le premier bloc donc le bloc extract va nous permettre d'aller récolter de la donnée à partir d'une ou plusieurs sources mais comme ces données sont brutes et potentiellement très hétérogène il va falloir les adapter pour répondre aux besoins opérationnels et c'est ce qu'on va faire dans le deuxième bloc
qui est le bloc transform une fois les transformations faites on va envoyer ces données dans un espace de stockage et cet envoie correspond au troisième bloc de notre TL le bloc load maintenant qu'on a vu à quoi correspondent chacun de ces blocs on comprend mieux pourquoi le TL est un élément central en data engineering car il faut garder en tête que la mission principale d'un Data ingénieur c'est de récupérer des données de les stocker de les rendre exploitables et de les mettre à disposition de personnes qui vont pouvoir extraire du signal à partir de ces
don données pour ensuite prendre des décisions optimales à partir du signal extrait ceci étant dit rentrons maintenant dans la pratique pour cette vidéo on va créer notre TL à partir d'un objectif concret qui est avoir notre propre jeu de données à jour qui va contenir l'évolution du prix des actions Apple et Google et ce jeu de données doit être accessible sur notre ordinateur personnel la première étape pour réaliser ce projet ça va être de récupérer le cours des actions Apple et Google ça on va le faire via une API et cette étape va correspondre au
bloc extract de notre TL une fois les données récupérées on va les nettoyer les enrichir et les concaténer et cette partie va correspondre au bloc transforme de notre TL et pour finir on ira stocker directement ces données sur le disque dur de notre ordinateur au format CSV et l'envoi de ces données dans un fichier CSV va correspondre au bloc load de notre TL voilà pour les grandes étapes et passons maintenant à l'implémentation pour réaliser la première étape de notre TL c'est-à-dire récupérer les données financières on va utiliser une API et cette API ce sera rstonks
pour ceux qui ne connaissent pas rstonks c'est une API vraiment pratique qui permet de récupérer en temps réel la valeur de différents actif financier pour l'utiliser c'est très simple vous avez le choix entre différents langages de programmation pour faire vos requêtes par exemple C c#arp Go HTTP nous on va choisir d'utiliser Python et d'ailleurs on va utiliser Python pour coder tout notre TL et avec Python on va utiliser la librairie request si on regarde ce code Python plus en détail ce qu'on voit c'est qu'il y a une URL qui va permettre justement de faire une
requête et récupérer les informations et ce qui est important dans cette url c'est le paramètre qui a à la fin dans l'exemple qu'il propose le paramètre c'est tsla et il permet de récupérer le cours de l'action Tesla nous on va devoir changer ce paramètre pour récupérer les cours des actions Google et Apple et on verra juste après quel paramètres il faut renseigner ensuite on va retrouver ce qu'on appelle les headers ici il y a une clé et un host la clé il faut la modifier donc quand on crée un compte sur rifstong on a une
clé qui est associée à notre profil et cette clé en gros elle va permettre de dire à laapi que c'est nous qui faisons la requête car l'AP n'est pas publique il y a pas tout le monde qui peut aller réclamer de l'information il faut s'identifier pour le faire ceci étant dit testons maintenant ce code Python donc on va le copier puis le coller dans un nouveau fichierpy ici comme vous pouvez le voir j'utilise vs code mais c'est pas du tout une obligation vous pouvez utiliser n'importe quel autre éditeur de texte pour simplifier le développement de
votre TL maintenant on va enregist notre script hop c'est fait donc maintenant pour pouvoir faire des requêtes ce qu'on a dit tout à l'heure c'est qu'il fallait ajouter notre clé donc ici je change je mets ma clé et je rappelle que ça c'est une clé personnelle qu'on récupère une fois qu'on a créer un compte surston ensuite il nous faut modifier le paramètre de l'URL ici il faut retirer tsla et mettre les lettres qui vont correspondre aux indices financiers Google et Apple en fait cette suite de lettrre c'est quelque chose de relativement générique ça s'appelle un
ticker pour les trouver c'est simple fait juste une recherche Google donc vous voyez pour Apple c'est AAPL et pour Google C googl donc c'est relativement facile de les récupérer donc maintenant si on revient sur notre code et qu'on modifie tsla par AAPL par exemple on va pouvoir récupérer le cours de l'action Apple pour tester il n reste plus qu'à ouvrir un terminal puis à lancer notre script python dans la console et là super on voit que ça a fonctionné on est content on a récupéré le prix de l'action Apple et puis quelques autres informations on
peut maintenant essayer de récupérer le cours de Google donc pour ça il faut modifier le paramètre AAPL par le paramètre googl et là on va récupérer normalement le cours de l'action Google et encore une fois on est on est content ça a fonctionné on a récupéré le prix de l'action Google et puis d'autres informations maintenant ce qu'on aimerait faire c'est faire peut-être une boucle fort pour récupérer les deux d'un coup pour faire ça on va commencer par créer un arrêt avec nos deux tickers donc Go o g L et a a l ensuite on va
faire une boucle for sur noticckers et dans la boucle for il va falloir rentrer l'URL pour la modifier en fonction du ticker pour avoir des chaînes de caractères qui se modifie de manière dynamique avec Python il faut mettre un f devant la chaîne de caractère puis ensuite mettre en tracolade les caractères qu'on souhaite modifier de manière dynamique donc là on va mettre ticker entracolon maintenant si on veut afficher le résultat des deux requêtes il faut qu'on indente aussi le print et une fois que c'est fait on peut lancer notre script et voir si on affiche
bien le résultat des deux requêtes et là encore une fois on est content parce qu'on voit que le résultat de nos deux requêtes c'est affiché donc c'est super la première partie de notre TL fonctionne comme il faut mais maintenant on voit bien que les données récupérées sont pas exploitables tel quel par exemple là si on lit les deux lignes on voit pas quelle ligne correspond à quel actif financier donc en fait il va falloir qu'on ajoute cette information il va falloir aussi qu'on ajoute l'information de l'heure à laquelle on a récupérer la valeur de l'actif
financier parce que sans ça c'est pas exploitable non plus et c'est là qu'on va mettre la deuxième partie de notrel en place qui est la partie transforme où on va modifier nos données pour réussir à avoir quelque chose d'exploitable et de pertinent ce qu'on va faire maintenant c'est créer un dictionnaire et ce dictionnaire en fait nous servira à stocker temporairement les informations qui nous intéressent typiquement ce sera le nom de l'actif financier son prix on veut également stocker la date et l'heure pour avoir un suivi chronologique de l'évolution du prix de l'actif financier voilà donc
là on a créé notre dictionnaire il est vide et ce qu'on veut faire c'est le remplir avec les informations qu'on va récupérer avec notre requête donc là on a créé la variable my data qui va contenir les informations que real stanks nous a retourné on va commencer par ajouter dans notre dictionnaire à la clé stock name le nom de l'actif pour lequel on vient de faire une quê ou plutôt le ticker et ici donc à la valeur du ticker c'est égal à la variable ticker ensuite ce qu'on va ajouter dans notre dictionnaire c'est la valeur
de l'actif financier pour ça on va aller dans la variable my data et on va récupérer la valeur associée à Price et ensuite dernière chose qu'on va ajouter à notre dictionnaire c'est l'heure à laquelle on a fait la requête donc l'heure associée à la valeur de notre actif je dis heure mais en fait c'est la date et et l'heure et en gros pour ça on va utiliser la librairie time et ici on va utiliser la fonction time.time qui permet d'avoir une mesure en seconde du temps écoulé depuis le 1er janvier 1970 et à partir de
cette mesure on peut facilement retrouver l'heure et la date à laquelle la requête a été faite et pour utiliser cette fonction il faut importer la librraerie Time avec tout ça ça devrait fonctionner et pour le vérifier ben on peut juste afficher dict data donc on va l'ajouter et puis ensuite on a plus qu'à lancer notre script et maintenant dans notre dictionnaire on voit bien que les données sont exploitables pour chacune des clés la première entrée est associée à l'actif Google et la deuxième entrée est associée à l'actif Apple par exemple si on regarde la deuxième
entrée de la clé stockn on voit le ticker associé à Apple si on regarde la deuxième entrée de stock price on voit le prix de l'action Apple et si on regarde la deuxième entrée de time on voit le moment auquel on a fait la requête pour récupérer le prix de l'actif financier Apple enfin dernière étape pour notre bloc transform on va transformer notre dictionnaire en un dataframe et pour cette transformation on va utiliser la librairie pandas et la fonction from dict qui permet de transformer un dictionnaire en dataframe et on fait ça avant tout pour
simplifier la troisème partie de notre HTL qui consistera à enregistrer nos données dans un fichier CSV ici on n' pas importé la librairie pandas donc il faut le faire et puis ce sera bon et maintenant on peut se faire un petit print pour voir la tête de notre data frame et tout ça a l'air très bien donc ça conclut la partie 2 de notre TL qui est la partie transform maintenant on va pouvoir passer à la partie load donc pour ça c'est relativement simple on a juste à utiliser la fonction tout CSV qui va nous
permettre d'enregistrer notre dataframe dans un fichier CSV et cette fonction prend en entrée plusieurs choses la première c'est le nom du fichier qu'on veut créer ici financial data ensuite ça prendoption mode ici on va mettre égal a ça veut dire que si on a déjà un fichier qui s'appelle financialdata.csv on va pas détruire ce fichier et en créer un autre mais on va plutôt ajouter les données dans le fichier ensuite on renseigne l'option header pour choisir si on veut mettre un titre ou non aux colonnes et enfin l'option index pour numéroter ou non les lignes
si maintenant on lance notre script pthon on peut voir qu'il y a un fichier financial datata.csv qui a été créé et on y retrouve bien des données financières donc maintenant si on relance une fois de plus notre script Python normalement on a de nouveau des données financières qui devrai s'y ajouter et c'est bien le cas mais le problème ici ici c'est qu'il y a de nouveau le titre des colonnes qui a été inscrit dans le fichier CSV donc on a un doublon ici ça nous va pas et on aimerait corriger ça pour corriger ce problème
on va juste aller modifier le paramètre header qui est dans la fonction tout CSV ici on va mettre false au lieu de True puis on va relancer notre script Python et voir l'impact qu'il y a eu sur le fichier CSV et là comme on peut le voir on a ajouté des données financières mais on n pas ajouté le titre des colonnes donc on est content c'est ça qu'il faut faire et maintenant on veut modifier notre Python pour que ce changement se fasse de manière automatique on va commencer par importer la librairie os et cette librairie
en fait va nous permettre d'aller voir si le fichier financial data existe déjà ou non ce qu'on veut ensuite c'est avoir une variable qui soit égale à true si le fichier existe et false si le fichier n'existe pas cette variable on va l'appeler create header puis ensuite on va utiliser la fonction is file de notre librairie os et vous remarquerez que j'ai mis un note devant l'utilisation de la fonction is file car en fait is file va retourner true si le fichier existe et false si le fichier n'existe pas et nous on veut interchanger les
deux et le note va nous permettre de faire ça maintenant on va mettre notre variable dans l'option header et normalement ça devrait fonctionner si maintenant on ouvre notre fichier CSV on peut voir que des données financières ont été ajoutées mais qu'il y a pas eu de nom de colonne d'ajouter donc c'est super ça a fonctionné on peut le refaire une fois pour voir ce qui se passe ça fonctionne et maintenant ce qu'on va faire c'est qu'on va supprimer notre fichier CSV pour voir si au moment de la création on ajoute bien le nom des colonnes
et là on a bien créé un fichier CSV et il y a le nom des colonnes donc ça a l'air de très bien fonctionner si maintenant on relance ce script une fois on voit que de nouveau on ajoute des données financières sans ajouter le nom des colonnes donc très bien cette partie est fini donc si on résume on a réussi à implémenter les parties extract transform and load de notre ETL mais pour l'instant on doit le lancer à la main alors qu'on aimerait avoir un script qui se lance de manière automatique à des intervalles de
temps fixés par exemple toutes les minutes toutes les 5 minutes toutes les heures et pour faire ça il y a plusieurs manières de faire mais nous on va utiliser un Chrone et avant de mettre en place et d'utiliser ce chron on peut par exemple aller sur la page de Digital Ocean pour voir ce qu'ils en disent et comment l'utiliser en fait chron c'est un outil de planification de tâche qui est utilisable notamment sur Linux et MacOS et c'est relativement simple d'utilisation ici on pe voir des commandes de terminal très classiques et ces commandes vont nous
permettre d'installer chron et de l'initialiser si on descend un petit peu plus sur la page on voit la commande qui permet de lancer un Chrone cette commande est divisée en deux parties la première partie correspond à la fréquence à laquelle on veut que notre script soit exécuté ou notre commande soit exécutée et la seconde partie c'est la commande à exécuter donc c'est relativement simple si on descend un petit peu plus on a des information sur la manière de définir la fréquence à laquelle on veut que notre commande soit exécutée puis en ensuite on nous dit
qu'une manière d'utiliser chron c'est de définir des chron tables dans lesquelles on va justement mettre notre commande chron voilà pour cette petite présentation de chron maintenant passons à la pratique sur mon ordinateur personnel j'avais déjà installé chron donc là je vais juste modifier ma chron Tab ce que j'aimerais c'est que mon script se lance toutes les minutes comme c'est la fréquence maximale du Chrone en fait j'ai juste à mettre 5 étoile ensuite je vais mettre ma commande pour lancer mon script Python et là c'est important de mettre le chemin complet pour accéder au fichier point
Py car le chron lui part de la racine de notre ordinateur et n'est pas directement dans le dossier ETL python hop on sauvegarde et maintenant il faut qu'on donne la permission à chron d'exécuter notre point Py pour ça on va juste ajouter la permission avec Ch mode maintenant je vous propose de supprimer le fichier point Py qu'on avait créé CR pour voir si tout fonctionne comme prévu et puis on va également ajouter les chemins vers le fichier point CSV qu'on veut créer encore une fois chron lui part de la racine donc il faut lui dire
exactement où on veut enregistrer notre fichier CSV on fait ça ici et là et maintenant magie on voit qu' un fichier financialata.csv qui vient de se créer on retrouve bien le titre de nos colonnes et puis des données financières donc c'est cool ça a l'air de bien fonctionner maintenant si notre objectif était de récupérer l'information toutes les 5 minutes au lieu de toutes les minutes ou sur une autre fréquence alors on aurait juste à modifier la première partie de notre commande Chrone par exemple ici pour avoir l'information toutes les 5 minutes on a juste à
mettre/ 5 donc c'est aussi simple que ça et pendant qu'on discute on a reçu de nouvelles informations financières donc notre chron semble très bien fonctionner toutes les minutes on a notre ETL qui se lance on peut voir ces nouvelles données financières directement dans notre CSB et cette étape conclut notre projet donc on a réalisé notre objectif on a récolté des données on les a transformé et on les a stocké et on arrive à faire ça de manière automatique toutes les minutes donc voilà c'est notre première ETL et on a réussi à le faire relativement rapidement
donc merci à tous d'avoir suivi cette vidéo et je vous dis à très bientôt ô pour une nouvelle vidéo et un projet un peu plus complexe Ciao