Session du 23 février 2023 à 20h00
Data Science & IA
Qualité & Architecture
Algorithmique & Performance
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
Générateurs Python, LaTeX et complexité
Découvrez les générateurs avec yield, une librairie LaTeX en Python et les bases de la complexité O(n) tout en évoquant un workflow de déploiement avec Git.
00:00:00 :Je vais désactiver ma caméra, c'est pas la peine d'avoir ma tronche.Comme d'habitude, n'hésitez pas si vous avez des questions sur ce qu'on fait pendantla session ou si vous avez d'autres questions.
00:00:31 :Viens on skille developed, open makers, place en spotlight…Bon j'imagine que c'est bon.Ok.Du coup c'est quoi Gabriel ta question? Je ne sais pas si je pourrais répondre.
00:01:12 :C'est un prod'it.Non c'est pas un prod'it, c'est pour ça.Mais vas-y.Parce que tu sais quand on met en production sur Python Anywhere, je clone avec Git enfait, et je clone sur Python Anywhere.
00:01:29 :Et quand on fait, quand on veut mettre à jour en fait notre projet sur notre serveur,alors je fais git pull.Ouais et il te demande pour code et puis machin.
00:01:39 :Et quand tu fais git pull, est-ce que si tu as des fichiers qui sont sur le serveurPython Anywhere, mais qui ne sont pas sur ton Git, ça va te les supprimer ou pas?
00:01:53 :Non, non.Il ne va pas supprimer.En fait déjà, ce qu'il faut, normalement tu vas cloner ton dossier.Déjà ça c'est quoi?Ça c'est fait à la base.
00:02:04 :Donc lui, et après si tu viens rajouter des choses qui sont, si tu rajoutes des fichierssur le serveur Python Anywhere, mais qui ne sont pas sur ton Git, quand tu fais git pull,en fait il va, normalement je pense qu'il va t'afficher des messages d'erreur.
00:02:23 :Il va te dire la version que tu as sur ton Python Anywhere, la version à partir de laquelletu fais un pull.Il va dire il y a des conflits parce que je trouve, enfin il y a des choses qui sonten plus de ce qu'il y a sur le GitHub.
00:02:36 :D'accord, mais il ne te les efface pas.Non, il ne va pas te les effacer, mais par contre il va te dire il y a des conflits,est-ce que tu veux que je les fusionne? Il va te dire merge, etc.
00:02:44 :Est-ce que tu veux que je les fusionne?Mais normalement les fichiers qui sont sur ton serveur, j'imagine que c'est tes.envet tes choses comme ça.
00:02:51 :Les images et tout, par exemple?Bah en fait, c'est avec ton static et ton collecte static, etc.Ouais, j'ai mes images que j'upload depuis mon administration.
00:03:08 :Et du coup, je me demandais si quand tu faisais un pull, un git pull depuis Git,si ça allait effacer toutes ces choses que tu as rajoutées.
00:03:19 :Non, non, non, il ne va pas les effacer.C'était juste ça.Il ne va pas les effacer, non.Ok, cool.De toute façon, quoi qu'il arrive, il n'efface rien sans te demander une confirmationou sans ton fichier.
00:03:30 :Ok.C'était un peu la beauté de Git.Merci.C'est un prix.Du coup, là vous voyez le programme affiché, les autres, si jamais vous avez d'autres questions,n'hésitez pas à les poser avant ou pendant, il n'y a pas de restrictions.
00:03:48 :Du coup, Yannick avait posé une question sur le yield.Et en fait, le yield, c'est typique au générateur, donc je propose qu'on voit ça.L'idée, comme vous le savez, de cette session, c'est de rester quand même à un niveaupas trop avancé.
00:04:07 :On essaie de voir des choses intéressantes, mais on essaie d'être accessible.Ensuite, une librairie que j'ai vue passer sur Twitter et que j'ai trouvée intéressante,si par exemple vous avez un blog ou des choses comme ça,et que vous voulez afficher des fonctions mathématiques,c'est quand même sympa de pouvoir utiliser Python pour sortir la formule.
00:04:32 :Ensuite, on verra en fonction du temps, mais ça fait plusieurs fois que j'en parle,mais je pense que c'est important de comprendre les notations O.
00:04:42 :Enfin, O.Je vous l'écris, parce qu'avec mon accent du chnor vous ne devez peut-être pas comprendre.Grand O comme ça, de fois vous entendrez à l'oral,ou sinon c'est juste par exemple O de N.
00:04:59 :En fait, O de N, ça veut dire que c'est un algorithme,c'est exactement ça Christian, c'est la complexité d'un algorithme.En gros, O de N, ça veut dire que la complexité est linéaire,c'est-à-dire que le nombre d'opérations, le nombre de calculs à faire,il est croissant avec le nombre de paramètres que je lui envoie.
00:05:22 :Après, on a des grands O N², ça veut dire que l'évolution est au carré,c'est-à-dire que si j'ai 10 paramètres, il va devoir faire 100 calculs.
00:05:31 :Bref, je ne sais pas si on en verra ça, si on en parle,parce qu'après j'avais prévu un petit exercice qui nous permet de voir du matplotlib,du plotly aussi, et puis du panda, donc c'est peut-être plus intéressant.
00:05:48 :Ah bah c'est cool, The Crow!Tu arrives à Lille?Moi je suis dans le Pas-de-Calais, Arras. Ah et bah, ma femme elle est de Bétune.
00:06:02 :Du coup, si ça ne vous va pas comme programme, on y va,si vous avez des questions, n'hésitez pas.On va commencer du coup.Est-ce que c'est assez grand? Vous voyez bien?
00:06:21 :Je vais dégager ça pour ne pas spoiler.Ah, enfin le compatriote!Du coup, les générateurs, qu'est-ce que c'est?En fait, vous avez déjà vu, ou peut-être pas, mais c'est pas grave,pour définir une fonction, on la définit comme ça.
00:06:56 :Donc en fait, c'est def, le nom de la fonction.Ici, si elle a des paramètres ou non, donc parfois il y en a, parfois il n'y en a pas.
00:07:04 :Ici les paramètres c'est nums, c'est-à-dire que je vais vouloir leur entrer une liste en paramètres.Et ici, imaginons que par exemple, je veuille une fonctionqui me sort le carré des nombres de chaque élément de ma liste.
00:07:19 :Donc imaginez par exemple, vous lui rentrez la liste 1, 2,ou par exemple 2, 4, c'est mieux,vous voulez que votre fonction, pour chaque élément,elle crée une nouvelle liste avec le carré de ses éléments.
00:07:32 :Donc si vous lui rentrez 2, 4, vous voulez qu'il vous rentre 4, 16.Donc 2 au carré 4 et 4 au carré 16.Donc on pourrait très bien le faire avec une fonction comme celle-ci.
00:07:45 :Donc je définis une fonction carré liste, qui va prendre en paramètres liste.Je pourrais mettre les annotations, mais je ne le fais pas.Ici, je me dis, je veux créer une liste vide, et je l'initialise.
00:07:56 :Je pourrais faire une liste compréhension aussi,mais je préfère vous montrer comme ça pour vous montrer un peu le principe du générateur.Donc en gros, vous initialisez une liste,vous dites, je vais stocker mes résultats de carré dans une liste,et vous parcourez chaque élément de la liste en paramètres.
00:08:13 :Donc là, vous dites, for element in nums,c'est-à-dire que vous allez parcourir chaque élément de la liste en paramètres,et vous allez dire, tu m'ajoutes dans ma liste vide,pour chaque élément, vous faites results.append,
00:08:26 :élément, et ça, quand je dis étoile, étoile, 2,c'est la notation pour faire le carré d'un nombre dans Python.Vous voyez, si je fais ça ici,je suis dans les pythons, donc là, par exemple,si je fais 4 x 2, j'ai 8.
00:08:44 :Par contre, si je fais 4 étoile, étoile, 2, j'ai 16,parce que c'est 4 au carré.Et en fait, ça marche avec le cube.Par exemple, 2 puissance 3, ça fait 8.
00:08:56 :Enfin, c'est 2 au cube.Quand je fais 2 étoile, étoile, 3, ça fait 2 au cube, ça fait 8.Ok? Pour ça, c'est clair?Donc, en fait, peut-être que vous ne voyez pas très bienquand j'utilise le terminal comme ça.
00:09:16 :Donc ça, c'est juste pour faire le carré,et on va retourner le résultat.Donc, ce qu'on fait pour utiliser cette fonction,je définis le paramètre que je veux,et je lui dis, le résultat de la fonction,je veux que tu me le stocke dans une variable qui s'appelle carré,
00:09:33 :et du coup, on va vraiment avoir une variable carréqui va être en fait une liste avec le carré de tous les éléments.Donc, si j'exécute ça, vous voyez que j'ai bien le résultat exprimé,c'est-à-dire que je l'ai mis en paramètre 1, 5, 9, 10,et ici, on a 1, 25, 81, 100,
00:09:49 :qui correspond bien au carré de 1, au carré de 5,le carré de 9 et le carré de 100.Donc là, jusqu'ici, tout va bien.
00:09:56 :On a créé une fonction qui sort le carré de chaque élément d'une liste.L'ennui, c'est que, en fait, vous voyez,pour sortir, si je veux le carré de 9,et bien, en fait, il va me calculer le carré de 1,le carré de 5 et le carré de 10.
00:10:15 :Et dans ma liste, je suis content, j'aurai 81,mais en gros, j'aurai le 1, le 25 et le 100.C'est des choses dont peut-être je ne suis pas intéressé.
00:10:23 :Donc, en fait, c'est un peu là qu'interviennent les générateurs.Après, je sais que dans la réponse que tu as fait, Thibaut,et puis moi, j'avais fait la même en parallèle sans regarder sa réponse,lui, il a dit pareil, en fait, en disant qu'il n'a pas beaucoup utilisé les générateurs,
00:10:42 :et je t'avoue que moi non plus, j'ai dû l'utiliser une ou deux foisparce que j'avais vraiment une grosse boucle à gérer avec beaucoup d'informations.
00:10:50 :Et en gros, moi, les générateurs, je les utilise quand j'ai besoind'optimiser l'espace mémoire occupé.En fait, un générateur, qu'est-ce que c'est?Il faut un peu le voir comme une fonction,une fonction dans laquelle le littérateur, il est déjà implémenté.
00:11:09 :En gros, ici, imaginez que vous voulez redéfinir la même fonction,c'est-à-dire qui calcule le carré de chaque élément d'une liste.Donc là, c'est pareil, vous voyez, j'ai fait def carré liste,donc c'est exactement pareil que ma fonction qui est ici.
00:11:21 :Par contre, vous voyez ici, j'ai juste mis underscore gen pour la différencier,donc c'est générateur.Et là, vous voyez qu'au lieu de sortir, de créer une nouvelle liste,et après de parcourir les éléments de mon paramètreet ensuite les mettre dans ma nouvelle liste,je vais directement parcourir mes éléments qui sont stockés là-dedans.
00:11:41 :Et ici, au lieu de faire un retourne, je vais faire un yield.Vous voyez, c'est exactement la même chose.Par contre, le résultat, vous allez voir, c'est pas le même.
00:11:50 :Ici, si j'exécute,donc là, si vous allez voir,j'ai défini une nouvelle variablequi prend en argument,c'est une variable dans laquelle je stocke mon générateur.
00:12:05 :Vous voyez qu'ici, quand je fais print carré,là, vous voyez, je retournais une liste,j'avais un objet liste.Là, en fait, j'ai un nom un peu barbare,un peu, vous savez, quand vous avez une classeet que vous instancez un objet,vous avez l'espace mémoire qu'occupe cet objet.
00:12:22 :Donc là, c'est un peu ça.Vous avez l'espace mémoire occupé par votre générateur.Mais pour l'instant, il ne fait rien du tout.Et vous voyez qu'ici, si je fais par exemple next carré,en fait, il va aller parcourir le générateur,il va aller parcourir chaque élément généré par le générateur
00:12:38 :avec la méthode next.Donc en fait, next, c'est une méthode qui est déjà implémentéequand on crée un générateur.Donc en fait, dès que Python rencontre un yield,comme ça, il sait que c'est un générateuret du coup, il implémente automatiquement le next.
00:12:54 :Et donc, vous pouvez voir ce qui est intéressant,c'est qu'il me retourne bien le carré.Donc là, 1, 5, vous voyez, next carré,j'ai bien le premier carré, c'est 1.
00:13:05 :Ensuite, le deuxième carré, c'est 5.Et là, si je rajoutais ici,si je faisais print next carré,j'ai 81 et ainsi de suite.Par contre, le truc, c'est qu'avec les générateurs,on ne récupère pas l'élément précédent.
00:13:25 :Une fois que le générateur est passé sur un élément,il ne revient plus et il n'est pas stocké en mémoire.Et en fait, ça, c'est vachement intéressantquand vous voulez optimiser l'espace mémoireparce qu'il faut vous dire que, je ne sais pas,imaginez que vous faites une boucleet dans cette boucle, à chaque itération,
00:13:43 :vous voulez un résultat.Mais en fait, ce qui vous intéresse,c'est le résultat que vous avez à l'itérationà laquelle vous êtes et après,vous l'envoyez vers une autre fonction,ou je n'en sais rien,et vous vous en fichez du résultat précédent.
00:13:55 :Vous, ce qui vous importe,c'est le résultat de la boucle actuelle.Et en fait, les générateurs, c'est parfait pour ça,pour sauvegarder l'espace mémoire.C'est un peu, il faut le voir comme un générateur,ça vous permet de créer des listes,mais un peu des listes fantômes.
00:14:12 :C'est-à-dire que vous avez la structure,c'est comme si vous aviez,donc c'est la réponse que j'avais faite à Yannick,c'est un peu comme si vous aviez le squelette de votre liste,vous savez exactement le format que va avoir chaque élément,si c'est le carré d'un nombre,si c'est, je ne sais pas, le nombre fois deux, etc.
00:14:30 :Mais il va juste stocker,c'est un peu comme s'il stockait la machinequi va permettre de créer chaque élément.Et une fois que vous l'appelez,il vous sort l'élément dont vous avez besoin,et le suivant, le suivant, etc.
00:14:43 :Et comme ça, ça ne vous stocke pas une listedans votre espace mémoire utilisé par votre script.Et donc ça, imaginez que vous avez une,là ça va parce que c'est une petite liste,il n'y a que quatre éléments,mais imaginez une liste qui a en fait un million d'éléments,
00:14:59 :vous n'allez pas pouvoir le gérer avec une liste,parce que ça va prendre beaucoup trop de place.Alors que vous pouvez dire,en fait je fais un générateur,comme ça je peux juste aller accéder à un élément de la listequi fait partie de plusieurs,qui est à une itération spécifique.
00:15:17 :Oui Yannick, en fait c'est ça,c'est intéressant pour quand tu as vraimentune quantité importante de données,et aussi quand tu veux optimiser ton espace mémoire.
00:15:31 :Honnêtement, si par exemple tu disaisque tu n'as pas du tout envie d'utiliser le générateur,ta vie se passera très bien en tant que développeur Python,je veux dire, tout ce que tu fais avec les générateurs,tu peux les faire avec les listes.
00:15:43 :Là c'est vraiment de l'optimisation de code les générateurs,il faut le voir comme ça.Bah si, si, Python, Yégor, pour répondre à ta question,Python gère dynamiquement la mémoire,mais au bout d'un moment il sature.
00:16:00 :En fait, je ne sais pas si vous savezcomment fonctionnent les listes dans Python,mais je crois que c'est aussi propreà d'autres langages de programmation.
00:16:09 :En fait, quand vous faites une liste,Python va chercher des espaces mémoire disponiblespour stocker les éléments de la liste.Donc imaginez, vous avez une liste qui a trois éléments,en fait Python va stocker,il va les voir dans la mémoire,donc il faut voir ça un peu comme
00:16:26 :une grande armoire avec plein de casiers,et il va aller ouvrir tous les casierset il va regarder lesquels sont libres.Imaginez qu'en fait,vous voulez créer une nouvelle liste de trois éléments.
00:16:41 :Donc il va regarder l'armoire,il va ouvrir tous les tiroirs,et il va regarder lesquels sont disponibles.Du coup, il va aller stocker,il va trouver un premier tiroir disponible,il va stocker le premier élément dedans,et il va dans ce premier tiroir,il va stocker l'élément,mais il va aussi stocker l'information
00:16:57 :de où est l'élément suivant,et ainsi de suite.En fait, ça c'est un peu commentest stockée dans la mémoire une liste.Du coup, vous vous rendez compteque c'est un petit peu compliquéparce que si jamais vous voulez rajouterun élément à votre liste,il va falloir qu'il aille chercher le dernier élément
00:17:12 :pour savoir où est-ce qu'il va stocker le suivant, etc.Donc c'est pour ça qu'utiliser les listes,ça peut être très gourmand en mémoire,il faut trouver un espace mémoire,et il faut aussi trouver l'élément précédentpour accéder au suivant.
00:17:27 :Par contre, avec un générateur,on ne peut pas accéder,il n'y a pas de...Vous savez, quand vous faites entrecrocher i,par exemple,avec un générateur, vous ne pouvez pas le faire,parce qu'en fait, pour avoir un élément,il faut avoir calculé le précédent, etc.
00:17:44 :Donc ça, c'est aussi un point importantdes générateurs,c'est que vous avez vraimentuniquement accès à l'élémentqui est calculé au cours de l'itération,et c'est tout, vous n'avez ni accès au précédent,ni au suivant.
00:17:57 :Et ce n'est pas stocké en mémoire.Les dictionnaires, c'est un peu pareil que les listes,ça ne marche pas tout à fait pareil,mais en termes d'espace mémoire,c'est un peu la même chose.
00:18:06 :En fait, ce dont on met en opposition les listes,c'est les numpy-arrêts.En fait, quand on doit stocker une liste,comme je vous l'ai dit,en fait, il a une grosse armoireet il regarde les tiroirs disponibleset il les stocke.
00:18:20 :Par contre, quand on stocke un arrêt,donc un numpy-arrêt,si par exemple votre numpy-arrêt a 10 éléments,il va aller chercher un endroitoù il y a 10 tiroirs consécutifs disponibles,et il va stocker votre arrêt dedans.
00:18:37 :Donc ça, c'est un petit peu différent.En fait, ça dépend de ce que vous voulez faire.Quand vous voulez accéder rapidement à un élément,c'est mieux d'avoir un npy-arrêt,parce qu'en fait, vous savez exactementà quel endroit il est.
00:18:49 :Alors que si vous voulez accéder directementà un élément dans une liste,c'est un peu plus compliqué,parce qu'à chaque fois, il faut,si par exemple vous voulez l'indice numéro 8,il faut d'abord aller chercher l'indice numéro 7,parce que lui, il sait où est l'indice 8,mais du coup, pour avoir le 7,
00:19:06 :il faut aller chercher le 6, etc.Donc en fait, il faut tout parcourir la listepour accéder à un élément de la liste.Donc c'est un peu plus...
00:19:13 :En fait, ça dépend de ce que vous voulez faire.En revanche, quand vous avez un numpy-arrêt,c'est très rapide à accéder à une valeur,parce que vous savez exactement où est-ce qu'est l'élément,parce que vous avez stocké vos 10 élémentssur la même rangée, par exemple.
00:19:27 :Mais dès que vous allez vouloir ajouter un élémentà un numpy-arrêt,ça va être très compliqué,parce qu'il va devoir retrouver un autre espaceoù cette fois-ci, il n'y a plus 10,mais 11 casiers disponibles consécutifs.
00:19:41 :Parce qu'en fait, peut-être que là où il a stockéces 10 casiers,peut-être que le casier d'après,maintenant il est occupé,parce qu'il a stocké son numpy-arrêtavec 10 casiers,et il n'y a plus de casiers disponibles à côté.
00:19:53 :Du coup, il est obligé de tout enleveret retrouver un espace dans l'armoireoù il y a cette fois-ci 11 éléments consécutifs disponibles.Donc vous voyez un peu les différences de conceptsentre les listes et les numpy-arrêts.
00:20:10 :Et ici, c'est juste un petit point pour vous montrerqu'on peut créer un générateurcomme une liste compréhension.Vous savez quand on fait...Attendez, je vais appuyer là-dessus.
00:20:21 :Si je me mets là-dedans...Ici, si par exemple, vous savez,quand vous faites une liste,vous pouvez dire j'ai envie de créer une liste,donc je dis ma liste égale,donc j'initialise à rien du tout,et puis après je dis for i in range 10,stock moi le carré,
00:21:06 :donc je fais ma liste.append i,et puis je vais lui dire stock moi le carré.Donc là, si j'affiche ma liste, vous avez ça.Donc vous pouvez écrire cette listeavec une liste compréhensionen disant ma liste égale,donc lm au carré,for lm in range,du coup on a mis combien?
00:21:30 :On a mis 10.Donc là, vous voyez,c'est deux manières de définir une liste,et en fait avec le générateur,c'est exactement pareil.Vous pouvez dire mon n,et en fait au lieu de mettre des crochets,vous mettez des parenthèses,et là il va savoir que c'est un générateur.
00:21:49 :Et là, vous pouvez dire lm au carré,for lm in range 10.Et donc là, vous avez créé un générateur.Donc là, vous voyez,si je fais mon gène, j'ai un générateur,et si je veux accéder à chaque élément de mon générateur,il faut que j'aille le parcourir.
00:22:07 :Donc for lm in gène, print lm.Et donc là, vous voyez qu'il m'affiche bienles carrés à chaque fois de mon générateur,sans pour autant m'avoir stockéà un endroit spécifique toutes ces valeurs-là.
00:22:26 :Vous voyez, en fait,toutes celles-là, c'est un peu des valeurs fantômes.C'est comme s'il avait eu besoinque d'un seul espace mémoirepour générer tous les éléments du carré.
00:22:36 :Est-ce que vous voyez un petit peuce que je veux dire pour les générateurs?Est-ce que c'est assez clair pour vous?Là, ici, c'était juste pour vous montrerqu'on peut les définir de la même manière.
00:22:49 :Donc quand vous voyez un truc entre parenthèsescomme ça, comme une miscompréhension,c'est que c'est un générateur.C'est instantané, il fait juste afficher.C'est possible de voir les adresses mémoiresde chaque élément, je ne sais pas, j'imagine.
00:23:29 :Tu vois, on peut afficher les espaces mémoires.Après, c'est juste que ce n'est pas le même.Mais moi, ce que je veux te dire,c'est qu'en fait, en termes de place, d'octet,de vraiment octet occupé, je peux te le certifierqu'en fait, le générateur, il va prendrebeaucoup moins de place qu'une liste.
00:23:47 :Parce qu'en fait, une liste, il va falloirstocker tous les éléments, etc.Le précédent, le suivant.J'ai trouvé.Ah, bah vas-y Thibault, si tu veux.
00:24:01 :J'ai eu un gros bug de Raycast.J'ai tué des scripts de Python qu'il ne fallait pas tuer.Ça a complètement frisé des trucs.Ah merde!
00:24:11 :Non mais ça prouve que Python est utilisédans beaucoup de choses.Alors, attends, je vais partager mon écran.Il faut que je dégage mon...Non, ça va, je pense, prendre la main.
00:24:28 :Normalement...OK, donc normalement, vous devez voir.Donc en fait, le problème, Christian,c'est que tu utilises une QMainWindowet le QMainWindow est un peu spécifique.
00:24:48 :Donc, je te conseille d'aller revoir,je crois que c'est le projetd'explorateur de fichiers, je crois,dans lequel j'utilise un QMainWindowparce que justement, j'utilise, comme toi tu l'as fait ici,un menu.
00:25:04 :Et la spécificité du QMainWindow,et du coup, je suis quasiment sûr d'en parlerdans cette formation, dans ce projet,c'est qu'en fait, tu as un widget,tu as une zone centrale, en fait,dans laquelle tu dois mettre un widget.
00:25:17 :Donc c'est ce que j'ai rajouté ici.MainWidget, donc tu vois, je fais un QtWidget, QWidget,et après j'utilise SetCentralWidget.Il y a quelqu'un qui demande pour agrandir.
00:25:26 :Ouais, ouais, ouais, c'est exactement ce que j'étais en train de me dire.Hop, on va aller y mettre.Ok, ça devrait être un peu mieux.
00:25:38 :Donc, voilà, je crée un widget,après tu as cette petite méthode,SetCentralWidget, tu mets ton widget au milieu,et après, du coup,tu as un widget au milieu qui est du coupune zone vide, si tu veux,et dans cette zone, du coup, là, je mets le GridLayoutet je lui donne comme parent le MainWidget.
00:25:57 :Et du coup, quand je lance, là, j'ai fait un trucun truc classique avec des boutons,j'ai enlevé, d'ailleurs, ça montre justement quej'ai modifié pas mal de choses pour voir d'où venait le problème,ça fait écho à ce que je disais au tout début, pour ceux qui étaient là,
00:26:12 :dans le sens où tu as un CustomButton ici,hop, CustomButton, donc tu vois, je commençais par regarderbon, est-ce que c'est pas le CustomButton qui foire,donc j'ai enlevé le SetFixedSize,après j'ai enlevé carrément le bouton pour me dire, on va éliminerla complexité, en fait, ça c'est aussi quelque chose que je vous conseille tout le temps de faire,
00:26:30 :récemment, j'avais justement sur DockString,je voulais essayer un nouveau truc qui permet de rechargerle serveur plus rapidement, et j'arrivais pas du toutà le faire marcher sur DockString, et au bout de 20 minutes,je me suis dit, bon, on va essayer déjà à voir sur un projetavec rien, donc j'ai créé un projet Django de base,
00:26:48 :et même avec un projet complètement vide, ça marchait pas non plus,donc j'ai fini par en déduire que, vu qu'il fallait installer des trucsau niveau de mon ordi pour, c'est Watchman,c'est un truc de Facebook pour vérifier les fichiers qui changent,donc je me suis dit que, bah voilà, le problème
00:27:03 :ne venait pas du projet, enfin, de Django, ou du projetDockString, etc., ça doit vraiment venirde mon système d'exploitation en général.Donc là, c'est un peu pareil, voilà,je commence à essayer de simplifier au maximumpour voir déjà avec un truc simple, sans des boutons custom,juste revenir à ce que vous pouvez avoir de plus simple.
00:27:24 :Donc là, je suis revenu avec juste des boutons,donc c'est pour ça que ça donne ce truc-là,avec juste plein de boutons à la suite, mais voilà,le problème, du coup, c'était vraiment bien ce QMainWindow,et je te conseille de revoir dans ton script,donc là j'en ai enlevé pas mal, mais dans ton script
00:27:42 :d'origine, là je l'ai plus sous la main, maistu fais au moins 3 ou 4 grids,tu fais self.grid au moins 3 ou 4 fois, dans le unit,
00:27:51 :tu le refais dans le createLayout,et tu le refais, quand tu fais un game ici,tu refais un self.grid que tu mets parentNone, donc j'ai l'impression
00:28:00 :qu'il y a des trucs pas très clairs aussi à ce niveau-là,donc voilà, je te le dis parce que j'ai vuque plusieurs fois tu recréais un QWidlayer,donc je sais pas si c'est parce que pendant que tu débugais,voilà, t'as essayé plusieurs trucs,ok, oui d'accord, ok,donc c'est setParent, ok,
00:28:21 :oui d'accord, je comprends, c'est parce que tu refais des jeux, ok,donc il y a probablement une logique avec ça,si tu veux refaire des jeux, ok, mais voilà,je te laisse regarder ça,je vais te répondre dans ta question avecplus de précision et le petit code pour que tu puisses regarder,
00:28:39 :mais voilà, c'était ça le problème.Et je te laisse reprendre du coup Pierre.Merci pour l'intervention, je pense que c'est bien d'avoirdes trucs variés aussi, ça rendort moins.
00:28:55 :Du coup, juste pour revenir sur où est-ce qu'on était,effectivement c'est beaucoup mieux, vous m'entendez là, parce que je veux être sûr de ne pas parler dans le vent.
00:29:04 :Ouais, merci.Donc oui, en termes de gestion d'espace mémoire,les générateurs c'est hyper puissant, et du coup Yannick,tu disais, ce que tu ne comprenais pas, c'est que tu avais des instructions après le yield,genre quoi, genre en fait tu avais peut-être des trucsconditionnels, un truc,je sais pas, on peut se dire, imagine qu'en fait
00:29:27 :on veut faire le carré que des nombrespairs, donc on pourrait direif lm, et là la division euclidiennepar deux égale zéro,et là on sort machin, et puis si c'estun pair, on peut dire, bah en fait,tu me sors l'élémenttout seul.
00:29:51 :Je suis, pardon, merci.Là c'est bon, vous voyez mon écran?Oui, oui, oui, ok, merci.Du coup Yannick, tu peux remettre dans ton, attends, c'est quoi?
00:30:21 :Il était au même niveau d'indentation?Ici, genre après tu avais un printhello par exemple?Bah pourquoi pas, attends je vais regarder,est-ce que ça donne quelque chose?
00:30:36 :Ah tu vois, il n'y a pas de soucis, à chaque foisque je l'appelle, tu vois, c'està chaque fois qu'il va faire le yield,après ça reste une boucle, donc il faitle yield, c'est à dire il te sort ton élément, et puis tu voisil m'affiche yellow, tu vois, je pourrais dire
00:30:54 :En fait, il avance comme ça,donc il n'y a pas desoucis.En fait c'est juste que ça peut être pas mal,ça pourrait être, tu sais, une liste, peut-être que tu peuxconstruire une liste et puis tu peux dire, bah en fait j'affiche à chaque foisun message au niveau de
00:31:24 :l'indentation, enfin bref tu peux faire plein de choses.Non c'est pas, c'est vraiment différentd'un retour, faut vraimentque tu te dises que, moi je le vois comme je te dis,un phantôme, c'est à dire une liste avec le squelette des élémentscomment je les veux, et après c'est quand j'y accède
00:31:42 :que j'ai accès à mes éléments.C'est un petit peu conceptuel, franchement, le générateurmais,j'espère que c'est un peu plus clair pour toi maintenant.Ok, très bien. Est-ce que vous avez
00:32:01 :des questions sur les générateurs, les autres?Ou est-ce que vous voulez voir du latex?Ouais, mais je te dis, regarde bien au niveaudes listes, etc. C'est surtout là que tu en trouveras, après
00:32:21 :tu peux avoir des générateurs qui sont pas sur des itérables, maisça a moins de sens.Ok, du coup,pour ceux qui,pour tout le monde, j'avais trouvécette petite libe,je l'ai vue sur Twitter,attendez, il va falloir que je zoom.
00:32:57 :Est-ce que vous voyez? Ouais, ça va.Alors, en fait, déjà,ça marche pour les Jupyter Notebooks,dans Google Collab, je ne sais pas si vous connaissez,en fait, si vous avez un compte Google,vous avez accès à Jupyter Notebook,donc en fait, ça vous permet de pouvoir exécuter du code
00:33:18 :dans un navigateur Internet.Vous pouvez dire,for e in range 10,print e.En fait, c'est pas mal, c'est beaucoup utiliséen data et chez les scientifiques,les Jupyter Notebook, parce qu'en fait,vous avez des cellules que vous pouvez déplacer à souhaitet que vous pouvez relancer. Vous voyez, par exemple,
00:33:51 :là, vous pouvez dire, j'ai travaillé sur cette cellule,après j'en travaille sur une autre et je peux lanceruniquement la cellule que je veux.Donc, c'est assez intéressant.
00:34:03 :Voilà, donc ça, c'est juste une question sur...Ouais, c'est quoi ta question, Gabriel?Jupyter Notebook et Google Collab,j'ai vu que ça marcherait à peu près pareil.
00:34:15 :Ouais, bah c'est parfait.Anaconda, en fait, ça contient Jupyter,il y a plus de choses, c'est ça, non?Non, en fait, Anaconda, c'est une...Je m'entends en double.
00:34:30 :Anaconda, il y a peut-être beaucoup de librairiesque je ne connais pas.Je ne sais pas s'il y a un haut-parleur ou un truc.Ouais, merci. En fait, Anaconda, c'est une distribution de pythons.
00:34:42 :C'est un peu comme Python XYou des choses comme ça.En fait, c'est des espèces de packages.Quand tu installes Python, tu installes aussi, tu vois,avec Anaconda, tu as Spider et tout ça, tu as toutes les librairiesscientifiques, NumPys, IP, etc., et Jupyter Notebook.
00:35:00 :Mais en fait, Google Collab,c'est des Jupyter Notebook. C'est juste qu'ils sontsur le Google, tu peux les partager avec tes amis,etc. Mais vraiment, Google Collab,
00:35:12 :Jupyter Notebook, etc., c'est la même chose.Et oui, Anaconda, c'est une installation à part.Moi, je n'aime pas du tout ce genre d'installation parce qu'en fait,tu as des surcouches, tu vois, après, pourinstaller des packages, c'est plus pip, il faut faireAnaconda, etc. Enfin bref, c'est un peu le bordel, je trouve.
00:35:30 :Donc moi, je préfère utiliser du pur Python et puisj'installe mes librairies au besoin, quoi. Parce qu'en fait,souvent, c'est des trucs assez lourds.Ouais, c'est assez lourd. Voilà, donc là, on est
00:35:42 :sur un Jupyter Notebook dans Google Collab.Donc là, ici,on peut installer une librairie. En fait, c'est un peucomme IPython, vous savez que...Défens d'intelligence futile, ouais.
00:35:57 :En fait, c'est bien pour faire de l'exploration de données, etc.Moi, j'aime bien faire ça aussi quand j'ai des projets.Je fais de l'exploration de data avec le Jupyter Notebookparce qu'en fait, par exemple, quand vous faites un graph, il s'affiche et il reste.
00:36:12 :Vous n'avez pas besoin de le refaire afficher, etc.Et puis après, je retourne sur mon script, quoi.Donc du coup, ici, on peut installer...Donc là, c'est la librairie que je voulais vous montrer.
00:36:24 :Elle s'applique comme un décorateur, que vous avez déjà montré.Donc c'est la librairie Latexify.Et en fait, ça vous permet d'affichersous format Latex. Je ne sais pas si vous connaissez.
00:36:36 :En fait, Latex, c'est un langage qui vous permetd'afficher des formules mathématiquesd'une manièrescientifique. En fait, vous voyez ici,ce genre d'écriture, c'est du latex.
00:36:51 :Parce que, en fait, latex,vous le connaissez Microsoft Word. En fait, latex,c'est un autre éditeur de texte qui vous permet d'afficher des formulesmathématiques et aussi toutes lespublications scientifiques, etc. Elles sont écrites en latex.
00:37:06 :C'est un format assez proprepour les scientifiques. Et donc là, en fait,cette librairie, elle vous permet d'afficher vosformules. Parce qu'en fait, des fois,
00:37:18 :par exemple, je vous ai dit pour faire le carré de A,on fait A étoile, étoile, carré. Et en fait, ça, ça peut ne pas être
00:37:24 :prélisible. Vous le savez parce que c'est vousqui l'avez codé. Mais en fait, si quelqu'un tombe dessus,vous êtes d'accord avec moi que c'est quand même plus simple à lirecarré A, donc A au carré, que ça.
00:37:36 :Donc en fait, je trouve que cette librairie, elle est intéressante parce quevous pouvez faire des rendus de vos formules mathématiquesen latex comme ça. Donc je trouve ça intéressant.
00:37:45 :Il faut peut-être queje lance l'install.Ok.Donc voilà.Après, par exemple, si ça,je ne sais pas si vous l'avez déjà vu.Ouais, voilà.
00:38:06 :C'est comme si vous écriviez à la main.Donc ça, c'est par exemple quand vous voulez résoudre un polynômed'ordre 2, vous calculez le déterminant.S'il est négatif ou positif, il y a deux solutions,zéro, enfin bref.
00:38:21 :Ça vous permet, vous voyez ici, ça c'est un truc un peu illisible.Par contre, ça, c'est beaucoup plus lisible.Après, vous voyez, on peut définir. En fait, il suffit juste, vous définissez
00:38:30 :votre fonction et vous avez un décorateur ici qui vous permet d'afficherfacilement la fonction. Vous voyez, c'est quand mêmebeaucoup plus simple. Donc là, le sinus,
00:38:39 :c'est le sinus cardinal. Ça s'utiliseen optique, par exemple.Ici, vous avez la suite de Fibonacci qui est définie comme ça.Donc, vous voyez que vous pouvez afficherproprement vos fonctions.
00:38:54 :C'est juste, voilà, c'était un appartéd'une petite bibliothèquesympa qui fait de la belle présentation.Je ne sais pas si ça vous intéresse ou pas.
00:39:06 :Dites-moi dans le chat si vous aimez bienque je vous montre des fois des petites bibliothèques comme çaou si vous vous en fichez, que c'est des trucsque vous n'utiliserez jamais. N'hésitez pas à me le dire,
00:39:18 :je ne serai pas vexé.Voilà, des questions là-dessus?Il ne faut pas avoir peur des maths.Ce qui est pas mal, par exemple, si je fais partageret je fais copier le loinde modèle partage.
00:39:36 :En fait, si je vous envoie icile lien, vous pourrez aller directementsur le Jupyter Notebooket vous pourrez travailler sur le lien.Donc, vous voyez que vous pouvezaller sur le Jupyter Notebook et vous pourrez travaillerdessus si vous voulez faire des modifications.
00:39:57 :En gros, le décorateur,j'en avais déjà parlé,j'avais fait des exemples, ça vient vraimentrajouter des features un peu à ta fonction.Donc là, t'as pas besoin de t'occuper de quelque chose,t'as juste à mettre le décorateur à ta fonctionet puis voilà, ça marche.
00:40:23 :Ok, merci pour vos retours si ça vous intéresse.Dites-moi si vous arrivez à accéder à ce Jupyter Notebook,si vous arrivez à vous connecter dessus.
00:40:32 :Normalement, on devrait voir ici.On peut même l'importer dans notre drive perso du coup?En fait, il s'importe automatiquement, je crois.Il va aller se mettre dans ton drive.
00:40:44 :En fait, il va te prendre une version.Si par exemple, t'as des projets de groupe,tu peux bosser en même tempssur des cellules, etc.
00:40:56 :Le gars, il voit ce que tu fais.Je vois qu'il y en a qui se sont tapés aussi du latex.En fait, au début, c'est vraiment galère à utilisermais après, le rendu est quand même assez sympa,c'est assez propre de faire du latex.
00:41:11 :Voilà pour ça.Je ne vais peut-être pas passer là-dessus sur la mesure.Ça risque d'être un peu laborieux.Oui, Gabriel, je t'écoute.Dans Colab, tu peux voir les bibliothèquesqui étaient installées dans ton notebook ou pas?
00:41:29 :À mon avis,si tu faisun collage,si tu fais...Attends, imagine que j'ajoute...Tu peux faire un picklist comme ça.Ah oui, ok.Là, tu vas voir...
00:41:53 :Là, tu as toutes les livres qui sont...Vu que c'est des Jupyter Notebook de Google Colab,ils te mettent déjà à disposition plein de packages.
00:42:02 :Là, tu vois, j'ai...Je vais voir Panda quelque part.Tu vois, il y a Panda alors que je ne l'ai pas installé.Mais en fait, c'est Google Colab qui met à disposition des librairies.
00:42:14 :Si tu en veux d'autres, tu les rajoutes.Et donc ça, juste dans un Jupyter Notebookou même dans Epython,si vous tapez foin d'exclamationou même, je crois que ça marche, pourcentage,c'est en fait si vous voulez interpréter une commande.
00:42:32 :Je suis dans un interpréteur Python, mais si je fais pourcentage,il va comprendre que tout ce qu'il y a après, c'est juste une commande de terminal.
00:42:38 :Vous voyez ici, par exemple, si je fais pourcentage ls,il va me faire le ls de Linux.Donc c'est pas mal.Voilà, après je vous proposesur les 10 minutes qui restent,qu'on s'amuse un peu avec un datasetet qu'on fasse un peu de Panda et de Matplotlib dessus,
00:42:59 :si ça vous intéresse.Dites-moi.Cool.Du coup, j'ai récupéréun fichier CSV sur Internet, c'était une source libre,qui s'appelle EspéranceVie.Donc il y a beaucoup de data.
00:43:26 :Pas beaucoup, après,il n'y a que 2939 lignes.C'est pas beaucoup,vous pourrez en avoir beaucoup plus.En fait, c'est pour chaque pays.Vous avez le pays, l'année de la mesure,le status, c'est-à-dire si c'est un pays en voie de développementou si c'est un pays développé, son espérance de vie,
00:43:50 :la mortalité des adultes, la mortalité infantile,l'alcool, le pourcentage...je ne sais plus ce que c'est, l'hépatite B,enfin bref, beaucoup d'informations.Juste pour, si ça vous intéresse, j'utilise une extension.
00:44:05 :En fait, un fichier CSV, c'est toujours séparépar une virgule ou quoi que ce soit.Et là, quand vous avez un fichier CSV sans extension,c'est un peu chiant à lire parce que vous avez tout de la même couleur.
00:44:17 :Donc là, avec cette extension-là, lui, il met de la même couleurde la même colonne parce que vous voyez ici, comme c'est décalé,c'est un peu chiant à lire, mais comme il me met en couleur grisles années, je sais que là, c'est les années. Par exemple,
00:44:29 :je vois que c'est en orange, je sais que c'est le statut.Donc ça, c'est l'extension...Elle est où?Rainbow CSV.Rainbow pour arc-en-ciel, parce qu'il met une couleuren fait à chaque colonne.
00:44:47 :Donc, on va s'amuser un peu avec ce dataset-là.Donc, ce que je vous propose, c'est qu'on essaye d'abordde faire un histogramme de l'espérance de vie,comme ça on voit un petit peu le match pot de libre.
00:44:59 :Ensuite, on va faire un bar plot par pays de l'espérance de vie.Et là, on va faire un bar plot par pays de l'espérance de vie.
00:45:05 :Ensuite, on va faire un bar plot par pays de l'espérance de vie.Donc, pour voir un peu les différents types,les différentes espérances de vie en fonction du pays.
00:45:14 :Après, je vous propose qu'on fasse un scatter.Un scatter, c'est en fait un nuage de points où on va tracerl'espérance de vie en fonction de la consommation d'alcool,pour voir s'il n'y a pas un lien.
00:45:26 :Spoiler alert, il y en a un.Et on va essayer de mettre une couleur différenteen fonction de... je vais expliquer après ce que c'est un bar plot.
00:45:35 :Et on va mettre une couleur en fonction si le pays est en voie de développement ou pas.Et après, en petit bonus, on fera une corrélation entre les variables.
00:45:47 :Pour le Nord, Al Salo.Du coup, j'espère qu'il n'y a pas les informations de consommation d'alcool pour le Nord,parce que sinon, ça va être encore la débandade.
00:46:04 :En plus, en ce moment, c'est le carnaval de Dunkerque,donc la consommation est en hausse.Du coup, ce qu'on va d'abord faire, c'est qu'on va importer le data frame.
00:46:18 :Donc ça, je vais quitter et je vais relancer un peu le tout neuf.Donc on commence toujours, import Panda ASPD.Et on va importer des librairies de plotlib.express.as.px.
00:46:44 :Et ensuite, on va importer matplotlib.plot.as.pmt.Et ok, je vais peut-être zoomer un peu.Où est-ce qu'il est mon terminal?Ça va, vous voyez assez bien ou pas?
00:47:11 :Le rouge, vous ne voyez pas bien.Ouais, les critères sont mauvais.Bon, c'est juste pour les imports.Alors du coup, là, je vais mettre un peu plus gros.
00:47:26 :Donc, on va mettre un peu plus gros.Là, j'ai importé Panda, c'est la librairie qui permet de manipuler les datas.Ici, j'ai importé plotlib.express, c'est une librairie qui permet de faire des graphiques HTML interactifs.
00:47:48 :Et ça, c'est la librairie classique de graphiques statiques.Mais bon, du coup, je les ai importés là et puis vous allez voir, on va les utiliser après.
00:47:57 :Ne vous en faites pas pour les imports, si vous ne les voyez pas bien, ce n'est pas grave.Donc là, on va importer notre data frame.
00:48:05 :Donc, on fait pd.readcsb et là, on va mettre le nom de notre...Ok, on lui spécifie que le séparateur, c'est une virgule.Voilà, et on va...
00:48:28 :Donc là, on devrait avoir notre data frame.Donc, si je fais...Donc là, vous voyez, on a juste importé notre fichier CSV dans notre data frame.
00:48:41 :Alors, le premier truc qu'on a dit qu'on essayerait de faire, je vais le mettre ici.Et puis là, je vais mettre mon script.C'est un peu dur en zoom, mais on va essayer de s'en sortir.
00:48:56 :Ok, donc le premier truc qu'on va essayer de faire, c'est un histogramme.Un histogramme de l'espérance de vie.Et en fait, la librairie Panda, elle nous met à disposition déjà une méthode toute faite.
00:49:09 :On peut dire df.hist et là, on a juste à lui spécifier le nom de la colonne qu'on veut en histogramme.Super.C'est...Pourquoi il fait ça?
00:49:24 :Comment elle s'écrit?C'est espérance de vie.Donc nous, ce qui nous intéresse, c'est cette colonne là.Et je fais ça et je lui dis plt.show.
00:49:35 :Parce qu'en fait, ce qu'il va faire, c'est qu'il va stocker...En fait, c'est en off, nous on ne le voit pas.Mais il va faire un graph avec l'histogramme de l'espérance de vie.
00:49:47 :Et ici, c'est juste pour dire de l'afficher.Parce qu'en fait, si je ne mets pas ça, il va juste me le stocker quelque part et il ne va pas me l'afficher.
00:49:53 :Ok?Donc là, je le relance.Bien sûr, ça n'a pas marché.Parce que je n'avais pas sauvegardé.Donc là, voilà, on a un histogramme de l'espérance de vie.
00:50:09 :Est-ce que vous voyez ce que c'est un peu un histogramme?En gros, ça, comment ça se lit?Ça permet de voir un peu quelle est l'espérance de vie la plus...
00:50:22 :En fait, vous voyez une distribution d'espérance de vie dans le monde.Donc là, en gros, on n'a pas d'informations sur le pays ou quoi que ce soit.
00:50:29 :C'est juste l'espérance de vie.Donc là, vous voyez qu'en fait, si vous imaginez que vous êtes un extraterrestreet vous piochez un humain au hasard dans le monde sans...
00:50:41 :En fermant les yeux, vous ne savez pas où le piocher, dans quel pays, dans quel endroit,si c'est une île, etc.Donc, vous piochez juste.
00:50:49 :Et cet histogramme-là, il vous dit que vous avez le plus de chances de trouver un humaindont l'espérance de vie est proche, ici, entre 70 et 80.
00:50:59 :Parce que vous voyez ici, ça, ça correspond au nombre récupéré.Donc là, en fait, c'est un peu comme s'il découpait les espérances de vieet il compte le nombre de personnes qui ont cette espérance de vie-là dans cet intervalle-là.
00:51:13 :Donc là, en fait, il a pris l'intervalle entre 70 et 80 ans en espérance de vie.Donc en gros, c'est comme s'il avait compté tous les humains.
00:51:23 :Et il a compté, il a dit, combien j'ai d'humains qui se situent entre 70 et 80 d'espérance de vie.Donc il en a compté 800, par exemple.
00:51:32 :Et donc là, il nous a fait un histogramme comme ça.Et donc, vous voyez, ce genre d'information, ça vous permet de vous dire,comme je vous l'ai dit, si vous piochez un humain au hasard,vous avez le plus de chances de trouver un humain qui est entre 70 et 80.
00:51:43 :Et vous avez très peu de chances de trouver un humain qui a cette espérance de vie-là.Donc en fait, ce que ça veut dire, c'est que, c'est juste un peu pour faire parler,en fait, ça s'appelle la data vise, c'est la data visualisation,c'est pour faire parler un peu la data, parce qu'en fait,
00:52:04 :quand on voit un tableau et on ne comprend pas trop ce qui se passe,là, ça permet de voir visuellement ce qui se passe sur l'espérance de vie.
00:52:10 :Donc ça, c'était un peu pour l'espérance de vie.Voilà, si ça vous va.Et ensuite, maintenant, on peut faire un bar plot.Donc en fait, un bar plot, vous allez voir ce que c'est.
00:52:24 :Vous allez comprendre, c'est juste bar.Et nous, ce qu'on veut tracer, en fait, c'est le PI, donc c'est PI et BF.Espérance de vie.Là, je vais faire PLT.
00:52:45 :Ok.Je lance.Donc c'est ça, un bar plot.En fait, pour répondre à ta question, Gabriel,ici, quand tu importes, j'ai eu problème d'ailleurs il n'y a pas longtemps,ici, quand tu fais ton import CSV, je fais l'hypothèse que tout va bien se passer.
00:53:13 :Tu peux spécifier l'encoding, en fait, tu peux dire,tu as un truc, c'est encoding, et là, par exemple, c'est WTF8,donc il n'y a pas de souci, mais tu peux avoir du latin 1, par exemple,ou des choses comme ça, donc tu peux lui spécifier quel est le type d'encoding.
00:53:29 :Après, ça, c'est un gros problème dans la data, c'est que parfois,tu n'as pas l'encoding et c'est un peu galère.Je te l'accorde, mais la plupart du temps, ça se passe bien.
00:53:45 :Donc ça, c'est un barplot. Je ne sais plus qui posait la question.Donc là, on ne voit pas grand-chose, je vais zoomer sur une partie,je ne sais pas, on va se mettre ici.
00:53:55 :En fait, vous voyez ici, je lui ai dit, je veux que tu me traces,donc tu fais un barplot, je veux que tu me traces l'espérance de vie en fonction du pays.
00:54:04 :Donc ça, ça permet de voir, par exemple, pour chaque pays,il vous a tracé l'espérance de vie du pays qu'il a trouvé dans le data.
00:54:21 :Donc c'est une information intéressante, je trouve.On peut voir, vous voyez, en Islande, en fait, ils ont une très bonne espérance de vie,mais il faut savoir que c'est un petit peu biaisé parce qu'il y a beaucoup moins d'habitants.
00:54:35 :Donc forcément, et comme le niveau de vie est assez élevé en Islande,et bien, non, en fait, visuellement, ça ressemble, mais ce n'est pas du tout la même chose.
00:54:48 :Parce qu'un histogramme, c'est vraiment une distribution de tes valeurs,alors que là, ce qui te montre, c'est juste le nombre d'habitants,l'espérance de vie par pays.
00:54:59 :Ce n'est pas pareil qu'un histogramme.Mais je suis d'accord, visuellement, ça ressemble.Mais tu vois que là, en fait, il n'y a aucune logique de distribution.
00:55:08 :Il n'y a pas de, tu vois, je te disais tout à l'heure,il y avait beaucoup de données qui étaient représentées très proches de...Je vais pas plus long si tu as compris,parce que je vais entrer dans des choses et puis je vais vous embrouiller.
00:55:26 :Après, ce qu'on peut faire, c'est un scatter diagrammede l'espérance de vie versus la colle, et on veut lui dire,mets-moi une couleur pour le développement.
00:55:37 :Donc ça, ça va nous permettre de faire un petit peu de manip avec les data frames.Donc avant ça, il faut qu'on définisse, en fait, vous voyez ici,il y a un endroit où j'ai le statut, developing,parfois j'ai du, donc là, developing, developed, etc.
00:55:54 :Donc vous voyez qu'en fonction du pays, c'est soit développéou soit en voie de développement.Donc ce qu'on aimerait bien, c'est qu'on est...On voudrait avoir une colonne qui, quand c'est developing,on affiche en rouge, par exemple, et quand c'est developed,on affiche en vert.
00:56:14 :Donc pour ça, on va créer une nouvelle colonne.On va dire, on va l'appeler colors, et on va lui dire...On va lui dire qu'on va faire...
00:56:24 :On va appliquer une opération sur la colonne statut,donc pour ça, on lui dit apply.Donc ça, apply, ça veut dire qu'il va appliquer une opérationsur la colonne statut.
00:56:34 :Il va l'appliquer sur toutes les lignes,et ici, je vais lui définir quelle fonction il applique.Donc là, je vais utiliser une fonction anonyme, lambda,et je vais lui dire à chaque élément,tu lui retournes read if,si c'est developing,if developing,et sinon, on va lui mettre du bleu.
00:57:08 :Donc on va voir si ça marche déjà.Maintenant, si je vais voir mon df,donc a priori, ça a l'air de marcher.Non, ça n'a pas marché parce qu'il m'a mis du read partout.
00:57:24 :J'ai dû me planter.Developing, pourquoi il ne marche pas?Je l'ai vu tout à l'heure.Ah, oui.Désolé.Donc là, maintenant, si je vais voir mon data frame,developing, developing, ok.
00:58:11 :On va essayer d'aller voir s'il a bien marché quand même.Là, en fait, je vais filtrer, je vais lui dire,affiche-moi les datas pour lesquelles le statut est en develop,pour être sûr qu'en fait, il a bien mis du bleu à la place.
00:58:28 :Donc si c'est developed, ok.Ça a l'air de marcher, vous voyez, il m'affichait que les develop,et il y a bien du bleu en face.
00:58:43 :Ils n'étaient pas ceux qui étaient, ouais, ok.Non, non, mais du coup, je pense que j'avais dû me planter dans le lambda.Donc là, vous voyez, j'ai créé une colonne,une nouvelle colonne à partir de la colonne status.
00:58:53 :En fait, je lui ai appliqué cette fonction-là,qui dit en fait, à l'élément, tu lui mets rouge,si l'élément est égal à developing, et sinon tu lui mets bleu.
00:59:02 :Ok, et donc maintenant, ce que je vais faire,je vais faire mon nuage de points.Donc je fais plt.scatter.Comment ça s'écrit? C'est scatter.Là, je lui dis, je veux que tu m'affiches,qu'est-ce qu'on avait dit?
00:59:19 :On veut que tu affiches l'alcool, je crois.Ouais, alcool.Ah, désolé.C'est un peu, travailler en zoom comme ça,c'est un peu perturbant.Et ici, on va lui mettre l'espérance de vie.
00:59:46 :On va déjà afficher ça, on va voir.plt.show.Ok.Là, vous voyez, il m'a affiché,en fait, il m'a bien fait,donc là, il m'a tracé,donc là, c'est la consommation d'alcool,et ici, c'est l'espérance de vie.
01:00:17 :Donc on voit qu'au plus on va vers,on pourrait presque,c'est peut-être pas très évident,mais en fait, vous voyez que quand la consommation d'alcoolest élevée, attendez, je suis en train de faire dire des bêtises,parce qu'on dirait que quand la consommation d'alcool est élevée,on a une espérance de vie importante,
01:00:34 :mais en fait, ça c'est un biais qu'on pourrait faire.En fait, ce qu'il faut se dire,c'est qu'on pourrait aussi se dire,dans les pays développés,il y a de la consommation d'alcool,parce que les gens peuvent se permettre d'en acheter.
01:00:48 :Donc vous voyez, en fait, on peut faire,on peut faire des biais comme ça cognitifs,mais il faut,voilà, on fait juste parler la data,donc là, on peut l'interpréter,et si par exemple, je voulais dire,j'aimerais bien que mes points soient colorés en bleu ou en rouge,en fonction si c'est un pays développé ou non,
01:01:07 :donc là, j'ai juste à faire,c'est dans le scatter,je vais dire color égal,et là, en fait, je lui mets,la nouvelle colonne que j'avais créée.
01:01:18 :Donc là, je sauvegarde,je relance,et vous voyez, en fait, ici,il m'a mis,donc c'est logique,parce qu'en fait, les espérances de vie élevées,donc entre 80 et 90,c'est bien pour les pays qui sont développés.
01:01:34 :Par contre, pour les pays qui sont moins développés,malheureusement,on voit qu'ils sont en bas.Et les espérances de vie faible,malheureusement, c'est des pays qui sont moins développés.
01:01:44 :On voit bien que les points rouges,ils sont majoritairement en dessous des points bleus.Donc voilà un peu ce qu'on peut faireavec Panda et Matplotlib,et juste en complément,je peux vous montrerce qu'on peut faire avec Plotly.
01:01:58 :Donc on va avoir besoin de ça,et je l'avais déjà écrit ici.Vous allez voir, c'est assez puissant.Donc on va faire ce qu'on appelle,une corrélation.
01:02:11 :clic.showOk, je lance.Donc en fait,vous voyez ici, ça m'a ouvert unPlotly, c'est une librairiequi fonctionne avec un navigateur.Donc c'est comme je vous disais tout à l'heure,c'est pas du statique,c'est de l'HTML.
01:02:33 :Et en fait ici, on aune matrice de corrélation.Vous voyez ici, vous avez l'échelle.1, ça veut dire que c'est très corrélé,et violet, doncpresque négatif, ou même plutôtici, quand c'est cette couleur-là,ça veut dire que c'est pas corrélé.
01:02:49 :Et une corrélation, ça veut dire quoi?C'est que les données, elles sonttrès liées les unes aux autres.Donc en fait, on peut par exemple,on va voirsi on regarde,je sais pas,ici, il y a l'air d'avoir une corrélationimportante, on va essayer de trouver un truc
01:03:07 :assez parlant.Là, vous voyez, c'est assez parlant.Income composition of resource,ça veut dire, ça c'est une mesuredeles revenus. Income, c'est les revenus.
01:03:23 :Et donc vous voyez que c'est jaune,et si on regarde la case correspondante,ici, espérance de vie,c'est jaune. Donc en fait, c'est assez logique.
01:03:31 :Au plus les gens, ils ont des revenusimportants, au plus leur espérance de vieelle est importante.C'est pour ça que c'est jaune, parce quele fait d'avoir beaucoup d'argentou peu d'argent, c'est très liéà l'espérance de vie. En fait, ici, ça ne vous dit pas
01:03:45 :si quandt'es riche, t'as une bonne espérance de vie, ça vousdit juste que vos revenus,ils sont très liés à votreespérance de vie, et vice versa.
01:03:55 :Donc ça, vous voyez, c'est assezet on peut zoomer làsur n'importe quoi, c'est ça qui est pas malavec Plotly, c'est que vous pouvezzoomer facilement. On peut revenir
01:04:05 :icinon c'était pas ça, ouaisun truc de base. Donc là, si par exempleje voulais zoomer surl'espérance de vie que j'étaisen train de regarder,donc là, vous voyez, c'est très lié.
01:04:23 :Les revenus des ménagesavec l'espérance de vie,c'est très lié, parce qu'en fait, la couleur icic'est dans l'orange, donc on a un taux de corrélationqui est proche de 1. En fait, une corrélation
01:04:33 :1, ça veut dire que c'est très lié.Par contre, vous voyez,il n'y a l'air d'avoir aucun lienentreles revenuset la mortalitépar la mortalité adulte.
01:04:49 :C'est à dire queil n'y a pas de lien en fait.Le fait qu'il n'y ait pas de corrélation,donc c'est plutôt ici, il faut trouverquelque chose qui est là, donc le bac,je ne sais pas ce que c'est, je ne pense pas que ce soit le baccalauréat.
01:05:01 :Enfin bref,vous avez un peu compris la corrélation,et vous voyez que c'est juste obtenuavec deux lignes de code.Enfin trois, parce qu'on a importéle data frame, on a créé la figure,donc c'est corrélation ici,et on a affichéla figure.
01:05:19 :Voilà, c'est ce que je voulais vous montrerun peu. Franchement,Panda, Matplotlib, etc.,il y a des millions de choses à dire,mais voilà, c'était histoire de s'amuser un petitpeu avec la dataet la visualisation.
01:05:37 :Pareil, dites-moi, est-ce que ça vous intéressede voir ce genre de petites manipulations,est-ce que vous aimez bien, ou est-ce queça ne vous intéresse pas et vous ne voulez plus en voir?
01:05:47 :J'adore!Très bien.Ok,si vous voulez, je vous en ferai de temps en tempsdes petites manipulations de data comme ça.Je n'ai pas réussi à résoudre le problème,mutuef8.
01:06:07 :Ok, n'hésite pasà mettre, Gabriel, une questionsi tu as un problème avec mutuef8.Mais ça dépend beaucoup de ton fichier d'entrée,en fait, ça se trouve que tu asun accent circonflexe, ou des trucscomme ça qui ne passent pas.
01:06:21 :Ça peut arriver.Et essaye, je te dis,de changer l'encoding quand tu lis.Tu vois, quand tu fais iciencoding,essaye de trouver, de tester un autre encoding.
01:06:37 :Donc moi, j'avais utilisélatin1comme ça. Tu en as d'autres?Essayez comme ça,latin1?Ok, essaye d'en d'autres.ASCII,plein de choses.Et après, des fois, peut-être que tu as des...
01:06:57 :Je ne sais pas, là, franchement,je ne peux pas t'aider comme ça, maissi tu as besoin, je peux t'aider sur ton CSV.Peut-être que tu as une ligne ou deux,peut-être que c'est les headers, tu sais,les noms des colonnes qui foirent. Ça peut arriver.
01:07:09 :Donc, voilà,peut-être si je peux t'aider,envoie-le en question. Et puis, si c'estun fichier privé,un truc de ton boulot,tu me dis, je peuxregarder en privé, ou sinontu modifies les valeurs qu'il y a dedans.
01:07:25 :Comme ça, moi, je n'ai pas accès aux datas. Enfin bref.Ce que tu veuxpour que je puisse t'aider.Oui, t'inquiète, je t'en remercie.Tu t'en prie.
01:07:35 :Bon, voilà un peu pour le programme.Je...Je n'ai plus rien à vous dire pour l'instant.Désolé, j'avais peut-être misle programme du Mentora un peutard, mais bon, je vous avoue que j'étais un petit peuà sec d'idées.
01:07:57 :C'est la question de Yannick qui m'astimulé.Et puis, de fil en aiguille, je suis arrivé làsur la data. Donc,merci Yannick pour ta question sur lesgénérateurs et les yields. Je m'en suis servi
01:08:09 :pour mettre un peu decontenu sur le Mentora.Donc, si vous avez bien aimé la manipulationde data, j'en ferai avec plaisirYannick. Merci Aurélien.
Aucune occurrence trouvée pour « ».