Session du 14 mars 2024 à 20h00
Data Science & IA
Bases de Données
DevOps & Environnement
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
Imports Python, Docker et bases de données
-
Une petite astuce avec pandas pour compter un nombre de dépassements.
-
Déploiement avec portainer.
-
Déploiement d'un serveur de base de données avec docker compose (et portainer).
-
Quelques manipulations de base de données.
00:00:00 :Ça marche, ça enregistre, et puis je vais attendre un peu que les gens arrivent,sinon on commencera.En attendant, n'hésitez pas à partager si vous avez des trucs à dire, des projets que vous avez en cours,ça pourrait être sympa.
00:00:31 :Trop de projets en cours.T'as dit quoi ?Y'a plein de projets en cours.Plein de projets en cours.Ça va, tu t'en es sorti avec ton truc de réservation ?
00:00:43 :Attends, t'es où ? Je sens qu'il y a lequel déjà ?Ah oui, oui, oui, oui, oui, oui.Oui, il est terminé.Ouais.J'ai même mis quelques PyTest en place.
00:00:55 :Hum.Et je l'ai fait pour une personne que je connaissais, là actuellement elle a accouché.Ah oui.Je l'ai fait avant tout pour m'entraîner pour moi.
00:01:04 :Ouais.Et on verra si elle est motivée à continuer après, à le mettre en ligne.Elle a voulu le faire, mais d'un côté elle était pas trop pressée, alors on verra.
00:01:14 :Ok.Parce que je me souviens quand t'étais, je sais pas, t'avais l'air un peu stressé avec les histoires, tu sais, de réservation.Ah oui.Mais c'était pour quelqu'un que tu connaissais en fait.
00:01:24 :Ouais, c'est...Bon, oui, c'est la salle d'indirectrice en gros, mais...D'accord.Mais...Ferdile, tu m'as bien sauvé la vie pendant que j'ai la script, là.
00:01:34 :Ah oui, c'est vrai.Oh, j'avais bien marqué.Oh, j'avais bien marqué l'horreur.Oui.Ouais, ouais, ouais.J'ai laissé toute ma validation côté serveur dans les formulaires, forcément, parce que...
00:01:44 :Ça faut que je le laisse, mais du coup j'ai tout remis en côté front.Hum hum.Voilà.Du coup on va très bien.Hum.Simon, je vois ton message.
00:01:57 :Ouais, pourquoi pas, on pourrait faire un truc.C'est...C'est dans une architecture particulière, ou par exemple quand tu fais from, module, import, machin,ce genre de trucs, ou c'est vraiment plutôt en point de vue général quand t'as un package que tu crées toi-même.
00:02:14 :Merci.Tu m'entends ou pas ?Ouais, je t'entends.C'est...En fait, c'est quand...C'est des trucs que j'importe...C'est quand j'importe mes propres modules.Ouais.
00:02:29 :J'importe les uns, les autres.Voilà.Ah.Voilà.T'as des trucs circulaires et tout ça ?Des fois c'est circulaire, ou des fois le fait que je le fasse venir d'un autre module,et que ça soit pas dans le même module, ça fait que je peux plus faire des tests à l'intérieur de mon module,
00:02:45 :parce que...Enfin, c'est le bordel, je comprends rien.OK.Je peux essayer de...Là, maintenant, en live, si les autres aussi ça vous intéresse, on peut faire un petit...
00:02:55 :Parce que je me demande si ton problème, c'est pas le fameux ifname="main".Je vais faire un truc, et puis tu me dis si c'est pas du tout ça,et puis sinon je ferai un truc plus propre pour la prochaine fois.
00:03:07 :OK ?Ça, je le mets toujours, le ifname="main".Ouais.Ça, je le mets toujours.D'accord.Mais non, c'est plus...Je sais pas, il y a des problèmes de syntaxe, peut-être, quand c'est importé.
00:03:21 :Enfin, bref, il faudrait que je te montre un truc.Ouais.C'est ça, ouais.Tu nous fais un...Ou sinon, même, tu poses une question sur le forum.
00:03:31 :Et...Attendez juste deux minutes, je coupe ma caméra, je reviens.Ouais, désolé, je suis de retour.OK.PA ?Ouais, je vois que tu n'utilises jamais le ifname="main".
00:03:57 :Ouais.Jamais.Jamais, jamais, mais vraiment jamais.Et t'as jamais de problème...En fait, c'est pas grave, c'est pas grave de l'utiliser,mais c'est juste que, souvent, quand tu développes,quand tu fais un code, tu te dis,t'aimes bien quand même tester ce qui se passe à l'intérieur du module,
00:04:15 :indépendamment du gros projet.Et si tu mets pas tes names, c'est un peu galère à tester.Ouais.Tu vois ce que je veux dire, ou...
00:04:24 :Ouais, ouais, ouais, ouais.C'est vrai que j'ai jamais pris l'habitude de le faire.C'est vrai que je le vois souvent, en plus, je le vois souvent, donc...
00:04:32 :Bah, c'est pas grave de l'utiliser,mais c'est juste que, souvent, quand tu développes,quand tu fais un code, et puis qu'après,je le vois souvent, en plus, je le vois souvent, donc...
00:04:41 :Bah, ouais, ouais, c'est assez...Générate, machin...C'est assez courant.Ok, donc lui...Est-ce que vous avez ça aussi dans Pyke ?Ah ouais, mais vous voyez pas mon écran.
00:04:57 :Là, normalement, vous devez voir...Je vais zoomer un peu.Est-ce que 125, c'est suffisant ?Parce que, moi, après, quand c'est trop gros,je fais n'importe quoi.
00:05:16 :C'est pas mal, là, je trouve.Ça vous va, 125 ?Après, n'hésitez pas à me dire si c'est trop petit,je vais vous montrer.Quand vous créez...
00:05:24 :Encore un peu, s'il te plaît.Ouais, ça marche.Est-ce que là, ça va ?Après, pas de soucis, Simon,si tu veux encore plus, on peut faire plus.
00:05:39 :Est-ce que, vous, quand vous...Ouais, vous avez ce truc-là,l'environnement virtuel,qui se met en exclu...D'ailleurs, à chaque fois,je suis obligé de le faireun cancel exclusion.
00:05:49 :Mais, bon, je sais pas si c'est grave.Je le garde exclu express,il se met automatiquement en exclu, moi, de toute façon.Ok.Alors...Est-ce que...
00:06:01 :Est-ce que...Alors...On va commencer par...Faire un peu de...Data...Comment je vais appeler ça ?Dépassement.Ouais, je suis revenu à PyCharm, ouais.
00:06:22 :J'essaie de m'y faire...J'aime bien VS Code pour sa simplicité,mais PyCharm...C'est quand même pas mal,mais je trouve que les shortcuts...J'ai un peu du mal à m'y retrouveravec les shortcuts sur PyCharm,mais bon, je vais m'y faire.
00:06:35 :Alors...Donc, moi, ce que j'aime bien faire tout le temps,c'est, quand j'ouvre un projet,c'est faire l'installation de IPython.Je vais installer toutes mes librairies,et...
00:06:48 :Et après, je reviens.Je vais d'abord installer toutes mes librairies,donc Python, IPython, Pandas.On va faire du matplotlib.Et, pour l'instant, ça ira.Ok, donc là, il m'installe tout ça.
00:07:03 :Il va falloir que je quitte et que j'en rouvre.Donc, ce que je vous propose qu'on fasse pour commencer,c'est un peu de data avec...
00:07:13 :Avec Pandas,NumPy,et matplotlib.Et, en fait,c'est des choses...En fait, des fois, j'essaie de vous trouver des exemplessur des trucs,et c'est un truc dont je me suis serviil n'y a pas longtemps, que j'ai dû faire,donc j'essaie de vous le reproduirequand je trouve que c'est intéressant.
00:07:33 :Donc, voilà, si vous trouvez que ce n'est pas intéressant,n'hésitez pas à me le dire.En fait, ce que je vous propose,c'est qu'on se fasse une fonctionqui nous permette de compter le nombre de foisoù on a un signal qui dépasserait une certaine valeur seuil.
00:07:50 :Donc, imaginez que, je ne sais pas,vous avez un signal périodique,sinusoidal ou un cosinus,et vous voulez voir combien de fois votre signalva passer au-delà d'un seuil,et ça vous permettrait, je ne sais pas,d'avoir des alarmes,ou de faire des statistiques,ou des choses comme ça.
00:08:07 :Vous imaginez, je ne sais pas,vous avez un capteur sur votre radiateur,et ce capteur-là sur le radiateur,il vous donne la température,donc la température,elle va osciller tout au long de la journée,parce qu'il y a un rayon de soleil qui passe,des choses comme ça,et donc votre radiateur,
00:08:24 :il va s'éteindre ou s'allumer.Et vous, ce que vous aimeriez savoir,c'est combien de fois votre radiateur s'est allumé,et en fait, votre radiateur s'est allumési la température est passée en dessousd'un certain seuil.
00:08:34 :Enfin voilà, je vous donne un cas pratique,mais voilà en quoi ça pourrait être intéressant.Donc ce que je vous propose,c'est qu'on fasse d'abord ce petit exercice-là,si ça vous intéresse, bien sûr.
00:08:46 :N'hésitez pas à me dire si ça vous intéresseou si ça ne vous intéresse pas.Et puis après, je vous montrerai un petit,un ORM pour faire discuter une classe Pythonavec une database.
00:09:03 :Donc on commencera avec une database SQLite,et après je vous montrerai comment on peutmettre facilement en place une database MySQL,par exemple un serveur de données,un serveur MySQL, facilement.
00:09:16 :Ça ne serait pas SQLAlchemy, ça n'aurait plus.Ça sera un autre ORM qui a un nom beaucoup plus sympathique,mais je ne le spoil pas, je vous le montrerai après.
00:09:33 :Est-ce que ça vous va pour le programme ?Ok, très bien, pas de soucis pour le retard.Et maintenant arrêtez de dire des conneries,il y a Thibault qui vient de rentrer dans le salon,donc faites gaffe.
00:09:49 :Alors on va commencer par importerpanda as pd,on va importer numpy as np,et matplotlib pour faire un dessin.En fait je vais vous montrer d'abord avec un graphiquece qu'on va chercher à faire.
00:10:13 :Import matplotlib.pyplot as plt.Moi je commence toujours avec çapour rentrer dans ce que je vais vouloir lancer.On va se créer un signal,on va commencer à créer notre signal,on va dire qu'on va vouloir créer un signal périodique,un cosinus ou un sinus,qui varie en fonction du temps.
00:10:44 :Je vais l'écrire,et après je vous montre sur le graphe ce que ça fait.Donc on va utiliser pour çalinespace de numpy,np.linespace,où en fait ça nous donne facilement,je vais même vous le montrer directement dans les pythons ici.
00:11:00 :Alors import numpy as np,en fait le linespace ça vous donnec'est comme une liste,sauf que là c'est un arrêt,donc arrêt c'est l'équivalent des listes,mais côté numpy ça permet de faire des opérations mathématiquesoptimisées sur les listes.
00:11:24 :Donc en fait linespace ça fonctionne comme ça,on lui donne le démarrage et la fin,et on lui donne le nombre de points qu'on veut.
00:11:31 :Donc c'est intéressant,c'est un peu comme quand vous définissez un range,mais là ça va être un linespace.Donc là qu'est-ce qu'il me dit,je pense qu'il ne faut pas mettre le E.
00:11:42 :Voilà, donc si je regarde T,en fait ça me donne une liste,donc il a bien commencé ma liste de 0,comme je l'ai dit,et il va jusqu'à 20,et il m'a tout découpé en 600 éléments.
00:11:56 :Donc voilà, je lui dis,je veux une liste de 600 éléments,donc il découpe,en fait il fait 20 divisé par 600,et j'ai l'espace entre chaque point.
00:12:04 :Donc voilà comment fonctionne linespace,c'est comme ça qu'on va l'utiliser,donc nous on va dire ça,et on va dire qu'on veut,je vais peut-être mettre 500 points,il n'y a peut-être pas besoin de plus,et Y on va dire quoi ?
00:12:16 :En fait Y ça va être le cosinus de,donc pour définir un signal périodique,typiquement,enfin c'est une formule mathématique,mais ça s'écrit l'amplitude du signal,quoi le cosinus omega t plus phi.
00:12:30 :Donc c'est une formule mathématique,mais en gros le omega dans le cosinus,ça va être la pulsation,ça va être savoir combien de périodeson a dans notre signal.
00:12:41 :Je vais vous illustrer ça,ça va être plus clair.Donc là on va mettre une amplitude,on va la mettre à 1 pour l'instant,on va mettre une période t égale 5,donc ça veut dire que sur un signalqui fait 20 secondes,parce qu'ici on a défini 20 secondes,
00:12:59 :si on met une période de 5,on va avoir 4 fois la période.Vous allez le voir dans l'illustration.Donc ici si j'écris mon signal,ça veut dire que c'est Y,donc c'est mon amplitude,fois le cosinus,et donc là omega t,c'est un petit peu omega t,en fait c'est 2 phi fois la fréquence,
00:13:16 :et la fréquence c'est 1 sur la période.Mais bon ça c'est pas,vous en faites pas,c'est pas important.NP.Phi fois 1 sur la période,
00:13:29 :et fois t.Et donc vous voyez ce qui est intéressantavec le travail avec les arrêts,c'est que ici je peux juste mettrele nom de ma variablepour le arrêt que j'ai défini,donc là vous voyez que,si vous vous souvenez ce qu'on a lancé là dessus,c'est une liste.
00:13:52 :Et donc là le fait de direcomme si c'était un nombre,bah en fait Python va comprendreque je veux appliquer cette fonctionà tous les nombres de la liste.
00:14:03 :Et donc il va me retourner une liste en retour.Donc ça je vais quitter.Donc on est là,on va aller vérifier quand mêmeque le Y est bon,donc là si je fais run,data dépassement,donc vérifie que T c'est bon,et Y c'est bon.
00:14:27 :Donc j'ai bien quelque chose,c'est au moins correct là dessus,et donc là on va faire notre graphe.Alors pour faire notre graphe,on va juste dire plt.plot,
00:14:39 :et on va juste faire,voilà on va plotter Y en fonction de T,plt.show,et pour l'instant on va pas aller plus loin,je vais juste vous montrer ce que ça donne.
00:14:50 :Ok, donc là on a notre figure.Donc vous voyez ce que je vous disais tout à l'heure,c'est que ici on a mis T égale 5,et on a un signal qui dure en tout 20 secondes,donc on retrouve bien nos 5 périodes,vous voyez 1, 2, 3, 4, 5,
00:15:06 :et on a bien notre signal qui variede l'amplitude positive à l'amplitude négative.Si ici j'avais mis amplitude 2,et que là j'avais mis 2,bah là en fait on va avoir 10 périodes,parce qu'on a découpé notre signal de 20 secondesen des périodes de 2 secondes,donc on va en avoir 10.
00:15:30 :Voilà, donc on a bien 10 périodes,vous pouvez compter,et vous voyez qu'entre chaque pic,on a 2 secondes qui équivaut à la période.Voilà, donc tout ça,si les maths vous n'aimez pas du tout,il n'y a pas de soucis,c'est pas grave si vous ne voyez pas,
00:15:44 :mais au moins vous voyez le concept,c'est qu'on peut se créer un signal et le tracer.Maintenant ce qu'on aimerait faire,c'est qu'on aimerait dire ici,ça c'est mon seuil,on va dire que le seuil c'est 0.5,
00:15:57 :donc le seuil je vais le tracer,comme ça vous allez voir,donc pour ça je peux juste faire un plt.hlines,hlines c'est pour tracer des lignes horizontales,donc on lui dit à quel niveau on veut la ligne horizontale,donc je vais définir un seuil,seuil égal 0.5,
00:16:16 :voilà, et puis on va dire,tu me traces un seuil,et on va dire de 0 à 20,parce qu'on le veut du début à la fin,voilà, tout ça je vais enlever les warnings,là il n'était que les syntaxes,je retrace,voilà donc là il m'a tracé un seuil,
00:16:33 :qui va de 0 à 20 et à 0.5,donc nous ce qu'on aimerait maintenant,c'est compter le nombre de fois,où notre signal passe au-dessus de ce seuil.
00:16:47 :Est-ce que vous voulez y réfléchir un petit peu avant,ou est-ce que je vous montre directement,comment moi je ferais ça,après il y a plein de manières de le faire,mais moi j'aime bien faire ça avec Panda,donc je vais vous proposer de montrer ça,si vous voulez peut-être,
00:17:10 :pendant que je le fais,vous pouvez réfléchir de votre côté,à dire tiens moi j'aurais fait comme ça,et puis on peut le tester ensemble.
00:17:16 :Donc d'abord ce que je vais faire,c'est que je vais transformer tout ça dans un data frame,parce que moi j'aime bien manipuler les data frames,on a des fonctions qui sont intéressantes dans un data frame,tout ce qui est calcul etc,vous allez voir c'est assez pratique.
00:17:30 :Donc on va se créer notre data frame ici,donc on va dire df égale pd point data frame,et puis on va définir les valeurs qu'on met dedans,on va juste dire que t c'est t,et df y c'est y.
00:17:54 :Donc là vous voyez j'ai pas fait grand chose,je vais pas faire le show,je vais pas afficher les trucs,je vais juste vous montrer la représentation graphique qu'on vient de faire,enfin la représentation graphique de nos valeurs.
00:18:07 :En fait maintenant,vous voyez tout à l'heure on avait des listes comme ça,bon c'est pas très lisible,moi j'aime bien mettre ça dans un data frame,donc en fait un data frame c'est quoi ?
00:18:16 :C'est un objet Python,qui est une instance de la classe de Panda data frame,avec là vous voyez c'est déjà un peu plus lisible,on voit un tableau,donc typiquement vous pouvez imaginer que c'est un tableau Excel,mais sous forme de Python,donc là on a bien ici l'axe des abscisses,
00:18:34 :et l'axe des y.Et avec les data frames,il y a quelque chose qui est très puissant,c'est que vous pouvez filtrer,je vais dire,j'aimerais voir dans mon data frame,à chaque fois que la valeur dépasse le seuil.
00:18:50 :Donc là en fait si je fais ça,il me retourne un masque,un masque c'est quoi ?C'est juste,il va vous donner les localisations dans le data frame,qui respectent cette condition.
00:19:01 :Vous voyez que c'est assez puissant quand même,parce que si maintenant je fais df,et que je lui dis,y plus grand que seuil,donc là c'est exactement la même chose,sauf qu'au lieu de lui demander de me retourner l'endroitoù la condition est vérifiée,là vous voyez en fait qu'il me dit 0 true,
00:19:19 :ça veut dire que sur la ligne,la première ligne,il a trouvé que y était bien supérieur à 0.5.Vous voyez si je change le seuil,par exemple je vais vous montrer,illustrer ça,si je ne mettais que le seuil,c'est on va dire 1.94.
00:19:37 :Je dis que le seuil c'est 1.94,si je refais la même opération,que je regarde le masque,donc là en fait vous voyez,true, true, false,parce que si je regarde les deux premières lignes,elles sont bien plus grandes que 1.94,
00:19:48 :c'est 2 et 1.98,mais dès qu'on est à la troisième ligne,1.93, je suis en dessous de 1.94,donc c'est pour ça que là il me retourne un masqueavec uniquement les deux premiers à true,et à chaque fois,enfin ainsi de suite.
00:20:00 :Et donc,une fois que vous avez votre filtre,ce que vous pouvez faire,c'est que vous pouvez dire,quand vous faites la df égale machin,vous pouvez filtrer votre DataFrame,vous pouvez dire,affiche-moi le DataFrame,que là où j'ai ma condition qui est vérifiée,donc affiche-moi mon DataFrame,c'est ce que je fais ici,
00:20:18 :quand je remets df entre crochets,où mon seuil est vérifié.Donc là,vous voyez qu'il me sort un DataFramequi est beaucoup plus petit,avec des sauts entre lignes,vous voyez là,il est passé de l'index 1 à 48,parce qu'il a trouvé ça.
00:20:33 :Et donc,il y a un truc qui est encore plus,qui est encore plus,enfin,pas encore plus puissant,mais qui est un truc qui est assez intéressant aussi,c'est que vous pouvez dire,donc là on a fait un filtre avec le DataFrame,vous pouvez faire ça aussi avec NumPy.
00:20:49 :Et avec NumPy,c'est chouette,c'est que vous pouvez créer une nouvelle listequi va vérifier la condition.Si je fais np.where,en fait,where en anglais,ça veut dire où,avec l'accent,la localisation,vous pouvez dire,vous pouvez donner une condition.
00:21:07 :Je dis np.where,Y est plus grand que Seuil,et je vais lui dire qu'en fait,il me crée une liste,quand cette condition est vérifiée,tu me mets True,et quand cette condition n'est pas vérifiée,tu me mets False.
00:21:20 :Donc là,vous voyez,il va me retrouver carrément,il va carrément me refaire une liste,quand il va trouver que la condition est vérifiée,il va mettre True,et sinon il va me mettre False.
00:21:33 :Et donc,c'est tout simple,ce que je vais avoir besoin de faire maintenant,c'est juste,je vais me créer une nouvelle colonnedans mon DataFrame,donc c'est ce que je fais ici.
00:21:42 :Donc là,je dis Dépassement,et donc là,je vais dire,tu me mets la nouvelle liste que j'ai créée,là où j'ai Df,Y qui est plus grand que mon Seuil,tu me mets True,sinon,tu me mets False.
00:22:01 :Donc là,on va vérifier que ce qu'on fait,ça marche.Ok,on lance le script,et donc maintenant,si je vais voir Df,voilà,donc ça a l'air de fonctionner,je vais peut-être mettre un autre seuilpour qu'on voit mieux,1.94,
00:22:22 :non,je vais mettre,ouais,6.94,je vais juste relancer,pour vérifier.Voilà,donc ça a bien fonctionné.On a créé une nouvelle colonne,qui va voir si le critère est True ou False,et s'il est True,enfin,s'il voit que la condition est vérifiée,c'est-à-dire,est-ce que Y est plus grand que mon Seuil,
00:22:51 :il va m'afficher True,sinon,il va m'afficher False.Voilà,donc vous voyez que c'est quand mêmevachement puissant,une fois que vous avez un peu comprisles syntaxeset comment on filtre,c'est intéressant.
00:23:03 :Après,il y a vraiment plein d'autres manières de le faire.Typiquement,là,j'avais mon Df,et je vais faireDf.dropColumnségaledépassementin place,je crois que c'est,ouais,in place.
00:23:32 :C'est juste pour vous montrer,il y avait un autre moyen de faire ça.On aurait pu faire un Apply.En fait,je peux direDf.y,
00:23:42 :c'est un peu pour vous montrerla puissance du DataFrame,en fait,c'est que vous pouvez mapperune fonctionà toutes les valeurs,à toutes les lignes du tableau.
00:23:51 :Vous pouvez direApply,et donc là,on peut utiliser une fonction anonyme.En fait,Apply,ça veut dire queje lui disapplique la fonctionque je suis en train de définirà chaque ligne du DataFrame.
00:24:06 :Et pour ça,on peut utiliser une fonction anonyme,je ne sais pas si vous avez déjà vu ça.En fait,c'est définir une fonction à la volée.
00:24:12 :Donc là,je dis lambda.Et donc là,je lui dis à chaque élémentque tu vas rencontrer,tu vas lui afficherest-ce que lm est plus grandque seuil.
00:24:24 :Et donc là,c'est encore plus directparce queça c'estlm plus grand que seuil,ça va être un boolé,le résultat.Vous savez,quand vous faites un test,ça veut dire qu'il va directementafficher Truesi c'est correct,et il va mettre Falsesi ce n'est pas vérifié.
00:24:41 :On aurait pu aussi faire là,c'est même un petit peuplus élégant je trouve,donc je vais le faire comme ça.Je vais faire dfy.apply
00:24:56 :lambda lmlm plus grand que seuil.Qu'est-ce que vous en pensez de ça ?Est-ce que ça vous paraît clairou c'est complètement obscur ?
00:25:10 :Est-ce que vous voulezque je revienne dessusou est-ce que vous voulez par exemplequ'on parle un petit peude la fonction lambda ?Ok, si ça vous va.
00:25:29 :Un petit coup de lambda,je ne suis pas contre.Alors en fait,lambda,c'est juste un moyende définir une fonction anonyme.Typiquement quand tu définis une fonction,tu dis df add a, bet tu vas dire retournea plus b.
00:25:53 :Attends, on va faireavec un seul argument,ça sera plus simple.On va dire say helloet là tu vas entrer ton nomet donc là tu vas retournerun if stringhello nom.
00:26:15 :Donc là en fait,tu définis ta fonctionet donc si tu dissay hello Jean,donc là tu vas bien avoirta fonction.Et en fait cette fonction-là,tu peux la définir de manière anonymeparce que là en faittu vois que j'ai été obligéde faire un df, un retourne, etc.
00:26:31 :Et typiquement dans ce cadre-là,si tu veux faire un apply,si j'avais voulu le faire icien définissant une fonction,j'aurais dû faire dfdépassementseuil valueet j'aurais dû faireun retourne valueplus grand que seuil.
00:26:58 :Et après ici,j'aurais dit applyet j'aurais directementappelé ma fonction.Tu vois là,ce que j'ai fait avec le lambda,c'est exactement équivalent à çaet tu vois que c'estun petit peu plus lourd en fait.
00:27:11 :Tu dois définir ta fonctionavec la valeur, etc.Alors que là,c'est un peu comme sien une ligne,tu définissais à la voléeta fonction.
00:27:19 :Et en plus,t'es même pas obligéde lui donner un nom.Parce que là tu vois,je suis obligé de définirun nom pour ma fonction,dépassement de seuil,machin.
00:27:28 :Alors que si je fais un lambda,c'est exactement la même chose.Je peux définir,tu vois,func anonymeégale lambdalmet à lm,qu'est-ce que je fais ?
00:27:47 :Je lui appliquehellolmVoilà.Et donc si je fais func anonymeet que je dislmça donne exactement la même chose.Mais en fait,tu vois,mais typiquement ça,les fonctions anonymes,moi la majorité,je les vois surtout en dataoù tu veux définir des chosescomme ça à la volée
00:28:17 :et que t'as pas envie de t'embêterà définir ta fonction avant.Autrement,j'en vois pas beaucoup.Des lambdas,c'est surtout pour faire du mapping.C'est-à-dire appliquer une fonctionà plusieurs élémentsen même temps.
00:28:27 :Donc là,est-ce que...Ah, pas de souci,c'est bon.Alors lmet donc là,on avait dit lmça y est.Voilà.Donc là,on a notre fonction dépassement.
00:28:43 :Si je relance,on vérifiequ'on a bien calculé le dépassement.Et maintenant,ce qui est vachement pratique,c'est qu'on sait queen fonction desur quelle ligne on est,on a dépassement ou non.
00:28:54 :Et donc,je peux même rajouter çasur mon dessin.Regardez,j'ai ça.Et moi,donc si je fais run,je vais faire plt.show.La valeur seuil,elle est peut-être un peu élevée.
00:29:08 :On va remettre 0.5.Voilà,donc là,j'ai mon seuil.Et moi,j'aimerais bien déjà,je sais pas ce que vous en pensez,mais faire un...
00:29:18 :Ah oui,c'est vrai.Pour tout ce qui estfiltrage et tri,les fonctions lambda,on les utilise beaucoup aussiparce que c'est pareil.En fait,c'est du mapping.
00:29:29 :On applique des fonctionsà un jeu de données.Donc là,on peut peut-être se dire,j'aimerais bien tracer un pointpour chaque valeurau-dessus du seuil.
00:29:39 :Et donc,grâce à notre colonne dépassement,on va pouvoir le faire facilement.Je peux faire ici...Parce que maintenantqu'on a dépassement,on peut filtrer.
00:29:52 :Vous voyez,j'ai des f.Si je veux afficher uniquementles valeurs qui sontdans le dépassement,je peux diredfpour lesquellesdfdépassementégale,égale.
00:30:04 :Comme ça,j'ai pas à m'embêterà savoiroù est-ce qu'il est mon filtre,etc.Et donc maintenant,je peux dire,je veux dessiner un point.
00:30:12 :Pour ça,je fais plt.scatterau lieu de fairedl.plotparce qu'en fait,plot,ça va dessiner une ligne.Là,je vais faire scatter.Scatter,ça veut dire nuage de pointsen anglais.
00:30:25 :Donc là,on va diredf.Donc là,je vais dire,je vais filtrer mon data framelà où j'ai du dépassement.Donc ça,c'est ce que je disdans cette condition-là.
00:30:35 :Et je veux uniquementici,le t.Et là,je veux,pareil,dfdépassementlà où j'aidf dépassementégale,égale,true.Et là,je veux uniquement tracermon Y.
00:30:57 :Donc là,en théorie,il va me traceruniquement,il va me mettre un pointsur tous les endroits de ma courbeoù je suis au-dessus du seuil.
00:31:04 :Et on va peut-êtremême mettre,on va changer la couleur.Je ne sais plus exactementla couleur,comment on fait.On va essayer ça.Red.
00:31:18 :Voilà.Donc là,vous voyez,il m'a tracé un pointà chaque fois qu'il a étéau-dessus du seuil.Et si vous voyez,bon,par exemple,ce point-là,il ne l'a pas mis,c'est parce qu'en fait,là,le point,il n'est pas défini.
00:31:34 :Je n'ai pas,si je zoom ici là-dessus,en fait,là,je n'ai pas de point de valeur,c'est juste un trait.C'est pour çaqu'il ne m'a pas misle point rouge,parce qu'il n'existe pas.
00:31:44 :Mais vous avez compris.Après,si vous voulez,il faut en mettre 1000.Comme ça,on va avoir plus de points.Voilà.Donc là,j'ai mis beaucoup de points.
00:31:54 :Et vous voyez quec'est un petit peu plus prochede la réalité,mais bon,c'est pareil.Il manque toujours quelques points.Mais,voilà.Donc,on a réussià identifierles points de la courbequi sont au-dessus du seuil.
00:32:09 :Donc là,déjà,on est content,parce qu'imaginez qu'on a une courbeet puis on peut montrerles endroitsoù on est au-dessus du seuil.Et maintenant,ce qu'on aimerait bien faire,c'estcompter le nombre de foisoù on a dépassé le seuil.
00:32:24 :Moi,je trouve ça intéressant.Dites-moi si vous voulezqu'on s'arrête làpour ce petit exercice dataou si vous voulez continuerà voircomment on pourrait calculerle nombre de foisoù on a dépassé le seuil.
00:32:36 :Ok,très bien.C'est coolsi ça vous intéresse.Donc,là,on va juste compterpour savoirquel résultat on doit avoir.Alors,on a 1,2,3,4,5,6,7,8,9,10,11.
00:32:59 :Normalement,le résultat doit nous donner 11.Donc gardez bien en têtequ'on doit compter11 dépassements.Alors,pour ça,mais encore une fois,il y a,je pense,plein de moyens de le faire.
00:33:12 :Moi,ce que je vous propose,c'est qu'en fait,on va aller...Comment on pourrait le voirun petit peu mieux ?Parce que là,on ne voit pas bien.
00:33:25 :Il y a une fonctiondans un data framequi s'appellediff.Alors,la fonction diff,qu'est-ce qu'elle fait ?Donc,si je vais juste aller voirpointdiff.
00:33:40 :En fait,diff,ce qu'il va faire,c'est quediff,c'est équivalent à direje prends mon data frameet je faisla soustractionde la ligne supérieureavec la ligne inférieure.
00:33:52 :Donc là,typiquement,si je regarde,si je faisdf dépassement diff,en fait,il va prendre la ligne 1,il va faireligne 1 moins ligne 0.
00:34:01 :Vous voyez ici,si je fais justedf pointdiff,il fait ligne 1.Je vais faireun data frame bidonpour vous montrerdf2 égale pdpointdata frame.
00:34:15 :Après,je vais vous expliquer un peuoù je veux en veniravec ce diff.Et puis,je vais diredf2valueégaleon va dire135912Donc là,j'ai fait un petit data framejuste pour que vous voyezce qu'il fait diff.
00:34:41 :Et donc,si je fais df2pointdiff,en fait,vous voyez queforcément,la première valeur,comme c'est la première,il n'a pas de différence.
00:34:51 :Mais ce qu'il fait,c'est qu'il faitligne 1 moins ligne 0.Donc,il va faire 3moins 1.On va avoir le 2 ici.Après,il va faire ligne 2après,ligne 3moins ligne 2,c'est 9moins 5,ça fait 4.
00:35:06 :Et après,la dernière lignemoins l'avant-dernière,c'est 12moins 9.En fait,en gros,en algorithme,c'est comme s'il faisaitun truc du genrecomme si vous aviezune liste.
00:35:18 :Je vais en faire deux.Je vais faireune listequi s'appelle1236.C'est comme sije faisaisfortilmina.
00:35:33 :C'est comme sije faisaisattendez,parce qu'il ne faut pasprendre le premierif iest différentde 0.On va faireen fait,je n'ai pas besoinde lui.
00:35:45 :ilmina.C'est comme sije faisaisfortilmina.C'est comme sije faisaisfortilmina.En fait,il va alleritérersur les indicesde i.
00:36:08 :Là,quand je suis dansle terminal,vous voyez assezou je peux peut-êtrezoomer un peu.175.Pourquoiil n'a pas prisl'indicede l'indicede l'indicede l'indicede l'indicede l'indicede l'indicede l'indicede l'indicede l'indiced'indiced'indicede l'indiced'indiced'indiced'indiced'indiced'indice
00:36:35 :d'indiceOui.si je fais ca,yIinderateaet voilà si je faisun printIVa justem'afficherles indices.Pourquoitorahlmafortlmaen fait c'est juste les indices.
00:36:57 :Donc moi ce que je vais lui dire c'est que sije ne suis pas sur le premier termeif Iest différent de zérotu faiseuhaIplus voilà plus unmoinsaIDonc en fait non ce que je disc'est plutôtifI n'est pas égale au dernier
00:37:26 :à lmaOuais ça ça devrait être bon.En gros c'est ça qui fait le diff.Je crois que justement j'ai fait de la merde.
00:37:44 :En fait c'estIsi I n'est pas égal à zéroet donc là on va direIestmoins un.En fait le diff a c'est cet algorithme là. Vous pourrez aller voir je
00:37:59 :pense dansdans la documentation de Panda mais le diff en gros il parcourt toute laliste et il fait l'élémentaprès moins l'élément d'avant.Ouais t'as une question Sylla ?
00:38:17 :Ah pardon j'avais pas vu mais tu peux la poser maintenant.Ok en fait c'estpar exemple si j'ai deux listesparce que je vois souvent avec Python on parcourit deux listes en même tempsje vais savoirça devient un test superça veut dire que je parcours deux listes en même temps en fait.
00:38:37 :Parcourir deux listes en même temps ?Ouais alorstu peux faire ça donc 1 2 57et puis on va définir B égal675et10tu peux faire en fait ça dépend comment tu veux parcourir ta listesoittu veux chacun des éléments donc là tu pourrais faire
00:39:06 :forélème Aélème BinzipA Bet donc là tu faisprintdonc A6élème Aet Bélème Bdonc là en fait tu vois en une boucle tu parcoursles deux listes en même temps avec une seule boucle.
00:39:42 :C'était ça ta question ?Oui c'est ça, zip là, ok d'accord.Ah oui tu vois Gabriel il avait mis aussi dans le chatmais ça c'est quand tu parcoursça c'est avec l'index c'est ça ?
00:39:55 :Non là c'est pas l'index c'est vraimentparce qu'en fait quand t'as une listet'as différents moyens de parcourir une liste soit tu dis carrémenttu itères sur chaque élément ou soit tu faisl'indexation, tu parcours les indices et puis tu faista liste élème quoi.
00:40:18 :D'accord, d'accord, d'accord.Ok ?J'ai raison, j'ai raison, merci.Je t'en prie.Alors où est-ce que, ouais doncle diff c'était pour vous expliquer, en fait il fait juste l'élément suivantmoins l'élément d'avant.
00:40:34 :Et on va se servir de ça nous pourpour voir, parce que nous notre problème c'est querunsi on veut compter le nombre de fois où on a eu un dépassementbah il vail va simplement falloir qu'on compte le nombre de fois où on est passé de
00:40:52 :true à falseok parce qu'en fait si on sait qu'on est passé de true à false bah ça veut direqu'on a eu un dépassementparce que si je pourrais très bien avec panda direje pourrais avec panda me dire bah en fait j'ai juste à compter le nombre de
00:41:11 :lignes où je suis à truevoyez si j'ai df et que je dis bah je vais compter le nombre de fois où je suis à trueil suffit juste de faire lengthdfdfdépassementégal égal true420 mais en fait vous allez voir que 420 c'est pas correct, 420
00:41:34 :en fait c'est justesi je relance420 c'est le nombre de points que j'ai dans ma zone de dépassementmoi je veux pas après ce que je pourrais faire c'est je pourrais faire 420divisé par l'espacement entremais bon c'est pas propremais vous voyez que c'est pas correct
00:41:51 :nous ce qu'on veut c'est uniquement identifier les fois où j'ai eu unchangement où je suis passé entre true et falsedonc pour çaon va utiliser df parce que df il va aller faire la différence entrechaqueentre chaque ligne et dès qu'il y en a un qui va être différent
00:42:08 :parce que s'il fait true ou non trueça va me donner falsevous voyez si je fais truemoins trueça me donne 0 et en fait en boulet 1 0 c'est falsetruemoins trueil me donne falsedonc en fait à chaque fois que je vais voir du false je sais que j'ai pas eu de
00:42:30 :changement d'état entredépassement de seuil ou nonmais dès que je vais avoir un true ça veut dire que j'ai eu à un moment donnéun falseparce que si je faisboulet 1truemoinsfalseje vais avoir j'ai true parce que true moins falseça fait 1
00:42:51 :et donc c'est un boulet 1 au sens de Python sinon c'est pas un boulet 1mais en gros on va se servir un peu de cette propriété de Pythonqui dit que par exemple boulet 1 de moins 1ça me donne aussi true donc dès que je vais avoir un true moins false ou un false
00:43:06 :moins trueet bien ça veut dire que je vais avoir un changement d'état parce que vous voyezici c'est une relancelà en fait quand je vais passerce niveau làil m'a superposé plusieurs graphesquand je vais arriver sur cet endroit icien fait là je suis à true et je vais passer à false donc là je vais faire
00:43:27 :ça va faire falsemoins trueet ici ça va faire par contretrue moins falsedonc vous verrez après qu'il faudra enlever les autres parce que ça veut direqu'il va me compterdeux fois trop de passagesen dépassementvoilà doncon va d'abord se créeron va se créer une nouvelle colonne qui va s'appeler diff tout simplement
00:43:52 :on va dirediffégaledfdépassementdiffdonc là on va se retrouver avec une nouvelle colonne je vais relancerà chaque fois il va me faire le plotet donc là j'ai une colonneune false et moi je sais qu'à chaque fois que je vais avoir une valeur qui est à true
00:44:17 :ça veut dire qu'il y a eu un changement deun changement d'étatet il y a un truc qui est encore plus puissant et qui est une propriété de Pythonc'est que pour Pythontrue c'est 1et false c'est 0quand vous faites des manipulations avec Pandasça marche comme ça
00:44:36 :donc si je fais dfdiffpointsumje vais avoir en fait là vous voyez que j'ai déjà le nombre deça commence à sentir bon parce que là vous voyez que j'ai 20en fait 20 si je replote ici20 c'est le nombre de déplacements mais dans les deux sens
00:45:02 :si je fais 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 en grosj'ai 10 au dessus et 10 en dessousdonc c'est pas tout à fait correct parce que moi normalement c'est 11 monrésultat j'ai 11 dépassementsje pense que voilà on va commencer à s'approcheret donc et juste pour info
00:45:20 :cumsumc'est si je reviens sur est-ce que j'ai encore mon df2si je fais df2.cumsumen fait c'est la somme cumuléedonc la somme cumulée c'est quoi c'est quequand je suis à la première ligne il fait 1 plus ce qu'il y a en dessous donc c'est 1quand je suis à la ligne 1 il fait 3 plus ce qu'il y a en dessous ça fait 4
00:45:39 :voyez iciaprès là à 5 il fait 5 plus tout ce qu'il y a en dessous donc il fait 5 plus 4 ça fait 9après 9 plus 5 plus 3 ça fait 18et après 12 plus 9 plus 5 plus 3 plus 1 ça fait bien 30donc en fait la somme cumulée c'est juste
00:45:57 :il somme toutes les lignes qu'il y a en dessousdonc pourquoi moi je fais la somme cumuléeparce qu'en faitdonc c'est tdfdfsomme cumulée parce que en gros je sais queil va m'afficher uniquement de fou quand j'ai un changement d'étatdonc si je fais la somme cumulée je sais que
00:46:22 :imaginez que voilà sursur cette première partiecourbelà j'ai pas de changement d'état donc en fait la somme cumuléejusque ici elle va valoir 0 parce que j'ai pas eu de changement d'étatdès que j'ai eu un changement d'étatici je sais que la somme cumulée sur toute cette partie là
00:46:43 :ça va être uniquement 1 parce que ici ils sont tous à 0et j'aurais uniquement eu un changement de phaseet donc ça ça me permet un peu de filtrer les changements de phasedonc voilàvoilà on fait un peu de logique mathématique etc mais c'est pasc'est pas le coeur du sujet c'est juste pour vous montrer ce qu'on peut faire
00:47:03 :avec pandaet maintenant ce qu'on va faire un trucqui estencore mieux donc on va même se mettre df groupdonc là on va faire c'est notresomme cumulée donc on va dire df groupégale df diffcomme sommedonc on va relancerdf groupah oui pardon
00:47:41 :oksi je regardevoilà donc là ça commence à être pas mal et maintenant ce que je vais fairec'est que je vais grouperpar groupeet ça on peut faire ça avec panda avec dfavec groupby donc je vais dire dfdf pointgroupbyet donc là on va dire je vais grouper par groupe
00:48:15 :et groupe et ce que je vais faire c'est que je vais prendreje vais faire un nouveaudf groupégal et puis je vais vous montrer ce que ça faitdonc si je relanceet donc là je regardemon df en fait df c'est que là je vais avoir la même valeur en fait parce que
00:48:38 :la somme cumuléeouais en fait panda c'estl'équivalent de l'excelmais en mode python programmationet donc en fait le groupbyici il va juste dire regroupe moitoutes les lignes dataframe qui ont la même valeur de groupedonc c'est ce que je fais ici c'est ce que j'ai fait là
00:49:01 :c'est ce que j'ai fait là j'ai dit df groupbyet tu me groupes par la colonne groupe iciet ici first ça veut dire quoi bah prends juste moi la première ligneparce que ce qui nous intéresse ici nous c'estc'est de compter le nombre de dépassements donc on s'en fiche un peu des datas
00:49:17 :donc ici je dis first ça veut dire tu me prends la première ligne du groupedonc là si je vous affiche df groupdonc là vous voyez qu'on commence à avoirnos groupes qui s'affichentil manque juste un truc maintenant c'est que comme je vous l'ai dit tout à l'heure
00:49:33 :on a aussi les groupes qui sont en dessous du seuilnous on veut juste les groupes qui sont au dessus du seuildonc il suffit maintenant de dire df group là où on avait un dépassementdonc il suffit juste de refiltrer par les dépassementsdonc si je fais df group
00:49:49 :df groupeddépassement égale égale trueet voilà on a icitous les déplacements si normalement je faisun length de ce truc làon a bien 11 le résultat qu'on attendaitparce que en faitsi je fais pas ce que je fais làle filtrage par dépassementon se retrouve avec deux fois trop de groupes parce que
00:50:23 :il a compté aussi ceux qui sont passés en dessouset nous on voulait uniquement ceux qui sont passés au dessusvoilà pour le petit exercicede data que je trouvais sympa à faireest-ce que ça vous a intéressédites moi parce qu'en fait si vous me dites ouion fera d'autres exercices de ce type dans les prochaines sessions
00:50:47 :de temps en temps et puis si vous me dites non non ça nous intéresse pasy'a pas de soucis je m'acharne pas et je fais plus dece type d'exerciceok bah c'est cool si ça intéresseet puis les autres pareil t'es pas à diremoi en fait tant qu'il y a une personne au moins qui est contente
00:51:08 :je suis contentaprès si y'a trop de personnes qui disentnon non on déteste çaj'arrêtebon bah les autrespas de soucis Simonj'espère que je vais avoir un petit peu de temps pour vous montrerle fameux ORM là dont j'ai parlé au débutalorson va dire database
00:51:50 :discussionalors ce petit moduleil s'appelleponypony c'est très marrantalors ORM c'estje vais pas te dire de bêtises en grosORMc'est Object Relational Mappersdonc en fait c'est je sais pas si t'as déjà commencéla formationDjango maisun ORM c'est ce qui permet de faire
00:52:26 :le lien entre une classe et une databaseparce qu'en gros une classe bah on va la définir icije vais prendre si jamais vous allez voir dans la documentation de Ponyils utilisent un exemple que je vais réutiliser ici ce sera plus simplemais ouais merci pour la précision
00:52:41 :c'est en gros tu traduis des classes en tablebah en faittoutes les webapps etc elles travaillent en databaseet toi ton code Python il travaille en classedonc c'est un moyen de faire le lien entre les deuxdonc on va l'installerinstall ponyet je vais vous montrer un peu le concept du truc
00:53:05 :import ponyet donc on va d'abord créer nos classesdonc on va imaginer une classepersonneil faut importeron va importeron va importer l'ORM de pony directementfrom pony importORMparce que j'ai mon chien qui joue avec mon câblecasse toi allezvoilà donc là on a mis
00:53:49 :l'ORM et en fait il faut justefaire hériter la classe qu'on définitparc'est DBentityil faut d'abord définir la databaseDB égale ORM point databasevoilà en fait là on définit que DBça va être un objet ORM c'est ce qui va permettre de faire la relation
00:54:16 :entre la classe etah oui effectivement je me demandais de quoi tu parlaisil a pris une dérouilléeDBentity en fait il faut faire héritervos classes de DB entity mais après une fois que vous avezfait ça il n'y a plus besoin, c'est un peu comme vous savez dans
00:54:41 :Django quand vous faitesun modèle bah ici c'est un peu la même chose donc là on va définirle nom de la personne donc le nom de la personne ça sedéfinit comme ça on définit unun objet qui est requireden gros pour dire que c'est requis et donc là
00:54:59 :on dit que c'est juste un stringon va définir je vais pas mettre son âge c'est pas la peineet là on va lui définir que lapersonne elle a desdes voitures et en fait les voituresdonc là on va définir la classe qui va hériter ça c'est une
00:55:17 :relation de one to many parce qu'en faitune personne peut avoir plusieurs voituresmais chaque voiture a un seul possesseurdonc on définit la classe ici là en faiton est en train de créer une relation c'est pour vous montrer qu'avecPony on peut facilement créer des relationsde clés étrangères dans les database
00:55:38 :voilà on va définirqu'est-ce qu'on va définir le modèledonc là c'est pareil c'est erm.requiredstring ici j'enlèveles highlights je mets que la syntaxeet on va définir owner en anglais ça veut direpossesseur et donc là on va lui direque c'est le champla relation de notre clé étrangère donc là ça va être
00:56:10 :la classe personneok donc là on a défini notrenos classes qu'on va faire afficher dans nostables en fait donc là on a un peudéfini tout ce qu'il fallait maintenant ce qu'il faut fairec'est juste créer parce que là on a créé un objetattendez j'ai un appel
00:56:31 :...pardonok là en fait on a créé l'objetORM database qui est une instance de la classe de Ponyet ce qu'on fait maintenant c'est qu'on va faire un binden fait bind c'est pour faire la connexion avec la database qu'on veutdonc là on va lui dire qu'on va faire du SQLite
00:57:07 :...pourquoi il veut pas mettre le provider...donc là on lui dit que c'est SQLite, SQLite c'est une petite basede données qu'on peut se mettre en localon va lui donner le filename...
00:57:41 :comment on va l'appelercars.dbet puis on vafaire create donc ça c'est une optionça m'inquiète un peu qu'il ne mette pas la complétion...
00:57:59 :...est-ce que je l'ai bien écrit ?......bon on verracreate db ça c'est pour dire tu me crées la database si elle n'existe pas...
00:58:21 :...c'est où ?ouais...............il a pas de classe database avant ORM du coup ?...............
01:02:07 :........................................................................Ouais, en fait je voulais le faire en mode interactif avant de le faire avec le script,mais je ne sais pas pourquoi je ne peux pas rentrer dans le mode interactif.
01:03:42 :Parce qu'en fait, après si vous voulez ça,donc vous mettez ici le décorateur,donc là ça va être ORM,DB Session,ORM,DB Session, et puis voilà,et après vous pouvez créer des fonctions,donc là ça va être Def, Add,Add Person,et donc là,ça va être Name,
01:04:33 :et puis je pense qu'il n'y a besoin de rien d'autre,et là on va direPerson,Name, égale Name,donc là déjà normalement je pense que,en fait le DB Session c'est pareil,voilà,et donc normalement,j'ai peur que ce soit cause,on va tester ça, si je fais Add Person,
01:05:27 :Jean,je vais quitter ici,ok, donc là normalement je pense qu'il m'a ajouté,voilà, dans ma table Jean,dans ma table personne il m'a bien ajouté Jean,et si je vais voir dans Car, pour l'instant je n'ai rien,mais je peux faire la même manière avec ma fonction,donc là si je vais faire maintenant,
01:06:00 :Def,on va ajouter le Car,DB Session,Def, Add, Car,et donc là ça va être le modèle,et la personne,et donc là on va dire Car,modèle, égale modèle,et en fait je pense que pour la personne,il va falloir rentrer un ID,Person ID,Person ID,
01:06:38 :non c'est Owner ici,là Jean il ne va pas vouloir,parce qu'il existe déjà je pense,on va créer un autre,Michel, et on va dire Add Car,on va mettre une lambeau,et elle appartient à Jean,donc là normalement si je lance le script,si tout se passe bien,
01:07:06 :il a l'air d'être ok,et donc si je vais voir dans ma base de données,si je fais un refresh,donc j'ai bien une lambeau,qui appartient à 1,et en fait 1 quand vous allez voir dans personne,c'est bien Jean.
01:07:28 :Pas de soucis Ludo.Pas de soucis pour les gens qui s'en vont,que je vous dis pas de soucis dans le replay,c'est quand même assez intéressant,les ORM, vous pouvez dialoguer avec vos classes,et puis votre database,pensez-y à l'avenir,sachez que quand vous faites du Django,c'est ça qui se passe derrière,
01:07:58 :je ne sais pas si c'est un ORM spécifique Django,ou si c'est SQL Alchemy,c'est ça qui se passe derrière.Typiquement Pony,tu peux l'utiliser quand tu as un cas simple comme ça,tu pourrais avoir, je ne sais pas,si tu as une application par exemple,une application avec une interface graphique,
01:08:25 :et que tu veux créer des to-do list,tu pourrais avoir une classe qui gère tes to-do,et puis ta database,si tu as une database qui récupère tous tes to-do,parce que forcément tes tâches, etc,tu veux les stocker dans une base de données,tu peux utiliser Pony,si tu fais un truc en local,
01:08:49 :ça peut très bien marcher,et même après j'ai utilisé Pony pour une base de données locale,mais Pony peut se connecter facilement à du MySQL,sans problème.
01:09:01 :Ok, merci Gabriel pour la précision.Mais c'est vraiment cool,j'avais lu une fois pour un article,et j'avais complètement zappé lui.Oui, c'est super simple en fait,moi j'aime bien ce genre de petit ORM,ce n'est pas trop compliqué,après SQL Alchemy c'est bien parce que,tu peux très bien le faire avec SQL Alchemy,
01:09:29 :ça marche très bien,mais quand tu as des trucs comme ça,des petites applications avec des classes perso,je trouve que ça marche bien.Il y a juste ce qui me ferait bizarre,c'est que tu as dû utiliser le DB Session,et je ne sais pas pourquoi.
01:09:50 :C'est normal,c'est comme s'il te créait un Context Manager,il t'ouvre une session avec ta base de données,et donc là ta connexion est ouverte,et c'est à partir de là que quand tu fais Add Person,il utilise le Context Manager qui est encapsulé dans le décorateur.
01:10:08 :En fait tu vois ici quand on fait Add Person,c'est comme si il avait faitDB Session égale DB.Session,et après il avait faitwith DB.Session,
01:10:23 :et il aurait fait,il aurait ajouté dans le truc.Je ne sais pas comment ils font.Je ne sais pas comment ils font dans la doc,pour arriver, je ne comprends pas,il y a une liste, P1 égale Person, M égale J, H égale 20,sans DB Session, mais je ne sais pas comment ils arrivent à faire ça.
01:10:44 :Je ne sais pas comment ils font.Moi quand j'ai testé ça a foiré.Je pense qu'ils ont oublié un truc,parce que tu vois ils font un commit,donc je pense qu'il y a un trucqui n'est pas écrit dans la doc,qu'ils doivent commencer une session.
01:11:05 :Par contre tu as les requêtes, c'est carrément différent de Django.Après tu peux aussi balancer des requêtes SQL classiques.C'est ce que je vois.Ok, c'est sympa.
01:11:20 :Bon ben voilà,pour ce soir,je pense qu'on peut s'arrêter là,à moins que vous ayez des questions.Oui Sylla ?C'est juste une petite question,c'est la différence entre,surtout les quarks sur Python,les args ça j'utilise beaucoup pour les arguments,c'est à dire avec mes fonctions, les args
01:11:56 :ça récupère tout ce qui est argument, paramètres, machin dans la requête,mais les quarks je ne comprends pas vraiment.Ah les quarks ?Les quarks, oui.
01:12:08 :Ok, si tu veux je peux préparer un petit trucpour la prochaine session, je peux faire un truc propre,parce queen fait les quarks, il faut le voir commeles args, sauf que c'est destrucs nommés, tu vois, quand tu as un argumentdans une fonction qui est en position,
01:12:29 :tu fais def function a, b,ça c'est les args, par contre les quarks, ça veut diretout ce qui est name, égal, machin,et je peux réfléchir un petit exemple, un petit exercice autourdes args et des quarks si tu veux.
Aucune occurrence trouvée pour « ».