Structurer son code et optimiser les données
Session du 08 décembre 2022 à 20h00
Structures de Données
Bases du Langage
Qualité & Architecture
Algorithmique & Performance
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
Structurer son code et optimiser les données
-
Organisation de son code lorsqu'on a beaucoup de données d'entrées
-
Utilisation des set. Un peu comme des listes mais permet les opérations Booléennes (union , intersection)
-
Un moyen pour optimiser le temps de chargement d'un gros dictionnaire ou dataframe dans un projet qui dure plusieurs jours
00:00:00 :attendez, il faut queje maximise pour l'enregistrement.je laisse le chat au début.est-ce que vous pouvez envoyer des trucs dans le chat pour voir si je retourne les notifs.
00:00:52 :du coup je masque le chat comme ça pour l'enregistrement c'est mieux.et puis si jamais vous avez des questions je regarderai. avant de commencer parce que je
00:01:08 :vais pas pouvoir continuer après, je vais juste faire une heure et je pourrai pas continuer après.est-ce que vous avez des questions avant de commencer que vous voulez qu'on traite en priorité? sinon
00:01:20 :je vais préparer quelques petits trucs mais si jamais vous avez des questions avant,posez les maintenant.vous en êtes très rapide, je vais éviter à la fin je pense.
00:01:29 :j'ai jamais utilisé encore des modules, genre Tkinter ou PySci ou Qt, j'ai vraiment jamais utilisé.mais Qt en fait c'est un module à part entière ou c'est inclus dans PySci, c'est que je suis mal à comprendre.
00:01:41 :Qt c'est une espèce de suite, par exemple quand tu télécharges, je suis pas non plus hyper expert là dedans,mais quand tu télécharges, Tkinter c'est vraiment une bibliothèque à part entière danslaquelle tu as toutes les fonctions et méthodes qui te permettent de faire tourner lesinterfaces graphiques, les boutons etc. donc ça c'est vraiment Tkinter. par contre Qt c'est la
00:02:07 :suite, tu peux le voir un peu comme un framework, par exemple tu as Qt designer, où tu peux faireton interface graphique un peu à la main, mettre des boutons où tu veux etc. et après tu définis
00:02:18 :quelle fonction le bouton fait, etc. après peut-être que je peux me tromper parce quej'utilise pas souvent, je fais pas beaucoup d'interface graphique, mais il me semble que c'est ça.
00:02:33 :Tu verras que Tkinter c'est ce qui tourne derrière tout ce qui est interface graphique sur Python.Ah ok, par exemple ça on l'a tué.Ok, du coup c'est une telle question, mais tu la gardes pour la semaine pro.
00:02:49 :Bon bah du coup sur le programme, j'avais prévu quelques trucs, je vous ai mis,j'ai peut-être un petit peu, je sais pas si j'ai changé, non j'ai rajouté quelque chose.
00:02:58 :Du coup en fait c'est, on va commencer par celui là.Quand j'ai vu ça sur une des questions, je sais pas si la personne qui a posé cette questionallait dans le chat, mais en gros, je vais dézoomer juste pour vous voyez le truc,c'était quelqu'un qui a proposé sa solution pour le jeu de, vous savez, tour par tour etc.
00:03:23 :Donc j'ai juste vu deux choses sur ce script. Premièrement c'était la boucle,en fait le while true. Je sais pas si vous l'avez déjà utilisé, mais c'est mon avis,
00:03:35 :mais je déconseille d'utiliser ça parce qu'en fait ce que la personne faisait,c'est que en gros, c'est pas grave si vous voyez pas bien, là c'est juste pour vous montrer leproblème en tout cas, c'est pas un problème, mais en gros ce qu'il fait c'est que quand vous faites
00:03:48 :un while true et que après vous mettez toutes vos instructions. Non mais y'a pas de soucisGabriel, après ça peut s'utiliser, mais moi j'aime pas trop faire ça parce qu'en fait,ce qu'il fait ici c'est que bon il fait tourner son script, while true ça veut dire que ça va
00:04:03 :lancer indéfiniment une boucle, du coup ça permet d'interagir avec le terminal, vous pouvez fairedes choses. Par contre il faut bien un moment, si vous voulez quitter le programme, qu'il y ait
00:04:12 :une condition de fin. Et du coup souvent ce qu'on voit quand il y a des while true c'estqu'il y a des 6.exit0, et en fait ça vient du module 6, ça envoie un signal au processus
00:04:24 :carrément qui fait tourner le programme et qui lui dit qu'il le processe. Et moi je trouve quec'est pas la manière la plus propre de fonctionner, et c'est surtout qu'en fait quand vous lisez lecode, quand vous regardez while true, vous comprenez pas trop ce qui se passe. Moi j'aime
00:04:44 :bien quand le code je le lis et que je comprends directement, et du coup ce que je vous conseillede faire c'est de pas de faire un while true, c'est de directement, par exemple si en grosvous faites un jeu et vous dites ma boucle elle tourne tant que le joueur il a perdu,
00:04:59 :mais dès qu'il a perdu je veux que le jeu il s'arrête. Donc en gros ce que vous pouvez fairec'est que vous pouvez définir une variable game on par exemple, vous l'initialisez à true forcément,parce que sinon ça va pas partir. Et ici au lieu de mettre while true, vous mettez while game on.
00:05:20 :Et en fait du coup c'est pareil, vous voyez ce que j'ai fait while true, là j'ai juste remplacégame on, et ici au lieu de mettre des 6.exit partout, et bien vous mettez game on égal false.
00:05:32 :Comme ça en fait, du coup lui dès que le script va voir, il va atteindre cette valeur là, parceque par exemple le player hp en dessous il est négatif, ou alors celui de l'or qui est négatif,donc il va mettre sa variable à game on égal false, et en fait lui il va se retrouver ici,
00:05:59 :dans sa boucle indéfinie. En fait la boucle indéfinie c'est une espèce d'illusion, parce quec'est vous savez avec la fréquence d'horloge de l'ordinateur, à toutes les fréquences d'horloge,il va vérifier la variable game on. Pour vous c'est invisible, j'ai vu la question, je vais y
00:06:17 :aller. Pour vous c'est invisible parce que c'est hyper rapide, mais en gros c'est comme si leswhile de toute façon c'est comme des boucles fortes, donc il fait des itérations. Du coup
00:06:26 :il boucle comme ça indéfiniment, et hop une fois que le game on passe à false, il arrête. Et commeça on ne fait pas de 6.exit, je trouve que c'est un petit peu barbare de quitter son script,
00:06:39 :parce qu'en fait le 6.exit pour moi c'est plutôt pour sortir d'un script quand vous voulez vraimentqu'il ait le process. Là en fait c'est juste votre jeu qui s'arrête, donc pour moi il n'y a
00:06:51 :pas de raison de mettre un 6.exit. En fait moi je te conseillerais Gabriel de, ou tu peux,ça rendra ton code plus visible. Moi j'aime pas beaucoup utiliser les breaks, souvent si tu mets
00:07:07 :un break c'est que t'as mal dimensionné ton code, l'architecture est mauvaise. Des fois on voit desbreaks et des continues, moi j'aime pas utiliser ça parce que je comprends pas trop pourquoi on enarrive là. Je me dis que c'est un peu une solution d'urgence, le mieux c'est de, voilà en fait,
00:07:35 :quand tu lis le code, tu dis ok game on, et en fait quand t'arrives ici tu vois game on false,bah tu comprends parce qu'en fait ici t'as plus de points de vie. Et du coup quand tu lis ton code,
00:07:48 :tu comprends pas si tu vois un break, tu dis break pourquoi, donc du coup t'es obligé de retourner audébut de ta boue, là ça va parce qu'on en a qu'une, mais des fois elles sont indentées, et du coup tucomprends plus trop ce qui se passe. T'imagines là si t'en avais une autre, parce que ça se peut,
00:08:03 :t'imagines là si t'avais ça, tu peux avoir un while true, et du coup au bout d'un moment tu disbah merde en fait lui, et ici s'il t'avait un 6.exit0, donc tu te rappelles une fois t'avais
00:08:20 :posé une question Gabriel, j'avais dit si tu fais l'exit dans la boucle phi, tu vas faire un exit dansla boucle mer, mais en gros le truc c'est que si tu mets un 6.exit0, tu vas pas comprendre pourquoi,
00:08:33 :alors que si t'as un game on false, et que ici t'as un while game on, et puis ici on va dire,je sais pas, ça pourrait être partie tu vois, en fait si t'avais un jeu avec un sous-menu,en fait t'as un menu, tu lances une partie, donc là c'est ta partie game on, mais une fois que
00:08:54 :t'as perdu, tu veux pas complètement partir de ton système, tu veux, voilà par exemple si t'asd'autres manches, des choses comme ça que tu veux avoir, bah tu restes quand même dans ton menu,par exemple pour relancer. Donc là en fait tu vas comprendre que t'as plus de points de vie,
00:09:07 :du coup ta partie est terminée, du coup tu sors de cette première boucle là, mais par contre turestes dans ta boucle partie, donc dans la boucle générale qui va te permettre de pouvoir relancerune partie, alors qu'en fait si t'avais mis un 6.exit0 ici, bah le truc c'est que tu serais
00:09:29 :sorti de la petite boucle, mais tu serais aussi sorti de la grande boucle. C'est un peupour ceux qui avaient pas vu la question, en fait Gabriel m'avait demandé, une fois il avait deuxboucles imbriquées, et en fait il avait un 6.exit dans une boucle phi, et du coup en fait, je sais
00:09:52 :pas si il a mis sur le chat, ouais voilà c'est ça, bah je vous laisse voir dans le chat, mais engros merci Gabriel, du coup en fait si vous mettez un 6.exit dans vos boucles phi, vous ne
00:10:01 :contrôlez pas, et du coup vous perdez tout la globalité de votre script, et c'est un peu dommageparce que c'est pas ce que vous voulez. Donc voilà, juste quand, après c'est un conseil, peut-être
00:10:14 :que Thibault penserait autrement, ou d'autres programmeurs que vous verrez penseront autrement,mais moi je trouve que les while true c'est un peu, ça dépanne, vous pouvez faire ça, ça faitdes choses, on peut écrire rapidement une boucle interactive avec une while true, mais je préfèrevraiment définir, vous verrez même dans la correction, je crois que Thibault il met pas un
00:10:34 :while true, il met un while hp inférieur, comme ça en fait il voit vraiment c'est quoi sa condition,et à quel moment il va la casser. Ok donc ça c'était le premier,
00:10:46 :du coup pour cet exemple là, ça m'a fait penser à autre chose, je vais vous montrer,mais si vous n'avez pas de questions sur le while true, je vais continuer. Là pareil,
00:11:10 :c'est pas du tout dans l'optique de critiquer le script, parce que la personne qui a fait ça arépondu à la question, mais ça m'a donné une idée, quand il y a ce genre de script où vousavez besoin des entrées utilisateurs, moi je m'efforce de jamais mettre mes inputs dans le
00:11:28 :script lui-même, parce qu'en fait, déjà moi quand j'ai un script, je définis toujours mes fonctions,avant, et ici je mets un, je sais pas si vous avez déjà vu ça, ça vous avez déjà vu, j'enai déjà parlé il y a pas longtemps dans un entorah, mais en fait, imagine j'ai utilisé des fonctions
00:12:12 :privées, en fait ça sert si vous faites un import de module, parce qu'en fait si, imaginez que vousavez un, je sais pas si je vais rentrer dans les détails, j'en ai parlé la dernière fois,mais en gros c'est si jamais vous faites des choses dans votre module ici, vous définissez
00:12:28 :vos fonctions et qu'après vous avez un autre script dans lequel vous faites un from, je input,import, si vous avez pas le ifname="main", il va vous exécuter tout ce que vous avez mis encommande dans le script. C'est pour ça que tout ce que vous allez mettre ici dans ifname="main",
00:12:46 :ça va être contenu juste dans ce module là, et quand vous allez avoir un autre module,vous pourrez appeler juste vos fonctions, et il va pas, par exemple ici si je dis print,print, je sais pas, c'est org.hp, et en fait ici si je fais un autre module,
00:13:25 :donc là en gros ce que je dis c'est que depuis test import, je veux que tu m'importes,je input et que tu m'importes tout ce qu'il y a dedans. Regardez ce qu'a mis Gabriel dans le
00:13:41 :chat, en gros c'est ça, donc en gros vous voyez ici j'ai mis un print org.hp, si moi je suis dansce module là et que je le lance, je suis content de voir le print org.hp, par contre ici moi quand
00:13:55 :je suis dans ce module là, je veux pas qu'il m'affiche ce print, parce que ça m'intéresse pas,moi je veux juste avoir accès à la fonction, au while, etc. Donc en gros ce que vous pouvez
00:14:06 :faire c'est le name ici, ifname="main", et en fait il va comprendre que toutes les instructionsqui sont ici, elles sont uniquement valables pour le fichier en cours, et quand vous allez faire unimport ici, il va pas faire le print. Donc voilà, ça c'était juste pour...
00:14:28 :Ah bah tant mieux. Du coup, je ferme la parenthèse pour ça, donc en fait moi quand j'ai vu ça,ça m'a donné une idée, je vais vous montrer, je mets jamais mes inputs comme ça dans le script,déjà c'est bien qu'il soit au début, c'est à dire vous savez qu'on le retrouve pas ici,
00:15:02 :quand vous définissez un script, imaginez que par exemple vous dites playerAttack,voilà ici, non pas playerAttack parce que ça j'ai le pari, je vais créer une autre...
00:15:28 :On va dire qu'en fait on met A au carré, on met B au cube, et on fait la racine carré de C.Donc en fait, là on dit notre machin, il définit une fonction qui prend trois paramètres,et puis elle retourne le premier au carré, le deuxième au cube, et puis l'autre elle fait la racine carré.
00:16:07 :Donc là en fait vous dites, bah voilà, ma fonction elle fonctionne bien, donc je fais Aégal 2, B égal 4, et puis C égal 16. Donc normalement on va avoir 16, 8 et 4.
00:16:34 :Ok, 4 de 16. Donc là on est content, on a une fonction qui fait ça, mais après,c'est vraiment un exemple simple bidon, mais imaginez que vous vous ayez un gros module,etc, qui fait quelque chose de plus intéressant que ça, et que vous voulez donner votre scriptà un collègue qui l'utilise, mais qui ne connaît pas du tout Python, il a juste quelqu'un qui lui
00:17:11 :installe Python sur son ordinateur, et il peut exécuter des scripts Python. En fait, vous nevoulez pas que lui, il est dans le dossier, ça fait peur aux gens quand ils ne connaissent pas,quand ils ne sont pas développeurs, etc, de rentrer dans le fichier.py, alors que rentrer
00:17:40 :dans un fichier texte d'entrée, c'est quand même beaucoup plus friendly comme on dit. Et donc enfait, j'essaye d'éviter au maximum de définir mes inputs dans le script lui-même, parce quec'est moins sympa, et ce que j'aime bien faire, c'est les définir dans un fichier d'input externe,c'est un fichier JSON, où moi j'aime beaucoup utiliser le YAML. Et je vous conseille de faire
00:18:12 :ça, parce qu'en fait, ici vous voyez l'exemple du jeu, moi en fait ces trucs là, je les auraisdéfinis dans un fichier externe de config, et comme ça la personne qui joue la partie,ou même si vous avez une interface graphique, un menu qui vient gérer les différents joueurs,
00:18:30 :et bien en fait votre interface graphique va venir chercher les données qui sont là dansle fichier externe. Et ce qui est agréable, c'est que vous pouvez facilement vous dire,
00:18:39 :je sais pas d'un jour ou l'autre, vous dites en fait je veux pas démarrer à 50 points de vie,je veux démarrer à 100 points de vie. Et bien en fait vous pouvez même vous dire,
00:18:46 :j'ai deux fichiers de configuration différents, j'en ai un dans lequel mon fichier il a 50,et un autre dans lequel il a 100. Donc en fait comme ça, ça pourrait être, imaginez dans votre
00:18:58 :interface graphique globale, vous avez un niveau de difficulté par exemple, vous dites niveaudifficulté 1 et niveau difficulté 2, et vous devez cocher au début. Donc là vous dites,
00:19:07 :bah en fait si l'utilisateur il coche niveau de difficulté 1, il va aller me chercher lefichier de config dans lequel, je sais pas, config facile, et en fait config facile,j'aurais défini orc hp 100 et player hp 100. En revanche si il sélectionne, je vais zoomer un peu,
00:19:25 :n'hésitez pas à me dire si c'est pas assez gros, en revanche si il sélectionne difficulté,enfin difficile, et bah en fait le script, vous allez lui dire, tu vas chercher la config difficiledans lequel il y aura hp 50 et machin. Et ça en fait vous pouvez difficilement gérer si vous avez
00:19:43 :en fait ici un, si vous écrivez tout en doux. Parce que imaginez, là ce que je viens de vousdécrire, on va le faire avec les fichiers externes, mais imaginez si vous voulez l'écrire dans lescript, il va falloir dire if choice égal égal facile, en gros je mets tout ça, et bah vous
00:20:00 :dites, vous définissez toutes vos variables initiales, et après vous allez dire if choiceégal difficile, et bah là vous mettez, en fait, et puis ici on laisse 50. Ici on va mettre 10.8,
00:20:39 :donc là vous voyez qu'en fait on commence à se répéter en fonction de la configuration, et ça enPython c'est très mal de se répéter. Est-ce que vous connaissez le zen de Python, si dans n'importe
00:20:52 :quel interpréteur vous faites import zith, ça s'appelle un easter egg, les développeurs Pythonils ont fait dit ça, en fait si vous faites import zith, vous avez un peu le zen de Python, doncc'est un peu les règles de conduite pour tout le monde développer. Et vous voyez qu'ici il y a un
00:21:11 :endroit où ils disent, spécial machin, en gros, je sais plus lequel c'est exactement, je me demandesi c'est pas, bah là oui, l'habilité, quand ça veut dire c'est important d'avoir un code lisible,du coup vous vous êtes dit, Betty c'est pas dans le zen, mais c'est dans les différents guidelines
00:21:51 :de Python, en gros il ne faut jamais se répéter, parce que si vous avez un endroit ici, si vousdevez vous répéter, imaginez que par exemple un jour vous dites, merde c'est pas player HP,mais c'est HPI, et bah en fait il ne faut pas oublier que vous l'avez, ah c'est qui,
00:22:06 :c'était dans le zen ça? Bon bref, du coup il est où, c'est lequel? Ah oui, c'est celui là,c'est celui là dont tu parles, there should be one, and preferably only one of you is free to do it.
00:22:31 :Je ne suis pas sûr que ce soit ça, parce que ça en gros ce qu'ils veulent dire c'est que, bon bref,on va pas perdre de temps là dessus, mais en gros vous avez compris que c'est dans les,il ne faut pas se répéter quand vous, mais même dans n'importe quel langage, il faut essayer de,
00:22:47 :il ne faut jamais se répéter, jamais avoir à reproduire du code, vous voyez là j'ai écritdeux fois player HP égal quelque chose, c'est mauvais, vous devez vous dire que c'est pas bon.
00:22:56 :Donc en gros ce qu'il faut faire c'est utiliser des fichiers de config externe que vous pouvezaprès importer facilement dans votre code, donc celui là je vais le garder, je vais le montreraprès, et pour ça il y a plusieurs façons, il y a le json, si vous connaissez déjà, dites moi si
00:23:12 :vous connaissez déjà, je le mets en plus gros, ici je vous montre un exemple, je vais mettre lui,et puis je vais le splitter, et puis là je vais mettre, ok, donc en fait un fichier json,je quitte le chat, n'hésitez pas à poser des questions. Ouais exactement les préférences
00:23:45 :de VS Code elles sont dans un json, en fait json c'est bien, et parfois je trouve que c'est moinsbien, vous allez voir la différence entre le json et le yamal, en fait vous pouvez avoir des fichiersde config comme ça qui sont complètement externes à votre script, et comme ça vous n'avez pas à
00:24:01 :revenir modifier votre script, et comme je vous ai dit c'est plus facile pour gérer les configurationsqui sont différentes. Donc là, comment on définit un json, en fait c'est un dictionnaire, et puis
00:24:11 :vous définissez des clés, donc là par exemple j'ai défini un dictionnaire dans lequel il y adeux infos, des infos sur la classe, sur une classe d'élèves par exemple, et des infos surl'établissement. Donc là vous voyez que je mets classe, ici ma classe elle contient des élèves,
00:24:31 :et chaque élève, vraiment ils ont un nom, mais aussi la classe elle a un professeur qui a un nom,vous voyez ça marche par dictionnaire. Dictionnaire ici, dictionnaire, et ici le dernier étage de
00:24:46 :votre implémentation, c'est la liste. Donc là vous pouvez définir dans un fichier json commevous le feriez dans un fichier python, un dictionnaire avec une liste. Donc comme ça on
00:25:02 :définit un json, un fichier d'entrée de config, et ici si je fais run, input json, vous voyez quec'est tout simple pour lire, et donc si je fais data, ici j'ai juste fait un contexte manager,c'est à dire j'ouvre le fichier input json qui est ici, R c'est pour dire le mode, donc là je vais
00:25:24 :en mode lecture, je vais donner un alias file, et ici je dis juste json load file. En fait lescontextes managers ça sert surtout à fermer le fichier, en fait dès que je vais sortir del'inventation ici, dès que je suis là, mon fichier il s'est fermé, quand l'interpréteur il lit le
00:25:49 :script il va fermer le fichier, parce que souvent ce qu'on fait c'est qu'on dit data égale open,puis on met le nom du fichier, et en fait on ne ferme jamais le fichier, donc ça c'est pas dutout performant parce que ça continue d'être ouvert en mémoire, et c'est pas bon. N'utilisez
00:26:08 :jamais le open, moi j'ai utilisé une ou deux fois quand j'ai commencé à faire de la programmation,mais après j'ai plus jamais utilisé, faut vraiment utiliser les contextes managers comme ça. Donc
00:26:21 :là vous voyez ici j'ai chargé toutes les données qu'il y avait dans mon fichier json, je vousment pas, si vous faites data vous voyez que j'ai bien ma classe, les élèves, names etc, et vousvoyez que j'ai différents dictionnaires qui sont imbriqués, ici si je veux accéder aux datas de
00:26:37 :mon dictionnaire, donc si je peux faire data.case, donc là j'ai classe et machin, si je faisclass j'ai toutes les infos sur ma classe, après si je continue en fait je vais de plus en plusprofond dans mes dictionnaires, si je veux voir les names de ma classe, qu'est ce que j'ai fait,
00:26:59 :ah oui il faut d'abord que j'aille dans élèves, donc là voilà, et si je veux aller chercher lesnames, j'accède à ma liste. En revanche si je veux juste, si je reviens ici, que je fais data
00:27:14 :case, je vois que j'ai établissement aussi, je peux aller chercher les datas dans mon établissement.Et je peux aller chercher ainsi de suite, ça reste comme ça. Donc ça c'est clair pour vous,
00:27:31 :json je pense que vous l'avez déjà vu, peut-être que vous avez moins l'habitude du fichier Yamaha,et je le trouve beaucoup plus lisible, moi je préfère largement le Yamaha. Je vais vous montrer
00:27:42 :comment ça s'écrit. Du coup le Yamaha c'est des fichiers YML, je pense que vous en avez déjà vupasser. En fait beaucoup de logiciels ont leurs options qui sont définies dans un fichier YML,
00:28:06 :vous verrez que quand, je sais pas si un jour vous faites du Docker ou du Kubernetes,un peu pour le Data Engineering, tous les fichiers de config ils sont en YML. Et en fait c'est un
00:28:19 :peu la même chose que le JSON, je vais mettre un code, vous allez voir.Là c'est bon, on voit bien. En fait, moi j'ai pas mis tout à fait les mêmes datas dans l'un et
00:28:34 :l'autre, mais en gros c'est le même principe. Le fichier YML ça marche par indentation,et en fait à chaque indentation il comprend que c'est une nouvelle clé. Donc là vous voyez en
00:28:45 :fait j'ai défini un dictionnaire unique, classe, qui a ces trois clés là, donc élèves, professeurset établissements. En fait vous voyez que, vous voyez un peu le, en fait par rapport au niveau
00:29:00 :d'indentation vous pouvez voir quelles sont les clés mère et les clés fille etc. Ceci,bonsoir. Du coup vous voyez que, enfin je sais pas ce que vous en pensez, dites-moi dans le chat,
00:29:12 :mais ouais moi je trouve que c'est terriblement plus visible en fait le YML parce que ça marchepar indentation et vous avez pas besoin de vous embêter avec, vous voyez ici les guillemetsdéfinir un peu, plutôt c'est un langage de programmation en typage dynamique, c'est-à-direil reconnaît quel est le type de la variable, donc là par exemple vous mettez des guillemets donc
00:29:31 :il comprend que c'est un string, mais ici vous voyez il n'y a même pas besoin de mettre lesguillemets, il comprend en direct. Et ici vous pouvez rentrer tout ce que vous voulez en fait,
00:29:40 :vous pouvez rentrer autant de... Attendez je regarde le chat de temps en temps. Ouais,je... Enfin moi après il y en a qui durent que par le JSON, il y en a qui durent que par le YML,
00:29:58 :enfin c'est un peu des goûts et des couleurs, on ne discute pas, mais moi je trouve qu'effectivementle YML c'est le plus important. Et après peut-être que jusqu'à maintenant moi j'ai jamais eu un cas
00:30:08 :de figure où le YML, on peut pas utiliser le YML par rapport au JSON etc. En fait il y a deslogiciels, ils sont programmés de telle manière que vous pouvez juste lui envoyer un JSON parcequ'en fait il va pas comprendre le YML etc. Enfin bref c'est un peu au bon vouloir du développeur
00:30:29 :etc. Donc voilà, le JSON c'est comme ça à gauche, le YML c'est comme ça. Et vous voyez ici,en fait ici, donc là je vous dis c'est une clé primaire, ensuite une clé secondaire,une autre clé encore, et ici là c'est vos datas. Et vous pouvez les définir soit comme ça par ligne
00:30:49 :ou sinon vous pouvez rentrer directement comme si vous rentriez un truc comme dans Python.Ok? Vous pouvez rentrer une liste. Et donc là ici pareil, vous voyez c'est exactement la même
00:31:03 :chose, import YML. Il faut juste... JSON c'est built-in dans Python, c'est-à-dire vous n'avezpas besoin d'installer quelque chose pour JSON. Par contre pour YML il faut installer quelque
00:31:15 :chose. Je vous montre ici, comme je vous l'avais déjà expliqué, je travaille toujours desenvironnements virtuels, donc j'ai juste à faire un pip list de mon environnement virtuel. Donc là
00:31:25 :c'est vraiment juste ce qu'il y a dans mon environnement virtuel. Et vous voyez ici il y aun pile YML. Donc en gros j'avais tapé pip install pile YML comme ça. Je retourne et puis je vous
00:31:42 :montre. Vous voyez c'est très simple. Et si je fais run input YML et que je vais voir mes data,voilà c'est pareil. En fait j'ai juste... Et ce qui est bien aussi c'est que là vous définissez,
00:31:55 :vous avez un gros dictionnaire, mais si jamais vous voulez en définir un autre, il n'y a passouci. Vous pouvez dire place et puis là qu'est-ce qu'on peut mettre? Je ne sais pas, maison. Et
00:32:05 :puis là c'est parti, vous continuez. Et du coup lui il va comprendre si je fais maison et puisque je vais juste mettre l'adresse de l'île. Vous voyez ici que si je fais data, il m'a bien,
00:32:25 :en fait j'ai bien, et que je fais data.prise, j'ai bien classe et maison. Donc en fait ilcomprend que c'est deux dictionnaires. Et donc si on en revient à nos moutons entre guillemets,
00:32:38 :ou imaginez qu'en fait on a défini un jeu, donc en fait on va faire une partie YML. Imaginez,ça c'est notre script de jeu. Et on veut dire, en fait, position,
00:32:51 :je vais dire choice, je vais réfléchir à comment je vais l'écrire. Ok, moi je ferai un truc dugenre config.easy, et là on va mettre le nom du fichier, donc en gros ça va être input.easy.yml.
00:33:29 :Ça va être le nom du fichier, et après si je mets diff pour difficult. Et en gros,ce que vous allez faire, c'est là vous allez pouvoir faire, vous pouvez imaginer que,vous pouvez imaginer que voilà l'utilisateur il sélectionne un type de config, et en fonction deson choix, donc je sais pas, if config, pareil que tout à l'heure, vous mettez if choice égal,
00:34:27 :et là vous mettez la config.easy, ça sert à rien ce que j'ai fait. Et là,je vais mettre, if choice égal, et là vous dites, if choice égal, désolé c'est un peulaborieux, config.easy, et là c'est config.easy.yml, et puis après là vous faites open, donc là vous
00:35:37 :n'avez pas à changer, c'est toujours config.easy.yml, donc là vous avez vos data, et ici nous on vadéfinir du coup notre fichier easy, donc c'est quoi que j'ai dit, je pense que vous avez compris ledélire, mettre vie, vous avez un perso, vous lui dites sa vie c'est 10, sa puissance c'est 20,
00:36:22 :donc ça ça va être la easy, et si je prends la difficult, input if point normal, vous dites 5 et10. Et du coup quand vous allez avoir votre jeu ici, en fonction du choix que vous allez faire,
00:36:49 :donc si je dis 1, bien sûr ça va pas marcher, même config.easy.define,est ce que quelqu'un voit le problème, config, chaîne de caractère, l'input,bien sûr, ok, et donc là vous voyez que vos data c'est 10, et si vous relancez,et qu'en fait vous faites 2, data, 10, 5, et donc en fait ce que vous voyez dans votre script,
00:37:36 :c'est que ce qui est intéressant, c'est que vous n'avez pas à définir, faire unevieille boucle un peu toute pourrie, où vous dites, si c'est facile, je mets tout ça,et je redéfinis à chaque fois, donc là vous définissez juste à chaque fois les 2 fichiersqui sont quasiment identiques, mais dans lequel vous le changez, et ce qui est bien c'est que
00:37:53 :si jamais vous avez des gros fichiers d'input, vous pouvez juste un peu interagir, donc là c'estpour un jeu, mais vous pouvez imaginer ça sur un script, vous faites plein de choses différentes.
00:38:04 :Moi souvent ce que je fais c'est que je définis en gros tous mes inputs, par exemple quand j'aides chemins de dossiers, des endroits spécifiques, des chemins de dossiers en input, en sortie,des bases de données, des adresses, etc, des adresses IP, je mets tout dans mon fichierinput yamal, et comme ça quand j'ai un problème, quand même je veux changer facilement mon dossier
00:38:27 :d'entrée, mon dossier de sortie, etc, je vais pas m'embêter à aller chercher le script,etc, où est-ce que je l'ai foutu, je vais juste dans mes fichiers d'entrée, et je les modifie,et limite j'ai même pas besoin d'ouvrir le picton. Donc je trouve que c'est intéressant.
00:38:43 :Alors je regarde la question, dans quel genre de programme tu utilises le plus souvent?Bah ça répond à ta question, Gabriel, moi j'utilise dans tous mes scripts, que ce soit situ crées un jeu, là typiquement si tu crées un jeu, tu verras que c'est vraiment l'idéal,tu définis tes points de vie de personnages, etc, tu peux même définir des configurations
00:39:09 :différentes, et après t'as plus qu'à importer la bonne en fonction du niveau que tu veux,et voilà. Mais même quand je fais de la data ou quoi, je mets tous mes inputs dans le fichier,
00:39:19 :et après dans tout. En fait j'aime bien séparer la logique du script et les inputs.Ok merci, j'ai juste un peu de mal à voir comment tu interagis avec la variable vie,par exemple, j'ai un peu de mal à voir comment tu interagis.
00:39:41 :Par exemple ici dans le script, tu vois si je reprends, je réponds à ta question après,Jonathan, ici si je reprends le script le jeu par exemple, tu vois là, je les enlève parcequ'ici ils avaient défini ici, donc imagine que tu as fait ton with open et que tu as récupéré
00:40:00 :ta data, et en fait tu la mets ici, tu peux la mettre ici, mais en fait ce que tu sais,c'est que ici tu vas dire, donc là imagine tu as fait ton with machin, ok on est d'accord,et bien là en fait tu vas mettre ton data vie, et en fait ce truc là, ça, ça ne changera jamais,
00:40:20 :c'est juste que toi tu vas venir modifier dans ton script, dans ton fichier d'input,qui va être modifié, mais ici il faut que tu te dises, si je veux ne plus jamais revenirdans ce script, je peux, parce que je vais juste changer mes variables d'entrée dansmon fichier d'entrée, et j'ai plus à revenir dans mon script, parce que j'ai défini ici.
00:40:39 :Peut-être que je me suis mal exprimé, le problème c'est pas d'avoir des inputs quisont ici en début de script, le problème c'est que si tu veux les changer, il fautvenir dans le script et les modifier, et ça c'est pas recommandé dans les pratiquesde Python, et pour moi c'est pas, c'est vraiment, vous savez quand, je sais pas si vous voyez,
00:41:00 :ou si vous faites du Django etc dans la formation, il faut toujours un maximum séparé, maismême quand vous écrivez des fonctions, ce qu'on dit toujours c'est une fonction ellefait un truc, il faut vraiment éviter d'avoir une fonction qui fait deux trucs différents,parce qu'après quand vous lisez le code etc vous avez un bug, vous savez pas exactement
00:41:19 :où, donc là c'est pareil en fait, des inputs c'est des inputs, faut pas les mélangeravec la logique du code.Et c'est beaucoup plus maintenable en fait quand vous faites ce genre de choses, vousmettez vos entrées là dedans, et que ici vous avez que de la logique, y'a pas d'entrée
00:41:36 :en fait ici, voilà, j'espère que c'est assez clair, après vous faites comme vousvoulez, c'est vraiment chacun à son style, mais moi c'est un conseil que je peux vousdonner, je le fais pas et maintenant je le fais beaucoup, ça facilite grandement ledébugage, voilà, si vous avez cette mentalité là, vous savez que dans aucun de vos scripts
00:41:59 :vous aurez une variable qui se balade, et puis que vous saurez jamais pourquoi on ades projets avec 25 modules, 25.py, et du coup pour aller savoir où est-ce que vous
00:42:12 :l'avez foutu, alors que si vous avez un seul endroit dans tous vos yamals, dans vos inputs,voilà, donc je me répète un peu, mais je vous conseille de faire comme ça.
00:42:26 :De faire des yamals plutôt que de faire un fichier.py? Bah ouais j'avais déjà vuça, je faisais ça aussi au début, je faisais un truc.py et tu mets toutes tes, déjà
00:42:42 :si tu mets des variables comme ça, je te conseille de les mettre en majuscule parcequ'en fait c'est des constantes qui vont pas changer, et faut pas que tu t'amuses,quand tu vois des trucs en majuscule comme ça, jamais dans un script normalement tudois voir local var égal 22, enfin en fait il faut jamais la modifier, quand tu vois
00:43:07 :un truc qui est comme ça, c'est que faut pas la modifier.Et du coup ce que tu peux faire, tu peux avoir un fichier.py ici, dans lequel tu définis
00:43:16 :tout, tu dis.vy égal 2, en fait ce qui est pratique c'est que tu bénéficies dulangage de Python, c'est à dire que tu peux définir tes variables, tu vois si par exempleen fait tu veux définir une miss, tu dis je veux une miss qui va de 1 à 5, en fait
00:43:41 :tu vas pas te faire chier, tu vas dire lm in range 6, et là tu sais que tu vas avoirune espèce de constante, enfin une variable constante, imagine que tu veux une liste,alors qu'en fait si t'avais voulu faire ça dans un fichier d'entrée yamal, tu doiste taper à la main et écrire 1, 2, 3, 4, 5, 6.
00:44:03 :Mais ça reste, écrire comme ça ces fichiers d'entrée dans un.py que moi j'aime pastrop, déjà je le ferais plutôt comme ça, où en fait je définis une classe config,et ici t'as même pas besoin de faire un constructeur, tu définis ici toutes tes variables, et commeça après dans ton fichier tu dis local var égal 2, et je sais pas,.vy égal 10, et
00:44:35 :après ici tu fais un from config import config, et comme ça ici tu sais que quand tu veuxfaire le.vy, si par exemple ton.vy c'est juste la classe config avec ta local var,
00:45:03 :tu peux faire comme ça, et ça c'est un peu, tu peux un peu faire la même chose, c'est-à-diretu définis des configs qui sont différentes en fonction de ton niveau, mais du coup jetrouve que c'est beaucoup moins flexible parce qu'en fait un fichier.py c'est interprétable
00:45:26 :que par un interpréteur Python, par définition, tu peux pas, tu vois par exemple sur, t'asdes pages web qui permettent de rendre, t'as des pages HTML dans lesquelles tu peux rendreun Json ou un YAML, tu peux pas rendre un.py que dans une page HTML, donc c'est en
00:45:48 :ça que, c'est pour ça que moi je le fais pas comme ça, je préfère faire avec desfichiers YAML comme ça ou des fichiers Json, mais moi je préfère le YAML. Quand est-ce
00:45:59 :que tu utilises un fichier YAML ou plutôt qu'une page de données? Ça c'est surtoutla taille de la data qui va jouer. Il y a pas longtemps j'ai discuté avec un client
00:46:13 :où en fait il disait, lui il avait des fichiers texte ou des fichiers CSV et il m'a dit,bah est-ce que vous, en fait il voulait tous ses fichiers dans un Excel, je lui ai ditpourquoi pas, j'ai regardé, et en fait il avait 10 fichiers, son premier fichier il
00:46:31 :y avait 2 millions de lignes, et du coup on trouve au total il y avait 22 millions delignes, et Excel c'est le max c'est 1 900 000 je crois. Donc en gros là j'utilise
00:46:43 :une base de données parce que c'est le seul objet qui permet de stocker autant de donnéeset de les traiter. Mais du coup, attends je me disperse un peu, est-ce que c'était
00:46:52 :ta question? Une base de données. Ah oui tu veux dire en fait quand tu veux stockerdes datas, franchement ça dépend de la taille du projet parce que c'est vrai qu'une basede données c'est un peu chiant, un humain il peut pas la lire facilement sans logiciel,alors qu'un fichier JSON tu peux le lire. Par contre, aller lire des datas dans un fichier
00:47:17 :JSON c'est quand même pas très marrant, je trouve que c'est un peu chiant à lire,et du coup franchement ça dépend de la taille. Moi je préfère avoir un fichier lisible,
00:47:28 :par allumin, donc un YAML ou un JSON, et quand c'est de la grosse data et que je dois interagiravec, je fais de la base de données. Ouais après tu peux, même dans des fichiers JSON
00:47:50 :ou YAML, tu peux les protéger. C'est vrai que la base de données c'est important, jele vois aussi que c'est important quand tu veux versionner tes datas etc, tu peux moinsle faire avec un fichier JSON. Médhi désolé pour le... Je sais pas, vois un peu avec les
00:48:18 :autres, je pense qu'il y en a ici qui sont là depuis... Je sais pas, dites moi dansle chat si vous comprenez rien du tout de ce que je raconte, ou si ça va. C'est important
00:48:33 :dites moi dans le chat ce que vous en pensez. Dessiner les sélecteurs sont plutôt en fichier.Ouais exactement, en fait tout ce qui va être interaction utilisateur pour moi c'estJSON, YAML, et tout ce qui est traitement data etc, moi je le mets en BDD. Après quand
00:48:50 :tu as des API, en fait les API quand tu fais des appels à des API sur des sites, ils tedonnent de la donnée en JSON, mais c'est parce qu'en fait derrière il y a une basede données. C'est juste un rendu en fait le JSON, même si tu as des gros JSON avec
00:49:04 :beaucoup de data, c'est juste un rendu derrière, tu as une base de données, ils ont étéinterrogés, ils ont filtré etc. Ouais t'inquiète pas Médhi, franchement les sessions de mentorat
00:49:18 :c'est pour voir des choses autres que dans la formation, c'est pour essayer d'approfondir.L'idée c'est vraiment pas de perdre les gens et puis de les dégoûter, c'est defaire découvrir des trucs qui sont parfois plus avancés que ce qu'il y a dans la formationou par rapport à votre niveau, mais faut pas du tout Médhi que tu te dises si tu comprends
00:49:41 :rien là, t'as rien compris, même si tu es à 75% de la formation, tu vois là jesais pas si j'ai évoqué des choses qui font partie de la formation, si un peu jepense, mais pas beaucoup. Donc surtout ne te dégoûte pas et il n'y a pas de soucis
00:49:56 :si tu ne comprends pas, c'est normal. Le but des mentorats c'est de vous faire découvrirdes trucs et que plus tard si un jour vous les voyez vous vous dites ah bah oui je mesouviens je l'ai vu et puis du coup c'est un peu plus simple, ça passe plus facilement.
00:50:07 :Qu'est ce que, il reste plus énormément de temps, est ce que vous voulez voir un resamplingde data avec Panda ou est ce que vous êtes plutôt intéressé par voir l'essai. J'avais
00:50:31 :préparé un petit truc pour l'essai, ça peut être intéressant. Dites moi ce quevous voulez. Le plus utile, je pense que la data c'est un petit peu orienté spécialiste
00:50:58 :data, du coup on va plutôt faire le 7. J'avais préparé un petit truc, c'est un truc quej'avais déjà. Ouais exactement Yannick, regardez tous le message de Yannick, ça résume
00:51:21 :bien aussi le Json, c'est vrai que le Json ou le Yamal ça permet d'avoir une interfacequi est standardisée et qui va parier d'une API à l'autre, d'un site web à l'autre.
00:51:35 :C'est vrai que, je ne l'ai pas dit mais du coup merci Yannick de l'avoir rappelé,c'est vraiment standard comme input et toutes les API, tous les sites web etc. ils comprennent
00:51:46 :le Yamal ou le Json alors que si tu mets dans un fichier.py, tu ne pourras pas faire comprendretes entrées à l'API. En fait juste avant de voir tout ça, le set ce que c'est, c'est
00:52:01 :un peu comme une liste sauf que ça se définit comme ça, vous dites set, si vous voulezcréer un set, vous dites set et vous dites que ça vient d'une liste, donc c'est 1, 2,3, 5, et donc là j'ai défini un set, et en fait les sets c'est un petit peu particulier,
00:52:25 :vous voyez ici les accolades, vous n'avez que des choses uniques dans un set. Si parexemple dans une liste, vous avez, je définis une liste, c'est comme ça, donc je dis 1,1, 2, 3, 7, 9, 80, 90, 1, 2, 7, en fait si je fais set A, il va me sortir déjà que
00:52:55 :des éléments uniques, en fait un set c'est forcément un itérable qui ne contient quedes éléments uniques. Donc en gros vous voyez le 1, bon déjà ça peut être super
00:53:05 :pratique parce que vous pouvez facilement obtenir l'unicité des éléments dans votreliste, si par exemple vous savez que vous avez des doublons ou quelques trucs, vousfaites set et après vous le retransformez en liste. En fait par exemple tu vois, après
00:53:23 :set c'est un peu chiant parce que tu peux pas, mon set, j'ai défini comme ça, B c'estle set, est-ce que tu peux interagir, en fait t'as pas toutes les méthodes de liste avecset, mais par contre ce que tu peux faire facilement, donc là B c'est mon set, tu peux
00:53:46 :dire B c'est liste B, donc en gros tu dis que, imagine que t'as une liste qui est commeça, tu dis je veux la rendre unique mais je veux quand même que ça soit une liste,ce que tu peux faire c'est que tu fais liste set A, et là du coup t'as la liste A unique.
00:54:08 :Et en fait ce qui est intéressant dans les sets c'est que on peut, je sais pas si vousvoyez, en mathématiques il y a des opérations boolean, en fait vous pouvez les faire avecles sets, c'est un peu comme si vous avez des ensembles, vous savez, et vous dites union
00:54:38 :de l'ensemble intersection ou des choses comme ça, vous pouvez en gros dire, faireune union et trouver tous les éléments qui se trouvent et dans une liste et dans uneautre, facilement avec set.
00:54:50 :J'allais préparer un petit truc pour l'exemple, c'est pas grave si vous comprenez pas tout,mais en gros imaginez que, pour utiliser les sets, imaginez que par exemple vous êtesun admin informatique et vous avez une liste de tous les emails de la boîte dans laquellevous travaillez.
00:55:11 :Donc là ici on les génère.Donc là imaginez, c'est une fausse liste, juste pour la générer pour l'exercice.Je suis pas sûr de comprendre Céline.
00:55:48 :Tu voulais chercher pour créer un...Ah oui d'accord.Ah oui ok.Oui t'avais une question je me souviens maintenant par rapport à cette défaut.Et après par contre n'oubliez pas de retransformer en liste parce que sinon vous pouvez pas utiliserles méthodes de liste.
00:56:04 :Donc après, donc là imaginons on a nos emails.Donc ça imaginez c'est tous les emails de la compagnie dans laquelle vous travaillez,vous êtes l'admin.
00:56:11 :Après on vous dit attention, on vous donne une liste d'emails qui sont piratés.Parce que je sais pas vous avez reçu, je sais pas d'un ami ou d'un collègue, uneliste avec tous les emails qui ont été piratés.
00:56:31 :Donc là en fait nous ce qu'on fait, on va dire que, donc ça c'est la liste d'emailspiratés et pour en gros notre jeu, on va mettre des emails à nous de notre base dedonnées dans les emails piratés.
00:56:46 :Donc en gros du coup on va dire, pirated emails, en gros ça c'est, vous avez tous les, vousvoyez ici moi mes user emails ils sont comme ça, c'est user quelque chose et les piratedemails c'est pirated quelque chose et en gros moi j'ai fait comme si j'ai inséré
00:57:05 :quelques emails de ma base de données user dans les emails qui sont piratés.Ici j'ai fait pirated email extend, où en gros j'ai juste, ici j'ai fait un choice,random choice, où en fait j'ai pris au hasard quelques éléments qui étaient dansma liste de user email.
00:57:22 :Ok? Après ce que je fais, donc là j'ai ma liste en gros de, vous voyez ici piratedlist ce que je fais, je crée un set à partir de ma liste piratée mais ça c'est justepour enlever les doublons parce que comme je vous l'ai dit le set ça fait des éléments
00:57:37 :uniques donc ça vous en faites pas.En fait comme moi j'ai généré avec un random et que j'ai fait un random choice, il se peutque en fait dans mes listes piratées j'ai pris deux fois le même élément parce quec'est un random choice donc il n'y a pas de raison qu'il n'en prenne pas deux fois
00:57:51 :le même.Donc là c'était juste pour dégager en fait les doublons.Après ce que je fais là à RandomShuffle c'est juste que je fais un mélange, c'estjuste pour l'exercice, pour rigoler.
00:58:02 :Et en fait ce que vous pouvez faire ici, vous dites user email piraté, vous avez justeà faire ici et c'est l'opération logique d'une intersection.
00:58:13 :Donc en gros vous dites, vous voulez savoir quelle est l'intersection entre tous mesutilisateurs, donc tous mes user emails, donc là je sais qu'ils seront uniques parce quec'est ma base de données d'email, avec l'intersection entre tous mes emails et tous ceux qui sontpiratés.
00:58:28 :Et comme ça vous allez faire ressortir uniquement ceux qui se trouvent dans les deux et vousallez pouvoir avertir tous les utilisateurs qui sont concernés par les emails piratésgrâce à l'intersection ici.
00:58:39 :Et si je fais user emails piratés, bah en fait j'ai la liste de mes utilisateurs quise sont retrouvés dans ma liste piratés parce qu'ils sont à la fois dans mes utilisateurset à la fois dans piratés.
00:58:54 :Et ça c'est grâce à cet opérateur logique là.Vous avez tous les autres opérateurs logiques, si vous voulez faire une union, ça va êtreou, vous pouvez même faire une soustraction.
00:59:06 :En fait si vous faites A, niveau 1, 1, 2, 6, vous avez ça et vous avez B, égal 1,6, 5 et 4.Donc on va dire A égal 7A et B égal 7B.
00:59:30 :Donc là j'ai mes deux 7A et B.Vous pouvez faire la soustraction de l'un avec l'autre.Donc en fait vous voyez il va me dégager, il va prendre A et il va dégager tous leséléments qui sont dans B dans A.
00:59:47 :Donc là il me dégage le 1 et il me dégage le 6 et du coup il ne me reste que 2.Donc c'est pas mal, on peut interagir comme ça avec les éléments comme des bouletset un alors qu'en fait c'est des listes.
01:00:02 :Bah oui c'est bien pour prévenir les utilisateurs.Voilà pour ce que, j'avais d'autres trucs à vous montrer mais je ne vais pas avoir letemps.
01:00:17 :On verra la prochaine fois si ça vous intéresse.Juste pour vous, si ça vous intéresse.En fait imaginez que, on ne va pas le faire maintenant.
01:00:26 :Mais imaginez que vous avez une liste comme ça de factures.Donc là c'est un DEX, enfin j'ai récupéré d'un fichier où vous avez les factures.
01:00:41 :En gros vous avez la date ici et le montant.Et nous ce qu'on aimerait faire c'est faire du resampling, c'est à dire transformer cettecolonne là en un datetime object qu'on puisse manipuler en fait parce que là c'est justeun string.
01:00:58 :Mais moi je veux le transformer en date.Et après ce que je voudrais faire c'est, je voudrais connaître par mois quel est lemaximum, quelle est la moyenne, quel est l'écart type des factures.
01:01:09 :Parce qu'en fait vous voyez ici en 2014, j'en ai eu une en mars, j'en ai eu une enoctobre, en juillet, en septembre, en août etc.
01:01:16 :Et ce qu'on aimerait faire c'est que par mois, quel est le maximum de factures et puiscomment je distribue les valeurs etc.Et on peut faire ça en une ligne de commande avec Panda.
01:01:29 :Donc, non tu ne passes pas pour un noob.Et tu verras Céline, ça va être la fonction Panda resample, où en fait c'est un peucomme les groupes buy de Panda, c'est assez efficace.
01:01:53 :Du coup Mehdi, attends je regarde la question de Mehdi derrière.Non tu ne passes pas pour un gros noob.En fait moi ce que je fais tout le temps, je pense que les autres ils l'ont déjàvu dans le mentora.
01:02:09 :Oui je le mets au programme de la semaine prochaine l'histoire du Doctrine.En gros là tu vois Mehdi, je suis dans un terminal, enfin je suis dans le terminal intégréde VS Code.
01:02:20 :Tu as aussi les terminaux d'application externe comme ça.Là je suis vraiment dans un terminal.Et moi ce que je fais tout le temps en fait c'est, j'aime bien interagir avec IPython.
01:02:30 :IPython c'est comme Python, tu vois si je fais juste IPython, là je suis dans Pythonet en fait il n'y a pas le, enfin si il y a un petit peu d'aide au code mais pas hyperpoussé.
01:02:47 :Du coup moi j'utilise IPython et donc là je suis à l'intérieur de l'interpréteurPython interactif et là tu vois j'ai bien toutes les commandes et je trouve que c'estplus pratique.
01:02:58 :Et moi je fais tout le temps ça, je run et comme ça après je peux interagir avecma data.Gitbash, non, Gitbash c'est différent.En fait Gitbash c'est un terminal, c'est comme PowerShell ou comme commandes, tu peuxtaper des commandes Linux dedans ou des choses comme ça.
01:03:19 :Là l'interpréteur IPython c'est vraiment pour écrire du Python, tu vois c'est, tufais du import numpy, tu écris tes trucs, tu définis tes fonctions, tu peux même définirdef my function, tu retournes au carré, donc là tu vois j'ai défini ma fonction et sije fais ma fonction casque, tu peux définir ta fonction dans l'interpréteur.
01:03:57 :Ouais en fait pour installer IPython c'est tout simple, donc voilà je fais ctrl et poursortir j'ajuste dans chaque environnement virtuel que je crée je fais un clip installIPython.
01:04:08 :Du coup la question, est-ce que quelqu'un utilise un écran LGD idéal pour programmationà la vie 16-18, 16-18 c'est quoi comme format? Je ne sais pas, pour ceux qui ont vu la
01:04:35 :vidéo YouTube de Thibaut là, c'est un format portrait, j'avais compris, parfait, 16-18,ah oui en fait tu retournes ton écran à la verticale.Mais regarde Yann, tu l'as vu, format portrait, bah tu l'as vu la vidéo de, sur YouTube,la vidéo de Thibaut sur son setup, il me semble que c'est un écran comme ça, non
01:05:10 :un truc vertical mais large.Je pense que c'est bien pour le code, parce qu'en fait, quand c'est en vertical tu peuxbien faire défiler, voir tout ton code d'infos, c'est vrai qu'on scrolle beaucoup, mais bonen fait si tu dois beaucoup scroller etc, c'est que tu n'as pas bien écrit ton script,
01:05:41 :parce qu'en fait normalement si tu écris bien ton script, tu as beaucoup de fonctionset les fonctions tu peux les, tu vois avec VS Code tu peux les minimiser, mais bon c'estpas une critique, mais moi je suis d'accord que le 16-18, si c'est ce à quoi je pense,
01:05:58 :va voir la vidéo de Thibaut, si c'est ce à quoi je pense, c'est quand même vachementpratique pour coder.Du coup, on verra ça la semaine prochaine, l'histoire du Panda avec le Resample, si çavous intéresse, j'ai vu que Céline a été intéressée par le genre, j'avais bien vu
01:06:29 :ça.Si vous avez eu des questions, je peux répondre encore en quelques minutes, mais je peux pastrop traîner, mais n'hésitez pas si vous avez quand même des questions, je répondsavec plaisir.
01:06:41 :7 défautes sur l'éditionnaire, ok.Je regarderai la question que tu avais faite, on l'avait fermée je crois, mais après jesais que la manière dont Thibaut a montré le 7 défauts, il y a de la complexité enplus par rapport à la manière dont Thibaut l'a montré, et qui n'est pas inhérente
01:07:15 :à 7 défauts, 7 défauts c'est pas très compliqué, mais la manière dont a étéposé l'exercice, il y a un peu de logique derrière qui est un peu compliqué à comprendre,mais du coup pas de soucis, je remettrai 7 défauts.
01:07:27 :Alors Mehdi, je ne vois personne qui visait, y a t-il, du coup 3.11, je crois que moije suis sur la 3.9, mais non il n'y a pas de raison particulière, si tu commences Python
01:07:57 :et que tu dois installer, installe la 3.11, y a pas de soucis avec la 3.11.Moi je pense que le meilleur moyen d'apprendre c'est de, oui beaucoup d'exercice c'estsûr, surtout des projets, faire des projets perso qui répondent à un besoin que toitu as, parce que c'est comme ça que tu vas, en fait je pense que, mais même que
01:08:28 :ça soit moi dans tout, que ce soit dans la programmation ou même dans mon boulot ouquoi que ce soit, c'est quand je me suis cassé les dents sur un truc que j'ai essayéde comprendre moi-même et qu'après j'ai pu poser des questions aux gens qui connaissaient.
01:08:39 :Parce qu'en fait, par exemple, je sais pas où est-ce que t'en es, mais quand t'asfait tes études ou quoi, quand t'allais en cours, bah voilà, t'absorbais l'informationetc. Et en fait c'est que, moi je me souviens que j'avais plus de mal avec ça, j'avais
01:08:56 :beaucoup plus de mal que quand je voyais le cours avant, et en fait tu bosses chez toiavant le cours etc. et comme ça tu te poses plein de questions, et au moment où vient
01:09:05 :le cours, et bah tu peux poser des questions qui sont pertinentes. Voilà, donc, fairedes exercices, ouais, surtout faire des projets persos et puis aller chercher toi-même dansles docs. Tu vas chercher dans les documents, bah y'a la communauté qui est ici, qui est
01:09:26 :très bien, mais aller chercher dans la doc toi-même, sur Stack Overflow, des chosescomme ça, formuler toi-même la question en fait. Formuler, déjà, je trouve que poser
01:09:35 :des questions sur Docs.Treen c'est hyper bien parce que le fait de devoir la formuler,bah ça structure un peu ton questionnement et puis déjà quand tu poses ta question,je sais pas si ça vous fait ça, mais moi je me sens déjà libéré quand j'ai bienstructuré et que j'ai réussi à me faire comprendre. Non non mais c'est vrai que c'est
01:09:57 :bien de préparer ses questions à l'avance parce que du coup ça te structure et puisdu coup une fois que t'as posé ta question tu te sens libéré parce que t'as structuré,t'as mis des mots sur ce que tu comprenais pas et puis pour moi c'est 80% de la réponse
01:10:10 :en fait, quand tu poses ta question et qu'elle est bien claire. Voilà. Ouais c'est ça,vous voyez Benoît du coup il pense pareil que moi, mais déjà bien formuler ta questionet puis déjà tu y réponds et voilà c'est ça. En fait donc juste pour résumer, pour
01:10:30 :bien apprendre, si y'a un conseil c'est de malheureusement de rien comprendre et puispetit à petit ne pas lâcher et puis tu vas comprendre plus et voilà.
01:10:43 :Désolé, je dis sans faire exprès, les exercices ils sont pas vraiment bien pour progresser,les liens ils sont vraiment bien pour progresser. Désolé. Pas de soucis. Voilà, bon bah si
01:11:19 :ça vous va et puis donc le note, il faudra du note quelque part la semaine prochaine,Panda re-sample et 7 défauts au minimum. Et vous inquiétez pas je suis pas dans un
01:11:34 :calibri, c'est juste mon mur qui est derrière et il y a une salle devant.Bonne soirée tout le monde. Ouais bonne soirée, merci à tous. Ouais et Mehdi franchement
01:11:50 :je le redis, y'a pas de noob, y'a pas de nul, t'es juste au début. Merci à touset bonne soirée, t'es juste au début Mehdi, surtout te décourage pas, continue et franchementsur toutes les questions que tu veux, personne ne te dira jamais c'est quoi ce noob, toutle monde commence quelque part. Et voilà donc, et c'est normal si tu t'es senti un
Aucune occurrence trouvée pour « ».
Bravo, tu es prêt à passer à la suite