Session du 23 mars 2023 à 20h00
Bases du Langage
Data Science & IA
Algorithmique & Performance
Librairie Standard & Modules
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
Automatiser résumés Word et labyrinthe en Python
Découvrez comment manipuler des fichiers Word en Python, préparer des appels à l’API ChatGPT pour les résumer et modéliser un labyrinthe avec des arbres.
00:00:00 :Ok, ça enregistre et puis je vais partager mon écran.Alors dites-moi si vous voyez bien mon VSCode.Oui, ok, merci.Du coup, comme je disais au tout début, j'ai préparé deux petits sujets,mais sur les deux sujets que j'ai préparés, on ne va pas pouvoir aller jusqu'au boutparce que j'ai deux petits problèmes.
00:00:54 :Du coup, ça posera les bases et puis je reprendrai ça pour la prochaine fois.En gros, ce que je voulais vous proposer, c'était une manipulation.
00:01:04 :Je n'ai pas eu le temps de mettre le programme, désolé.Manipulation de fichiers Word, donc création, etc.Donc ça, normalement, il n'y aura pas de souci, ça va marcher.
00:01:15 :Après, j'avais préparé quelque chose où en fait, on se met dans l'hypothèseoù on a un gros document Word, on peut extraire le texte de chacun des paragrapheset envoyer une requête API à ChatGPT pour qu'il fasse un résuméet après faire des résumés de résumés pour petit à petit.
00:01:33 :Parce qu'en fait, si vous utilisez ChatGPT, la version gratuite par exemple,pas la version de ChatGPT 4, vous avez, la limite n'est pas énormeen termes de texte que vous pouvez lui envoyer.
00:01:49 :Donc imaginez que vous avez un gros fichier Word avec des paragraphesqui font chacun, je ne sais pas, 500 mots.Vous pouvez dire, j'aimerais bien avoir un résumé global de mon document Word.
00:02:00 :Donc ce que vous pouvez faire, c'est que vous dites, je résume chacun des paragraphes.Je dis au lieu qu'il fasse 500 mots, je dis fais moi un résumé de 50 mots.
00:02:06 :Et puis à la fin, si on a 10 paragraphes résumés de 50 mots, on aura 500 motset là on pourra faire un résumé global.
00:02:13 :Donc voilà, on en est au début, je ne suis pas sûr que les résultats seront très satisfaisants.Mais voilà, et donc ce qui ne marchera pas ce soir, on pourra tout faire,sauf envoyer la requête de résumé parce que j'ai un problème avec mon token d'API.
00:02:28 :Je ne sais pas pourquoi, je n'arrive pas à le régler.Vous savez, en fait, si vous voulez utiliser l'API, vous devez utiliser un tokenet chaque requête sera payante.
00:02:38 :Ce n'est pas cher, je crois que c'est ça qui utilise Thibault pour faire les réponses IAsur la plateforme.Mais voilà, donc ça c'est le premier truc.
00:02:51 :Et la deuxième chose, la dernière fois, quelqu'un avait demandé si on pouvait voir le labyrinthe.Et en fait, je voulais vous proposer une autre solution qu'a proposé Thibaulten utilisant les arbres, les nœuds et les arbres.
00:03:05 :Je ne sais pas si vous voyez les arbres de dessillou en fait quand on descend.Donc je voulais vous essayer de résoudre avec ça.Je suis presque au bout, mais il me manquait un petit truc.
00:03:16 :Donc de toute façon, je pense qu'on n'aura pas le temps de tout voir.Donc on posera au moins le problème, voir comment on le pose.
00:03:21 :Et puis je vous montrerai où j'en suis.Et puis si vous avez des idées, peut-être directement on pourra résoudre ensemble.Mais sinon, je pense que la prochaine fois ce sera vous.
00:03:30 :Ok, dites-moi si ça vous va, si ça vous intéresse.Ok, et avant ça, est-ce que vous avez des questions?N'hésitez pas, vraiment.Je tens quelques secondes que les timides se dévoilent.
00:03:57 :Git la prochaine fois, pas de souci. Après je peux en parler maintenant si tu veux.Je peux en toucher quelques mots, si ça vous intéresse.
00:04:10 :Donc Christian, tu parles de Git ou de GitHub?Parce que c'est deux choses différentes.Ce n'est pas différent, mais ce n'est pas tout à fait la même chose.
00:04:16 :Donc toi tu parles vraiment de Git ou de GitHub?Git, ok.Donc en fait, Git c'est un logiciel qui permet de faire du versionninget de garder un historique de ton code.
00:04:33 :Et donc ça c'est Git, et GitHub c'est ce qui te permet d'héberger ton codeet justement de visualiser tes différentes versions, etc.Donc en fait, souvent quand tu commences un projet,c'est surtout que tu utilises plutôt GitHub.
00:04:53 :Attends, je vais aller sur GitHub.On va aller...Donc là, tu es sur un compte GitHub, n'importe quel.Et en fait, GitHub par exemple, tu peux avec Git, par exemple si tu as...
00:05:21 :Ici tu vas sur un repo, ça s'appelle des repos en anglais.Ce sont un peu les dossiers sur GitHub.Et donc ici, tu vois, tu as un lien toujours qui te dit,ça c'est le lien vers le GitHub.
00:05:38 :Donc une fois que tu as récupéré ce lien, tu fais copier.Et ici par exemple, tu es dans n'importe quel dossier, tu fais Git.Je ne vais pas le faire ici.
00:05:46 :Mais si tu fais Git clone le nom du dossier,en fait il va te cloner tout le dossier dans ton dossier local.Et en fait, une fois que tu as récupéré ce lien,tu vas en créer un et comme ça tu pourras voir...
00:06:03 :Donc là, tu vois, moi je suis dans le GitHub.Donc là, tu vois, moi j'utilise GitHub Desktop,mais tu peux utiliser la ligne de commande.
00:06:32 :Donc en fait, ici tu vois, je vais créer un nouveau repo.Donc je vais dire Create New Repository.Je vais lui dire Test Docs String.
00:06:41 :Je ne vais pas lui donner de description.Ça, c'est l'endroit où je vais vouloir qu'il soit en local.Un Gitignore.Et une licence comme ça.
00:06:54 :Donc là, je dis Create Repository.Et donc là, il l'a créé en local.Donc ce qu'il me propose maintenant, c'est de le publier sur GitHub.
00:07:01 :Donc je peux le faire par exemple.Je vais dire que c'est privé.Et maintenant, il me propose...Ah, on a un nouvel étudiant parmi nous.
00:07:21 :Normalement, pourquoi il ne me propose pas de l'ouvrir sur VS Code?Attendez, je vais essayer d'ouvrir le nouveau repo qu'on a fait.Donc là, j'ai ouvert dans GitHub le nouveau repo qu'on a créé.
00:08:04 :Donc tu vois ici, il n'y a rien du tout.Donc là, imagine maintenant, je vais créer un nouveau fichier.Donc je vais dire main.py.Et là, je vais créer une fonction.
00:08:15 :Par exemple, je vais dire...La fonction a plus b, donc tu vois que c'est une fonction très sophistiquée.Donc là, tu vois par exemple, si j'ouvre un terminal,et que je fais git status, par exemple,il va me dire que j'ai un fichier main.py qui n'est pas dans mon flot de travail.
00:08:50 :C'est-à-dire que si je vais voir sur le site où sont hébergés tous mes repos,test-tocstring,tu vois qu'il n'a pas encore vu qu'il y avait un nouveau fichier.
00:09:09 :Donc c'est pour ça ici que je vais lui faire git add.pour dire ajoute tous les fichiers dans le process de suivi.Donc là maintenant, si je refais git status, tu vois il est content.
00:09:22 :Et maintenant, ce que je veux faire, c'est uploader mon fichier sur mon repo.Pour uploader, il faut d'abord faire un commit.Donc tu fais git commit.
00:09:33 :En fait, le commit, ça te permet de dire qu'est-ce que tu as fait.Là j'ai juste créé une fonction.Donc là on a le commit et maintenant il faut faire un push.
00:09:49 :Donc git push.Je vais récupérer mes mots qui passent.Git push, git commit.Ok.Donc là maintenant, si je retourne sur mon github sur le site web,là tu vois j'ai ajouté mon nouveau fichier main.py.
00:11:11 :Et donc là il m'a mis ma nouvelle fonction.Et ce qui est pas mal, c'est que tu vois si je mets history,il me met un message à chaque fois où j'ai créé,enfin quand j'ai fait un commit, il m'a dit en fait tu as créé cette fonction.
00:11:30 :Ah bah oui tu vois Gabriel, celle là-bas, la version desktop.Donc tu vois ici, tu as un historique de tes modifications.Donc là si je clique dessus, je sais que, il me donne la date,je crois quelque part, c'était il y a une minute, j'ai ajouté cette fonction là.
00:11:48 :Là maintenant imagine, je dis en fait je change ma fonctionet je vais lui dire en fait tu vas me faire fois.Donc là tu vois il va remarquer que j'ai un changement.
00:12:00 :Et même dans VSCode ce qui est pas mal,c'est que tu peux directement aller voir dans la gouttière le changement qu'il y a eu.Donc là il voit qu'il y a eu un changement parce que j'ai ajouté des lignes,des choses comme ça tu vois.
00:12:14 :Ok donc maintenant si je refais un git status, bah j'ai toujours un problèmeparce qu'en gros j'ai pas comité entre guillemets le nouveau changement.Donc il faut le refaire.
00:12:24 :Donc là tu vois tout à l'heure je suis passé par la plateforme en ligne,mais aussi tu peux passer par la plateforme qui est en interface graphique.
00:12:36 :Donc là tu vois je lui dis ok, commit, et maintenant je push.Et en fait ce qui est vraiment intéressant avec git, et c'est à ça que ça sert,c'est que si jamais tu développes et que tu fais une connerie dans ton code,tu vois genre t'as un code qui est fonctionnel,
00:12:51 :et si d'un jour ou l'autre ton code il marche plus et que tu te souviens plus pourquoi il marche plus,et bah en fait ce qui est bien c'est que t'as tout l'historique de ce qui s'est passé.
00:12:58 :Et donc tu peux même récupérer ton code à un certain état.Tu vois là par exemple main, si je vais voir dans l'historie, maintenant j'ai A fois B.
00:13:08 :Mais en fait si jamais je veux récupérer mon code avant ma modification,bah je peux y aller parce qu'en fait il m'a gardé un historique.
00:13:16 :Donc en fait git, ça sert surtout à ça, c'est à dire que tu gardes un historique des modifications,tu comprends pourquoi t'as modifié tout ça,parce que des fois tu reviens sur ton code plusieurs mois après, tu comprends plus ce que t'as fait.
00:13:30 :Et donc là git ça te permet justement de, bah si t'as un bug que t'arrives plus à résoudre,mais que ça marchait avant, bah tu peux tout récupérer.
00:13:38 :Si ton PC il crache et que t'as utilisé GitHub, bah tu peux tout récupérer sur GitHub.Donc voilà, le projet avant la modification, bah en fait ça dépend,soit tu, le truc, normalement le mieux c'est que quand t'as un code qui est fonctionnel,attends je vais me montrer dans un de mes repos, en fait tu fais, est-ce que j'en ai fait ici?
00:14:08 :Non je n'en ai pas fait.Attendez je vois vos questions et je vais répondre après.En fait, ce que je vous conseille de faire c'est des tags.
00:14:24 :Une fois que vous avez créé une application, que vous avez做 brotherhood,vous avez fait aussi une tag qu'on concentre sur l'avantage de cette application,vous allez voir quand vous allez deviner évidemment que l'offre peut s'opposer avec les autres.
00:14:39 :Mais si les vois un application supportant alors que j'essaye d'assoler des tag qui personnes,qu'elles étaient deux-balles par page s'ils étaient divisées.Une fois que vous avez un niveau de code satisfaisant et que vous savez que vous allez vouloir fairedes modifications, et bien en fait vous pouvez créer des tags. Donc en fait vous allez dans
00:14:59 :le code, ici, et là vous créez... En fait le tag va être créé à partir d'une branche, parce que làje vois dans les... Si vous voulez faire une nouvelle branche, imaginez que vous avez une
00:15:29 :fonction là, et vous dites j'aimerais bien apporter une modification mais sans péter tout mon code.Donc là le mieux c'est de créer une nouvelle branche qui va partir du code qui est stablepour faire vos modifications. Donc là par exemple avec le GitHub Desktop je peux aller ici, je peux
00:15:44 :dire fais moi une nouvelle branche. Donc là je vais écrire new future, je vais mettre un tiré,je fais create branch et je la publie. Donc là maintenant si je vais voir dans... Je retourne
00:16:02 :dans mon... Bon j'abandonne ce que je voulais vous montrer, test docstring. Donc là vous voyezmaintenant que j'ai une branche main et une branche new future, donc pour l'instant elles sontidentiques. Mais imaginons que je fais une modification ici, et vous voyez ici VS Code
00:16:19 :il prend en compte directement la nouvelle branche, il sait que je travaille dedans. Donc là maintenantsi je vais dire... Je vais dire def another function, là on va dire i et on va faire retourne
00:16:35 :i carré. Donc là maintenant il va falloir que je commise ma nouvelle fonction, mais elle sera quedans ma nouvelle branche. Donc là maintenant je vais voir dans mon GitHub et il m'a déjà vu que
00:16:56 :j'avais quelque chose de nouveau dans la nouvelle branche. Si je vais dans ma branche main ici,hop, vous voyez en fait j'ai pas grand chose, j'ai le début de ma fonction. Par contre,
00:17:05 :si je vais dans la branche new future et que je vais voir mon main, en fait j'ai bien monancienne fonction et ma nouvelle fonction. Et en fait ça c'est super par exemple, imaginez que
00:17:17 :vous ayez un site, un site web Django avec des fonctionnalités, en fait vous pouvez continuerà développer votre site web en laissant la branche main active, sans tout péter, et une fois quevous êtes sûr que ça marche bien, et bien vous fusionnez la nouvelle branche. Donc là imaginons
00:17:33 :qu'on a notre new future, on est content ça marche bien, et bien on dit on va fusionner avecavec la branche. Ouais, il y a une question? Ouais, quand tu veux tester ta branche dans le
00:17:49 :terminal, quand je voyais ton terminal il y avait écrit main entre parenthèses, il faut que ducoup il y ait écrit new future à la place? Ouais, tu fais guide branche et en fait,
00:18:03 :tu vois si tu fais guide branche et que tu fais tab, il va te proposer les branches qui existent,donc là tu fais new future, moi je crois que c'est un guide branche check out,moi je t'avoue que j'utilise pas beaucoup la version en ligne, mais je crois que c'est ça,
00:18:21 :donc là tu fais new future, et donc là tu vois il m'a changé ma branche, si tu veux,ça dans le terminal. Et là du coup tu peux la tester? Et là tu peux la tester dans le terminal, ouais.
00:18:33 :Et en fait ce qui est bien c'est que une fois que tu as terminé tes changements, tu retournes icidans ton repo, et là il te dit en fait il voit qu'il y a deux branches, donc si tu es contenttu dis compare and pull request, donc là tu dis qu'en fait tu veux merger ta nouvelle branche avec
00:18:49 :ton ancienne, merger pour fusionner, tu fais create pull request, donc là il vérifie qu'il n'y a pasde conflit etc, tu merges, confirme merge, et tu peux du coup maintenant tu peux supprimer la branchede développement parce que tu n'en as plus besoin. Et en fait ce que tu peux faire, ce qui est
00:19:13 :intéressant c'est que à partir des, normalement à partir des pull request, peut-être je le feraiplus sérieusement la prochaine fois, mais à partir des pull request tu peux générer des versions.
00:19:22 :Tu vois on aurait pu générer un code entier avec la première branche, et puis un autre code avecla nouvelle branche etc, comme ça tu peux récupérer ton code par branche ou par historique.
00:19:35 :Donc du coup c'est plus comme ça qu'ils font fonctionner si tu veux récupérer le projetavant une modif. Quand tu vas faire une grosse modif, il faut penser à faire une nouvelle branche
00:19:50 :et comme ça ta nouvelle branche elle va pas impacter le projet avant. Et donc tu vois icicomme on a fait, donc Jean-Phil c'est pour répondre à ta question, tu vois dans Toxtring,voilà j'ai plus ma branche mais tu vois si je voulais aller voir ma branche précédente,et ben voilà tu peux même voir je pense, ah non je l'ai supprimé, mais bon voilà c'est un peu le
00:20:14 :principe. Est-ce que ça répond un peu à ta question sur Git? J'ai pas du tout la prétentiond'imaginer que je t'expliquais Git et GitHub, mais c'est un peu l'idée. Et je crois que Thibault
00:20:30 :il prépare une formation sur Git, sur Toxtring. Pourquoi j'ai perdu ça?Ok, je vais revenir à ce que j'avais. Ouais c'est ça exactement Christian. Et Christian
00:21:24 :d'ailleurs t'avais pas, attends je confonds avec, il y a quelqu'un qui a un problème là en cemoment, c'est pas toi Jean-Phil qui a un problème sur l'environnement virtuel avec un script sur lesquestions? Ouais. Et du coup c'est parce qu'en fait, c'est parce que quand tu fais le import
00:21:43 :request ici, il te le souligne c'est ça? Ouais avec un S à la fin, comme sur la vidéo, il restesurligné. Et je sais pas pourquoi, je sais pas si c'est problématique. Après tu utilises le request
00:22:00 :dans ton script ou pas? Je suivais vraiment à pas à pas le tuto en fait. Et là j'ai retesté enreprenant du boulot et j'avais mis un print pour voir s'il passait pas hier soir et là il passe.
00:22:18 :Ah d'accord. Par contre quand je tape which pip, il me met slash usr donc pour user slash pip,je m'attendais à avoir un point au départ, ce serait comme pour point vent, mais sinon là ila l'air de passer maintenant. Ah oui tu voulais être dans le vent, bah en fait non il te met le
00:22:44 :chemin complet quand tu fais ça, c'est normal que t'aies pas de point, il te met le chemin enabsolu. Après des fois avec vs code, faut pas hésiter à le quitter parce qu'en fait des fois
00:22:56 :il y a des trucs qui sont restés dans le cache etc. Peut-être que c'est tout simplement ça.En tout cas en bas il me dit bien la version 3.7.16, 11, 2.11. Ouais d'accord,
00:23:07 :bah en fait tant que dans ton terminal t'as ça ouais, et puis si tu fais which machin oupi conversion normalement il te dit où est-ce que tu es. Ok, est-ce qu'il y a d'autres questions?
00:23:26 :Avec plaisir, n'hésite pas. Ok, bah du coup je vous propose qu'on regarde un peu DocX. Doncen fait DocX, il y a plusieurs fois il y a des gens qui avaient posé la question,genre vous savez avec les context managers quand on fait with open data.txt, en fait ça, ce genre
00:23:56 :de context manager ça marche que avec un fichier texte. Par exemple si je fais with open, exempleR.with as f et que je fais data égal f.with, donc là je run world creation, si je fais data,
00:24:34 :vous voyez j'ai bien, ne vous inquiétez pas c'est pas une vraie clé ici, c'était pour le truc qu'onva faire après, j'ai bien récupéré la data. Par contre si j'essaye ça dans le fichier ici,
00:24:46 :par exemple le fichier world que j'ai mis, comment je l'ai appelé, c'est mon DocX,il va m'envoyer chier parce qu'en fait, ou alors il va m'envoyer quelque chose de bizarre,non il m'envoie chier parce qu'en fait il dit qu'il comprend pas, c'est pas de l'encodingdu TF8, en fait quand vous essayez de lire un document world, c'est un format propriétaire,
00:25:15 :donc vous pouvez pas l'ouvrir comme ça. Donc il faut utiliser une librairie qui s'appelle DocX,donc si je fais ici, vous allez la voir, allez, ça doit être PyDocX, un truc comme ça, ouaisPython DocX ici vous voyez. Salut The Crow, ok donc ici on va importer, import DocX, ok,
00:25:57 :pour faire un, imaginons qu'on veut créer un document, donc moi j'ai pas dit mais imaginonspar exemple on a ce fichier là, c'est un fichier CSV, donc un tableau, et qu'on veuille faireun rapport world automatique de ce rapport là. Donc on peut faire ce qu'on veut, on
00:26:16 :peut dire, on va d'abord faire import Panda ASPD et ici on va dire df égale pd en 8.csv et là on va dire cférence.pd.csv, ok on va voir déjà ce que ça donne, donc là
00:26:41 :j'ai mon df, imaginez que je fasse un df.describe, ok donc ça déjà c'est pas mal, et puison va se dire qu'en fait on va vouloir mettre un graphique aussi dans notre document worldautomatiquement, donc on va importer Matplotlib, ASPLT, ok, et puis qu'est-ce qu'on va vouloirtracer, on va faire un histogramme, on a qu'à dire qu'on va faire, attendez je vérifie
00:27:11 :ce qu'on peut faire, df.list, on va faire l'histogramme de l'espérance de vie. Donclà on va dire qu'on va se mettre ce graph là, oui Christian il y a une méthode plotdirectement sur les dataframes, on va dire qu'on va se mettre ce graph là dans notrerapport et puis qu'on va vouloir faire une petite introduction dans le rapport, la mettre
00:28:02 :automatiquement et puis comme ça on peut reproduire, donc si vous faites des rapportstechniques au boulot ou des choses comme ça, ça peut être vachement pratique, moi jem'en sers tous les jours, enfin tous les jours, pas tous les jours quand même, maisde temps en temps. Donc là on va se dire qu'on va se mettre un petit résumé, voici
00:28:26 :quelques statistiques sur l'espérance de vie dans le monde, donc là on dira que c'estl'introduction en fait, on va même se faire, j'imagine, on va se faire un dictionnaireet on va dire l'introduction ça va être ça, pour l'instant ça va être ça et onva mettre interprétation aussi, on va dire le mode, donc c'est la valeur la plus fréquente,
00:29:32 :on va dire que c'est 75, on va dire 75 ans. Et on peut même se dire en fait, ça pourraitêtre pas mal, c'est de définir directement les datas en fait dans le fichier Python,c'est ça qui est intéressant en fait, c'est un peu bête de l'écrire automatiquementparce qu'imaginez, là j'ai espérance de vie, imaginez ce fichier là, mais imaginez
00:30:08 :après le fichier il change, donc moi j'ai pas envie de tout me retaper, à tout réécrire,donc en fait ce que je vais faire c'est dire, ça c'est mon fichier qui est là.
00:30:18 :Rétérez moi si c'est trop chiant, trop barbant ou si vous voulez voir plus de détails,n'hésitez pas s'il vous plaît. Donc là j'essaye de faire des trucs, j'essaye de
00:30:35 :vous intéresser au maximum, n'hésitez pas à me dire si c'est trop barbatif ou si vousavez déjà vu. Donc là en fait c'est bien parce que si jamais un jour mon fichier il
00:30:56 :change, ben voilà, donc là on va faire une fonction, write report, donc ça c'est vraimentle write text report on va dire, on va prendre en paramètre un data frame et en fait lerapport il va analyser directement le data frame. Donc on va dire, on va sortir la data,
00:31:25 :on va dire que ça ça vient là, et si je fais df, on va dire que ça vient là, onva dire que ça vient là. Je crois que c'est mode, ça freeze désolé. Ouais vous voyez
00:32:08 :donc mode c'est bien l'espérance de vie, donc si je fais mode.values, ok donc là jesuis comme ça et l'espérance de vie la plus probable est ici, donc là on va le mettreen fstring, comme ça c'est paramétrique, c'est à dire que si je change mon fichierj'aurai pas de problème, ça va bien se mettre à jour. Donc là ça marche, je dézoome
00:32:56 :un peu parce que j'ai un peu du mal à voir. Donc là on a notre data, on va créer ledf.create.graphic, on a aussi, on va créer les statistiques, donc là on va juste faire
00:33:20 :un retourne df.describe, puis on va créer le graphique, donc là pareil df, et on vafaire df.list, et on avait dit espérance de vie.Et donc là normalement on a à peu près nos fonctions, donc imaginez on fait ça,df, ok, peut-être que vous voyez plus bien, donc on va sortir notre data.text, donc data.text
00:34:26 :on va sortir les stats, ça va être du create df, et ensuite le graphique on va faire uncreate graphique df. Ok donc là je vais lancer ça, on va voir ce qu'il se passe, il a créé
00:34:58 :mon graphique normalement, ouais c'est bon, et donc maintenant on va pouvoir le mettredans notre document Word, donc ce qu'on va faire c'est qu'on va créer notre documentWord, ici j'en ai plus besoin celui-là, serve du df, donc en fait tout ça, ça vavenir le mettre ici, et maintenant on va s'attaquer vraiment au document Word à part entière.
00:35:41 :Donc doc Word c'est docx.documents, ok, et maintenant après je vous l'avoue je connaispas toujours par cœur les trucs, donc on va regarder dans la doc, qu'est-ce qu'ilme veut celui-là, dans la doc, où est-ce qu'on est, ok donc là si je vais voir dansla doc, donc là je crée un document, si je veux mettre un heading on est comme ça,
00:36:09 :attendez je vais tout copier, je vais pas me faire chier, et je vais garder que ce dontje veux, ok, ok, et tout ça.Donc là on va dire, et en fait ce qu'on va faire c'est on va ajouter un heading àchaque clé de dictionnaire, donc là on va dire, là vous voyez plus beaucoup, là vous
00:37:12 :voyez bien, on va dire en fait pour toutes les clés et toutes les values qui sont dansmon dictionnaire, donc c'est mon datatext.items, on va lui dire tu vas me créer un titre avec
00:37:35 :le niveau 1, donc là on va pas l'appeler heading level 1 mais on va juste l'appeleravec la clé, level 1 et document add paragraphe, et on va lui dire, bah là il lui met la valeur.
00:37:51 :Donc tout ça on n'a pas besoin, c'est pour vous voyez l'idée, je sais pas si on va allerjusqu'au bout, et il va me sauvegarder ça, documents sur démo, bon bah ça me va.
00:38:28 :Ouais Gabriel? Genre si tu mets un pass break à la fin de ta boucle il va te créer unepage dans cette itération du coup? Oh bah oui oui, on peut le laisser suivre.
00:38:39 :Ouais c'est pratique, tu vois si je le mets là, en fait il va me créer, il faut bienla mettre dans la boucle mais j'imagine qu'il va bien me faire un pass break ici.
00:38:50 :Ok donc là il me l'a créé, est-ce qu'il est quelque part ici? Je le vois pas, etc'est normal parce que j'ai pas appelé ma fonction, ok et on les retourne.
00:39:22 :Alors ça m'étonne pas, j'ai un peu copié-collé comme on voit.Ok j'ai pas mis le bon, donc là en fait c'est le nom de mon stats pour PNG, et ilme l'a créé a priori, et si je vais voir mon document Word, donc vous voyez c'estpas mal, il m'a pris l'espérance de vie, donc là c'est le titre que je lui ai donné,
00:39:59 :introduction, voici quelques statistiques sur l'espérance de vie dans le monde, interprétation,l'espérance de vie est la plus probable, et après l'image que je lui ai demandéde mettre.
00:40:11 :Donc après vous pouvez faire plein de choses, vous pouvez ajouter le titre, la légendede l'image, etc.Vous pouvez générer tout ce que vous faites d'habitude avec Microsoft Word.
00:40:19 :Donc ça je trouve ça vachement intéressant parce que ça automatise pas mal de choses,vous voyez, à partir d'un data frame, même à partir d'un fichier CSV, on génèreun document Word qui résume ce qu'il se passe dans notre fichier CSV.
00:40:35 :Donc je trouve ça pas mal, dites-moi ce que vous en pensez, est-ce que vous pensez queça peut vous servir? Est-ce que vous l'avez déjà utilisé, est-ce que vous l'avez
00:40:44 :déjà vu?Ah ouais, moi quand j'ai découvert ça, ça m'a changé la vie.Et allez voir la documentation, vous voyez ici Python.txt, elle est assez simple, et
00:41:16 :puis vous pouvez ajouter des tableaux, etc.Donc c'est vachement pratique.Normalement vous pouvez quasiment tout faire, vous pouvez ajouter des tables, des figures,changer le style de vos paragraphs, etc.
00:41:29 :Vous pouvez quasiment tout faire normalement avec.Ouais, moi aussi j'aime bien faire ça, Toulouse City Earth, désolé je sais pas qui est derrièrece pseudonyme, mais moi aussi, je sais pas si tu connais aussi, on peut faire ça avecPanda, Excel, OpenPyXL, etc. ah Jager, ok, t'as changé de pseudo.
00:41:52 :Donc là c'était vraiment création de document.Après ce que je voulais vous montrer, mais malheureusement je pourrais pas vous fairela démo finale, c'est l'utilisation de l'API ChatGPT pour faire le résumé.
00:42:05 :En fait, imaginez que vous avez un document, ah oui pas de souci t'inquiète.Donc là imaginez que vous avez ce document là, bon c'est pas grave si vous voyez pasen détail, en fait j'ai juste pris un truc sur Wikipédia, j'ai collé la page et j'aimis des sections.
00:42:31 :Donc en fait l'idée ce serait d'imaginer qu'on va résumer le document en entier, sije fais un copier-coller de tout ça en entier sur ChatGPT, il va m'envoyer chier normalementparce que y'a trop de mots.
00:42:48 :Si je lui dis résume, ça s'éteut plaît, il doit rester poli avec ChatGPT, on saitjamais.Bon voilà en l'occurrence ça marche, ça sert pas à mon propos mais imaginez que vousavez un document de 10 000 mots, ça marchera pas, je peux vous le confirmer.
00:43:11 :Donc en gros l'idée c'est qu'avec la librairie DocX on va aller chercher, on va mettre dansun dictionnaire chaque paragraphe qui correspond à chaque titre, et on va avec l'API on valui demander de résumer chaque paragraphe.
00:43:30 :Donc en gros ici je vous passe l'écriture du script, en fait on va aller boucler, onva boucler sur, donc là on ouvre notre document, on va créer un dictionnaire et on va allerboucler sur tous les paragraphes.
00:43:46 :Dès qu'on va rencontrer un paragraphe de style heading 1, donc ça c'est pour titrede niveau 1, on va commencer à récupérer ce qu'il y a dedans.
00:43:54 :Et on va aller parcourir tout, parce qu'en fait ça marche par paragraphe, la librairieDocX.Et donc dès que, pour chaque paragraphe qu'on va parcourir, tant qu'on a pas rencontréle prochain titre, on va ajouter dans notre content le texte qu'on rencontre.
00:44:15 :Et si on rencontre un titre, on break la liste et puis on revient à celui d'après.Donc là déjà si je fais ça, donc il va pas vouloir parce que mon API j'ai un problème,mais si je fais déjà Word Summary, il me dit mon problème d'API, mais si je regarde
00:44:37 :quand même le fichier que j'ai généré, donc c'est data, vous voyez ici j'ai bientous, si je fais data.case, j'ai bien les titres que j'ai émis dans mon fichier Word
00:44:53 :et en fait j'ai bien accès au paragraphe qui correspond à ce titre là.Et donc en gros l'idée ici c'était d'utiliser l'API de ChatGPT, donc en fait pour ça ilsuffit juste d'importer le module OpenAI.
00:45:15 :Attendez je zoom un peu.Donc ici, dans un fichier env, donc là je mets un env exemple parce que dans mon envj'ai ma vraie clé de token, c'est pour que vous ne la voyez pas, mais en gros c'est lemême principe.
00:45:31 :Vous mettez votre API de token ici, votre numéro que vous récupérez sur le site webdans votre compte.Et ici c'est juste pour envoyer, pour dire à l'application quelle est votre clé d'environnement.
00:45:51 :Donc ça j'en avais déjà parlé quand on faisait du Django etc, je sais qu'on a discutéavec Gabriel qui avait implémenté ça pour son site.
00:46:03 :Ça c'est important, ouais en fait l'API pour faire les requêtes c'est payant mais c'estvraiment de l'ordre de quelques centimes pour plusieurs centaines de requêtes, donc c'estquasiment gratuit.
00:46:19 :Donc ça c'est important, ne hardcodez jamais vos clés de token ou vos mots de passe dansvos scripts.Utilisez des variables d'environnement comme ça.J'en ai déjà parlé plusieurs fois, si vous voulez j'en parlerai dans un prochainMentora si ça vous intéresse de revoir ça.
00:46:42 :Donc en gros moi ce que je faisais c'est ici j'ouvre mon document Word, je fais monextraction de texte là dedans, et ici je définis les modèles que je veux utiliserpour la génération de résumés.
00:46:54 :Donc là texte davinci02, il y en a plusieurs.La température c'est un paramètre qui dit le niveau de créativité du bot.Je crois que ça varie entre 0 et 1, si vous mettez 1 il est hyper créatif, il va voussortir des trucs marrants, des conneries, et puis si vous mettez 0 il va juste prendre
00:47:14 :le texte et couper dedans et il va dire que ça c'est le résumé.Là c'est le nombre de token max que vous ne voulez pas dépasser, en fait si vous payezà la requête vous voulez éviter de dépenser trop de token.
00:47:24 :C'est assez simple ce que j'avais compté faire, c'est juste parcourir le dictionnairede notre fichier qu'on a extrait, et puis créer un prompt, c'est à dire vous savezdans chatvpt quand vous faites, vous voyez ici il m'a fait tout ça là, il me l'arésumé, j'ai pris un article Wikipédia sur l'auxoie qui est une race de chevaux,
00:47:52 :donc vous voyez tout ce texte là il me l'a résumé ici, donc c'était ça l'idée,et en fait un prompt ici vous voyez quand je fais résume le texte suivant, et làvous coupez et collez votre texte que vous voulez qu'il résume, et bien en fait c'estce qu'on fait ici quand on fait le prompt, on fait un prompt, résume en 20 mots et val,
00:48:13 :et bien en fait c'est la valeur dans le dictionnaire, donc la valeur du texte associé au titreque je lui demande, et donc ça c'est la requête, vous allez voir sur openAI c'estexpliqué, qui vous permet justement de générer la réponse de chatvpt là dessus. Voilà,
00:48:33 :et donc en gros l'idée que j'avais c'était le fichier, donc en fait on se crée un dictionnairevide, et chaque résumé créé par chatvpt on le met dedans, et comme ça on aurait,pardon excusez moi, du coup on aurait un dictionnaire avec pour chaque titre un résumé associé,et après il aurait juste fallu refaire une boucle sur chacun des résumés pour faire
00:49:04 :un gros résumé. Merci Seb. Est-ce que vous avez compris un peu le concept, l'idéede l'utiliser l'API? Je trouve que c'est pas mal parce qu'en fait ça présente un
00:49:18 :peu le concept d'API, à quoi ça sert, vous voyez qu'en fait une API ça sert vraimentà interfacer avec un site web, parce que là chatvpt c'est un site web en fait, maismoi j'ai pas envie de faire à la main les copies collées etc donc j'utilise l'APIpour faire mes requêtes. Bon alors ça vous parle ou est-ce que vous avez des questions
00:49:46 :là-dessus? Je pensais quand tu utilises une API, alors moi je connais pas encore,je sais pas trop utiliser, mais je pensais que tu récupérais depuis le site un JSONavec le texte dedans. Ouais c'est ça, en fait ici quand tu vas, ici là tu récupères
00:50:16 :le, après le OpenAI elle te met à disposition, tu vois, choice 0, en fait ça va te sortirun espèce de, c'est un attribut de l'objet ici, complétion, dans lequel tu peux récupérerle texte, mais effectivement quand tu fais des appels à des API, t'as des retours enformat JSON si tu veux voir. Tu vois ici, en fait tu vas faire cette, voilà les pampitons,
00:50:57 :donc là tu vas faire tes requêtes, et tu vois ici, tu vas bien récupérer des JSONmais après dans un JSON tu vois tu peux récupérer l'ID ou les choses comme ça, le texte justementde ce que tu veux, mais non t'as raison c'est bien un JSON que tu récupères c'est le principe
00:51:29 :des API. Ok, merci. Je t'en prie. Voilà ce que je voulais vous dire pour DocX, enfinla librairie DocX qui est intéressante, et l'API qui est plus qu'intéressante. Voilà
00:51:55 :essayez d'y penser en fait, vous imaginez les possibilités que ça a, si vous avezun fichier Excel ou quoi, vous pouvez faire une analyse statistique dessus et puis toutmettre dans un rapport etc. C'est pas mal. Juste avant de terminer je voudrais juste
00:52:11 :poser un peu les bases, j'essaierai de finir ça la prochaine fois. Ouais, ouais effectivement,de toute façon les API, vous voyez en fait avec chatgpt etc je pense que les API çava, c'est énorme comme développement, les API ça existe depuis longtemps et il y aun gros développement mais là avec tout ce qui est intelligence artificielle etc ça
00:52:35 :va encore de plus en plus exploser donc si vous savez manipuler les API c'est un bonpoint. Quand vous allez sur data.gouv etc, d'ailleurs j'y suis allé hier pour récupérer
00:52:47 :des infos, en fait ils ont des API et en fait c'est des API qui sont faites en DjangoREST framework sur data.gouv, sur Incy là etc. Il y a beaucoup d'API qui sont faites
00:53:00 :en Django REST framework donc c'est pas une perte de temps d'apprendre le fonctionnementdes API et d'apprendre à en développer. Donc moi je disais pour le jeu du labyrinthe,
00:53:11 :ouais moi aussi je galère avec eux depuis quelques jours Christian. En fait ouais ceque je voulais vous montrer c'est juste pour poser le truc du labyrinthe qu'on essaierade faire la prochaine fois. En fait l'idée ici pour créer un labyrinthe j'ai fait un
00:53:34 :fichier Excel. En fait j'ai fait juste une petite mise en forme conditionnelle, ça veutdire que ici E, la case bleue c'est pour l'entrée et la S c'est pour la sortie, donc en faitle but du jeu ça va être d'aller de l'entrée à la sortie en passant par les chemins possibles.
00:53:57 :Donc là vous voyez par exemple si j'emprunte ce chemin là, je vais me retrouver bloquéau bout d'un moment. Donc en gros l'idée c'est de parcourir tous les chemins possibles
00:54:04 :et de partir là. Donc en gros moi j'ai fait ça avec un fichier Excel parce que c'estpas mal on peut voir visuellement et après je l'importe en faisant un dataframe. Donc
00:54:12 :là si par exemple vous voyez si je voulais faire un autre chemin, je mets juste 0 etil me change, c'est juste une mise en forme conditionnelle en fait, donc là ça va êtreassez simple, vous voyez c'est le niveau 1, et il suffit de voilà si vous voulez faire
00:54:28 :un autre niveau vous faites un autre onglet, level 2, et voilà. Donc en gros moi je vaisimporter avec Pandas chaque fichier Excel, donc en fait je vais récupérer une matriceet il va y avoir des 1 et des 0, un 1 ça va être un mur et un 0 ça va être un passage.
00:54:44 :Je vais revenir à 0. Donc en gros l'idée, ce que j'aimerais implémenter c'est, onest là, en fait, on va revenir là, je vous montre un petit peu mon idée et puis on essaierade continuer la prochaine fois. Donc en gros ici vous voyez, là j'ai mon fichier Excel
00:55:36 :et je fais une extraction de mon fichier Excel, donc level 1 c'était bien pour l'onglet1, donc vous pouvez spécifier en fait quel onglet vous voulez importer quand vous utilisezPandas, vous voyez c'est ce que je fais ici, extract grid, donc en fait je dis pd.read
00:55:52 :excel, donc pd pour Pandas, et je lui dis le nom du fichier Excel et le nom de la feuillede l'onglet dans le fichier Excel, donc en fait ça me permet de gérer facilement lesplusieurs niveaux que je veux dans mon jeu de labyrinthe. Donc ici j'ai là, si vous
00:56:09 :voulez je peux afficher la grid, donc en fait vous voyez, donc là c'est le dataframe dema feuille Excel, donc là j'ai l'entrée, le E, et donc là en fait normalement je vaispouvoir descendre, je vais pouvoir descendre, à cet endroit là, soit j'ai le droit dedescendre, soit je vais à droite, si je descends et je vais là, je vais être bloqué, vous
00:56:33 :voyez, et donc en gros l'idée ça va être de pouvoir parcourir tous les chemins possibles.Et en fait, je vais utiliser pour ça les arbres à décision, vous savez quand vousavez en fait un noeud, parce qu'en fait un labyrinthe c'est juste un, il va falloirtrouver le chemin qui mène de E à S, mais il y a plein de possibilités possibles.
00:57:00 :Enfin il y a plein de possibilités. Ici vous voyez sur le premier chemin je peux descendre,mais je peux aussi aller à droite directement. Donc en gros l'idée ça va être de parcourir
00:57:07 :tous les chemins possibles et de trouver celui qui mène à la sortie. Et donc voilà, c'estce que j'étais en train d'implémenter ici avec la librairie TreeLib qui permetde faire des arbres, et en gros l'idée ça va être à chaque case, on va définir,chaque case ça va être un noeud, et chaque noeud il va avoir un parent et des enfants.
00:57:26 :Et en fait les enfants ça va être la suite du chemin possible, et le parent c'est lacase précédente qui a donné d'où il vient. Et en gros l'idée ça va être d'illuminer
00:57:37 :les chemins comme ça petit à petit avec ça. Donc c'est un truc un petit peu plus,c'est un peu plus tordu que la résolution de Propostibo, mais voilà l'idée c'estde montrer un peu comment fonctionnent les arbres, et dites moi si ça vous intéresse,après si ça ne vous intéresse pas du tout, je ne fais pas ça la prochaine fois, je m'en
00:57:57 :mets, mais dites moi dans le chat si ça vous intéresse pour la prochaine fois.Ok, bon ben on fera ça la prochaine fois, est-ce que vous voulez parler d'autres chosesla prochaine fois, des choses qui ne sont pas claires et que vous aimeriez aborder?
00:58:28 :Dites moi dans le chat si vous avez des choses, si vous avez des idées, des choses que vousaimeriez voir. Les API, ben ouais après API, moi je vais leur parler, après j'en ai déjà
00:59:04 :un petit peu parlé, j'ai fait un ou deux je crois, mentoras sur les API, je ne saispas Gabriel si tu as le temps de les voir déjà.
00:59:11 :Sur REST framework, avec les serializers, si si si, et j'ai jamais fait moi même encorepour l'instant, là où j'en suis dans Django, je finis le docstrap et après j'attaque ça.
00:59:23 :Après je crois qu'il n'y en a pas sur la plateforme docstring.Non, je crois que oui.Ouais c'est ça, donc faudra que tu regardes, après je te conseille vraiment la documentationofficielle de Django REST framework, elle est vachement bien faite. Et puis toi t'as
00:59:43 :écrit des petits trucs sur ton blog je crois là dessus.Oui j'avais écrit quelques trucs, ouais c'est ça ouais, parce que j'avais, c'était autout début pour faire un serializer et puis aussi, je crois que j'ai mis le swagger, ouaisil y a quelques subtilités mais n'hésite pas ouais, allez voir.
Aucune occurrence trouvée pour « ».