Découvrir la POO Python par les objets
Session du 29 février 2024 à 20h00
Data Science & IA
Fichiers & Système
Programmation Orientée Objet (POO)
Deviens membre Premium
Cette session de mentorat est réservée aux membres Premium. Rejoignez-nous pour accéder à toutes les rediffusions des sessions de mentorat !
Premium
- +100h de formations
- +180 exercices de code
- +100h de mentorats en rediffusion
- 20 projets
- Mentorats groupés hebdomadaires
- Support individuel avec nos mentors
Découvrir la POO Python par les objets
Aujourd’hui une session orientée un peu plus débutants:
On va essayer de parcourir quelques concepts pour montrer l'intérêt et la puissance de la programmation avec Python.
-
création de Classe pour créer ses propres objets
-
manipulation de fichiers, dossier, automatisation de rangement …
-
tracer des graphiques (matplotlib et plotly)
00:00:00 :Ok, donc là c'est bon et je vais vous partager mon écran. Il faut que je désactive le stage managersinon c'est la merde.Est-ce que vous voyez mon écran ?
00:00:26 :Ok, alors pour la programmation orientée objet, on va faire un petit pro extract data,je vais prendre l'exemple. Je vais zoomer un petit peu pour vous. Je suis sur Mac, pour ceux qui n'utilisent pas
00:00:56 :Hicham, est-ce que vous savez comment on fait pour zoomer facilement sur macOS ?Est-ce que vous savez ? Sinon je vais repasser sur VS Code, c'est pas grave.
00:01:39 :Et bien décidément, c'était bien dans Vue. Et ensuite, increase font size, non c'est pas ça, apparence peut-être.Non plus. Je vais utiliser ça, increase font size.
00:02:28 :Zoom IDE, ok.C'est ça, tu cliques dessus, maintenant tu peux choisir la taille.Ah super, merci beaucoup. Est-ce que c'est mieux pour vous ou est-ce que vous voulez encore plus ?
00:02:39 :Ok, merci beaucoup, désolé vraiment pour tout ce bordel. Juste pour la petite histoire, j'ai dû reformater mon Mac, et j'utilise PyCharm maintenant,j'essaie de me forcer à utiliser PyCharm parce que comme je fais du développement avec Docker, c'est beaucoup plus pratique.
00:03:01 :Juste pour la petite histoire.Alors pour ce qui est de la programmation orientée objet, un objet c'est quoi dans Python ?Donc typiquement quand vous créez une liste, et que vous dites ma liste égale 1, 2, 3.
00:03:21 :Donc ça en fait, ce que vous faites, c'est que vous créez automatiquement un objet de type liste.Et c'est un truc qui est implémenté directement dans Python, ce n'est pas moi qui ai créé cet objet.
00:03:30 :Donc là si par exemple je fais Python en mode interpréteur et que je lance mon code.Je vais couper ma caméra, il n'y a pas besoin.
00:03:43 :Si je lance ce code là, donc là je l'ai lancé et que je fais ma liste.J'ai bien mon truc et si je fais par exemple ma liste, on va dire le premier élément, ma liste 0, j'accède au premier élément.
00:03:57 :Et en fait le fait de faire un entrecroché 0, c'est une méthode de l'objet ma liste,qui a été déjà implémenté par les développeurs de Python, par le langage en lui-même.
00:04:11 :Donc tout ce que je vais faire quand je vais faire par exemple ma liste.pop et qu'on va dire 0.Donc là en fait si maintenant je retourne voir ma liste, j'ai plus que 2, 3 parce qu'en fait pop ça m'a retiré l'élément à l'index 0.
00:04:32 :Donc en fait pop c'est une méthode qui a été développée dans la classe ma liste.Donc tout ça pour dire qu'en fait il existe plein d'objets qui sont déjà implémentés dans les classes built-in de Python.
00:04:47 :Donc typiquement si je fais a égale 2 et que je fais type a, en fait il va me dire que c'est un objet,donc c'est une instance de la classe entière.
00:04:59 :Pareil si je fais s égale hello et que je fais type s, donc là c'est une instance de classe string.Et en fait le fait d'avoir la programmation objet c'est hyper puissant parce que vous pouvez créer vos objets, vos classes custom.
00:05:24 :Là typiquement on a fait un entier, une chaîne de caractères etc.Ça peut ne pas correspondre à vos besoins.Peut-être que vous avez besoin de vous faire une classe avec des méthodes qui sont plus appropriées à ce que vous faites.
00:05:47 :Donc on va se créer notre propre classe qui va nous permettre de faire nos propres objets.Donc imaginons on va se faire une classe qui va être une classe qui permet de faire des formes géométriques.
00:06:01 :Donc pour ça on va se définir une classe qui permet d'écrire, de faire des rectangles.C'est le truc un peu bateau mais c'est un bon exemple.
00:06:10 :Donc on va dire rectangle et en fait pour définir une classe spécifique nous-mêmes, on définit comme ça.Donc on a le mot clé classe et on définit le nombre de notre classe.
00:06:21 :Par convention on a la classe qui commence par une majuscule et elle se définit comme ça.Et souvent ce qui va venir après ça va être un constructeur.
00:06:33 :Donc en fait le constructeur c'est ce qui permet de construire l'objet quand on l'instance.Je vais vous dire exactement ce que ça veut dire.Donc là on va dire par exemple rectangle, on va définir A et B pour les côtés du rectangle.
00:06:49 :Et on va dire que self.A égale A et self.B égale B.Donc là tout simplement quand je vais créer une instance, ça peut paraître barbare tous ces mots là pour ceux qui ne connaissent pas et qui débutent.
00:07:05 :Une instance de la classe.En fait une instance c'est quoi ? C'est un produit de ce qu'on fait.Il faut imaginer que la classe en fait, ça là ce qu'on fait c'est une usine un peu.
00:07:18 :Et quand on va faire des objets de cette classe, ça va être les produits que peut sortir l'usine.Donc en fait tout ce qui se passe là dedans, c'est une fabrication de l'objet et on lui met tous les attributs qu'on veut.
00:07:32 :Et nous ce qu'on récupère c'est le produit.Donc le produit ça va être une instance.Donc là tout simplement j'ai créé ma classe.Si je rentre dans mon interpréteur et que je crée un objet.
00:07:46 :Donc je vais dire par exemple mon rectangle c'est mon rectangle.Et puis là je vais dire 2 et 3.Et donc là maintenant si je fais rectangle.A.
00:07:58 :Donc en fait ce que j'ai fait, c'est que j'ai défini un objet de ma classe rectangle.Et ici le constructeur c'est toujours quasiment la première méthode que vous allez avoir quand vous faites une classe.
00:08:16 :Quand je fais rectangle égale rectangle, ça me permet de définir directement un objet avec le côté A et le côté B.Là le fait de mettre entre parenthèses ça veut dire que ça va être les paramètres que je vais rentrer quand je vais faire rectangle 2, 3.
00:08:33 :2, 3 pour dire que A vaut 2 et B vaut 3.Et ici je lui attribue directement quand je dis self.A égale A.Ça veut dire que quand je fais à mon objet rectangle, quand je fais ça rectangle.A, je veux que tu l'attribue.A, je veux que ça soit la valeur A.
00:08:56 :Ça aurait très bien pu être ça en fait.Ça, ça n'a pas d'importance si j'écris toto 1 et toto 2.Peut-être pas des chiffres mais je vais dire toto et tototo.
00:09:12 :Toto et tototo.Et que là je dis bah là c'est toto et là c'est tototo.Ok, donc là je quitte, je reviens.Donc là c'est exactement pareil, il ne va pas y avoir de différence si je fais rectangle égale à rectangle 2, 3.
00:09:29 :Et que je fais rectangle.A, j'ai toujours 2 parce qu'en fait toto, ici vous voyez que ça a été 2.Et donc toto il l'a pris là et il a attribué cet attribut A au côté A de mon rectangle.
00:09:44 :Je vais plutôt mettre largeur et longueur pour un rectangle, c'est plus parlant.Largeur et la longueur.Ok, donc bon là je vais revenir si vous me permettez à des trucs un peu plus corrects.
00:09:57 :Parce que toto et tototo, ça va 5 minutes mais...Voilà, A et B, voilà.Est-ce que déjà ça, ça va pour ceux qui connaissent un peu, qui sont déjà fait un tour sur la plateforme, j'imagine que oui.
00:10:15 :Mais pour les autres, les débutants, etc. dites-moi si ça vous parle ou si vous ne comprenez rien du tout à ce qu'on fait.Il n'y a pas de soucis, on peut revenir plus en détail.
00:10:24 :Donc ça c'est vraiment le truc le plus basique que je peux vous donner sur la programmation orientée objet.Je vais juste faire un highlight de la syntaxe.
00:10:38 :Maintenant, ok, très bien Rémi, merci.Donc là on a créé notre objet.Donc ce qui peut être intéressant maintenant, c'est de pouvoir calculer des choses pour notre objet.
00:10:49 :Donc là nous on a défini une classe rectangle qui a une largeur et une longueur.On aimerait pouvoir définir, calculer automatiquement l'aire de ce rectangle.
00:10:58 :Donc pour ça on peut se définir une méthode qui va être calcule de l'air.Et on va dire qu'on va faire retourne self.largeur x self.longueur.
00:11:16 :Donc là déjà on fait des choses un petit peu plus intéressantes.On va créer un rectangle.Pour créer un rectangle, pour le construire, qu'est-ce qu'on fait ?
00:11:22 :On lui donne une largeur et une longueur et on va calculer son air ici.Et en fait ça c'est une méthode, on va faire sa longueur x la largeur.
00:11:32 :Et pourquoi à chaque fois on met des self partout ?Parce qu'en fait ici on est sur le constructeur.Donc là ce que le self ça veut dire, en anglais c'est en gros soi-même, c'est l'objet lui-même.
00:11:43 :Si vous avez déjà fait du Java je crois, ou d'autres langages de programmation, ça peut être ZIS.En fait c'est juste pour dire que c'est l'objet lui-même, on lui attribue.
00:11:52 :Là vous voyez, si je fais rectangle ici, là quand j'écris rectangle égale quelque chose,en fait le self que vous voyez là, c'est l'instance ici qu'on crée, rectangle.
00:12:04 :Là on est en train de lui dire que, parce que ça en gros c'est de l'abstraction.L'instance n'est pas encore créée, mais c'est comme s'il y avait une espèce de case vide.
00:12:15 :Et ça veut dire que le jour où je vais l'instancier, donc quand je vais faire rectangle égale grand rectangle,je veux que cet objet lui-même se produit, il ait cette largeur et cette longueur.
00:12:26 :Je pense que vous m'avez compris.Et donc là on a un rectangle, et ce qui est pas mal avec la programmation orientée objet,c'est qu'on peut dire rectangle point calculate R, et donc là il me sort 6, 2 fois 3.
00:12:41 :Donc on a des choses qui commencent à être intéressantes.Ici ce que je peux vous montrer aussi, c'est que là sur la classe, on a défini une méthode spéciale.
00:12:54 :Pourquoi spéciale ? Parce que vous voyez qu'elle a double underscore, parce que c'est une méthode spéciale.Là vous voyez que pour calculer l'R de mon rectangle, j'ai fait calculate R.
00:13:05 :J'ai dû appeler explicitement cette méthode.Vous voyez qu'à aucun moment j'ai appelé spécifiquement init,parce que le fait de définir une méthode spéciale comme ça, ça permet de faire un peu comme des raccourcis.
00:13:20 :En fait si je fais ici, quand j'écris rectangle égale rectangle, 2, 3, je vais l'appeler rectangle 1,vous voyez qu'en fait j'ai construit un rectangle.
00:13:35 :Mais j'aurais très bien pu aussi dire rectangle 2 égale rectangle,et là j'aurais pu appeler la méthode de constructeur, qui est comme ça,et donc là je lui disais 2, 3.
00:13:51 :Il n'a pas pris... Est-ce que je suis en train de vous dire une bêtise ?Je crois que je suis en train de vous dire une grosse bêtise.
00:14:08 :Ce que je voulais vous dire en fait, c'est que quand vous faites ici rectangle égale rectangle, 2, 3,en fait il appelle automatiquement cette méthode-là init.
00:14:19 :Et si par exemple, ah oui c'est ça que je voulais vous montrer,si je fais juste rectangle pour vous afficher l'objet, vous voyez que vous avez un truc un peu barbare.
00:14:28 :Parce qu'en fait je n'ai pas défini de méthode spéciale qui me permette d'afficher mon rectangle.En fait ça c'est juste pour montrer que vous avez un objet qui est à l'endroit de cet espace mémoire ici.
00:14:39 :Mais voilà, vous n'avez pas plus d'informations.Si vous voulez, quand vous faites print rectangle, normalement vous allez obtenir la même chose.En fait quand vous faites un print rectangle, vous avez juste la visualisation par défaut de votre objet,ce qui n'est pas très propre.
00:15:02 :Donc si vous voulez afficher votre objet de manière beaucoup plus sympa,il faut définir une méthode spéciale qui est le str.Parce qu'en fait le str, c'est la méthode qui est appelée quand vous faites un print.
00:15:14 :Donc on va dire ici, retourne, f, on va mettre une f-string.Et on va dire, voici ton rectangle.Et puis là on va mettre self.largeur égale et self.longueur égale.
00:15:55 :Voilà, ça devrait être bon.Donc là je recrée mon rectangle.Et maintenant si je fais rectangle,c'est parce qu'il faut définir le repr.Voilà, en fait c'est pour pouvoir afficher l'objet, c'est la méthode spéciale repr.
00:16:36 :En fait la différence entre repr et le str, c'est quand je fais juste rectangle et que je fais retourne,c'est la méthode repr qui est appelée.
00:16:52 :Si je fais par contre print rectangle, c'est la méthode string qui est appelée.Donc voilà la différence.Et donc il y a un truc, ça c'est intéressant dans les f-strings.
00:17:07 :Vous pouvez faire, par exemple si je fais a égale 2 et que là je définis une f-string.Donc le f-string pour ceux qui ne connaissent pas, ça permet de remplacer dans une f-string la valeur de a.
00:17:21 :Vous savez des fois, avant quand on développait en python on pouvait écrire comme ça il me semble.C'était, on disait la valeur de a et puis il me semble qu'on mettait un pourcentage s et puis on disait format a.
00:17:45 :Non c'était pas ça, je ne sais plus exactement.Je ne sais même plus, ça fait tellement longtemps que je n'ai pas utilisé ça.C'est aussi entre crochets non ?
00:17:59 :C'est quoi tu dis ?Entre crochets, non pas les crochets.Mais ça c'est ce que je voulais vous montrer, le f-string.Là tu mets le a ouais.
00:18:09 :Bref, ça c'est ce que je voulais vous montrer.Mais moi ce que je voulais vous montrer c'est comment on faisait avant qu'on n'avait pas les f-strings.
00:18:18 :On faisait avec un format, enfin de toute façon c'est pas grave si on ne s'en sert plus.Tu vois c'est ça, donc ça c'est bien ce qu'on a dit.
00:18:26 :C'est les f-strings, c'est ce qui permet de mettre directement.Et il y a un truc qui est pas mal aussi, parce que là j'ai écrit la valeur de a et vous pouvez écrire comme ça s, f.
00:18:37 :Et donc là on peut dire, on peut mettre directement, si je fais comme ça.Si je fais a égal, en fait il va m'écrire a égal 2.
00:18:52 :C'est pas mal parce que comme ça vous n'avez pas besoin de renoter la valeur de a.Parce que là vous voyez j'ai dû écrire la valeur de a à la main.
00:19:01 :Je ne sais pas si vous me comprenez, mais si je dis par exemple toto égale 25et que vous voulez une nouvelle f-string, vous dites la valeur.
00:19:13 :Comme ça il m'écrit directement la valeur toto égale 25.C'est plus pratique si vous avez plein de variables.Si j'avais fait la valeur à toto, comme ça il me met directement la clé et la valeur, donc c'est plus clair.
00:19:37 :Donc si on en revient ici à ce que je disais, c'est que là on a fait un objet, on a ses paramètres pour la construction,on a une méthode qui permet d'afficher plus facilement notre objet.
00:19:48 :Voici ton rectangle, largeur, machin.Et calculer l'air.Est-ce que déjà vous voyez qu'il peut y avoir un petit problème dans ce qu'on fait,c'est pas très sécure ce qu'on fait quand on crée notre objet.
00:20:03 :Est-ce que quelqu'un voit qu'est-ce qu'il pourrait y avoir comme problème ?Non, écoutez je vais vous montrer.Imaginez que vous définissiez un rectangle et que vous dites rectangle égale 2, 3,on va garder le même que tout à l'heure.
00:20:32 :Et que je dise, l'air de mon rectangle, je dis c'est rectangle.calculaire.Donc là air rectangle, c'est ça.Et que je vais même le faire ici, je vais même dire, ah ouais je vais plutôt le faire comme ça.
00:20:59 :Je vais reprendre un petit peu mon exemple, je vais modifier.Et donc on va dire, imaginez qu'on veut directement calculer l'air dans le constructeur.On va dire qu'en fait l'air c'est 1xB, donc là je reviens, je relance mon truc,et donc là je recrée mon rectangle.
00:21:22 :Et donc là si je fais rectangle.air, je suis content, 6, voilà.Et est-ce que, en fait tout à l'heure je vous ai dit est-ce qu'il y avait un problème,est-ce que là vous voyez maintenant où est-ce qu'il pourrait y avoir un problème ?
00:21:36 :Parce que ce que je vous ai montré tout à l'heure on ne pouvait pas tout à fait le voir,mais là dites-moi est-ce que vous pouvez voir un petit peu un problème dans notre classe,dans notre objet, qu'est-ce qu'il pourrait se passer ?
00:21:48 :Je vais vous le montrer, je vais le quitter parce que je ne suis pas sûr qu'il était bon.Donc imaginez on crée notre rectangle, 2, 3.
00:22:05 :Non ce n'est pas ça le problème, ouais si là on s'approche.Et donc en fait regardez je crée mon rectangle, je dis qu'il fait 2, 3,et je fais rectangle.air, voilà je suis content j'ai 6.
00:22:21 :Mais qu'est-ce qu'il se passe maintenant si je fais en fait un objet,vous pouvez quand vous avez un objet vous pouvez après modifier ses attributs.
00:22:30 :Si je fais rectangle.b égale 5, et donc si maintenant je fais rectangle.r,j'ai un problème parce qu'en fait j'ai changé un attribut de mon rectangle,j'ai changé b, donc si je fais rectangle.b je suis content parce que j'ai bien mis 5,
00:23:09 :par contre si je ne m'abuse quand on fait 5 x 2, ça ne fait pas 6, ça fait 10.Et en fait vous voyez que là je n'ai pas protégé l'attributqui est un calcul automatique de l'air.
00:23:25 :Et en fait ça c'est quelque chose à laquelle il faut faire très attentionquand on crée des classes, c'est qu'il faut protéger un peu les attributs.
00:23:34 :Donc en gros jamais faire ici ce que j'ai fait, il faut utiliser.Ah oui merci Salvatore, c'était ça le truc.Regardez dans le chat, c'était comme ça qu'on écrivait les f-strings avant Python 3.10
00:23:52 :il me semble, ou même avant je crois.Donc qu'est-ce qu'on pourrait faire ici pour pallier ce problème,donc déjà on peut faire un truc qui est un petit peu mieux, c'est ce qu'on avait fait tout à l'heure,c'est, donc ça je vais le mettre un petit peu haut,on peut déjà dire def calculate air self, et donc là on fait retourne self.largeur
00:24:24 :fois self.longueur.Et donc là c'est déjà un peu mieux parce qu'on ne va pas forcer une valeur de l'air,en fait quand on va venir modifier la longueur et la largeur, on va venir mettre à jour l'air aussi.
00:24:42 :Donc vous voyez ici si je relance mon truc et que je définis un rectangle,maintenant si je fais rectangle.calculaire, donc là j'ai bien 6,et si je fais rectangle.a je le change et que je mets 10,
00:25:04 :si je recalcule l'air, à priori en fait j'ai toujours un problème parce qu'il n'a pas mis à jour rectangleIl n'a pas mis à jour ce qu'on voulait.
00:25:37 :Donc pour ça on peut utiliser les properties.Les properties c'est quoi ? C'est ce qui permet en fait un peu de transformer une méthode en un attribut.
00:25:48 :Donc ici il suffit juste de rentrer ce petit décorateur là qui s'appelle property,et donc là maintenant quand je vais vouloir faire, ici je vais même l'appeler air directement,je vais pouvoir calculer en gros dynamiquement l'air qui va devenir comme si c'était un attribut.
00:26:06 :Vous savez des fois quand je fais rectangle.a, ici là a c'est un attribut.Donc là maintenant si je relance mon truc et que je crée mon rectangle, je fais rectangle,je crée mon rectangle et maintenant si je fais rectangle.air, j'ai bien mon calcul.
00:26:31 :Et si normalement je change rectangle.a égal 10 et que je fais rectangle.air,j'ai toujours le problème, qu'est-ce qu'il se passe ?Ouais Jean-Philippe t'as une question ?
00:26:44 :Ouais j'ai un doute là, entre .a et .large ?Ouais je suis à exactement de m'en rendre compte, je définis pas le bon attribut.Mais c'était ça ta remarque ?
00:26:55 :Ouais je pense que c'est ça qui merde non ?C'est tout à fait ça.Parce qu'en fait c'est vrai que regardez si je fais rectangle.
00:27:07 :En fait depuis tout à l'heure ce que je fais c'est que je modifie pas du tout mon attribut.Donc c'est pour ça qu'il n'y avait pas de problème.
00:27:21 :Donc là si je fais rectangle.large, merci Jean-Philippe pour ton intervention.Et rectangle.longueur, voilà.Et donc maintenant si je fais rectangle.air, j'ai bien 2x3.Et si maintenant je fais rectangle.largeur égal, donc là je mets 10.
00:27:47 :Maintenant si je fais rectangle.air, j'ai bien une mise à jour en fait de ma propriété.Donc ça, ça permet en fait de protéger l'air.Donc faites pas comme ce que j'ai fait tout à l'heure, c'est à dire de faire un calcul automatique à l'intérieur de la classe.
00:28:07 :Il faut, en gros moi c'est ce que j'appelle protéger les attributs.C'est à dire quand vous avez, en fait ce que vous voulez ici, vous voulez avoir un attribut air,mais vous voulez qu'il soit calculé dynamiquement.
00:28:18 :C'est à dire qu'à chaque fois qu'il y aura une mise à jour de votre largeur ou de votre longueur,vous voulez que l'air elle soit mise à jour aussi.
00:28:24 :Et c'est important parce que si vous faites pas ça, vous allez pouvoir afficher l'air,mais vous allez pas vous en rendre compte et elle sera pas mise à jour.
00:28:31 :Donc ça c'est un des concepts importants en programmation,c'est qu'il faut faire attention à définir, à protéger vos attributs.Et il y a quelque chose aussi qui est intéressant, c'est que si je fais rectangle.air égale 22,
00:28:49 :en fait il m'interdit en fait de définir l'air,parce qu'en fait l'air c'est un calcul qui dépend de la longueur et de la largeur.Si j'avais pas mis ici de property,et bien j'aurais très bien pu définir une air qui est différenteet qui n'a rien à voir avec la longueur et la largeur.
00:29:09 :Voilà, donc ça c'est un truc auquel il faut penser quand vous faites de la programmation orientée objet.Voilà, désolé pour le petit cafouillage, mais bien vu c'est bien que vous vous en rendiez compte.
00:29:27 :J'ai vu aussi dans le chat qu'il y en a, que Pierre l'avait vu aussi, donc bah super.Voilà, donc ça c'était un petit peu, un petit topo vraiment très succinct sur les objets,la programmation orientée objet.
00:29:45 :Si on voulait, qu'est-ce qu'on pourrait faire ?Voilà, on pourrait aussi définir, je sais pas, le volume.Au lieu de calculer une air, on calcule un volume.
00:29:59 :On pourrait dire self.hauteur égale c.Donc là on rajouterait c.Et donc là pareil, le volume c'est forcément un truc qui dépend des choses.Donc on pourrait même faire at property def volume.
00:30:18 :Et ce qui est encore mieux, c'est qu'en fait air, ici vous pouvez vous en servir comme si c'était un attribut.Donc vous pouvez dire que le volume c'est self.air fois self.lauteur.
00:30:35 :Donc la hauteur comme ça.Donc voilà, ça simplifie un peu le code et c'est un peu plus lisible.Bon après la programmation orientée objet, on peut en parler pendant longtemps.
00:30:51 :Il y a ce qu'il faut sur la plateforme, donc n'hésitez pas.Après, vous pouvez faire du Python sans jamais faire de programmation orientée objet.C'est juste que c'est dommage de ne pas profiter de la puissance de la programmation orientée objet.
00:31:04 :Et toutes les bibliothèques et tout que vous allez trouver, c'est basé sur l'APO forcément.Bon, voilà un petit peu pour ça.J'avais pensé à un autre petit truc que je pouvais vous montrer.
00:31:21 :Ouais, c'est là.Allo.Ouais.En fait, j'avais une question là sur le POO.Ouais.C'était pour l'encapsulation en fait.Quand tu prends C Sharp ou Java, il y a toujours, tu peux faire ta propriété comme private, public.
00:31:45 :Mais dans Python, j'ai vu, il y a les deux underscore là.Il y a underscore.Il y a deux underscore.Ouais.Même si tu mets au niveau de largeur par exemple.
00:31:59 :Ouais.Tu mets les deux.J'ai vu un moyen d'accéder à la largeur en utilisant la classe.Au fait, il y aura toujours un moyen d'accéder à la propriété même si tu mets les deux.
00:32:14 :Ah oui, bien sûr.En fait, en Python, il n'y a pas cet aspect de privé, protection, etc.C'est plus des conventions.En fait, normalement, ce qu'on fait, ce que je vous ai montré là, ce qu'on fait normalement, c'est self.r.
00:32:34 :On peut l'initialiser à, je ne sais pas ce qu'on veut, mais bon, moi je mets none.Et en fait, normalement, ce qu'on fait, c'est que if self.r égale égale none, on retourne.
00:33:00 :Je calcule.Ouais, tu calcules.Et en fait, sinon else retourne self.r.En fait, ça, ça permet de protéger l'attribut.Tu sais juste que normalement, tu vas juste, ou en fait, il n'y a même pas de...
00:33:23 :Attends, je réfléchis juste à comment je le fais.En fait, les underscores comme ça, c'est juste pour te dire que ce n'est pas normal si tu...
00:33:32 :Depuis l'extérieur de la classe, ce n'est pas normal d'accéder à un objet qui a un double underscore.Tu peux, c'est toujours possible, mais ce n'est pas normal.
00:33:39 :Et en fait, ça, c'est un moyen aussi de protéger ton attribut, c'est-à-dire que tu lui mets deux underscoreset tu veux dire que le seul moyen d'accéder au vrai attribut sans les underscores, c'est de définir, de passer par une property.
00:33:52 :Parce qu'en fait, la property, elle te permet de mettre des conditions sur l'accès à ton objet, etc.Tu ne peux pas passer, en fait, tu ne peux pas accéder à l'air sans qu'il fasse le calcul.
00:34:06 :D'accord.Mais en fait, c'est...En dehors, par exemple, disons, je fais, je ne sais pas, je fais une API, je donne ça à quelqu'un, je ne sais pas.
00:34:21 :Est-ce qu'il y aura un cas où il peut accéder à mes attributs, à mes propriétés, par exemple?Oui.Parce que vu, il y a...Il peut.
00:34:31 :Il pourra toujours.Il pourra toujours, ok.Oui.Même si...C'est ça.Oui, c'est ça qui est...Mais en fait, c'est pour ça que tu as des conventions entre développeurs Python, c'est que quand tu vois un truc avec double underscore,tu sais que c'est, voilà, un attribut presque interdit à toucher.
00:34:47 :Ça dépend exactement du consommateur, en fait, de ne pas...Oui.Tu ne peux pas, toi, développeur, tu ne peux pas gérer...Ok, d'accord.Oui, mais tu ne peux pas gérer...
00:34:57 :Je me demandais comment gérer ça.Ok, super.A ma connaissance, non, tu ne peux pas interdire...Si tu as défini quelque chose dans ton constructeur, tu ne peux pas mettre un private comme tu le ferais en, je ne sais pas,quel autre langage de produit.
00:35:14 :Oui, Java, C-Sharp, etc.Oui, c'est ça.Ok.Voilà pour ce qui était un peu objet.Je voulais juste vous montrer un autre petit truc qui pourrait être intéressant.
00:35:31 :C'est...Voilà, après, ce que je vous montre, c'était dans l'optique de faire des choses...Enfin, pas de base, parce que ça paraît péjoratif, mais des trucs qui sont assez simples en termes de lignes de code et en termes de concepts,mais qui sont déjà vachement intéressantes.
00:35:50 :Typiquement, c'est l'utilisation des librairies avec Panda.Panda, c'est une librairie qui est très orientée data, qui permet de faire des représentations tabulaires de data en 2D, 1D, etc.
00:36:05 :Et il y a aussi...En fait, c'est du traitement de data, Panda.Donc, imaginez, par exemple, vous avez un site web comme Wikipédia avec...Où est-ce qu'on est ?
00:36:19 :Ça, je peux le virer.Je vais virer tout ça.Là, vous voyez, par exemple, le site web Wikipédia.Vous avez plusieurs tableaux.Enfin, là, j'ai été sur...
00:36:31 :C'est quoi que j'ai tapé ?La liste des pays par population.Voilà, donc vous êtes sur un site Wikipédia, n'importe lequel, et vous avez des tables HTML.
00:36:40 :Vous n'allez pas vous cogner ça à la main, faire un copier-coller, machin.Il y a plein de...Il y a une formation, notamment, de Thibault qui est sortie sur YouTube,qui sera bientôt sous forme de formation sur Docstring.
00:36:54 :On peut faire du scrapping avec ça,c'est-à-dire faire des requêtes GET pour aller chercher des tables dans du HTML.Panda le fait déjà pour nous, pour des cas assez spécifiques où il y a déjà une table qui existe.
00:37:08 :Donc, il suffit de rentrer l'URL, ici, du site web.Donc, vraiment, la page web.Même pas une balise dans la page HTML ou je ne sais quoi.
00:37:17 :C'est vraiment l'URL du site web.Et vous vous dites, je veux récupérer toutes les tables en faisant un pd.with.html, l'URL.Il y a juste à faire ça.
00:37:29 :Et vous verrez qu'on peut récupérer déjà pas mal d'informations.Donc, là, si je lance le truc.Je vais le relancer en mode interactif.Python.I.
00:37:41 :Extract data.Donc, là, vous voyez qu'on a les tables HTML.Je vais acheter HTML tables.En fait, on récupère, vous voyez, un data frame.Donc, c'est un tableau avec déjà...
00:37:55 :En fait, on a plusieurs tableaux.Pourquoi j'ai plusieurs tableaux ?Parce qu'en fait, il a été venir toutes les tables qu'il a trouvées à l'adresse HTML que je lui ai dit.
00:38:02 :Donc, là, en l'occurrence, il a trouvé ce tableau-là.Et j'ai l'impression qu'il a trouvé un autre tableau.D'où est-ce qu'il sort son tableau ?En fait, là, j'ai pays, territoire, population.
00:38:18 :Et après, j'ai un autre truc à quatre colonnes.Dépense d'éducation, liste de pays.Qu'est-ce que c'est ça ? Où est-ce que ça sort ?Je ne sais pas exactement où est-ce qu'il a trouvé l'autre tableau.
00:38:39 :Écoutez, tant mieux, il a trouvé quelque chose tout seul.On va même ici le mettre sous forme de DataFrame.Je vais regarder le type de HTMLTables pour voir ce que c'est.
00:39:05 :C'est bien une liste.Je vais dire que ça, ce sont mes DF.Et je vais dire que le DF, c'est HTMLTables.Là, j'ai récupéré un DataFrame depuis l'URL.
00:39:29 :C'est vachement intéressant.Avec le DataFrame, on peut dire par exemple, si je fais DF columns,j'obtiens rang 2021, pays ou territoire, population au 1er juillet,population projetée au 1er janvier 2024.
00:39:43 :Vous voyez que c'est vraiment rang 2021, territoire, population, machin,avec la population.Donc là, c'est quand même déjà intéressant.Vous voyez que quand je fais DF columns,en fait columns, c'est comme la classe qu'on a vue tout à l'heure,c'est un attribut de mon objet DF.
00:39:58 :Parce qu'en fait, j'ai instancié ici.Là, quand j'ai fait DF égale HTMLStable,j'ai instancié un objet.En fait, je n'ai pas vraiment instancié,j'ai attribué un nom d'objet à ce qu'il y avait dans mon HTMLStable.
00:40:14 :Je vais le mettre ici directement, DF 0.Ok, on va relancer.Voilà.Donc là, j'ai mon DataFrame.Et on peut faire des choses intéressantes avec ce DataFrame.
00:40:32 :Donc là, si je fais DF.columns, on a ça.Peut-être, qu'est-ce qu'on aimerait faire ?On va réfléchir, qu'est-ce qu'on peut faire ?Vous allez voir qu'avec les DataFrames, on peut faire des choses pas mal.
00:40:45 :Donc je vais faire, il va falloir que j'installe la librairie matplotlib.Diff install matplotlib.Donc ça, c'est une librairie qui permet de tracer des graphiques.
00:41:00 :On va relancer.Et puis, je vais l'importer ici comme ça, je ne vais pas m'embêter.Une fois qu'il sera lancé, il sera lancé.On importe matplotlib.pipelotas.
00:41:18 :Ok.Donc là, j'ai mon DF.Et je vais faire DF.columns.On va dire, population rejetée.En fait, on va faire comme ça.On va dire, population au 1er janvier.
00:41:59 :En fait, on va tracer les deux.Et on va dire, population rejetée.Donc là, je prends juste deux colonnes.Et on va sortir l'histogramme.On peut juste faire colonne par colonne.
00:42:43 :Je pensais qu'on pouvait avoir, dans ce sens-là,PLT en chaud.Donc là, c'est un peu serré.On va peut-être zoomer.Non, ce n'est pas terrible comme représentation graphique.
00:43:09 :Peut-être ce qu'on aimerait, on va se faire plutôt.Est-ce qu'on peut se faire comme graphique ?Si je faisais ça.Qu'est-ce qu'il me fait ?
00:44:00 :On va relancer.On va le faire directement.On va dire PLT.plot.Donc là, on va dire qu'on va faire un plot de la population.Et en abscisse, on va mettre le nom du pays.
00:44:25 :Donc, il faut juste que je récupère le nom de la colonne.PLT.plot.Donc là, on a dit range, length, df.Et on va faire population projetée.
00:44:48 :Et donc, s'il affiche.Voilà, donc en fait, on a.Si je zoom ici.Il m'a mis quoi ?Ouais, forcément, c'est dans l'ordre croissant,parce que vous voyez ici que les datas,elles sont rangées dans ce sens-là.
00:45:18 :Donc forcément, ça augmente à chaque fois.Mais bref, c'est juste pour vous montrer que facilement,vous pouvez extraire depuis n'importe quel site web des dataset puis faire des graphiques intéressants.
00:45:30 :Bon, voilà, je fais des graphiques un peu à l'arrache.Mais vous voyez le concept.C'est juste pour vous montrer des trucs assez simples.Quand vous débutez, vous pouvez vous amuser avec des choses comme ça.
00:45:39 :Et c'est pas mal.Et donc ça, c'était pour les graphes.Qu'est-ce qu'on pourrait faire aussi ?On pourrait se dire, tiens.Attendez, je vais vérifier.
00:45:53 :Qu'est-ce qu'on a comme data intéressante ?Yep.Franchement, c'est vraiment un exemple comme ça tout con.Mais on peut se dire, je vais créer.On a combien ?
00:46:18 :Je vais me créer, dans mon dossier courant,je vais créer un dossier par pays.Et dans chaque dossier, je vais créer un fichier textedans lequel je mets la population au 1er juilletet la population projetée.
00:46:34 :On pourrait faire plein de choses.Mais moi, je dis que pourquoi pas faire ça.Pour ça, on va se définir pays ou territoire.On va dire que pays, ça va être df pays ou territoire.
00:46:55 :On va dire que c'est une liste.Ensuite, déjà, on va vérifier que ça fonctionne bien.Là, j'ai récupéré tous les pays qui sont disponibles.Pour l'exemple, je ne vais pas tout mettre.
00:47:20 :Je vais dire for pays.Je vais mettre de S parce qu'il y en a plusieurs.For pays in pays.Et là, je vais aller jusqu'à 10.
00:47:35 :Après, je ne vais pas pourrir mon dossier.Ça ne sert à rien.Là, ce que je fais avec le slicing,pour ceux qui ne connaissent pas,le fait de dire 2.10,
00:47:44 :parce qu'en fait, quand vous parcourez un itérable,je vais écrire Python pour ceux qui ne connaissent pas,je peux créer un itérable.On va dire ma liste.
00:47:59 :Ok, je vais dire 2.1, 4, 25.En fait, quand je fais...Si j'écris ça,donc là, j'ai bien ma liste.Si je fais for lm in my list,j'ai bien tous les éléments de ma liste.
00:48:38 :Mais en fait, ce que j'ai fait là,quand je dis for lm in my list,c'est un raccourci de direde 0 à moins 1 tous les 1.
00:48:51 :Normalement, ça va donner la même chose.Voilà, ça donne bien la même chose.Parce qu'en fait, quand vous parcourez un itérable,vous pouvez mettre entre crochets comme ça.
00:49:02 :Vous dites, je veux aller...Les 2 premiers éléments que vous avez entre les 2 points,c'est de l'élément 0 au moins 1.Donc ça, ça veut dire que je vais du premier au dernieret avec un pas de 1.
00:49:17 :Si ici, j'écris avec un pas de 2, par exemple,et j'écris printlm,vous voyez qu'il va parcourir 1 élément sur 2 de la liste.Donc là, en l'occurrence, c'est 2, 36 et 90.
00:49:33 :Et puis, il n'a pas pris le dernierparce qu'il ne prend pas le dernier quand...Il va manquer le dernier.Oui, effectivement, il manque le dernier.
00:49:42 :Donc là, pour ça, il faudrait...On pourrait rajouter plus 1 élément de la liste.Bref, ce n'est pas l'objet,mais c'est juste pour vous montrerque quand vous parcourez un itérable,il y a plein de façons de le faire.
00:49:55 :Et donc là, quand je dis...Et quand vous ne mettez pas le...Ici, là, quand je ne mets rien,ça veut dire que par défaut, il prend le premier.
00:50:03 :Et puis là, si je ne mets pas tous les 1,ça veut dire que par défaut, il prend tous les 1.Donc là, je dis juste que je veux les 10 premiers éléments,donc les 10 premiers pays.
00:50:12 :Et qu'est-ce que je vais faire ?Pour chaque pays, je vais créer un dossier.Bon, ça, on n'en a pas besoin.Une porte OS.Et donc, pour chaque pays,on va dire OS.mkdir.
00:50:35 :Et puis là, on va dire...Donc là, normalement, il va déjà me créer.Et puis, on peut même afficher...On pourrait faire un print, machin,mais ça, je ne vais pas le faire.
00:50:56 :Donc là, déjà, normalement, si je lance mon truc,il devrait m'avoir créé...Voilà.Donc, il m'a créé un dossier par pays.Donc là, je n'en ai mis que 10,avec rien dedans, forcément,parce que je n'ai rien mis dedans.
00:51:11 :Mais déjà, vous voyez que...Moi, au tout début,quand j'ai commencé à faire de la programmation,j'ai trouvé ça extraordinaire.Ici, en deux lignes de code,on peut créer 10 dossiers automatiquement.
00:51:25 :J'ai beau faire de la programmation depuis longtemps,c'est des choses qui m'émeuvent.Est-ce que ça se dit ?Des choses qui m'émeuvent.Bref, c'est une digression,mais je trouve que c'est toujours biende se rendre compte...
00:51:44 :Vous voyez, parfois, on se dit,je suis débutant, machin, voilà.Je trouve que c'est pas mald'avoir ce super pouvoirde pouvoir créer automatiquement.Là, vous voyez, j'ai mis 10,mais si j'avais mis 1 000,il n'y aurait pas eu de souci.
00:51:57 :J'aurais créé 1 000 dossiers en une seconde,en deux lignes de commande.Après, une fois dans chaque dossier,ce qu'on peut se dire,on peut se dire, je veux créer un fichier texteavec les datas que j'ai dites.
00:52:12 :Donc, qu'est-ce qu'on a comme data ?On peut dire...With...Open...Donc là, on va aller chercherdans notre dossier nouvellement créé.With open...With open...
00:52:31 :Donc là, ça va êtrele nom du dossier qu'on vient de créer.C'est...pays.Et là, on va dire...On va dire qu'il s'appelle Output.
00:52:47 :On ne va pas s'embêter.Il va y avoir le même nom partout, .txt.Je mets le mode d'écriture,donc là, en write.As handle,donc ça, c'est juste ce qu'on va mettre dedans.
00:52:59 :Et là, je fais handle.write.Et donc là, je vais juste écrire coucou pour l'instant,juste pour vérifier que ça fonctionne bien.Je vais mettre un print aussi.
00:53:09 :Voilà, pas la peine.Alors, pourquoi il me dit...Je n'ai pas créé le dossier monde.Entre Indonésie et Nigéria, tu as un dossier monde.Ouais.
00:53:51 :Mais pourquoi...Ah oui, parce qu'il existe déjà.Ok, merci.En fait, ce qu'on peut faire là,on peut mettre un try.Il va essayer de le créer.
00:54:06 :En fait, si le dossier n'existe pas,effectivement, il ne va pas vouloir me le créer.Et donc là, on peut gérer une exception.Donc on peut dire file exist error.
00:54:17 :Et puis on va dire print le dossier existe déjà.Sinon, il va le créer.Donc ça, c'est de la gestion d'erreur en live.Merci, Jean-Phi.
00:54:33 :Et donc là, si je le lance,vous voyez, le dossier existe déjà à chaque fois.Donc ça, c'est normal,parce qu'en fait, je venais d'écrire avant.
00:54:41 :Et maintenant, si je vais dans le dossier,vous voyez que j'ai un output et j'ai écrit coucou.Donc là, c'est pareil.Vous voyez, dans chaque dossier,on a écrit un fichier output avec juste coucou.
00:54:51 :Donc là, pour l'instant,ce n'est pas hyper intéressant, je vous l'accorde.Nous, ce qu'on aimerait, c'est écrire...On avait dit quoi ?Je vais aller voir toujours dans mon DF.
00:55:02 :En fait, avec le DataFrame,on peut filtrer facilement.Donc, on va dire,df.columns.En fait, on veut obtenir les datas.Donc, je fais de l'imbrication.
00:55:18 :Je dis que je veux filtrer mon DataFramequand le DataFrame pays ou territoireégale, par exemple,si je veux, juste la valeur qui correspond à monde.
00:55:39 :Voilà.Donc là, j'ai uniquement filtré la valeur qui correspond à monde.Après, j'aurais très bien plu.On peut filtrer ailleurs,si vous voulez vous convaincre que ça marche bien.
00:55:58 :On peut dire, par exemple, juste Thaïlande.Je peux faire la même chose ici.Voilà.Donc là, j'ai juste la valeur qui correspond à la Thaïlande.
00:56:10 :Moi, je ne veux pas tout ça.Je veux juste accéder à population au 1er juilletet population projetée.Donc, ce qu'on va dire maintenant,c'est que pour chaque pays qu'on aura parcouru,on va vouloir récupérer ces valeurs-là.
00:56:26 :Donc, on va dire au POP 2021et on va se mettre aussi au POP 2024.Et donc là, on va extraire,un peu comme ce que j'ai fait là.
00:56:43 :Sauf qu'on va changer ça.Ça, ça va être le pays qu'on est en train de parcourir.Voilà.Donc là, c'est pareil.Et ici, on va juste dire qu'on veut juste cette valeur-là.
00:57:04 :Donc, c'est population au 1er juillet 2021et population projetée au 1er janvier 2024.Ok, très bien.Et maintenant, au lieu d'écrire coucou comme des idiots,on va écrire...
00:57:25 :C'est moi l'idiot, c'est pas vous.On va s'écrire...On va faire un truc...Ouais, je vais le faire...Comment je vais l'écrire ?Je vais le faire comme ça.
00:57:45 :POP 2021.Et si c'était POP 2024, je vais l'écrire...POP 2021.Je vais mettre un slash N pour passer une ligneet je vais mettre POP 2024.
00:58:03 :Voilà.Je vais faire un petit print à chaque foisde là où on est dans le pays.Print tout simplement pays.Comme ça, on voit un peu où est-ce qu'on en est dans le script.
00:58:20 :Voilà.Donc là, par exemple, monde, le dossier existe déjà.Chine, pareil, le dossier existe déjà.Et maintenant, si je vais voir dans Output,j'ai un truc qui n'est pas très propre.
00:58:30 :Je vais vraiment juste afficher la valeur.C'est parce qu'en fait, ici, quand je fais le filtre,je récupère quand même un objet DataFrame.Je vais juste mettre Values 0.
00:58:43 :Et donc là, pareil, Values 0.Je fais relancer.C'est quoi ça ?Je vais vérifier.Qu'est-ce qui me sort ?Ah ouais, en fait, il m'a sorti un espace.
00:59:26 :Je pense que si je l'ouvre ici...On ne peut pas faire Ouvre et Révéler dans le Finder ?Ouais, Open in Finder.Voilà.C'est parce que je ne sais pas pourquoi PyCharm m'affiche le caractèrequi correspond à l'espace.
00:59:48 :Mais en fait, moi, ce que je veux, c'est tout ça en espace.Donc je vais le transformer carrément en Float.Je vais faire...Il y a un truc qui est pas mal avec les DataFrames.
01:00:01 :C'est qu'on peut appliquer une fonction directement à toute une colonne.On va voir déjà si ça, ça fonctionne.Si je fais ça...Hum...On va voir si...
01:00:34 :Ouais, moi ça, il n'aime pas.En fait, il faudrait remplacer, il faudrait l'encoder en UTF-8.Je vais voir si j'arrive à faire ça facilement.Ouais, enfin, en gros, il faudrait que je le transforme en chaîne.
01:01:01 :Mais bon, vous avez compris le truc.Hum...C'est...Voilà.Donc, assez rapidement, on arrive à faire des choses intéressantes.On a juste extrait depuis une page web...
01:01:15 :Ah, merde.Ah, merde.Ah, merde.Ah, merde.Ah, merde.Ah, merde.Ah, merde.Ah, merde.Ah, merde.Ah, merde.Ah, merde.Ah, merde.Merci d'avoir regardé cette vidéo !
01:02:34 :Merci d'avoir regardé cette vidéo !Merci d'avoir regardé cette vidéo !Merci d'avoir regardé cette vidéo !Merci d'avoir regardé cette vidéo !Merci d'avoir regardé cette vidéo !
01:04:13 :Merci d'avoir regardé cette vidéo !Merci d'avoir regardé cette vidéo !Merci d'avoir regardé cette vidéo !Merci d'avoir regardé cette vidéo !Merci d'avoir regardé cette vidéo !
01:04:53 :Merci d'avoir regardé cette vidéo !Merci d'avoir regardé cette vidéo !Merci d'avoir regardé cette vidéo !Merci d'avoir regardé cette vidéo !Merci d'avoir regardé cette vidéo !
01:07:04 :Merci d'avoir regardé cette vidéo !Merci d'avoir regardé cette vidéo !Merci d'avoir regardé cette vidéo !Merci d'avoir regardé cette vidéo !Merci d'avoir regardé cette vidéo !
Aucune occurrence trouvée pour « ».
Bravo, tu es prêt à passer à la suite