Session du 05 octobre 2023 à 20h00
Data Science & IA
Veille & Discussions
DevOps & Environnement
Deviens membre Premium magic_button
Cette session de mentorat est réservée aux membres Premium. Rejoignez-nous pour accéder à toutes les rediffusions des sessions de mentorat !
Premium
- check +100h de formations
- check +180 exercices de code
- check +100h de mentorats en rediffusion
- check 20 projets
- check Mentorats groupés hebdomadaires
- check Support individuel avec nos mentors
Structurer un projet Django Wagtail
Découvre comment organiser un projet Django/Wagtail, améliorer une landing page et structurer ton dépôt GitHub pour un code plus propre.
00:00:00 :J'espère qu'on commence par ça, comme ça tout le monde peut en profiter aussi si ça ne te dérange pas.Pas de problème.J'attends un peu que les gens arrivent.
00:00:15 :En tout cas, je ne t'ai pas répondu, mais c'est top, j'aime beaucoup la nouvelle rencontre.Merci. En fait, j'ai vraiment combiné, je fais marcher Django, Tailwind et Wagtail ensemble.
00:00:29 :C'est marrant parce qu'une fois, je n'étais pas du tout Wagtail, je t'avais posé la question, tu m'avais dit oui, je ne sais pas trop et tout ça,puis en fait, apparemment, on peut facilement du coup.
00:00:38 :Très facilement, c'est Thierry Chatut qui m'a dit si, c'est trop bien, vas-y, du coup, je suis allé, vas-y, je vais tenter.En fait, tu vois, c'est assez simple à faire marcher les deux.
00:00:48 :C'est bien. Du coup, je vais partager mon écran.Ouais, vous voyez mon écran, là.Ouais, nickel.Salut, bonsoir. Alors, c'est Gabriel.trouvé.Gabriel Attal.Pardon, accroché ?
00:01:20 :Gabriel trouve.fr.Ensemble, Gabriel trouve.fr.Il n'y a pas de point, il n'y a pas de point entre les deux.Ouais, ça, j'ai beaucoup aimé, c'est pas mal.
00:01:44 :C'est super.Mille journées.Ok, donc en fait, t'as généré ton fonds, là, avec mille journées.Ouais.C'est bien, ça.Attends, je ne sais pas si je suis à 100 %.
00:02:01 :Ouais, je suis à 100 %.Ok, et donc après, bon, ça, c'était, donc ça, c'est ta page, ta page de, ta landing page.Page Wagtail.
00:02:15 :Page Wagtail, Wagtail.Ouais.Ça, c'est top.Moi, ce que j'aime bien, quand je vois des, enfin, c'est juste des ressentis et des conseils.Tu fais ce que tu veux, il n'y a pas de souci.
00:02:27 :Mais quand il y a des logos comme ça, j'aime bien qu'ils soient cliquables.Donc là, tu vois, typiquement, je mettrais un lien vers python.org, ici, vers Django, et là, vers Wagtail.
00:02:35 :Parce que, enfin, ce n'est pas que c'est surprenant, mais souvent, quand tu as des trucs comme ça,tu as envie de cliquer dessus et ça t'emmène vers des...
00:02:42 :Oui.Complètement, oui, oui, carrément, tu as raison, je vais le rajouter.Ouais.Attends, je vais enlever, je vais enlever ma caméra.Ouais, donc ça, c'est juste une idée.
00:02:53 :Donc là, tu l'as fait, tu l'as fait là.Là, pareil, après, est-ce que tu pourrais mettre directement ton Twitter ?Parce que là, tu mets Twitter, LinkedIn, et puis là, tu as Twitter, GitHub.
00:03:09 :Enfin, toute petite incohérence.Ouais.Enfin, pas incohérence entre les deux, mais soit tu mets les trois et les trois là,ou sinon tu ne mets pas cette section-là, et puis tu mets directement là,ou tu mets directement les logos, ici.
00:03:23 :Ouais, ouais, ok.Après...Donc, ouais, tout ça...Ça, c'est pas du Wactate, par contre, ça, c'est du Django.D'accord, et ouais, du coup, je me disais, est-ce que tu as un GitHub,il est public, ton GitHub, ou il est privé ?
00:03:42 :Oui, attends, je te l'envoie tout de suite.Attends, sinon, je vais aller là-dessus.C'est bon, ça marche ?Bah oui, oui, bah oui, je suis bête.
00:03:49 :Et du coup, c'est...La liste des repos, il n'est pas là, dans les favoris au-dessus.C'est version 2, ouais, c'est ça.Version 2, ok.Et donc, là, t'as...
00:04:03 :Ouais, aussi, moi, j'aime pas trop...Dans mon...Je vois qu'il utilise PyCharm avec le ID, là.Je le mets dans mon Gitignore,j'aime pas avoir ces trucs-là dans le...
00:04:16 :Ouais, je me demandais, du coup...Bah, imagine, quelqu'un clone ton repo,est-ce qu'il a envie d'avoir ta config PyCharm ?Je suis pas sûr.Non, ouais, c'était ce point où...
00:04:26 :Ouais, ok, t'as raison.Je vais te poser la question, justement.Après, je crois que dans le Gitignore,ils disent que c'est le conseil de le mettre,mais moi, j'aime pas le mettre.
00:04:34 :Pareil, si t'as un point base code,j'aime pas le mettre.Et donc, ça, c'est ton projet global Django ?Ouais, il y a les deux, en fait.
00:04:47 :En fait, PyGapDevBlog, c'est vraiment le dossier projet.Ouais.Donc, j'ai lancé avec...Donc, t'as Settings.Ouais, ok.Donc, t'as fait un Django Admin Start Project.
00:05:03 :J'ai plus l'écran, là, je vois plus.Vous avez pas les...Les autres, vous voyez mon écran ou pas ?Ah, merde, qu'est-ce qu'il se passe ?
00:05:24 :C'est chez toi qu'il y a la téloche, Gabriel ?Non, j'ai mon micro qui est coupé.Donc, je parle pas.La personne qui a le micro ouvert avec la télé,s'il vous plaît, l'enlevez.
00:05:42 :Après, y a pas de souci.Si cette personne, elle veut parler avec le micro,c'est avec plaisir,mais c'est juste pour faire du bruit.T'inquiète, Seb.
00:05:50 :Ok, ouais, donc là, tu disais...Donc, ça, ce PyGuard DevBlock, c'est...C'est le projet de Wagtail.Ah, ça, c'est le projet de Wagtail.C'est pas le classique Django que tu fais,Django Start Project, enfin, Django Admin.
00:06:04 :Non, j'ai commencé, en fait,à initialiser le projet avec Wagtail,mais y en a qui font l'inverse, des fois.Alors, mes settings, en fait, t'as différents fichiers.
00:06:14 :Moi, je les fais totalement à la Django,c'est que je n'ai rien mis en base de production.Je les ai laissés vides.D'accord.Ah oui, après, pour tes environnements,tu vas toujours chercher dans ton...
00:06:26 :Alors, le petit piège qui peut vous apporter des bugs,c'est d'habitude, dans Django, c'est les...Wagtail utilise mes modules OS,c'est pas Passlib.Et moi, j'avais un bug, je comprenais pas,mais en fait, j'étais venu à ça.
00:06:39 :Ok.Ouais, c'est...Y a pas le Passlib, ok.Enfin, moi, j'ai jamais switché,je suis toujours resté sur OS.Ok, donc là, tu utilises tes variables d'environnement classique Django.
00:06:51 :Donc, en gros, là, le setting, ça change pas grand-chosepar rapport à Django classique.Non, ben non, parce que j'utilise pas comme on préfère Coldtail,mais j'avais pas envie, je préfère faire comme avec Django.
00:07:00 :Moi, quand j'avais regardé aussi avec Wagtail,j'aimais pas trop...Bon, après, c'est parce que c'est nouveau, tu vois,on est toujours un petit peu réfractaires aux changements,mais je sais pas, je trouvais que c'était un peu moins...
00:07:12 :un peu moins facile, du coup, j'ai pas...Donc, c'est quand même un projet Wagtail,et après, tu crées tes applications ici.Alors, ouais, c'est ça.
00:07:22 :Alors, les applications, c'est toutes des applis Wagtail,sauf Contact, qui est une application Django.Donc, ça, c'est classique.Je vois la... Ah, je sais c'est quoi.
00:07:34 :Alors, y a pas de modèle, y a que une vue avec un formulaire.D'accord.Et en fait...Non, je suis vieux, pardon.Non, je suis vieux, pardon.
00:07:45 :T'as vu, c'est un formulaire.C'est un formulaire de contact maison.Ah oui, c'était...Ouais, et t'avais...Et du coup, est-ce que t'as défini dans ton environnementton SMTP, etc., pour envoyer...
00:07:59 :C'est ça.Et Wagtail, t'as vu les settings...Non, non, je demande si t'as pas eu le problèmede configurer ton serveur SMTPpour envoyer des e-mails depuis Python Anywhere.
00:08:10 :C'est sur Python Anywhere, j'imagine ?Oui, oui, oui, mais non, aucun problème.Ok, bah, sachez quesi jamais vous voulez configurer un serveur SMTPdepuis un VPS type Linode,c'est un peu galèreparce qu'en fait, Linode, il bloque les portsqui sont utilisés pour faire les envois d'e-mails.
00:08:30 :Donc, sachez-le, si jamais vous arrivez pasà envoyer des e-mails depuis les serveurs SMTPdepuis Linode, typiquement, bah...En fait, il faut envoyer une demande spécialeen disant que vous voulez ouvrir les ports d'e-mailset que vous voulez envoyer des e-mails depuis SMTP,mais il va falloir que vous justifiez.
00:08:49 :En fait, ils vont vous demander,ils vont vous poser plusieurs questions en disant pourquoi.Ils vont s'assurer que vous respectiez bienles règles d'envoi d'e-mailsparce qu'en fait, ils ont peur.
00:09:01 :C'est pour prévenir de tout ce qui est spamdepuis leur serveur.Vous intéressez, c'est la partie blog.La partie blog, c'est vraiment une partie Wagtail.
00:09:12 :Quand tu vas dans... Alors, il n'y a aucun modèle.Si, il y a des modèles, mais il n'y a aucune vue,en fait, avec Wagtail.
00:09:17 :Moi, je fais aucune vue, je passe par les modèles.Donc, c'est des...Ça veut dire que c'est des classes BaseView, c'est ça ?Bah, regarde, quand tu es dans le modèle...
00:09:30 :Ouais, donc là, tu débrides...Tu débrides de page.C'est vraiment des objets Wagtail.Tu débrides de page.Et le ContentPanel, c'est ton champ intro.Donc moi, je fais l'introduction.
00:09:42 :C'est cet endroit-là.J'ai fait un ContentPanel.Et ça, ContentPanel, en fait,c'est ce qui va être affiché dans ton administration.D'accord.Par exemple, BlogPage, la classe qui est en dessous.
00:09:57 :Quand tu regardes, c'est pareil.Ça débride de page.Donc, j'ai tous mes champs.Alors, le StreamField, il est vraiment énorme.Ça, je suis trop fan.
00:10:07 :Le Body, c'est un StreamField.Ça, c'est un truc de malade.Moi, encore, je n'ai mis que deux paramètres dedans,mais franchement, il est...Pourquoi ?
00:10:19 :Il y a beaucoup de choses dedans que tu peux faire.En fait, un StreamField,tu peux mettre différentes choses.Moi, là, je n'ai mis qu'un RichTextFieldet un CodeBlock pour faire du code.
00:10:30 :En gros, tu écris,tu mets un petit plus,ça te rajoute un autre bloc où tu peux écrire,ainsi de suite, en fait.Ah oui, d'accord.
00:10:37 :Notion, tu as utilisé Notion ?Quand tu fais un slash ?Oui, comme WordPress, tu as des choses comme ça.Voilà.Tu fais un slash, tu as plein d'options.
00:10:45 :C'est pareil.Et puis, tu as le moteur de recherche qui est balèze.Du coup, j'ai mis un SearchField en champ,en bas.Comme ça, tout ce qui est dans l'intro et le Body,c'est compris dans le moteur de recherche.
00:10:58 :Le moteur de recherche, pour toi,admine ou pour l'utilisateur ?Non, pour l'utilisateur.D'accord.Donc, si par exemple,ici, je vais là.Je suis en recherche.
00:11:09 :On vient de rechercher.Oui.Tu as Properties.Properties, par exemple.Mon bouton, il faut que je l'envoie.Tiens.Properties.Ah oui, il va chercher tout ce qui...
00:11:21 :Voilà.Ah oui.Bon, là, à l'époque,il n'y avait pas de bloc de codeparce qu'il n'y avait pas encore le...Il n'y avait pas encore mis le StreamFieldet c'est des vieux blocs de code.
00:11:33 :Et celui-là, ça sera ton définitif ?Non.Le dernier article, tu le verras,il est beaucoup plus beau.Le formulaire contact avec Django.Le formulaire contact avec Django.
00:11:45 :Voilà.Moi, j'aime bien.Tu as les colorations syntaxiques.Tu peux choisir le langage.C'est top.Oui, c'est très propre.J'aime bien aussi.D'accord.Et donc, ici...
00:11:57 :Ah oui, ça, c'est ton...OK.Ouais, donc, en fait,ce qui est bien dans Wattel,c'est vraiment la gestion,l'édition de...l'édition de postes, etc.
00:12:11 :Mais est-ce que c'est vraiment...Ouais.Mais du coup, Wattel,c'est vraiment orienté édition, quoi.Ce n'est pas...Tu ne peux pas t'en servirpour faire autre chose.
00:12:20 :Ben, disons que pour des trucsvachement complexes,moi, je ferais du pur Django.Mais Wattel, après,je ne suis pas un pro.Je parie que je demande à Thierry.
00:12:27 :On doit faire un Zoom avec Thierryla semaine prochainepour parler de Wattel.D'accord.OK.Mais c'est vrai que moi,je trouve que c'est vraimentpour faire des chosesstyle WordPress édition,tu vois.
00:12:37 :Ouais, d'accord.Les street films,c'est assez chaud.Les pages,les objets page,c'est vraiment énorme pour ça.Ouais.Moi, quand j'avais regardéla première fois,je trouvais que c'étaitun petit peu...
00:12:48 :Tu vois, je trouveque ça se recherchequand même pas malet puis ça,après, c'est mon avisparce que je ne connais pasmais je trouvaisque ça complexifie.
00:12:57 :Mais bon,c'est parce que je ne connais pas.Peut-être qu'en se mettant dedans,tu vois,j'avais comprisqu'il y avait des héritagesde pages,de master page,etc.
00:13:06 :J'étais un peu perdu.Je n'ai pas pris le temps.C'est une relation, ouais.Tu as des relations parent-enfantentre les pages.Tu as des...Un peu comme les foreign case,tu as des parental case,tu vois,quand c'est...
00:13:16 :Ouais.Voilà,tu as des objets en plusque le Van Gogh,mais...OK.Moi, je trouve ça vraiment sympa.La mine,elle est vraiment géniale.
00:13:25 :Oui,j'avais fait un test.C'est vrai que c'est sympa.OK.Je crois que tu avais faitun article déjàsur...sur What Time,hein ?
00:13:36 :Il va sortir sur Duck String,mais il n'est pas encore sorti.Ah, d'accord.OK.Tiens-le au courantet puis bravopour ton projet.C'est super.
00:13:44 :Merci.Et puis,les autres,n'hésitez pasà aller voir...à aller voirle blog de Gabriel.Donc,ce que...Voilà.D'ailleurs,avant de commencer,est-ce que vous avezdes questions,des choses particulières ?
00:14:07 :Dites-moisi vous en avez.Je vous écoute.J'attends quelques minuteset puis sinon...Il est timide de se manifester,sinon je...Cinq,quatre,trois,deux,un.
00:14:34 :Allez,c'est parti.Attendez,je vérifie que je suis bienen enregistrement.Je regarde qui est présentdans la salle.OK.Bon,alors du coup,je ne sais pas si vous avezle programme.
00:14:53 :Aujourd'hui,on va parler un peude schéma ETL.Donc,c'est un schéma très classiqueen data engineering.Donc,ETL,c'est pour quoi ?C'est pour extract,transforme et load.
00:15:05 :Donc,je vous proposequ'on fasse un petitexerciced'ETL.Sachant quepour la partieload,on pourrait largementl'améliorer.Mais bon,c'est juste pour vous présenterun peu le conceptde ce qu'on faitquand on a du...
00:15:26 :C'est un peu chiant ça.Je suis obligé d'accepterà chaque fois la main.Donc,en fait,le schéma ETL,le principepour faire cet exercice,on va d'abord...
00:15:41 :parce que ETL,c'est extract,transforme,load.Donc,en fait,il faut bien extrairela data de quelque part.Donc,souvent,c'est par exemple,ça peut venir d'une APIou carrément,on va taper directementdans une base de données.
00:15:56 :Vous pouvez imagineravoir un serveursur lequel vous avezune base de donnéeset il y a vraimenttoute la data.Ça pourrait être,je ne sais pas,vous savez,les données open dataou la base de données.
00:16:07 :Donc,l'extract,on va aller chercher notre datadans cette base de données.Le transforme,en fait,on va prendre la dataet puis on va fairedes statistiques,on va manipuler un peula data,etc.
00:16:19 :Donc,voilà.Attendez,je revois un peu ce que...Voilà.Donc,en gros,on va faire ça.Donc,ça c'est pour l'extract.On va se faire une base de données.
00:16:33 :On va extraire la data.La transforme,on va un peu fairedes statistiqueset des groupementssur notre dataet le load,on va rechargernotre donnéetransforméedans un autre espacede stockage.
00:16:45 :Donc,pour ça,ce qu'on va faire,c'est qu'on vase créerun VPS.Donc,moi,je vais utiliser l'inodeparce que,bon,en fait,l'inode,je vous montrerai les tarifsmais c'est très peu cheret ça,s'il vous plaît,une instance,c'est que vous la supprimezet vous dites,
00:17:05 :salut Salvatore,pas de soucis,vous n'allez rien payer.C'est de l'ordre de,même pas un centime par heureet vous êtes plafonnésà 5 euros.
00:17:12 :Enfin,sur l'instance que moi j'ai choisie,on est plafonnés à 5 euros,à 5 dollarsplus précisément par mois.Voilà,donc,on va se créerune instance inode.
00:17:21 :Sur cette instance inodeavec Docker Compose,on va créernotre base de données MySQL.On va aussi se créerun Docker PHP MyAdmincomme ça,on peut administrerfacilement notre base de données.
00:17:30 :Donc,on va notammentimporter les datesdans une table MySQL.Ouais,DigitalOcean,c'est très comparableà l'inode,c'est un autre fournisseurde VPS,tu peux,tu crois que DocStream,il tourne sur un DigitalOceanou un Hostinger,enfin,non,pas Hostinger,si je crois que ça existe,mais c'est la même chose,
00:17:49 :oui.Au même titre que,en fait,l'inode DigitalOcean,ils sont,c'est des fournisseursde données,donc,ils sontdes fournisseursde donnéesqui sontun peu du même typequ'AWS,des choses comme ça,sauf qu'ils sont beaucoup plus grosqu'AWS.
00:18:07 :Voilà.Donc,en fait,avec Docker Compose,on va créerdeux containersqui vont pouvoirdiscuter entre euxgrâce,justement,au Docker Compose.Donc,le serveur MySQLavec la base de donnéeset le PHP MyAdminpour administrer.
00:18:23 :Et ensuite,alors,InfoManiac,c'estle serveurqui vaadministrerles données.Alors,InfoManiac,je ne sais plus,parce que je saisqu'InfoManiac,il fournissaitdes noms de domaine,c'était un fournisseurde noms de domaine,et je ne savais pasqu'il fournissaitaussi des solutionsde BPS,mais a priori,
00:18:45 :oui.Ah,oui,InfoManiac,c'est le fameuxfournisseurun petit peuécologique,tout en France,etc.,je crois,c'est ça.Et,grâce à PHPMyAdmin,on va pouvoirimporterles datasdans une basede données.
00:19:04 :Et donc,le schéma ETL,comme je vous le disais,c'est extract,transforme,load.Donc,pour faire l'extraction,on va utiliser,on va avoir notre basede données,et on va utiliserla librairiePyMySQL,dans Python.
00:19:19 :Pour transformer la data,classiquement,on va utiliser Panda,et pour faire le load,on va utiliser Paramico,qui est une bibliothèquequi permet de fairedu SSH,depuis Python.
00:19:28 :Voilà.Est-ce que ça vous vacomme programme ?Est-ce que vous voyezun peu où on va ?Ok.Alors,on va commencer par,attendez,je vais mettre là,parce qu'en gros,j'ai une instanceque je voudraisremontrer.
00:19:42 :Non,pas de raison particulièresur la permission du code.Quand on accèdeà un client,on est Weber,on est Weber moi,on cassera.Donc,on va simplementretirer notre client,fusionner le plansi on veut,pour répondresurles mots,en librarysclera,écouter,stratifying.
00:20:02 :Sur lessraser,y'a tellementde logicielsentre,client avatar,si je fais unbleed mode,sur l'image,c'est plutôtune habitudeque j'ai.Et,je ne suis passûr queparamicofonctionne,enfin,pas paramico,mais,bon,non,j'essaiede le trouver,mais j'ai pasvraiment de,j'ai pas de,y'a pas
00:20:30 :de raisonparticulière.Est-ceque vous voyezassez bienou est-cequ'il fautque je zoom?Ok,donc là,effectivement,je suis sur l'inodeet je suis sur la pagede création d'instance.
00:20:44 :Moi,j'en ai déjà unequi est créée,mais,là,on va en créerune nouvelle ensemble.Donc,c'est tout simple,vous allez dans l'inodeet puis create.
00:20:55 :En fait,normalement,vous arrivez survotre tableau de bord,mais moi,j'essaie justede masquerl'adresse IPde mon instanceque j'utilise,mais au pire,si vous l'avez,c'est pas grave,je vous fais confiance,je vais choisir Ubuntu.
00:21:10 :Donc,là,vous voyez,vous pouvez choisirplusieurs,vous avezplusieurs distributions Linuxdisponibles.Moi,j'utilise Ubuntula dernière.Ok.Select region,ben là,vous pouvez choisiroù est-ce que vous voulezbaser votre serveur.
00:21:27 :Donc,là,je vais choisir la France,mais par exemple,si vous voulez installerun VPNavecl'inode,moi,par exemple,j'ai un VPN,j'ai un VPNqui est à l'étrangeretvotre connexionà Internet,elle est chiffréeà partir,il y a un tunnelqui se créeentre vous
00:21:48 :et votre VPNet qui n'est pasforcément localisélà où vous voulez,enfin,là où vous êtes.Ok,donc,j'ai choisi la Franceet ici,donc,là,vous voyez un peules différents prixdes différents VPS.
00:22:03 :Donc,là,par exemple,si je prendsl'inode,en fait,c'est le plafond,ça,parce qu'en gros,ça vous coûte0,054 dollarspar heure.Donc,si,par exemple,vous avez un servicequi tourne tout le temps,vous allez consommer36 euros de dollarspar moisau maximum.
00:22:24 :Mais si,en fait,vous coupez les services,n'importe quel serviceà chaque fois,et bien,il va juste cumulerle nombre d'heuresque vous avez travaillépuis il va multiplierpar ce chiffre-là.
00:22:35 :Mais en gros,c'est que vous êtes sûrque vous n'avez pas de surpriseà la fin du mois.Vous ne pouvez pas dépasser36 dollars.
00:22:41 :Donc,là,vous voyez que c'est des instancesqui sont un petit peu chèresquand même par mois,ça commence à faire36 dollars par mois,mais vous avez deux CPU,80 gigas de stockageet 4 gigas de RAM.
00:22:51 :Donc,moi,ce que je fais sur l'inode,c'est que je vais icidans l'ongletshare CPUet je prends le nanode.Donc,le nanode,c'est la plus petite instancequi existe chez l'inodeet c'est la moins chère.
00:23:03 :Vous voyez,5 euros par mois,donc,ça reste1 giga de RAMpour une web appet c'est suffisant.Donc,on sélectionne ça.OK.Ici,moi,je vais lui donner un nom.
00:23:16 :Je vais direBoxStringDemo.Je vais lui mettreun password.Je vais lui direautre option,choisir mon propre password.Tout à l'heure,j'ai définiun passwordavec mon gestionnaireici.
00:23:28 :Donc,c'est un mot de passedémo.Donc,on varien faire de spécialet puis,on va créer.Donc,là,je vais la créeret je vais la mettreici,là,sur le côtéle temps qu'elle se créepour qu'on retournesur mon dashboard.
00:23:47 :Et donc,là,il est en trainde créermon instance.Donc,là,il est en trainde créermon instance.Donc,là,il est en trainde créermon instance.
00:24:02 :Vous voyez ici,provisioning.Donc,là,il est en trainde tout créer.Oui,Gabriel,je t'écoute.Oui,alors,j'y connais rienen VPS.Du coup,là,donc,tu as crééton VPS,je ne sais passi on peut direça comme ça.
00:24:23 :Oui,oui,si,c'est ça.Donc,tu as ton instance,voilà,et je ne sais pas,en fait,tu as plusieurs moyensd'accès.C'est ça qui est pas mal.
00:24:35 :Donc,là,en fait,il te donne l'adresse IPet c'est une IPqui est fixe.Donc,ça,c'est aussi intéressantpour tout ce que vous faites.
00:24:45 :Là,il te donnetous les moyensd'accéderà ton instance.Donc,là,il te dit c'est l'IP.Ça,c'est ton accès SSHet si jamais tu veux,tu as plusieurs moyensd'y accéder,soit par mot de passe SSHou sinonsi je vais ici,si tu fais,mais bon,
00:25:05 :on ne va pas rentrer dans le détailparce que c'est un peu compliqué.Je vais zoomer un peu.Tu peux générerune paire de clés.
00:25:10 :Donc,si tu fais SSHKeygain,en fait,tu vas générer une clé privéeet une clé publique.Et ça,en fait,ça te permet justementde te connecter en SSHsans avoir à taper ton mot de passeà chaque fois.
00:25:24 :Mais là,pour l'exercice,on va faire du SSHavec mot de passe.Donc,si tu veux tester,il te ditque ça,c'est ton SSH access.
00:25:33 :Donc,tu copies.OK.Donc,là,SSH,tu acceptes le footprintet là,tu mets ton passwordqu'on a défini ici.Donc,là,je suis connecté en SSHsur mon VPSet après,moi,je ne fais que comme ça.
00:25:50 :Je configure comme ça.Ce qu'on peut faire,on peutapp...Je me demandeest-ce quetu asune planète uniqueet pour un Windows,je n'aurais pas pu te fairecomme ça,je pense.
00:26:02 :Alors,pour Windows,il faut...Tu peux te connecter en SSHmais il faut un client SSHparce qu'il n'y en a paspar défaut sur Windows.
00:26:09 :Là,je suis sur macOS.Tu peux télécharger Ploutiqui est un clientet tu as aussiun truc sympaavec VS Code.Toi,tu utilises PyCharm,je crois,mais avec PyCharm,je pense que c'est pareil.
00:26:26 :Tu as un trucqui s'appelleExplorateur distantet en fait,tu peux définirune nouvelle configurationet en fait,quand tu vas ouvrirVS Code,tu vois,tu pourrais direbon là,ils sont obsolètesces trucs-làmais tu peux te connectericiet en fait,ton VS Code,il va s'ouvrir
00:26:46 :avec un environnementde travailcomme si tu étais en localmais ça va êtresur ta machine.Donc,c'est hyper...Tu vois,tu as l'adresse IP.
00:26:55 :Donc là,je suis connectéen SSH.Je vais installerOn va essayerde créerune nouvelle config.Je ne vais pas le faire làparce qu'en fait,sinon ça va faire apparaîtretoutes mes clés de configmais tu vois,si tu veux,tu pourras regarder.
00:27:25 :Donc,tu fais explorateur distant.Il faut que tu cherchessur PyCharml'extension correspondante.Ok,ok,d'accord.C'est une extension.Pour la question de Yannick,c'est une extension VS Code.
00:27:36 :Donc,tu vas dansextensionset puis tu fais...Je pense que si tu tapesSSHou mêmetu vois,remote SSH,tu en as plein d'autres.
00:27:46 :Je crois que la mieux,c'estexplorateur distantremote explorer,enfin bref.C'est hyper simple.Après,vous allez voir.Ok,donc,là,voici où on en est.
00:28:01 :Qu'est-ce qu'on a fait ?On a créénotre instance.On peut s'y connectercomme ça.Donc là,je suis dessus.Et donc nous,maintenant,ce qu'on va faire,c'est qu'on vadémarrerle serveurqui fait la base de donnéesetlePHP MyAdminpour administrer tout ça.
00:28:24 :Donc pour ça,je vais utiliserDocker Compose.Donc là,je l'avais déjà,je l'ai fait tout à l'heure.Je vais le faire ici,directement.Je vais l'écrireet puis,je vous explique ensuite.
00:28:35 :Je vais créermkdirtraversdémooket puis là,je vais créernanodockercompose.ymlEt là,je vais copierle Docker Compose.
00:29:01 :Et donc,je vais vous expliquerun peu ce qu'on fait là-dessus.Alors en fait,Docker Compose,je vous l'avais,j'en avais déjà parlé,maisc'est un moyende...
00:29:11 :Il ne faut pas le différencierde Dockerparce qu'en fait,je vous l'avais montréla dernière fois,on peut créerdes Docker Containersindépendantset on peut aussivouloir créerdes Dockers,des Containersqui sont,qui se parlent entre eux.
00:29:29 :Par exemple,si jamais vous,si vous avez un projet Djangoet que vous voulez le déployeravec Docker,vous allez avoir besoind'un Docker,d'un Docker Containerqui va lancerla base de donnéeset un Docker Containerqui va être le back-endde Djangode votre projet.
00:29:43 :Et en fait,Docker Compose,il permet ded'orchestrerles Containersparce que si vous lancezindépendammentvotre Docker Containerpour la base de donnéeset votre Docker Containerpour le Django,vous allez devoirles connecterl'un à l'autre.
00:29:58 :Il va falloir les mettresur le même réseau,etc.Donc, c'est possible,mais c'est un petit peu chiant.Docker Compose,c'est un moyend'orchestrer tout çafacilement.
00:30:07 :Et en fait,Docker Compose,vous définissezplusieurs services.Comme je vous l'avais dit,les Docker Containers,c'est vraiment orientésur les serviceset donc, en fait,avec un Docker Container,vous pouvez définirdifférents services.
00:30:19 :Donc, vous avezle mot clé Serviceset ici, vous définissez,donc, c'est un fichierYML.Donc, YML,c'est un peu,c'est un fichier de configet vous pouvez,ça fonctionnepar indentation.
00:30:30 :C'est un peucomme un dictionnaire,comme un JSON,mais sauf que là,le langage,il fonctionnepar indentation.Donc là,vous définissezvos différents services.
00:30:40 :Donc là,vous voyez quetous les servicessont orientéssur ce niveaud'indentation-là,c'est un service.Donc là, ici,si je sélectionne tout ça,ça, ça va êtremon servicequi correspondà ma base de donnéeset ici, plus bas,c'est mon servicequi correspondà mon PHPMyAdmin.
00:30:57 :Donc, c'est vraimentdeux containers distincts.Donc, je ne vais pasrentrer dans le détail,mais en fait,ici,on va lancernotre containerde base de données.
00:31:06 :Donc, on va lui dire,tu m'exposesle port 60.Donc, on va lui diretu m'exposesle port 60.Tu m'exposesle port 60.33.Ici,c'est les volumes.
00:31:16 :Donc, c'est justepour avoirdes datasqui sont persistantes.C'est-à-dire quesi jamaisvous ne mettez pasce genre de,si vous ne mettez pasde volumeet que vous lancezvotre container,donc ça va fonctionner,mais dès quevotre container,soit il va crasherou si vous rebootez
00:31:33 :votre instance,vous allez perdretoutes vos datas.Et donc, en fait,le fait d'écriredes volumes comme ça,ça permet de garderles datasd'une sessionà l'autre.
00:31:43 :Et puis mêmed'un boot à l'autre.Donc, je ne rentre pasdans le détail,ne vous inquiétez pas,ce n'est pas gravesi vous ne captez pasexactement tout,mais là,c'est vraimentles infos dont je vais avoir besoinpour me connecterà ma base de données.
00:31:56 :Là, c'est vraimentdes trucs bateaux,mais il faut les changer.Ici, il faut mettreun mot de passetrès particulier, etc.Donc, là, ça va êtrele nom de ma base de données.
00:32:04 :Ça, ça va êtremon serveur.Ici, en fait,le nom du servicedonne le nomdu serveur.C'est comme çaque fonctionneDocker Compose.Donc là, mon serveur,il va se nommer db,mais ça va êtreau sein de tout.
00:32:21 :En gros, ça,le nom de serveur db,ça va être uniquementaccessible à tous mes containersqui sont dans ces services-là.Par exemple,si j'essayais d'accéderà ce serveur dbdepuis un autreDocker Compose,ça ne marcherait pasparce que c'est uniquementtous ceux qui sontdans ces mêmes services-là
00:32:37 :qui comprennentce que ça veut dire dbou phpMyAdmin.Ok, donc ça,je pense que je vaispouvoir le lancercomme ça.Ouais, ça devrait aller.
00:32:50 :Donc, je sauvegardeet je quitte.Pour lancer tout ça,il suffit de faireDocker Compose,et db.Db, c'est pour detach.En gros,je veux qu'il tourneen daemon,c'est-à-dire en background.
00:33:06 :Je vais reprendre la mainaprès.Il faut que j'installeje n'ai pas encore installéDocker là-dessus.En fait, j'installe Dockersur mon instanceque j'ai crééeparce que je ne l'avais pasencore installée.
00:33:33 :Et donc là, maintenant,il faut que j'installe aussiDocker Compose.App, install.Donc là, en fait,ce qu'il fait,c'est qu'il va aller cherchercomme elle n'existe pas.
00:33:55 :Vous voyez, il fait pooling db.Donc, il va aller chercherl'image de MySQL.Donc, en gros,une image MySQL,c'est quoi ?C'est un containerqui a déjà été développépar l'équipe de MySQL.
00:34:11 :Ils ont containerisé, en fait,et dans cette image,il y a déjà tout, en fait.Vous avez la base de données,vous avez le serveur Apachequi permet de faire tournerla base de données, etc.
00:34:22 :Donc, c'est sympa.Ils nous ont facilité la tâche.Et donc, maintenant,si je vais voir,si je retourne voir mon Docker Compose,moi, ça veut direque j'ai fait tournermon phpMyAdminsur le port 8081de mon instance Linode.
00:34:38 :Donc, pour aller m'en convaincre,je vais aller voir sur...Donc, ici,mon instance Linode DocstringDemo.Donc, je vais copier mon adresse IP.OK.Et je fais 8081.
00:34:56 :Voilà.J'arrive sur phpMyAdmin.Et puis, vous pouvez,pour vous en convaincre,je peux vous mettre ici l'adresse.Allez le voir vous-même.Vous pouvez y accéder aussidepuis votre PC, normalement.
00:35:07 :Je vous laisse tester,mais normalement, ça devrait marcher.OK.Et donc, maintenant, ce que je fais,c'est que je vais aller me connecterà ma base de donnéesdepuis phpMyAdmin.
00:35:21 :Parce que, comme je vous l'ai dit,ça permet d'administrervos bases de données.Alors, what's connected ?Donc, ici, je vais voir ce que j'ai mis.
00:35:30 :Donc, je vous l'avais dit,le serveur sur lequel tournema base de données, il s'appelle DB.Donc, ici, je mets DB.Mon utilisateur,je vais faire un peu le bourrin,mais je pense que je vais y aller en route.
00:35:45 :Et ici, c'était mon password route.Ne faites pas ça.Accédez pas à vos bases de données en route.Allez-y en utilisateur.C'est plus safe.Donc, là, si je fais connexion,j'arrive sur mon interfaced'administration de bases de données.
00:36:01 :Donc, là, vous voyez ici,j'ai ma table qui a été créée.Je vais zoomer un peu.J'ai ma base de données appDBque j'ai définie ici, MySQL Database.
00:36:13 :Ce qui est pas mal avec phpMyAdmin,c'est qu'en fait, je pourraisadministrer plusieurs bases de données.phpMyAdmin, route à tous les droits.Mais c'est pour ça que c'est pas safeparce qu'en fait,si tu primes quelque chose, une bêtise,t'as pas de filet de sécurité.
00:36:30 :En gros, tu peux faire tout ce que tu veux.Donc, c'est bien,mais ça a les inconvénientsde pouvoir faire tout ce que tu veux.
00:36:37 :Ça inclut faire toutes les conneriesque tu veux aussi.Donc, il faut faire gaffe.Donc, là, par exemple,on pourrait imaginer avoirplusieurs bases de donnéesqu'on pourrait administrerdepuis une interface unique.
00:36:53 :Voilà, c'est assez sympa.Donc là, moi, ce que je vais faire,ce que j'avais dit, c'est que...Donc là, si je reviens à ma présentation,on a créé notre instance,on a fait notre Docker Compose,on a créé le MySQL et le PRQMyAdmin.
00:37:07 :Donc là, maintenant,on va importer toutes les datasdans une table.Et ça, c'est possible justementgrâce au phpMyAdmin.En fait, je vais populertoute ma base de données.
00:37:22 :Donc, vous allez dans phpMyAdmin.Vous avez un truc ici, Importer.Vous n'avez qu'à définirvotre fichier importé.Donc moi, je n'en ai pris pas rien ici.
00:37:30 :Je peux vous le montrer.C'est des datas que j'ai récupéréessur Internet.Dans Open Data, en gros,c'est les données d'espérance de viepar pays et par annéeen fonction du statut du pays.
00:37:46 :Voilà, c'est des vraies données.Et on pourra faire un petit peude data là-dessus.Nous, ce qu'on va faire,c'est qu'on a ce gros fichier CSVqu'on veut balancer dans une base de données.
00:37:59 :C'est ce qu'on va faire.Je vous remonte.Ici, vous avez dans phpMyAdmin,vous faites Importer.Vous pouvez choisir le fichier.Donc là, nous, on va choisirespérance.csv.
00:38:13 :On sait que nos datas sont séparéespar des points virgules.Les colonnes sont séparéespar des points virgules.Les colonnes, on s'en fout.Les lignes, elles sont définiespar des retours Shario.
00:38:30 :Et la première ligne contient,en gros, le nom de mes colonnes.Donc, vous cochez,utilisez ce petit truc-là.Et donc, vous faites Importer.Et là, vous voyez, bim,d'un coup, on a populénotre base de données.
00:38:47 :Je vais voir là-dessus.Qu'est-ce qu'il m'a fait ?Il m'a créé une nouvelle base de données.C'est bizarre, ça.Moi, c'est là.Ah oui, c'est parce que j'avais passélectionné ma database.
00:39:26 :Donc, je me mets dans Database.Je fais Importer.Je vais réimporter mon fichier.Mon séparateur de colonneset mon symbole de saut de ligne.Voilà.
00:39:46 :Donc là, maintenant,dans notre database AppDB,on a une nouvelle table.Et si je vais la parcourir,on a balancé, en gros,toute notre data.
00:39:56 :Donc là, pour l'instant,tout ce que j'ai fait,c'est pas que ça n'a rien à voir,mais on n'est pas encore rentrésdans le schéma ETL,parce qu'on a juste créénotre base de données.
00:40:09 :C'est fictif, en fait.Il faut imaginer que la base de données,ici, vous l'avez déjà sur un serveuret que c'est de là que vous voulezextraire les datas.
00:40:16 :Là, en fait, vous pouvez fairetoutes vos requêtes SQLque vous voulez.Donc là, on a ça.Et si jamais on voulaitImaginez qu'on ne veut qu'Afghanistan.
00:40:44 :Donc on pourrait direSELECTEDTWALL FROM SQUAREC'est quoi?On l'avait dit.On l'a appelé comment?PI.Comment on fait déjà?Je ne suis pas un pro de la requête SQL.
00:41:26 :On va demander à notre ami.Alors, comment il nous dit?Ah ouais, il me fait juste un égal.T'avais raison.Il faut peut-être que je mette.
00:42:00 :Où est-ce que je suis?Je peux exécuter ici.Donc là, il m'a sorti.Voyez, on a fait une requête SQLavec les datas,avec uniquement pays d'Afghanistan.
00:42:10 :Merci, Ludo.Après, on pourrait dire,on voudrait que les espérances de viequi sont au-dessus de 58.SELECTEDTWALL WHEREComment je l'ai appelé?ESPÉRANCE DE VIEEST PLUS GRAND QUE 58.
00:42:34 :On peut s'amuser longtempsavec les requêtes SQL,mais au moins dans PHP MyAdmin,vous pouvez comme ça accéder facilement à vos datas.Donc là, maintenant,on va travailler sur l'extraction.
00:42:49 :On va créer EXTRACTDATA.pyDonc là, c'est vraimentquand ici on a un trucEXTRACT TRANSFORM LOAD,on va s'occuper de la partie extract.Donc on va importer paye maestuelleet puis on va importer...
00:43:14 :Ah oui, il faut que je vous montreCONFIG PAR SERVE, c'est intéressant.Je vais l'appeler pipeline.confparce qu'en fait, ce qu'on fait,ça s'appelle un data pipeline.
00:43:29 :Parce qu'un pipeline,c'est un enchaînement d'actionsqui en fait, un input devient un outputet l'output devient un input pour une autre action.Voilà, et donc pour ça,on va dire maestuelle configet puis là, on va définir toutes nos...
00:43:52 :Je sais que je l'avais déjà défini,donc je vais le mettre ici.On avait dit, on était sur quoi ?Sur...Donc là, on va mettre notre host.
00:44:11 :Voilà, on est toujours sur le port 6030,il me semble.6033, ouais, c'est ça.Je fais, puis après,je vous explique ce qu'on fait ici.
00:44:28 :Je vais créer ce qu'il faut,donc on va dire...Comme d'habitude, je n'ai pas créémon environnement virtuel,mais on va le créer.Donc, je vais installer tout ce qu'il faut.
00:44:47 :Donc, c'était mysql.Je vais avoir besoin de pandas.Je vais avoir besoin de...Comment il s'appelait déjà,ce petit paire ?Paramiko.Et puis, le hipiton, j'aime bien.
00:45:10 :Ok, on est bon, je pense.Donc là, j'installe juste l'librairiedont j'ai besoin pour faire mon exemple.Et en fait, souvent,je crois que vous l'avez déjà dit,mais quand vous utilisez hipiton,je vous invite à recharger votre environnementparce que sinon, il galère.
00:45:36 :Il n'arrive pas.C'est une petite particularité de hipiton.Ce n'est pas grave.Ok, on va redémarrer.Je vais juste vous montrer en grosce que j'ai fait làavec le fichier pipeline.conf.
00:45:50 :Pipeline.conf, en fait,c'est un moyen de...Tout ce qui est les fichiers .conf et config.parser,ça permet justementd'importer des variables de configuration.Un peu comme on le fera avec un fichier JSON,mais là, on le fait avec un .conf
00:46:06 :et vous voyez que c'est quand même sympaparce que vous pouvez délimiterun peu toutes vos datas.Comme ça, je pourrais mettre un autre truc.
00:46:12 :Là, on mettrait juste perso dataet puis on mettrait des trucs.Je vais vous montrer comment on peut utiliserce fichier .conf avec config.parser.Si je fais hipiton,je vais définir un objet parser.
00:46:30 :Je vais faire import config.parser.Je vais définir un parserqui va être une instance de la classe config.parser.C'est un config.parser.Et puis, on va juste direparser...
00:46:57 :Je vais le faire ici, comme ça,il va m'aider dans l'assistant IA.parser égale config.parser.OK.parser.read pipeline.confet après, pour obtenir,vous faites simplement ça.
00:47:15 :Je vais le quitter.Je vais le relancer.Open.Extract data.Là, vous voyez, si je vais voir hostname,il m'a bien mis mon adresse IP que j'ai mis là-dedans.
00:47:29 :En gros, c'est un autre moyen élégantde récupérer des infos,d'avoir un fichier de config.Là, typiquement, ça, vous ne voulez pasle mettre dans votre GitHub, etc.
00:47:41 :Vous le mettez dans votre gitignore.Vous mettez le pipeline.confet comme ça, vous cachez tout ce qu'il faut.Vous ne voulez pas que les gens voient l'adresse IP.
00:47:50 :Il n'y a que vous qui la voient, le port, etc.Et ainsi de suite.Donc...Alors, ce qu'on fait là maintenant,c'est qu'on va récupérer toutes les datasdont on a besoin pour se connecterà notre base de données depuis Python.
00:48:11 :Ça va ? Vous suivez ou pas ?Parce que je vais peut-être vite,mais je ne vois pas trop de messages,donc dites-moi si ça va.
00:48:22 :Hostname...On va récupérer le username...Password...Et on a besoin de la database,et puis le port.OK.Donc là, on est pas mal.On a toutes nos datasdont on a besoin pour se connecter.
00:49:00 :C'est juste pour vous...En fait, ce mentorat-là,c'est pour vous montrer un schéma ETL classique.Si vous, à la fin...Enfin, c'est comme d'hab,je me répète à chaque fois.
00:49:10 :Mais si vous n'avez pas le temps à la fin,c'est pas grave, c'est juste histoirede comprendre ce qu'on fait.Donc là, on va créer une connexionavec notre base de données depuis notre Python.
00:49:21 :Donc, on va définir avec SQL Connect.On a besoin de tout ça.On a besoin du port, du username,du password...C'est comme ça ?
00:49:35 :OK. Bon, on va lui faire confiance.IP, database...OK. Donc là, on a tout ce qu'il faut.Ensuite, maintenant,on va dire avec notre connexion,on va créer ce qu'on appelle un curseur.
00:49:47 :Un curseur, en fait,c'est ce qui permet de faire des actionssur notre connexion.Voilà.Et puis, on va voir le résultat.On va voir déjà si ça, ça fonctionne.
00:50:04 :Je vais mettre un petit print des familles ici.Moi, j'aime bien mettre un plus iciquand je dis que la connexion a été établie.Et voilà.
00:50:19 :Et donc là, si je lance mon script...Donc là, en fait, ce que vous voyez,c'est que j'ai créé une connexionavec ma base de données ici,avec mon hostname, le nom du port,le username, etc.
00:50:32 :Donc ici, j'ai bien tout ce qu'il faut.Avec cette connexion, on crée un curseurqui permet, en fait, d'interagir avec la connexion.Et ici, ce qu'on va lui dire,c'est juste select étoile from ESP.
00:50:44 :Donc là, on va récupérer tout ce qu'il y adans la base de donnéesavec ces deux commandes-là.Donc ça, ça exécute la commande SQL.
00:50:51 :Et ici, ça stocke tout dans une variablequi s'appelle résultat.On va voir si ça fonctionne.Extract data, connected.Et normalement, si je fais résultat, voilà.
00:51:03 :Donc en fait, là, avec résultat,j'ai récupéré toutes mes datasde ma base de données.Donc c'est un petit peu bourrin,mais voilà, c'est l'extraction.
00:51:12 :Donc c'est la partie extract.Donc là, on peut considérerqu'on a fait notre job.Je vais même être un peu bourrinet je vais dire,def extract data from db.
00:51:34 :Comme ça, on va pouvoir faire un retour.Et puis on va pouvoir, voilà.Je vais faire un retour.OK.Donc là, on a géré la partie extract.
00:51:53 :Maintenant, on va s'amuseravec la partie transforme.OK.Je vais dézoomer un peu.Donc là, on a extract.Maintenant, on va fairela partie transforme data.
00:52:06 :Transforme data.py.Et donc là, on va s'amuseravec Panda, import Panda SPD.Et puis, justement,on va utiliser le résultatde l'extraction.Donc là, on va utiliserle résultat de l'extraction.
00:52:22 :Donc là, on va utiliserle résultat de l'extraction.Et puis, justement,on va utiliser le résultatde extract data.Donc, on va fairefrom extract data importextract data from db.
00:52:37 :Voilà.Et OK.Donc, je vais l'appeler raw data.Raw data égal machin.Bon, on va voir déjàce qu'on peut faire avec ça.Et puis, on va même créerun data frame directement.
00:52:55 :Je vais vous montrer en liveet puis, après,je le mettrai dans le script.Donc, si je fais hypothéton,je vais lancer le transforme data.
00:53:10 :On vérifie qu'on a bienrécupéré notre data.OK.Si je fais raw data,c'est bien le résultatqu'on avait tout à l'heure.Et vous voyez qu'avec data frame,on peut facilement...
00:53:21 :Donc là, en fait,c'est une liste de tuplés,de tuples.C'est presque une listeà un tuple de tuples, en fait.Si je fais type raw data,c'est un tuple.
00:53:38 :Et donc, length raw data,on a 2938 lignes, en fait.Et chaque ligne,si je fais raw data 0,c'est une entrée.Donc, en fait,on a 2938 lignes d'éléments.
00:54:00 :Enfin, on a 2938 élémentsqui composent,qui sont constitués chacunde quatre éléments.Et donc, avec data frame,on peut facilement mettre çasous forme de tableau,tout simplement,en disant que mon data frame,ça va être pd.dataframe
00:54:19 :et il suffit de faire raw data.Et donc, si je fais df,vous voyez qu'on a facilementmis sous forme de data framenos data, raw data.
00:54:28 :Ce que je peux faire,c'est aussi...Donc, je vais lui diredf égale pd.dataframe raw dataet puis on va lui diredf.columns égale...Donc, on a...
00:54:46 :Je vais mettre comme ça,pays,year,statut,pour le statut,est-ce que le pays esten voie de développement ou pas,et puis la note,différence de vie.
00:55:04 :Ok, et je relance,transforme data,et si je fais df,voilà, on a un data framequi est manipulable facilementavec Python.Donc, imaginons,qu'est-ce que vous voulez faire ?
00:55:20 :Est-ce qu'on pourrait se direque ce qu'on veut,c'est pour la transformation,on veut faire des statistiques,donc on va vouloir dire peut-être,si je fais un df.describe,
00:55:36 :ça ne va pas aller,on peut se dire,on aimerait bien avoirl'espérance de vie max par pays.Donc, pour faire ça,on peut faire facilementdf.groupby,
00:55:53 :on va grouper par quoi ?Par pays.Ok, et qu'est-ce qu'on va vouloir fairepar pays ?On va vouloir la note,comment je l'ai appelée,note SP,on va sortir le max.
00:56:21 :Donc, en fait,ce qu'on a fait là,c'est que vous voyez qu'en une lignede commande avec Panda,on a groupé par pays,et pour chaque pays,on a été chercher le maxde l'espérance de vie.
00:56:32 :Donc, je trouve que c'est assez puissant.On aurait pu très bien dire aussi,qu'est-ce qu'on peut faire ?On peut faire aussi,on peut dire je veux le max,je veux la moyenne,et puis je veux le minimum.
00:56:48 :Donc, pour ça,on peut dire, au lieu de faire,on peut dire,on peut utiliser la commandeagrégation, aggregate,et là, en fait,c'est juste un dictionnaire.
00:57:03 :Donc, on va lui dire,on va dire qu'à la note,pour le max,on va lui dire max,ça marche déjà,je vais tester.Il va me falloir numpy import,numpy add mp,il y a un doute,je ne sais plus comment on utilise,comme on utilise aggregate,en fait, ça permet de choisir
00:58:06 :quelle fonction on appliqueà quelle colonne, il me semble.J'ai l'impression que ça ira plus vite.Ah oui, c'est comme ça que ça fonctionne.Donc, en fait, je peux lui direqu'à la note,on lui dit la clé de la colonne,et là, on lui dit les fonctionsqu'on veut appliquer,
00:59:27 :donc là, je vais mettre max, min,et min comme ça pour moyenne.Qu'est-ce qu'il n'aime pas là,il manque quoi ?Qu'est-ce que c'est que ce délire ?
00:59:51 :Ah, c'est parce que les notesque j'ai mises sont des strings.Non, c'est bizarre ça.Attendez, excusez-moi, je vérifie juste.Ouais, attendez, j'ai un problème,donc, en fait, il faut que df note.
01:00:36 :D'accord, je comprends,je comprends le problème.C'est parce que j'ai pas des données uniformesdans les notes, mais bon, c'est pas grave,vous avez compris le concept.
01:00:47 :Donc, ce qu'on va dire,c'est qu'on va le mettre ici,on va dire df transformet donc on va dire que c'est df.groupVal,on va faire, on va grouper,on a dit par pays,et on va lui dire que sur la note,on va lui appliquer, on va faire fly,
01:01:25 :comme ça.Donc, si je fais df transform,ok, donc là on a, bon, je pense que le max iciil m'a juste sorti dans l'ordre,il a considéré que c'était un string,du coup le max il doit pas être bon,mais vous voyez le principe.
01:01:43 :Et donc ce qu'on fait maintenant,c'est qu'on va dire, on va le stocker,notre df transform dans un CSV,et on va lui dire avec la date,on va dire import time,et on va mettre ici la date,je vais mettre la date avec l'heure d'aujourd'hui,et j'aimerais bien peut-être,
01:02:46 :voilà je vais mettre l'heure comme ça,les heures et les minutes.Et donc si là je rerun, transform,voilà donc là, en fait,ce qu'on a fait c'est qu'on a fait un extract,ici, avec notre fonction,on va lire dans la base de données,on transforme, on fait nos statistiques, etc,
01:03:10 :et ici on obtient un fichier CSVqui est vraiment un fichier synthétiqueà la date, à l'instant T.Vous imaginez que la base de données,elle se remplit, je sais pas,toutes les semaines,et toutes les semaines vous faitesvotre extract transform,et ce que vous voulez c'est que
01:03:25 :à chaque fois que vous avez un transform,et bien vous allez faire un load.Ici, je vais l'importer,je l'ai écrit tout à l'heure.Pour le load, on va utiliser,comme tout à l'heure,notre remote host, tout ça, local file.
01:03:47 :Ici, bon c'est pas grave, celui-là,le script, il n'y a pas besoinde le connaître par cœur,donc on va prendre,comme ce qu'on a fait tout à l'heure.
01:04:00 :Je pourrais utiliser le pipeline.conf,mais là pour aller vite,on va juste faire ça.Donc en gros, ça, ce qu'il va faire,c'est qu'il va aller chercher notre fichier,donc là il s'appelle...
01:04:14 :Ce fichier il s'appelle comme ça.Donc il faut imaginer icique vous changez le nom du fichier,je ne sais pas, vous faites avec...Vous allez explorer votre dossier localet puis vous allez chercherle dernier fichier en date, par exemple.
01:04:35 :On pourrait imaginer une action crone,vous savez, un truc récurrentqui va aller chercher le dernier fichier en date.Donc en gros, là c'est une connexion SSH,ce que j'ai fait tout à l'heure, là, en SSH.
01:04:47 :Là, j'ai connecté un SSH.En fait, on fait pareil,mais depuis le fichier...En fait, là, je lui disque je vais vouloir qu'il aille mettre ma data ici.
01:05:10 :Et donc, ici, si vous voyez,je fais LS, vous voyez que je n'ai rien,j'ai juste mon fichier Docker Compose.Et si je lance ici mon script de load,run load data,le fichier a bien été transféré à l'autre distanceet si je retourne là sur mon serveur,j'ai bien mon fichier CSV
01:05:35 :qui a été uploadé sur mon instance.En gros, ce qu'on a fait,et c'est un schéma classique de TL,comme je vous l'ai dit, en data,en fait, si on a...
01:05:52 :Ici, là, j'ai créé une instanceet j'ai créé une base de données.Il faut imaginer que cette base de données,elle n'est pas forcément sur la même instance.
01:06:01 :Là, c'était pour l'exercice,mais ça peut être complètement ailleurssur un autre serveur.On a extrait la data brute,on l'a transformée et après,on la load sur un autre endroitqui nous allait bien.
01:06:14 :Peut-être que, je ne sais pas,je dis une bêtise,mais peut-être qu'en fait,sur votre serveur,vous avez une web app,Streamlit ou même Django,qui va aller afficher ces datas-là.
01:06:28 :En fait, sur votre web app,vous n'allez pas afficher les raw dataqui viennent de la base de données.Vous, ce que vous voulez,c'est afficher les statistiques.
01:06:36 :Donc, on pourrait se dire que,par exemple, votre web app,Streamlit,en fait, elle affiche les statistiqueset ça se met à jour automatiquementgrâce à votre pipeline de données.
01:06:48 :C'est-à-dire que,ici, votre process ETL,peut-être qu'il est récurrentet il a une programmationet il se lance chaque semaine.Donc, chaque semaine,vous allez faire un extract transform loadet du coup, chaque semaine,si votre web app tourne en continu,votre web app, on peut se direque tous les jours,
01:07:12 :elle met à jour le fichier,elle va chercher le dernier fichier en datepour l'afficher.Donc, tous les jours, il sera le même,sauf que toutes les semaines,il sera changéet du coup, il sera mis à joursur votre web app.
01:07:29 :En fait, cette étape du scrapping,ça pourrait être, par exemple,au niveau de l'étape extract.Ici, moi, j'ai été chercherdans une base de données,mais tu pourrais très bien direque tu vas extraire avec,comme tu dis, avec du scrapping.
01:07:46 :Donc là, tu récupères de la raw,de la data bruteet la data brute,après tu la transformescomme toi tu veuxet puis tu l'affiches sur ton dashboard.
01:07:56 :Et donc, en fait, ce principe-làde extract transform load,il est très importantparce que ça permet de,un peu comme on fait dans Django,de séparer chaque action.
01:08:07 :Vous avez l'extraction,c'est une chose,vous avez votre data bruteet puis après,vous faites une transformationde votre data,mais vous pouvez très bien imaginerque vous changez votre scriptde transform facilementet ça ne va pas tout péter,en fait, pour votre pipeline de data.
01:08:25 :Donc ça, vraiment,c'est ce qui s'appelle un pipeline,c'est-à-dire l'extraction.L'input, en fait,c'est la base de données,l'output, c'est la raw dataen mode list.
01:08:36 :L'input, après, pour le transform,c'est la listeet ça sort un data frameet après, le data frame,il crée un CSVqui est l'input pour le loadpour votre dashboard, par exemple.
01:08:56 :Voilà, c'est ce que je voulais vous montrer.Je ne sais pas si vous avez déjà entenduparler de Apache Airflow.En fait, ça permet,je vous ai dit qu'on pourrait lancerdes tâches crone.
01:09:11 :En fait, crone, sur un système Linux,ça permet de lancer des tâchesde manière planifiée.C'est-à-dire, vous dites,toutes les semaines,je veux que mon script se lanceet, en fait, l'attache Apache Airflow,c'est tout un systèmequi permet, justement,de gérer ce type de pipeline.
01:09:36 :Parce qu'en fait, le transform, par exemple,vous ne pouvez pas le fairetant que vous n'avez pas extrait.Et après, idem, le load,vous n'allez pas le fairetant que vous n'avez pas eu la transformation.
01:09:47 :En fait, Apache Airflow,il s'occupe de tout ça,c'est-à-dire de vérifierqu'il y a bien eu l'extraction,qu'il y a bien eu la transformationet il fait le load.
01:09:54 :Et Apache Airflow,il permet aussi de planifier ça.Donc, si ça vous intéresse,on pourra faire ça la prochaine fois.Je ne sais pas si je vous ai perdudans cette session de mentorat.
01:10:12 :Il n'y a pas eu beaucoup de réactions.Il n'y a pas de soucis.Mais dites-moi si c'était trop...Ouais.Merci, Ludovic, de ton retour.Ah, merde.
01:10:35 :Dites-moi honnêtement,est-ce que c'est le concept qui était compliquéou c'est moi qui n'ai pas bien expliqué ?Genre typiquement,si vous aviez vu le même sujet,mais avec Thibaut,est-ce que vous pensiezque vous auriez plus comprisou c'est vraiment le sujetqui était...
01:10:59 :Ouais.Merci pour votre retour.Simon, oui, je suis d'accord.C'est typiquement quelque chosequi se fait en entreprise.Le data pipeline,surtout quand vous manipulez de la data.
01:11:26 :Mais parce qu'en gros,si on regarde attentivementles scripts que j'ai faits,franchement,si vous regardez les formationsque fait Thibaut avec Django, etc.,on fait des choses beaucoup plus complexes.
01:11:40 :Là, vous voyez,il n'y a pas de décorateur.Il n'y a rien du tout.Il n'y a pas de classe.C'est juste des fonctions.On se connecte avec une base de données.
01:11:47 :Mais en fait, c'est tout ce qu'il y a.Bon, après, celui-là,je vous l'accorde,il est un petit peu plus technique,le paramico, la connexion SSH.
01:11:54 :Et c'est vrai qu'il y abeaucoup de concepts différentsà aborder ici.Mais l'idée,c'est de vous montrer toujours,de faire découvrir des choses.Peut-être qu'un jour,vous allez avoir une base de données.
01:12:10 :Vous allez vous dire,comment je fais pour la remplir ?Vous allez penser à ça.Vous dîtes, ah oui,avec phpMyAdmin,je peux importer facilementun fichier CSV.
01:12:17 :Après, vous allez vous dire,comment je fais mes statistiques ?Oui, avec Panda,je peux faire un groupe buy, etc.Au moins,chacun peut y trouver son compte.
01:12:35 :Je ne sais pas si la prochaine fois,je ferai du Apache Airflow,parce que du coup,Apache Airflow,je vais le déployeravec un Docker Container,avec Docker Compose,et puis après,on va manipulerça,mais c'est trop complexe.
01:12:55 :Peut-être,on ne fera pas ça.Je ne sais pas,je n'ai pas envieque ce soit un calvaire pour vous.Ce n'est pas le but.
01:13:03 :Mais si ça vous intéresse,dites-moi,je ferai une démode Apache Airflow,comment ça marche.Sinon,je trouve autre chose.Oui,c'est le but.Pour moi,c'est la philosophiedes mentoratsque j'anime.
01:13:29 :Oui,ok.J'aurais peut-être dû préciserun petit peu plus.Après,je n'ai pas envie,quand j'annonce un programme,de vous dire,attention,ça va être un concepttrès avancé.
01:13:52 :Vous allez rien comprendre.Parce qu'à ce moment-là,sinon,moi,je ne peux pas.Je pense que c'est dommageparce que sinon,après,vous ne découvrez pasles choses.
01:14:02 :Et puis,voilà,ça fait un peu sortirde sa zone de confort.Là,il n'y a pas de pression.Je vous montre un truc.Voilà,l'idée,ce n'est pas que vous le fassiezjuste après.
01:14:15 :Je comprends,Yannick,ce que tu dis.Mais,je ne sais pasce que vous en pensez,mais,il y a des mentoratsqui sont plus orientésdébutants.
01:14:29 :Là,j'avoue,c'était un petit peuplus avancé.Voilà,en fait,au plus on ferad'exemples de Docker,etc.,je pense au plusvous comprendrez.Mais,voilà,je comprends,Yannick,que tu disque c'était complexe.
01:14:48 :Je ne critique pas du tout.Bon,l'idée,c'est que vous ayezun bagageet qu'après,vous en faitesce que vous voulez.Peut-être,Yannick,tu aimerais,je ne sais pas,je pense à toi,mais peut-êtreun peu plus dePanda.
01:15:12 :Peut-être,t'aurais aimé.Je pourrais en faire plusla prochaine fois.Un formulaireavec tous les conceptsabordés.Ouais,c'est une bonne idée.Ah oui,un sondage.
01:15:26 :Genre,peut-être vous aimeriezun sondageavant le Mentoraet puis,je mets plusieurs idées dedans.Ouais,vas-y,tu peux prendre la parole,Simon.Ouais,en fait,ce que je voulais dire,c'est que,là,c'est vrai que cette sessiona abordé pas malde petites thématiquesen même temps.
01:15:49 :Tu vois,il y a eu des bases de données,il y a eu du SQL,il y a eu plein de choses.Ouais.Et,en fait,donc,l'ETL,en lui-même,s'inscrit,enfin,nécessite des pré-requis.
01:16:03 :Et voilà,du coup,on a vutous ces pré-requis-là.Peut-être,tu vois,les lister,soumettre un sondageà ceuxqui ont participé déjà.Et,en fait,c'est ça,c'est ça,c'est ça,c'est ça.
01:16:19 :Et,en disant,ben voilà,donc là,dans cette session-là,on a vu Docker,on a vu les bases de données,on a vu ceci,on a vu cela.
01:16:29 :Et,quels sont selon vousles sujetsqu'il faudrait déjà approfondirdans un premier tempsavant de passersur plus évolueraprès,quoi.Comme ça,en fait,ben là,déjà,tu nous as montréplein de choses.
01:16:44 :L'idée,c'est d'identifierquels sont les sujetsqui font l'unanimitéen premieravant de pouvoir poursuivrepour une compréhensionplus globale,quoi.Ouais,ouais,je suis d'accord,ouais,c'est une bonne idée.
01:16:58 :En fait,je pense que,par exemple,ce qu'on a fait là,là,je vous ai parléde Apache Airflow,etc.,mais je pense quec'est une,ce que vous dites,et je pense quevous avez raison,c'est,si je vous montreApache Airflow,etc.,
01:17:15 :ça va être pareil,en fait,on va pouvoirdéployer,etc.,pareil pourMySQLet puisphpMyAdmin,en fait,remanipuler un petit peuces concepts-làavant,et puis,on pourra se refaireun pipeline ETLquand on aurarevu les choseset puis,on fera quasimentla même chose,en fait,
01:17:37 :mais comme vous l'aurezdéjà vu,peut-être que vouscomprendrez un peu pluset puis,ça sera plus simplepour vous de poserdes questions.En fait,si vous découvrez le truc,c'est vrai que c'est compliqué,je pense,de poser des questions,mais,ouais,bonne idée,merci,Simon.
01:17:55 :Vas-y,Gabriel,je t'en prie.Rien,c'est une découverte,c'est pour ça,mais tu vois,je reprends l'exemple,il y a,quand j'ai commencé,il y a quoi,il y a 11 mois,tu vois,il y avait des mentoratsoù j'avais du malà suivre,mais en fait,je pensais que la répétition,
01:18:13 :en fait,là,je reprends l'exempledu système lead,au début,c'est quoi ce truc,tu vois,et au final,en fait,maintenant,j'utilise le boulot,en fait,c'est la répétition des mentorats,en fait,à chaque fois,je pense qu'on intègre des choseset on a des points de repère
01:18:31 :pour après.Ouais,bah,c'est bien,merci pour ton retour.C'est vrai que,souvent,je me dis,en mentorat,ah,mais ça,on l'a déjà vu,et tout ça,franchement,je ne vous retiens pas.
01:18:46 :Merci à tous pour votre présence.Mais,ouais,la répétition,je pense que c'est bienquand on génère les fausses datas,etc.,à chaque fois,bah,on le refait,mais je pense que c'est un bon exercice.
01:18:57 :Donc là,à chaque fois,on fait un docker,on le redéploie.Là,je vous ai montré rapidementcomment on utiliseles points conf,comme ça,avec le parseur,bah,peut-être qu'on pourra justefaire une session dédiéepour ça,la prochaine fois.
01:19:12 :Voilà,donc,j'essaie de montrer plein de trucs,et puis après,on revient en détail,mais je pense que c'est une bonne idée,là,ce qu'a dit Simon,de voir des concepts un peu généraux,puis après,de revenir dessus en détail,et puis,voilà,essayer d'avoir une continuitéun peu dans les mentors.
01:19:27 :Bon,bah,voilà pour moi.Si vous n'avez pas de questions,bah,on va s'arrêter là,je pense.Je vais arrêter la présentation.Donc,voilà,c'est tout.
Aucune occurrence trouvée pour « ».