Session du 22 septembre 2022 à 20h00
Data Science & IA
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
Scraper des prénoms avec BeautifulSoup et pandas
Apprenez à scraper une liste de prénoms sur le web avec BeautifulSoup et requests, puis à construire un DataFrame pandas pour simuler des salaires et primes.
00:00:00 :Ok, je vais agrandir un peu.Ok, c'est bon. Alors comme on a dit, la première chose à faire ça va être de récupérer lesinformations. En fait on va essayer de créer un data frame avec des données d'entreprises,
00:00:29 :par exemple des salaires, etc. des primes et les noms. Au début je voulais le faire un peu à lamain avec 10 noms mais je me suis dit c'est un peu dommage, on ne va pas avoir beaucoup de données,donc ce qu'on va faire c'est on va utiliser Beautiful Soup pour scraper des noms qu'on
00:00:40 :récupère sur internet. Donc ici, je ne sais pas si vous connaissez, bon la plupart doivent connaître,mais sinon en fait j'utilise un environnement virtuel dans lequel j'ai déjà installé leslibrairies, donc Beautiful Soup, Panda, etc. Donc c'est pour ça si vous vous demandez ce que c'est
00:00:58 :que le petit truc entre parenthèses c'est juste le nom de mon environnement virtuel. Voyez ici sije fais deactivate, j'ai plus mon environnement virtuel et moi après je fais juste, soit avecEVS Code vous pouvez faire, si vous faites un nouveau terminal il va directement vous activervotre environnement virtuel, en fait si vous l'avez mis dans le dossier de travail, sinon
00:01:18 :il faut l'activer en faisant source vanv bin activate, mais moi je ne vais pas le faire parceque je suis déjà activé. Ok donc Beautiful Soup, on va avoir besoin aussi de request qui permet de
00:01:31 :faire des requêtes HTTP, une porte request, c'est assez gros à l'écran? Ok merci. Porte BS4. Doncça c'est le module Beautiful Soup, c'est la version, je ne sais pas pourquoi il s'appellepas exactement comme ça mais c'est Beautiful Soup 4, c'est la version 4, et ici c'est request.
00:01:56 :Donc nous ce qu'on va faire, attendez je regarde parce que j'avais préparé l'exercice, je vaisregarder ma correction, ok donc on va créer du contenu HTML, j'écris et après je vous explique.
00:02:11 :Donc en fait moi pour faire l'exercice j'ai été chercher, j'ai été chercher, pardon, sur Wikipédiatout simplement, j'ai fait liste de noms, je suis tombé sur Wikipédia, donc en gros je me suis ditbah ça serait intéressant d'essayer de récupérer la liste de tous ces prénoms là, et on va pas se
00:02:46 :les taper à la main. En fait après ce qu'on peut faire aussi sans utiliser Beautiful Soup,c'est afficher le code source de la page, voilà je sais pas si vous connaissez, si vous faites unpeu Django vous devez connaître. En fait ici on a le contenu HTML de la page, et ce qu'on peut
00:03:02 :faire c'est avec une regex, aller récupérer les noms, parce qu'en fait on remarque qu'après chaque,alors quand vous voyez en fait si on va récupérer ce motif là, donc il suffit de récupérer cettebalise là dans une regex, on peut aller récupérer les prénoms mais c'est un peu bourrin on va pas
00:03:21 :le faire comme ça, nous ce qu'on va faire c'est on va utiliser le contenu HTML avec Beautiful Soup,donc en gros si je fais ça, ça me récupère le HTML, je vais essayer de montrer ce qu'on récupère.
00:03:37 :Ok donc j'ai bien récupéré ma réponse, j'ai mon contenu, si je fais du HTML, je crois que c'estcontent, voilà donc en vrai vous voyez j'ai bien récupéré le contenu, le code source de la page,et en fait c'est ça dont a besoin Beautiful Soup, c'est du contenu HTML, donc en gros on crée une
00:04:03 :soupe, ok donc en fait les paramètres, bon ça je rentre pas dans le détail à chaque fois parceque sinon j'ai pas envie de vous faire perdre du temps, mais de toute façon après l'enregistrementil est mis en ligne et vous pouvez aller voir et puis vous allez voir les options, il n'y a pas
00:04:21 :de soucis. Ici on définit HTML.parseur, ça en fait c'est pour lui dire comment on veut scraperles datas pour lui, en fait pour lui pour comprendre quelle balise etc, le type de baliseil va chercher, il sait que c'est du HTML, si vous aviez par exemple un fichier XML ici vous
00:04:38 :mettez XML parseur, et si vous en voulez d'autres, peut-être des custom un peu,vous pouvez créer vos propres parseurs et puis les utiliser. Mais là on va rester tranquille,
00:04:50 :on va utiliser un qui existe déjà. Ok donc là si je fais run panda-basics, qu'est-ce qu'il me veut?Ah oui, c'est parce que j'ai pas mis le content. Ok. Donc là soup en fait c'est un objet, si je
00:05:29 :fais type soup, c'est bien un objet de ma classe Beautiful Soup, donc là il n'y a pas de soucis,et vous allez voir ce qu'on peut faire. Donc imaginez maintenant que vous voulez récupérer
00:05:43 :en fait tous les noms. Donc en fait pour ça il faut un peu se taper à la main le travail,c'est à dire vous votre nom vous savez qu'il est ici, donc sûrement que dans le HTML il a un truc,un pattern qui est reconnaissable. Donc en fait sur un navigateur, ici sur Safari mais sur Google
00:06:03 :Chrome c'est pareil, si vous faites inspecter l'élément, en fait ce qu'on peut voir c'estque donc tous mes noms ici ils sont, où est-ce qu'il est, je vais en ouvrir n'importe lequel.
00:06:18 :En fait vous voyez que mon nom il est dans une balise, un link A, et il a une classe quis'appelle New, et en fait ça c'est ce qui vous permet d'identifier un peu votre cible. Ça veut
00:06:33 :dire que si vous arrivez à récupérer tout ce qui a la classe New, et bien vous aurez accès à votrecible. Donc voilà, pour récupérer les noms, je l'écris et après je vous explique. Donc on
00:06:50 :utilise lm.text, pour lm in soup.findall, donc là je lui mets la classe que j'ai identifiée,donc ça sera pas tout le temps la même chose, ça sera vraiment en fonction de votre besoin.
00:07:06 :Si je fais New, et... Ok. Vous voyez quand même c'est assez puissant, il va récupérer tous lesnoms juste parce que je lui ai défini la classe que j'ai identifié, dans laquelle était encapsuléeen fait ma cible. Si par exemple j'avais voulu aller chercher des trucs qu'il y a dans un tableau,
00:07:48 :par exemple, il aurait fallu que j'aille identifier une classe un peu plus spécifique,je dis une connerie, mais genre idmwcontentext, je peux aller chercher cette id là par exemple,et là il va aller me chercher toutes les balises qui correspondent. Donc là on a tous nos noms,
00:08:05 :donc ici vous voyez qu'on fait lm.text parce que c'est bien des objets de la méthode qui sontretournés, donc ils ont un attribut texte, sinon j'aurais juste récupéré un objet. Voilà,
00:08:20 :donc ça c'est un peu, c'est tout, ça clôture la partie scrapping, mais c'est juste pour vousillustrer avec un exemple, est-ce que c'est clair pour vous le scrapping et puis ce qu'on peut faireavec. Ok merci, n'hésitez pas à intervenir si il y a quelque chose que vous ne comprenez pas.
00:08:47 :Donc maintenant, un peu flou pour moi, mais après voilà, l'idée des mentoras pour moi je pense quec'est pas que à la fin du mentora vous sachiez faire exactement ce que j'ai montré, c'est justeque au moins vous ayez connaissance du truc, et puis si vous voulez le faire vous-même,
00:09:08 :vous le faites, et puis vous regardez la session si vous galérez ou si vous voulez aller plus loin.FindAll en fait c'est une fonction, on appelle ça une méthode parce que c'est une fonction d'uneclasse, donc là en fait c'est une fonction spécifique à mon objet soup, donc on appelle
00:09:29 :ça une méthode. Mais oui c'est une fonction spécifique, c'est une méthode. Ok donc là on anos noms, on va commencer à remplir notre data frame, donc pour ça on va créer d'abord dessalaires. Ok pour créer des salaires je vais utiliser le module random. Du coup en salaire
00:09:57 :qu'est-ce qu'on va mettre? On va mettre, là c'est vraiment, enfin là on n'est pas vraimentdans Panda, c'est juste que moi parfois je trouve que c'est intéressant de, quand on essaie deconstruire un exemple on voit plein de choses, donc là par exemple on voit Beautiful Soup,on va voir un peu des listes de compréhension, du rendit etc, donc c'est intéressant. Là en gros
00:10:20 :je vais générer un nombre aléatoire parce que je sais pas ce que je vais mettre comme salaire,donc RDN uniforme, donc je fais appel, uniforme sert à quoi? En fait si tu connais le module
00:10:34 :rendit c'est pareil mais sauf que c'est un truc uniforme, tu vois si je fais un point uniformeentre 0 et 2, j'ai un nombre aléatoire, style rendit mais c'est pour des nombres entiers,donc par exemple si tu fais des boucles etc tu as besoin de nombres entiers, mais si tu veux des
00:11:02 :nombres dans l'ensemble des réels, comme on dit en mathématiques, tu utilises uniforme. Donc làje vais générer autant de salaires aléatoirement qu'il y a de noms, uniforme, flot, ouais c'est ça,c'est ça. Je vais générer autant de salaires qu'il y a de noms, donc je vais utiliser une
00:11:24 :liste compréhension, donc RDN, for in range length names. Pour ceux qui commencent pythonça peut vous paraître un peu obscur la liste compréhension, mais en gros faut se dire quec'est exactement, là ce que j'ai écrit là, salaire égal machin, c'est exactement la mêmechose que ce que je vais écrire ici, et si je fais for in range length names salaire.append,
00:12:02 :et puis là je mets RDN machin, c'est exactement la même chose, c'est juste que les listescompréhension c'est hyper pratique, et ça donne un code plus propre. Donc on va vérifier ici,
00:12:13 :on a bien nos salaires, donc là normalement on a bien, on a forcément des salaires,enfin une longueur de salaire 373 qui est égale à, on a bien 373 noms, ok, je vais essayer d'accélérerun peu, je regarde de temps en temps le chat, et ici vous voyez que moi, en fait quand je fais des
00:12:37 :boucles comme ça compréhension et que j'utilise pas du tout l'élément de ma boucle, bah jemets un underscore comme ça, je sais qu'il sert à rien, parce que des fois on dit fori, for lm, in, parce qu'on fait quelque chose avec cet élément, mais là je fais rien,
00:12:51 :c'est juste pour me servir de littération. Ok, alors ensuite on va faire des primes,ceux qui ont déjà fait l'exercice du comptable ça doit vous dire quelque chose, donc jevais faire pareil, uniforme, là par contre ce coup-ci en fait je vais mettre un pourcentagede mon salaire, je fais un pourcentage de mon salaire, donc là par contre cette fois-ci
00:13:21 :je mets pas un underscore parce que j'utilise mon élément d'itération, for salaire insalaire, en gros ce que je fais c'est que je multiplie par un pourcentage aléatoireentre 0 et 1, parce que c'est un pourcentage, donc c'est entre 0 et 1, de mon salaire.
00:13:40 :Ok, bon, des fois on peut avoir, je vérifie à chaque fois, là on a bien une prime quiest un pourcentage du salaire, et qu'est-ce qu'on va faire, on va mettre des dates, engros j'aimerais bien que dans ma base de données, en gros c'est un peu comme si je
00:13:59 :créais une base de données, c'est comme si on vous donnait accès à une base de donnéeset puis vous vous la traitez. Donc là je vais faire, je vais créer, on va dire que
00:14:12 :on va chercher les dates d'embauche en fait des personnes, enfin on va définir les datesd'embauche, donc pour ça je fais datetime.date, je pense que vous l'avez déjà vu ce module
00:14:26 :datetime dans la formation. Donc là je vais utiliser ton rendit, en gros je vais lui définirune date, mais là j'utilise rendit, j'utilise pas uniforme, parce que pour une date il fautbien une date, donc je vais dire entre 1990 et 2022, je vais mettre 1989, dédicace àma génération. Ok donc la date elle prend l'année, après je vais prendre le mois,
00:15:09 :du coup c'est entre 1 et 12, et on finit par le jour. Là quand j'ai fait l'exemple,je me suis fait avoir parce qu'en fait j'avais mis en gros entre 1 et 31, bonjour Mathieu,bienvenue, en gros j'avais mis entre 1 et 31 mais je me suis fait avoir parce que comme
00:15:34 :c'est aléatoire, bah forcément il y a bien un moment où je vais générer un mois defévrier et un jour qui va tomber à 31 par exemple, donc ça va pas aller. Donc là juste
00:15:46 :pour l'exercice je mets de 1 à 27, comme ça je suis sûr de pas avoir de problème,et on va le faire comme tout à l'heure, for orange, hence, names. Ok. Normalement on
00:16:07 :doit avoir nos dates aussi. J'adore à chaque fois quand Seb il arrive avec la musique.Salut Seb! Bonjour Samiu! Bonjour! Bon du coup pour ceux qui viennent de joindre, j'ai
00:16:47 :commencé, en fait là on est juste en train de créer un data frame pour pouvoir le manipuleraprès, vous verrez dans la session c'est enregistré, on a fait du web scrapping avantpour rajouter des noms à notre data frame. Ok donc là on a les dates, qu'est-ce que,
00:17:04 :bon c'est tout. Donc on va dire que là on peut créer notre data frame, à partir demaintenant. Donc moi ce que j'aime bien faire pour créer le data frame c'est partir d'un
00:17:11 :dictionnaire. Non non pas de soucis Seb, c'est avec plaisir qu'on a une petite note musicalepour commencer. Moi ce que j'aime bien faire c'est partir d'un dictionnaire, donc en gros
00:17:24 :je crée mon dictionnaire et après je fais, je crée mon data frame. Ok donc on va direon a nos noms, on a nos salaires, ouais c'est avec un S, 28, voilà, je mets pas de, c'estpareil, on a la date. Ok je vais vérifier. Donc on a bien notre dictionnaire, donc là
00:18:13 :y'a pas de surprises, et après du coup avec un data frame y'a plus qu'à créer le dataframe. Donc dfdata, il va le pd, attends y'a un problème là, ah oui je l'ai pas importé.
00:18:44 :Ok. Bonjour Daniel, bonsoir. Bonjour, bonsoir. Ok donc là maintenant c'est tout simple,j'ai plus qu'à faire data frame et je mets en argument mon dictionnaire. Ok donc si je
00:19:02 :fais dfdata, vous voyez j'ai bien mon data frame, excusez-moi je sais pas qui a, y'apas de soucis pour intervenir avec le micro mais si jamais vous parlez pas est-ce quevous pouvez couper votre micro s'il vous plaît? Je sais pas qui a son micro ouvert. C'est
00:19:22 :moi. Ah pas de soucis. Merci, merci, mais pas de soucis pour les interventions au micro.Donc en gros on a le, pour ceux qui connaissent pas le data frame, en gros c'est, vous pouvezle voir comme un tableau Excel, et vous pouvez faire plein de choses sur les data frame,
00:19:45 :donc c'est ce qu'on va voir aujourd'hui, et puis je vous invite à regarder sur lapage, y'a déjà une bonne introduction sur les data frame. Ok donc là on a construit
00:19:55 :notre data frame, donc maintenant on va faire, on va imaginer que on a, donc là imaginons,en fait le dfdata on va imaginer que c'est notre base de données, c'est une table denotre base de données, une table qui serait table, je sais pas, user, quelque chose commeça. Mais imaginez maintenant que vous avez un autre data frame dans lequel vous avez
00:20:17 :uniquement le, vous avez uniquement le type d'emploi que font les personnes, et les personnes.Donc on va le créer à la main, cet autre data frame, donc on va mettre, ok donc onva imaginer les différents métiers que peuvent faire les personnes, donc on va avoir de ladirection, de la distribution, ok qu'est-ce que j'avais mis, de la logistique, on va
00:20:53 :mettre de l'informatique quand même, pas qu'à faire, c'est ce qu'on fait ici, etpuis voilà, attendez je regarde dans mon correction ce que j'avais mis, et puis on va mettredu rh. Maintenant ce que je vais faire, je vais créer mon data frame, je vais assigner
00:21:11 :en gros une profession à des personnes. Avant de faire ça, je vais faire un rdn.shufflepour pas avoir, en fait je vais simuler comme si on avait un tableau un peu mis n'importecomment avec la correspondance des gens, parce qu'en fait si je fais ici names, vous voyezils sont classés dans l'ordre alphabétique, par contre si je fais rdn.shuffle, names,
00:21:45 :vraiment ça modifie l'état de ma liste, et maintenant si je fais names, vous voyezen fait j'ai tout dans le désordre. Donc en gros je vais simuler ici, je fais un rdn.shuffle
00:21:58 :de ma liste, c'est très pratique, si jamais vous voulez l'utiliser, le rdn.shuffle, shuffleça veut dire mélanger en anglais, vous voyez quand vous jouez aux cartes, quand vous regardezpoker, il y a shuffle. Donc en gros on va créer notre correspondance, je l'ai créée
00:22:15 :au hasard, mais en fait il faut s'imaginer que vous vous l'avez, donc je vais dire workresp pour correspondance, ok donc là je vais créer un dictionnaire, donc en gros je vaisdire pour chaque nom, je vais faire un rdn.choice de work titles or name in names. En gros là
00:22:49 :ce que je fais, je crée un dictionnaire, pour chaque nom de names, je lui fais un choixaléatoire dans la liste work titles. Donc en gros je vais avoir, je sais pas, mari,
00:23:02 :direction, genre, distribution, etc. Et ça je vais en faire un data frame, donc commed'habitude je fais un truc, df work correspondance, et je vais lui dire df work correspondance,et je vais le mettre dans un data frame. J'ai écrit, je vous lis. En gros là ce que
00:23:53 :je fais, j'ai créé mon dictionnaire et je le mets tout dans un data frame, donc iln'y a rien de particulier, si vous voulez voir. Ah oui c'est ici. Et donc là en fait
00:24:23 :j'ai mon data frame de nom, je vais vous l'afficher en grand ici. Donc là j'ai bien mon dataframe, je vais reprendre au début, il y a, je sais pas si vous connaissez ça, le head,en gros il va vous afficher les 4 premiers, si vous voulez dire les 20 premiers, vous
00:24:41 :pouvez dire ça par exemple, etc. Mais moi je vais juste afficher, donc là imaginezc'est mon data frame de, tu peux reprendre, à quoi sert RDN exactement? En fait RDN
00:24:53 :en soit il sert à rien, j'aurais pu dire import random as, bah tiens on va utiliserton prénom vu que tu t'appelles Yann, c'est random un abrégé, en gros c'est juste unmoyen pour toi dans ton script de savoir comment tu utilises ton module. Tu vois si je fais
00:25:10 :Yann.andit entre 0 et 10, ça fonctionne. En fait ça s'appelle un alias, c'est pourte rappeler, après il y a des conventions par exemple quand tu utilises matplotlib,tu utilises plt, quand tu utilises panda tu utilises pd, tu vois ici, numpy on va utilisernp, enfin bref tu vois c'est vraiment un alias et oui c'est un raccourci, mais c'est surtout
00:25:38 :un raccourci mais c'est aussi pour se souvenir quel module tu utilises à quel endroit danston script. Donc là je vais relancer, pas de soucis, donc ce que je voulais vous montrer
00:25:50 :ouais. Donc imaginez qu'on a, donc là j'ai mon, comme ça, et puis j'ai mon, c'étaitcorresp je crois comment il s'appelle, dfwork. Donc en fait imaginez j'ai ces deux tables
00:26:09 :là, et moi ce que j'aimerais bien faire c'est que en face de, je voudrais une nouvelle colonneen fait qui correspond au travail de la personne. En fait ici, bon là ça a été mélangé,
00:26:22 :mais j'imagine qu'il y a bien un moment on va retrouver abeline, et abeline ici moi jevoudrais, elle va avoir un métier qui correspond, mais je voudrais ici l'afficher ici. Donc
00:26:32 :là faut vraiment vous dire j'ai une base de données avec deux tables qui sont biendistinctes et je veux les joindre en fait. Donc en gros pour faire ça, on va utiliser
00:26:46 :le merge, donc merge ça veut dire fusion en anglais, on va l'appeler merge, et on va diretu vas prendre mon dfdata et tu vas le fusionner, donc merge, avec mon dfwork. Ici vous dites
00:27:03 :how, en gros c'est comment vous voulez le faire, et on, en fait on c'est sur quellecolonne vous faites la jointure, et how c'est comment vous faites la jointure. Là en fait
00:27:20 :ça va être simple parce qu'en fait on va trouver pour chaque nom, on va bien avoirune correspondance, c'est à dire j'ai créé mes deux dataframes de manière à ce quej'ai une correspondance pour chaque nom. Mais parfois vous allez avoir dans un tableau,
00:27:33 :par exemple je dis n'importe quoi, olivier, dans la liste, la première table, vous allezpas la voir dans la correspondance. Donc il faut lui dire comment il gère l'intersection,
00:27:43 :je vous laisserai aller voir la documentation officielle. Donc en gros là ce qu'on fait,on va faire le merge, et je run, et là, magie, en fait on a, et ce qui est bien, c'est pourça que j'ai fait un shuffle, c'était juste pour vous montrer un peu la puissance du truc,
00:28:04 :c'est que même si mon dataframe il n'est pas dans le même ordre, les deux ils sontpas dans le même ordre, je peux vous le remontrer, le dfwork, il est bien, il est pas dans lemême ordre, comme ça, on a plusieurs fois le même nom, ouais c'est une bonne question,
00:28:24 :si t'as plusieurs fois le même nom il va trouver la première correspondance donc ilfaut faire attention. Voilà après c'est simple parce que j'ai pris une liste des prénoms
00:28:41 :sur wikipédia donc je savais qu'elle était distincte, mais en gros ça tu peux le gérer,il y a des options, et après il laisse un blanc, bah non en fait il va remplir, en gros,si par exemple là tu vois j'ai Gaspar informatique, en fait il va associer la première occurrence
00:29:04 :de Gaspar dans l'autre tableau, donc ça serait une erreur, donc il faut faire attention àça, il faut bien gérer l'unicité d'abord de ton premier dataframe, en fait c'est enfonction du cas de figure que tu t'adaptes, mais c'est une bonne question, il faut bieny penser. Tu peux mettre un système de clé, ouais par exemple, comme ça t'es sûr d'avoir
00:29:27 :une unicité. J'ai eu un problème d'ailleurs il y a pas longtemps sur un dataframe commeça, et en fait j'ai concaténé le nom et le prénom, et même l'id, et comme ça, justenom et prénom, et comme ça t'es sûr de pas avoir ce problème là, c'est d'ailleurspour ça que quand vous remplissez un formulaire, des trucs du gouvernement, je sais pas quoi,
00:29:50 :ils demandent plusieurs prénoms, parce qu'après ils ont des conneries de correspondance quandils vous envoient des impôts ou des choses comme ça. Pas de bol effectivement. Ok donc
00:29:59 :là c'est bon pour le merge? Alors pour la fusion, est-ce que c'est clair, juste un checkde son, tout va bien pour l'instant? Si. Ok donc là on a fusionné deux dataframes
00:30:15 :qui étaient complètement dans le désordre, donc je trouve que déjà c'est pas mal, jesais pas Vincent, dans ce que t'avais vu, t'avais déjà vu, dans ce que t'as regardé,j'imagine que ça c'est les trucs qu'on voit au début quand on fait les dataframes. Ouais
00:30:30 :je pense que c'était à cause de Safari le problème pour le son. Ok donc après désolé,tout le monde n'a pas le même niveau d'avancement, donc j'essaye que ça aille pour tout le monde,donc on essaie de se mettre un peu entre les deux. Donc maintenant imaginons, on a une
00:30:52 :autre fusion à faire, mais cette fois-ci c'est différent en fait. On va avoir, imaginonsqu'on ait des coefficients, des coefficients qui sont en fait, attendez je l'écris eton va faire un petit dataframe. Dans certains de mes, j'utilise outer plutôt que inner
00:31:28 :car inner, oui c'est ça. En fait si, et du coup tu te retrouves avec beaucoup de non-valuej'imagine quand tu fais outer. En gros si tu veux conserver beaucoup, si tu veux conserver
00:31:42 :tous tes index de chacun de tes dataframes, tu utilises outer, mais après parfois c'estpas, moi j'utilise toujours ça aussi, pour être sûr de rien perdre et après je traitemes non-value. Donc il y a beaucoup de fonctions qui existent pour traiter les non-value, tu
00:31:55 :peux faire des fill inner, tu peux mettre des 0, tu mets des trucs genre attention,faut faire attention avec drop inner parce qu'en fait drop inner ça dépend de commenttu lui spécifies quel axe, si tu lui dis juste drop inner il va te virer toute ta,il peut te virer toute ta ligne ou toute ta colonne s'il y a un seul inner dans ta ligne
00:32:14 :ou dans ta colonne. Donc il faut faire attention quand même au drop inner. Ok donc là jereviens sur mon exemple, imaginons qu'on a un autre dataframe, donc je le construiset après je vous dis ce que j'ai en tête. Faudrait que je me mette un snippet pour,
00:32:45 :dans VS Code on peut définir des snippets pour écrire df égale pd pour dataframe parceque c'est un peu chiant je vais pas le faire. On voit que le temps passe. Ok donc là j'ai
00:33:21 :créé mon nouveau dataframe. Donc là imaginez que j'ai juste ce petit dataframe là, doncj'ai la correspondance du travail, donc la direction, avec son coefficient. Je sais pas
00:33:38 :la coefficient, j'ai mis ça comme ça, mais on peut se dire, imaginons qu'on ait cettetroisième table là qui affecte un coefficient à chacune des directions. Donc là vous voyez
00:33:46 :que pour faire le merge et la fusion avec le gros dataframe c'est un peu plus compliquéparce que, enfin c'est pas compliqué, mais avec Pandas on peut le faire facilement. A
00:33:56 :chaque fois qu'il va trouver de direction il faut lui appliquer coef, mais vous voyezpar exemple quand vous faites des concatenations de dataframe c'est un peu chiant si vous voulezles concatener sur les colonnes, il faut qu'ils aient le même index sinon il va vous mettredes nnvalues etc. Donc moi ce que je fais pour ça, je fais un merge encore, donc là
00:34:18 :j'utilise celui que j'avais déjà fusionné tout à l'heure, et je fais un df.coefsetindexwork, et je lui dis sur, et donc en gros si je fais ça, en gros vous voyez c'est quandmême vachement puissant parce que juste avec le petit dataframe de coefficient, sachantqu'on avait déjà toutes les professions dans toutes les lignes, pourquoi est-ce qu'on
00:34:56 :peut pas faire directement df.coef égal, ouais bah t'as raison j'aurais pu le fairedirectement, je sais pas pourquoi je l'ai fait comme ça, mais j'avais déjà un dictionnairedonc oui on pouvait le faire, c'est moi qui n'ai pas été attentif. Voilà donc je trouve
00:35:24 :que c'est quand même assez puissant et si jamais vous avez un dataframe qui est pasdu tout de la même taille vous pouvez quand même le fusionner grâce à cette manip làoù en fait vous lui dites que ses index, c'est comme si vous éclatiez votre dataframe,vous lui mettez le même index que, vous lui définissez en index le travail et comme ça
00:35:44 :lui il va trouver facilement quand il va faire son join avec le gros dataframe. Voilà, onva s'arrêter là pour les fusions etc. Donc là on va imaginer qu'on a notre dataframe,
00:35:59 :donc on est content, un gros dataframe, on a notre base de données donc on va pouvoirla manipuler. Donc par exemple si on voulait chercher celui qui a le salaire le plus faible.
00:36:15 :En fait si je fais juste, je peux faire facilement newdf salaire min, là en fait ça 109.56$ c'est le salaire le plus petit. Après moi ce qui m'intéresse c'est plutôt de savoir
00:36:35 :qui a le salaire le plus petit. Donc en fait pour faire ça, je peux définir un prof gars,si je fais newdf.engros, il y a la fonction qui s'appelle argmin. Si je fais, je vais
00:37:01 :le faire ici d'abord. La fonction argmin elle trouve l'index pour lequel j'ai ma conditionminimale sur ma colonne. Je sais pas si c'est clair, en gros c'est pas le minimum, c'est
00:37:16 :l'index qui donne le minimum. Donc en gros après c'est simple, si jamais je veux justerécupérer la ligne qui correspond au gars qui a le salaire le plus faible, le gars oula meuf, il y a la parité dans les deux sens. On dit newdf machin, ok donc en gros comme
00:37:34 :il me ressort un index, j'utilise l'oc, et là je fais newdf salaire.argmin. Et doncmon, qu'est-ce qu'il m'a fait? Ah oui d'accord. Vous voyez je m'étais trompé, peut-être
00:38:18 :le nom au lieu de salaire. Non en fait, ici ce que je dis, donc là dedans, ici je saisque je vais trouver l'index de la personne qui a le salaire le plus petit, et aprèsil suffit d'aller récupérer la ligne qui correspond à ça avec l'index, en fait quand
00:38:36 :vous avez un dataframe, si vous voulez aller chercher une ligne en particulier, vous pouvezfaire dataframe.loc avec le numéro de l'index. Donc là le numéro de l'index que j'ai trouvé,
00:38:45 :et ici vous accédez à la personne. Donc on sait que, vous voyez c'est, vous ne soyezpas surpris, vous allez voir à chaque fois, par exemple le minimum tout à l'heure c'était106 et quelques, mais c'est parce qu'en fait à chaque fois je relance tout mon script,c'est pas optimal, mais je relance tout mon script et du coup il me régénère aléatoirement
00:39:03 :mes salaires. Donc là c'est Antoinette, mais si je relance le script ça sera Bernard.Mais en gros ce que vous voyez c'est que c'est cool, vous avez le nom de la personne, sonnuméro de l'index, sa prix, en gros vous avez accès à toute la ligne. Ok, maintenant
00:39:18 :imaginez qu'on veuille récupérer, on va faire la même chose, on va utiliser les,on va faire, attendez je regarde ce que je voulais vous montrer. En fait là, ok, là
00:39:52 :ce que j'ai fait, j'ai utilisé armin, donc j'ai trouvé l'index du minimum, donc c'estun truc qui existait déjà, mais qu'est-ce qui se passe si je veux une fonction que moije définis moi-même. Donc en fait on peut définir nous-mêmes une fonction, donc moi
00:40:06 :j'utilise lambda, si vous connaissez les fonctions lambda c'est comme la définitiond'une fonction, mais c'est une fonction anonyme. Dex, ok, et je lui dis dex.min. Et ce qu'on
00:40:20 :va faire c'est un groupby, vous allez voir c'est assez puissant. Alors, functions toapply, en fait ici je vais lui définir un dictionnaire qui va dire quelles fonctionsappliquer à quelles colonnes. Donc je vais lui dire à salaire, lui applique les fonctions,
00:40:45 :tu peux en mettre plusieurs, mais moi j'en mets deux ici, donc on va dire on veut lemin et le max, et à la colonne max, qu'est-ce que je veux, bah je veux lui appliquer masalaire. Donc en fait ça, ça va permettre de faire, d'appliquer, c'est un peu l'agrégation,
00:41:06 :c'est ça que tu disais tout à l'heure Vincent, en fait agréger ça veut dire quoi? C'estrassembler ce suivant un critère, et une fois que t'as tes données rassemblées suivantce critère, tu lui appliques une fonction. Et là en fait au lieu d'en appliquer une
00:41:18 :seule, comme on pourrait le faire avec apply, on va faire, on va utiliser agrég qui permetde faire le apply en gros sur plusieurs colonnes. Donc là on a défini nos fonctions, ok je
00:41:33 :vais relancer le truc. Je vais juste vous montrer avec un apply simple, imaginez parexemple, donc j'ai mon, comment il s'appelle déjà, newdf, j'ai mon newdf, imaginez queje veux savoir quel est le salaire maximal en regroupant par profession. Donc en gros
00:42:00 :je veux savoir quel est le salaire maximal parmi tous les informaticiens, quel est lesalaire maximal parmi tous les logisticiens, etc. Donc en fait pour faire ça, je peux
00:42:08 :faire un df, c'est newdf.groupby, donc je regroupe par travail, et en gros qu'est-ceque je lui fais par, je vais faire un prélat grec, je vais juste montrer le apply, qu'est-ceque je lui fais une fois que j'ai regroupé, et bah je peux lui dire, sort moi le max,
00:42:33 :est-ce que ça, ça marche? Voilà, en fait, ce qu'il m'a fait, il m'a regroupé, doncmon dataframe, juste pour rappel, il était comme ça. Donc en gros j'ai un gros dataframe,
00:42:51 :je vais juste montrer le head. Mon dataframe il est comme ça, donc à chaque fois quej'ai une ligne, j'ai une profession, et moi ce que j'ai fait, c'est que j'ai récupéréle max parmi toutes les directions, et donc tout simplement en faisant ça. Donc j'ai
00:43:11 :fait mon groupby, j'ai regroupé par profession, et je lui ai appliqué le maximum pour chaqueprofession. Et en plus vous avez accès à toutes les données, c'est quand même vachement
00:43:22 :intéressant pour les RH, vous savez que la personne qui a le plus gros salaire c'estWalfroy, je connaissais pas comme prénom français, son salaire c'est ça, ça primele, non attendez je vous dis une bêtise, en fait il a regroupé par fonction RH, donclà le max en fait c'est parce que c'est dans l'ordre alphabétique, c'est le nom
00:43:47 :le plus loin. Ici c'est le salaire, c'est pas une correspondance ici, en fait si vousallez voir Walfroy vous allez pas avoir ce salaire là, c'est juste le max de chacunedes colonnes, c'est pas une correspondance, attention. Donc là c'était le apply, mais
00:43:58 :en fait il a appliqué le max, le truc c'est vous voyez il a appliqué le max à toutesmes colonnes. Moi c'est pas ce que je veux, moi ce que je veux c'est appliquer les fonctions
00:44:06 :que je lui définis. Donc vous pouvez faire new.groupby, donc là toujours on groupe parwork, par contre ce qu'on fait c'est on agrège par fonction. Et du coup c'est intéressant
00:44:23 :parce qu'en gros ce qu'on a dit ici, vous voyez first date, j'ai trouvé la date minimum,c'est par exemple si j'avais voulu savoir à quelle date a été embauché le premieremployé chez les RH. Bah là en fait il a été embauché le 4 mars 1989 chez les RH.
00:44:47 :Et en plus vous avez le salaire minimum des RH et le salaire max. Donc c'est quand mêmeassez intéressant ce qu'on peut faire avec les agrégations. Ensuite qu'est-ce qu'on
00:45:00 :peut vouloir faire, on peut vouloir classer. Imaginez que vous voulez, là en fait on ades salaires, donc c'est des flottes, comme on l'a vu tout à l'heure, uniformes, quisont compris entre 100 et 9000 euros. Nous ce qu'on veut c'est ranger par classe de
00:45:17 :salaire. Donc on peut utiliser ce qu'on appelle des bins, donc c'est en anglais, je croisque c'est ça. En fait des bins c'est des compartiments. En gros on va dire on peut
00:45:34 :faire un pd.cut, je l'écris après je vous explique.En gros ce que je fais là, je lui définis comment je veux couper mes données. En gros
00:46:15 :je lui dis je veux que tu me découpes tous mes salaires dans ce range là. Donc en grosje veux que tu me découpes, je sais que mes salaires vont de 0 à 9000, donc en gros jeveux que tu me dises, je veux que tu me comptes combien j'ai de salaires qui sont compris
00:46:33 :entre 0 et 500, 500 et 1000, 1000 et 1500, etc. Donc en gros pour faire ça c'est simple,avec Panda vous pouvez faire, je vais l'appeler dfbins. Je run et je vous montre. Un mp,
00:47:05 :c'est quand même vachement intéressant. En fait du coup, mais par contre je l'ai faitsur le salaire, ouais donc je vais juste prendre le salaire dfbins. En gros ce qu'il m'a fait
00:47:32 :c'est qu'il m'a compté le nombre de fois où j'avais un salaire compris entre 0 et500, entre 500 et 1000, entre 1000 et 1500, etc. Et ça c'est ce qu'on appelle une distribution.
00:47:43 :Ça permet un peu de voir comment sont répartis nos salaires. Bon là ils sont répartis aléatoirementdu coup c'est pas vraiment intéressant, mais si par exemple vous avez déjà vu enscience physique ou des choses comme ça, vous avez des distributions uniformes ou deschoses comme ça, si vous faites un 1000 tirage de D, vous allez avoir une distribution uniforme
00:48:02 :des chiffres qui vont, pour un comptable comme moi, ça va être, ah oui pour un comptablemaîtriser panda c'est vraiment hyper puissant. Et donc ouais, ce que je disais une distribution
00:48:17 :en forme de cloche c'est à dire que vous allez avoir beaucoup de chances de tombersur une valeur, et puis petit à petit, vous allez tomber toujours sur la même valeuren probabilité, une grande probabilité, et ensuite au plus vous vous écartez de lavariable la plus probable, au moins vous aurez de données. Je pense que c'est pas hyper
00:48:36 :clair ce que je dis, mais je vais essayer de vous montrer avec un histogramme. Ensuite,voilà donc ça c'est ce que je voulais vous montrer avec le binning, avec la classificationen gros. Et maintenant, un petit truc sympa, vous pouvez directement faire des plots avec
00:48:55 :le dataframe. Il faut que j'importe... Donc là tu vois Yann, c'est PLT, tout à l'heurec'était RDN, mais en gros c'est juste comme ça, je sais que si je veux utiliser le plot,si je run, je fais PLT.show, il nous a fait un, vous voyez ce que j'ai fait c'est histogramme,
00:49:28 :donc c'est ça c'est la distribution, vous voyez en fait ici, vous avez vraiment beaucoupd'occurrences de primes qui sont entre 0 et 1000. Ici la grande barre que vous voyez,
00:49:41 :ça montre qu'on a vraiment beaucoup de primes qui sont entre 0 et 1000. Ici le salaire,vous voyez qu'autour de 4000, on a beaucoup de salaires. Ici c'est moins intéressant
00:49:52 :parce que j'ai généré aléatoirement, du coup on peut pas sortir quelque chose, maisbon je pense que vous avez compris l'idée. Ok donc là on est presque à la fin, je voulais
00:50:02 :vous montrer un truc hyper puissant, moi quand j'ai découvert ça j'en suis tombé des nues,c'est le profile report. C'est Panda profiling. En fait on peut générer un espèce de rapport
00:50:39 :hyper détaillé de nos datas, avec cette librairie qui est un espèce de frameworkau dessus de Panda. Ici c'est pour lui dire, je veux que tu me l'envoies dans un, je vais
00:51:06 :lancer, donc là il est en train de me créer mon rapport, ok il me l'a créé, exercicePanda, et en fait vous voyez il m'a créé un rapport HTML de mon dataframe, donc c'estvachement intéressant. Vous voyez ici si vous allez dans le salaire, c'est un HTML
00:51:46 :avec du javascript, vous avez plein de valeurs statistiques, vous avez par exemple le minimum,vous avez les quartiles, donc Q1, Q2, Q3, donc la médiane, le maximum, vous avez l'IQR,en fait l'IQR c'est un moyen de voir ce qu'on appelle les outliers. En fait si vous avez
00:52:12 :une valeur qui est au delà de votre médiane plus 3 fois l'IQR, ça veut dire que votrevaleur elle est bizarre, elle est trop éloignée de la médiane, et même de l'écart typeen fait. Bon bref, c'est des statistiques mais on pourra voir plus tard. Là vous avez
00:52:30 :une distribution, vous voyez, de la valeur à Béhren-Percy. Du coup vous avez la distributiondes primes, vous avez ici un histogramme, donc vous pouvez imaginer par exemple quevous avez une base de données, comme ça on vous l'envoie et vous pouvez envoyer unrapport comme ça hyper détaillé à la personne qui vous l'a envoyé. Ici on a un truc intéressant,
00:52:54 :on n'est pas sur le travail, on n'est pas sur des valeurs numériques, on est sur desvaleurs qu'on appelle catégorielles, c'est pas 1, 2, 3 ou des floats, c'est des strings,et vous avez une distribution ici de vos catégories. Je les ai générées aléatoirement,
00:53:09 :mais en gros vous voyez que vous avez 21% de vos employés qui travaillent dans la distribution,il y en a 20 qui travaillent dans l'informatique, 19.8 etc. Et ici vous avez un graphe avec
00:53:22 :les occurrences d'apparitions. Donc ça quand même je trouve que c'est assez puissant,malheureusement on n'a pas de, nos datas elles sont pas très corrélées en fait,j'aurais pu corréler le salaire en fonction de la fonction, comme ça on aurait pu voirde la corrélation entre les données, c'est à dire par exemple on aurait vu qu'il y
00:53:48 :a une dépendance entre la fonction et le salaire, mais bon ça c'est vraiment pouraller plus loin dans Panda. Voilà, et je sais pas si tu connais Vincent, toi qui fais
00:54:02 :du Panda et du Django, il me semble que t'as un truc qui s'appelle, tu sais des fois quandtu as un data frame, et que tu peux l'exporter en CSV, je sais pas si tu, toi ou les autressi vous connaissez, mais tu peux aussi l'exporter en div, il y a un truc normalement, ouais
00:54:32 :tout, HTML, ouais c'est ça, HTML. Bon du coup tu connais, j'ai pas besoin de te l'apprendre,mais en gros c'est pas mal si vous voulez inclure des data frames dans des pages HTMLou des choses comme ça. Voilà, pour data frame, j'espère que, pour ceux qui connaissaient
00:54:54 :déjà data frame, j'espère que c'était pas trop simple, je pense à toi Vincent, maisje sais pas s'il y en avait d'autres, est-ce que t'as découvert des choses ou c'étaitdéjà des choses que t'avais déjà vues? Ah bah tant mieux, et les autres qui connaissaient
00:55:11 :pas, j'espère que c'était pas trop, est-ce que c'était pas, dites moi si c'était tropcompliqué ou, ouais la data science c'est un vrai, c'est un vrai truc. Ok, super, bon
00:55:31 :bah très bien, bah j'ai pas pu vous montrer, bah c'est cool si ça vous plaît, j'ai paspu vous montrer la librairie que je voulais, j'ai pas pu vous montrer la librairie à laquellej'avais pensé, c'est Streamlight, mais vous verrez que c'est pareil, moi c'est comme leprofile report, je vous en dis pas plus, mais c'est vraiment un truc de fou comme librairie,
00:55:58 :et du coup, incapable de le refaire. Mais si, tu vas voir en fait, au plus tu le pratiques,au plus tu penseras, en fait quand tu vas avoir des cas pratiques en tête, tu vas,le fait d'avoir déjà vu la fonction utilisée par quelqu'un, tu vas dire ah oui je sais
00:56:14 :qu'on peut utiliser ça, et voilà tu vas aller chercher dans la documentation et tuvas le refaire. Moi les trucs que je fais, je les connais pas par cœur, c'est juste
00:56:23 :qu'à force de les faire je les connais, mais en fait quand tu, le but du mentora oudu tutora c'est pas de savoir le faire dès que tu sors, c'est juste de l'avoir déjàvu et après d'essayer de le faire soi-même. Parce qu'en fait si tu sais pas que ça existe,
00:56:38 :bah t'as même pas, voilà c'est ça. Et une fois que tu sais que c'est possible,bah tu peux le faire. Et juste, une info sur DataFrame, c'est souvent un mauvais signe
00:56:53 :quand vous faites du parcours de DataFrame, tu sais Vincent la dernière fois on en parlait,en gros quand vous faites des choses du genre for e in orange, for e in dfnew, print, jesais pas, newdf.loc, ça a l'air, ce genre de truc c'est, bon en plus il marche même
00:57:33 :pas, en gros ce genre de truc qu'il faut pas faire dans un DataFrame, si vous commencezà parcourir le DataFrame, parce que c'est possible en faisant ça, j'aurais dû faire,vous voyez c'est possible, mais c'est souvent un mauvais signe que vous ayez besoin de faireça en fait, dans un DataFrame c'est un peu comme les numpy arrêts, vous avez des fonctions
00:58:05 :qui sont optimisées pour travailler directement sur l'objet structuré, donc il faut les utiliserun maximum et quand vous avez un truc à faire, par exemple vous voyez tous les joins et toutça, les merges, on aurait pu les faire avec des bouffles, mais c'est pas propre du toutet c'est pas comme ça qu'il faut faire avec Panda, il faut vraiment utiliser les fonctions
00:58:22 :built-in du module. Bon bah voilà, je sais pas si, je crois que c'était Flavien quiavait une question sur les ARK et les KW, mais je crois qu'il est pas là, du coup jepense qu'on va pouvoir s'arrêter là pour aujourd'hui. Et si ça vous va, on va s'arrêter
00:58:55 :là. Franchement, dès qu'il y a de la data, si tu, moi je travaille pas dans la finance,mais à mon avis, si tu travailles dans la finance, je pense que oui, tu utilises Panda.
00:59:12 :Je sais pas, Sep, tu es comptable il me semble, c'est pas tout à fait de la finance je crois,mais en cas concret, tu utilises... Bah en fait moi je suis ingénieur hydrodynamique
00:59:29 :et du coup dans mon boulot, je travaillais dans l'oil et le gaz, dans l'offshore oudans les énergies renouvelables, et en fait on a beaucoup de... On a des capteurs, vous
00:59:45 :voyez sur les plateformes pétrolières ou des choses comme ça, il y a parfois des capteurspour récupérer de la data, beaucoup de données. Des fois on a des trucs, on a des
00:59:59 :dataframes de plusieurs milliards de lignes, en fait on a des temps d'acquisition qui sonttrès faibles, toutes les secondes par exemple, pendant plusieurs années, pour faire du monitoringde l'extraction de pétrole, de fluide, etc. pour savoir la densité, est-ce que vous avez
01:00:20 :toujours le bon débit, etc. Donc en fait quand on a ce genre de data que moi je traiteau quotidien, j'utilise Panda pour faire des statistiques, pour vérifier s'il n'ya pas des problèmes, j'essaye de faire un peu de machine learning aussi, en fait vousverrez que si vous faites du machine learning avec le module scikit-learn, vous utiliserez
01:00:43 :beaucoup Panda, parce que vous pouvez manipuler... En fait tu verrais que la bibliothèque queje voulais vous montrer c'est un petit peu une bibliothèque d'interface graphique webqui permet de mettre en ligne des applications web vraiment facilement. Mais du coup, moi
01:01:06 :j'utilise Panda pour traiter la donnée de capteurs, pour faire des statistiques, pourfaire des prévisions avec le machine learning, et puis pour faire des alertes aussi, parceque parfois si on a des pressions qui sont trop importantes dans un pipeline ou des chosescomme ça, il faut pouvoir prévenir les propriétaires du projet ou du pipeline ou des choses comme
01:01:29 :ça, donc c'est comme ça qu'on... Et avec Panda on peut voir facilement, vous voyezle max, le minimum, des choses comme ça. Donc en cas concret, là déjà c'était un
01:01:42 :cas assez concret je pense pour répondre à ta question, et humainement on peut pasce genre de fichier, on peut pas le faire à la main, parce qu'en plus c'est dangereuxde faire ça à la main, on peut louper des choses. Non non pas de soucis pour le retard,
01:02:02 :ouais normalement c'est 20h. D'ailleurs pour l'horaire, je sais pas ce que vous en pensez,est-ce que vous aimez tous cet horaire là le jeudi à 20h? Ou est-ce que vous aimeriez
01:02:13 :un autre horaire? Ok bon je verrai avec Thibaut aussi ce qu'on fait pour les timings, pourtester des stratégies de trading par exemple? Bah comme je te disais, stratégie de trading
01:02:57 :avec du machine learning. Trade? Je connais pas Vincent. Mais StikeEatLearn en fait,vous verrez si vous voulez faire du machine learning pour du trading, pour faire de laprévision etc, StikeEatLearn c'est incontournable. Moi je suis au Canada. Ah ok, après je sais
01:03:23 :pas quels sont les plus horaires de chacun, moi perso je suis en France, je sais que Thibautil est au Portugal, du coup je crois qu'il a une heure de moins. Ok, trading de crypto,
01:03:38 :stylé, tu fais du trading de crypto Vincent? Ah oui t'as 5h de moins. Ah docker t'yutilises? Docker j'ai pas mal utilisé aussi, peut-être que j'essaierai de faire une session
01:04:02 :un jour sur docker parce que moi j'utilise perso pour faire tourner mes applications.Tu sais tout à l'heure tu posais une question là sur un serveur FTP Vincent? Moi en perso
01:04:16 :j'ai une appli qui tourne sur un raspberry pi chez moi et j'ai utilisé docker pour containerisercette application. Bah du coup peut-être pas la prochaine fois parce que ça prendra
Aucune occurrence trouvée pour « ».
00:00:24
Introduction à la session de mentorat
00:01:02
Présentation de l'environnement virtuel et des librairies
00:02:01
Récupération de contenu HTML avec Beautiful Soup
00:03:28
Scraper des noms à partir d'un site
00:05:50
Création du data frame à partir des données scrappées
00:09:36
Génération de salaires aléatoires
00:12:12
Ajout des dates d'embauche
00:16:16
Création et fusion de data frames
00:19:00
Utilisation de la fonction merge pour fusionner les données
00:27:03
Ajout de coefficients selon les métiers
00:33:06
Agrégation et analyse des données
00:42:00
Présentation de pandas profiling