{"id":489,"date":"2026-01-19T10:00:37","date_gmt":"2026-01-19T09:00:37","guid":{"rendered":"https:\/\/buildmytech.fr\/?p=489"},"modified":"2026-01-22T11:28:58","modified_gmt":"2026-01-22T10:28:58","slug":"dataelectionsscenario-premiere-brique","status":"publish","type":"post","link":"https:\/\/buildmytech.fr\/index.php\/2026\/01\/19\/dataelectionsscenario-premiere-brique\/","title":{"rendered":"DataElectionsScenario : premi\u00e8re brique"},"content":{"rendered":"<!-- wp:paragraph -->\r\n<p>Dans le pr\u00e9c\u00e9dent article, je vous ai pr\u00e9sent\u00e9 mon premier gros produit en cours de r\u00e9alisation. Il est compos\u00e9 de plusieurs briques permettant de faire des <strong><span style=\"color: #e6af2a;\">simulations<\/span> <\/strong>d\u2019\u00e9lections l\u00e9gislatives avec un mode d\u2019\u00e9lections diff\u00e9rentes comme la proportionnelle nationale ou une \u00e9lection \u00e0 un tour. Elles utiliseront les r\u00e9sultats des \u00e9lections de 2022 et de 2024.<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>Comme expliqu\u00e9 pr\u00e9c\u00e9demment, ce produit est compos\u00e9 de plusieurs briques ayant chacun un r\u00f4le particulier. Aujourd\u2019hui, je vous propose de vous pr\u00e9senter la brique <strong><span style=\"color: #e6af2a;\">DataElectionsScenario<\/span><\/strong>. Son r\u00f4le est de rendre exploitable les donn\u00e9es <strong><span style=\"color: #e6af2a;\">OpenData<\/span> <\/strong>fournies par l\u2019Etat Fran\u00e7ais. L\u2019application va les utiliser pour cr\u00e9er des nouvelles donn\u00e9es utilisables par les autres briques de notre produit.<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>Pour commencer, je vous propose de vous expliquer en d\u00e9tail comment les donn\u00e9es <strong><span style=\"color: #e6af2a;\">OpenData<\/span> <\/strong>sont trait\u00e9es et transform\u00e9es.<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:spacer -->\r\n<div class=\"wp-block-spacer\" style=\"height: 100px;\" aria-hidden=\"true\">\u00a0<\/div>\r\n<!-- \/wp:spacer -->\r\n\r\n<!-- wp:heading {\"level\":1} -->\r\n<h1 class=\"wp-block-heading\">Les donn\u00e9es\u00a0: le nerf de la guerre.<\/h1>\r\n<!-- \/wp:heading -->\r\n\r\n<!-- wp:heading -->\r\n<h2 class=\"wp-block-heading\">Trouver les donn\u00e9es<\/h2>\r\n<!-- \/wp:heading -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>Pour ce projet, mais aussi pour cette application, j\u2019ai besoin de trouver les donn\u00e9es qui vont me permettre de faire les simulations. Sans elles, pas de donn\u00e9es, pas d\u2019applications pas de produits.<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>En France, l\u2019\u00e9tat met \u00e0 disposition plein de donn\u00e9es publiques exploitables par n\u2019importe qui, sur le site <strong><span style=\"color: #0764f0;\"><a style=\"color: #0764f0;\" href=\"https:\/\/www.data.gouv.fr\/\">datagouv<\/a><\/span><\/strong>. Elles peuvent \u00eatre au format xlsv ou json mais aussi \u00eatre fournies par une API.<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>Dans mon cas, nous avons besoin des donn\u00e9es des <span style=\"color: #e6af2a;\"><strong>\u00e9lections l\u00e9gislatives 2022<\/strong><\/span> et <strong><span style=\"color: #e6af2a;\">2024<\/span><\/strong>. Pour cela, on peut les trouver \u00e0 cette adresse\u00a0:<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:list -->\r\n<ul class=\"wp-block-list\"><!-- wp:list-item -->\r\n<li><strong><span style=\"color: #0764f0;\"><a style=\"color: #0764f0;\" href=\"https:\/\/www.data.gouv.fr\/datasets\/elections-legislatives-des-12-et-19-juin-2022-resultats-definitifs-du-premier-tour\/\">2022<\/a><\/span><\/strong><\/li>\r\n<!-- \/wp:list-item -->\r\n\r\n<!-- wp:list-item -->\r\n<li><strong><span style=\"color: #0764f0;\"><a style=\"color: #0764f0;\" href=\"https:\/\/www.data.gouv.fr\/datasets\/elections-legislatives-des-30-juin-et-7-juillet-2024-resultats-definitifs-du-1er-tour\/\">2024<\/a><\/span><\/strong><\/li>\r\n<!-- \/wp:list-item --><\/ul>\r\n<!-- \/wp:list -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>Comme on peut le voir, pour le moment, j\u2019ai simplement utilis\u00e9 les donn\u00e9es du 1<sup>er<\/sup> tour, car celles du 2<sup>nd<\/sup> me sont inutiles. \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:heading -->\r\n<h2 class=\"wp-block-heading\">Exploiter les donn\u00e9es<\/h2>\r\n<!-- \/wp:heading -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>En \u00e9crivant cet article, je viens de me rendre compte que les donn\u00e9es dont j\u2019ai besoin peuvent \u00eatre obtenu sous le format json. Comme au d\u00e9but de ce projet, je ne m\u2019en \u00e9tais pas rendu compte, je suis parti sur le format <strong><span style=\"color: #e6af2a;\">xlsx<\/span> <\/strong>(format des excels de Microsoft).<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph {\"align\":\"left\"} -->\r\n<p class=\"has-text-align-left\">En analysant les donn\u00e9es de l'excel, on remarque que pour chaque ligne, on obtient ce sch\u00e9ma de donn\u00e9es.<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:image {\"id\":537,\"sizeSlug\":\"full\",\"linkDestination\":\"none\"} -->\r\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"841\" height=\"641\" class=\"wp-image-537\" src=\"https:\/\/buildmytech.fr\/wp-content\/uploads\/2026\/01\/Exploitation-Donnees-2.png\" alt=\"\" srcset=\"https:\/\/buildmytech.fr\/wp-content\/uploads\/2026\/01\/Exploitation-Donnees-2.png 841w, https:\/\/buildmytech.fr\/wp-content\/uploads\/2026\/01\/Exploitation-Donnees-2-300x229.png 300w, https:\/\/buildmytech.fr\/wp-content\/uploads\/2026\/01\/Exploitation-Donnees-2-768x585.png 768w, https:\/\/buildmytech.fr\/wp-content\/uploads\/2026\/01\/Exploitation-Donnees-2-81x62.png 81w\" sizes=\"auto, (max-width: 841px) 100vw, 841px\" \/><\/figure>\r\n<!-- \/wp:image -->\r\n\r\n<!-- wp:html -->\r\n<div class=\"wp-block-spacer\" style=\"height: 100px;\" aria-hidden=\"true\">\u00a0<\/div>\r\n<!-- \/wp:html -->\r\n\r\n<!-- wp:paragraph {\"className\":\"has-text-align-left\"} -->\r\n<p class=\"has-text-align-left\">\u00a0<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:heading {\"className\":\"wp-block-heading\"} -->\r\n<h2 class=\"wp-block-heading\">Imaginer les futures donn\u00e9es<\/h2>\r\n<!-- \/wp:heading -->\r\n\r\n<!-- wp:paragraph {\"className\":\"has-text-align-left\"} -->\r\n<p class=\"has-text-align-left\">\u00a0<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>Maintenant, nous pouvons cr\u00e9er les donn\u00e9es n\u00e9cessaires aux autres applications de notre produit.\u00a0<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>Les donn\u00e9es cr\u00e9\u00e9es par l\u2019explication seront en format <strong><span style=\"color: #e6af2a;\">JSON<\/span><\/strong>.\u00a0<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>\u00c0 la fin, l\u2019application dans le fichier JSON g\u00e9n\u00e9rera trois listes d\u2019entit\u00e9s primordiales pour l\u2019utilisation de la future <strong><span style=\"color: #e6af2a;\">API\u00a0<\/span><\/strong>:<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph {\"className\":\"has-text-align-left\"} -->\r\n<p class=\"has-text-align-left\">\u00a0<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:image {\"id\":509,\"className\":\"wp-block-image size-full\"} -->\r\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"961\" height=\"961\" class=\"wp-image-509\" src=\"https:\/\/buildmytech.fr\/wp-content\/uploads\/2026\/01\/Imaginer-les-futures-donnees-4.png\" alt=\"\" srcset=\"https:\/\/buildmytech.fr\/wp-content\/uploads\/2026\/01\/Imaginer-les-futures-donnees-4.png 961w, https:\/\/buildmytech.fr\/wp-content\/uploads\/2026\/01\/Imaginer-les-futures-donnees-4-300x300.png 300w, https:\/\/buildmytech.fr\/wp-content\/uploads\/2026\/01\/Imaginer-les-futures-donnees-4-150x150.png 150w, https:\/\/buildmytech.fr\/wp-content\/uploads\/2026\/01\/Imaginer-les-futures-donnees-4-768x768.png 768w, https:\/\/buildmytech.fr\/wp-content\/uploads\/2026\/01\/Imaginer-les-futures-donnees-4-81x81.png 81w\" sizes=\"auto, (max-width: 961px) 100vw, 961px\" \/><\/figure>\r\n<!-- \/wp:image -->\r\n\r\n<!-- wp:paragraph {\"className\":\"has-text-align-left\"} -->\r\n<p class=\"has-text-align-left\">\u00a0<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>Toutes les donn\u00e9es \u00e0 part les partis politiques proviennent de l'<strong><span style=\"color: #e6af2a;\">excel<\/span> <\/strong>dont on a parl\u00e9 pr\u00e9c\u00e9demment.<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph {\"className\":\"has-text-align-left\"} -->\r\n<p class=\"has-text-align-left\">\u00a0<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>Comme on le voit, chaque \u00e9lection est li\u00e9e \u00e0 une <strong><span style=\"color: #e6af2a;\">ann\u00e9e<\/span><\/strong>. Dans notre cas, on traite uniquement les \u00e9lections des ann\u00e9es 2022 et 2024.\u00a0<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>&nbsp;<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>Chaque parti est li\u00e9 \u00e0 une famille Politique. Par exemple Horizons, Modem et Ensemble ! (Majorit\u00e9 pr\u00e9sidentielle) font partis du Centre. Ne trouvant pas les donn\u00e9es des partis dont j\u2019avais besoin en OpenData, je me suis bas\u00e9 sur les donn\u00e9es du site du ministre de l\u2019Int\u00e9rieur pour faire une classe qui les charge en m\u00e9moire.<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph {\"className\":\"has-text-align-left\"} -->\r\n<p class=\"has-text-align-left\">\u00a0<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:image {\"id\":493,\"className\":\"wp-block-image size-full\"} -->\r\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"798\" height=\"664\" class=\"wp-image-493\" src=\"https:\/\/buildmytech.fr\/wp-content\/uploads\/2026\/01\/image.png\" alt=\"\" srcset=\"https:\/\/buildmytech.fr\/wp-content\/uploads\/2026\/01\/image.png 798w, https:\/\/buildmytech.fr\/wp-content\/uploads\/2026\/01\/image-300x250.png 300w, https:\/\/buildmytech.fr\/wp-content\/uploads\/2026\/01\/image-768x639.png 768w, https:\/\/buildmytech.fr\/wp-content\/uploads\/2026\/01\/image-81x67.png 81w\" sizes=\"auto, (max-width: 798px) 100vw, 798px\" \/><\/figure>\r\n<!-- \/wp:image -->\r\n\r\n<!-- wp:paragraph {\"className\":\"has-text-align-left\"} -->\r\n<p class=\"has-text-align-left\">\u00a0<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>On sait quelles sont les donn\u00e9es qu\u2019on exploite pour avoir les donn\u00e9es dont on aura besoin plus tard. Mais par quel moyen l\u2019application <span style=\"color: #e6af2a;\"><strong>DataElectionsScenario<\/strong> <\/span>transforme les donn\u00e9es de l\u2019<span style=\"color: #e6af2a;\"><strong>OpenData<\/strong> <\/span>pour g\u00e9n\u00e9rer ses propres donn\u00e9es.<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph {\"className\":\"has-text-align-left\"} -->\r\n<p class=\"has-text-align-left\">\u00a0<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>&nbsp;<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:heading {\"level\":1,\"className\":\"wp-block-heading\"} -->\r\n<h1 class=\"wp-block-heading\">Fonctionnement interne<\/h1>\r\n<!-- \/wp:heading -->\r\n\r\n<!-- wp:paragraph {\"className\":\"has-text-align-left\"} -->\r\n<p class=\"has-text-align-left\">Globalement, le fonctionnement de l\u2019application peut \u00eatre r\u00e9sum\u00e9 par ce sch\u00e9ma\u00a0:<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph {\"className\":\"has-text-align-left\"} -->\r\n<p class=\"has-text-align-left\">\u00a0<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>&nbsp;<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:image {\"id\":494,\"className\":\"wp-block-image size-full\"} -->\r\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"945\" height=\"306\" class=\"wp-image-494\" src=\"https:\/\/buildmytech.fr\/wp-content\/uploads\/2026\/01\/image-1.png\" alt=\"\" srcset=\"https:\/\/buildmytech.fr\/wp-content\/uploads\/2026\/01\/image-1.png 945w, https:\/\/buildmytech.fr\/wp-content\/uploads\/2026\/01\/image-1-300x97.png 300w, https:\/\/buildmytech.fr\/wp-content\/uploads\/2026\/01\/image-1-768x249.png 768w, https:\/\/buildmytech.fr\/wp-content\/uploads\/2026\/01\/image-1-81x26.png 81w\" sizes=\"auto, (max-width: 945px) 100vw, 945px\" \/><\/figure>\r\n<!-- \/wp:image -->\r\n\r\n<!-- wp:paragraph {\"className\":\"has-text-align-left\"} -->\r\n<p class=\"has-text-align-left\">Tout se d\u00e9roule en trois \u00e9tapes\u00a0:<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph {\"className\":\"has-text-align-left\"} -->\r\n<p class=\"has-text-align-left\">\u00a0<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:list {\"ordered\":true} -->\r\n<ol class=\"wp-block-list\"><!-- wp:list-item -->\r\n<li><span style=\"color: #e6af2a;\"><strong>R\u00e9cup\u00e9ration<\/strong> <\/span>des donn\u00e9es \u00e0 partir d\u2019un excel<\/li>\r\n<!-- \/wp:list-item -->\r\n\r\n<!-- wp:list-item -->\r\n<li><span style=\"color: #e6af2a;\"><strong>Transformation<\/strong> <\/span>des donn\u00e9es dans un nouveau format et un nouveau mod\u00e8le<\/li>\r\n<!-- \/wp:list-item -->\r\n\r\n<!-- wp:list-item -->\r\n<li><span style=\"color: #e6af2a;\"><strong>Sauvegarde<\/strong> <\/span>des nouvelles donn\u00e9es dans un fichier Json<\/li>\r\n<!-- \/wp:list-item --><\/ol>\r\n<!-- \/wp:list -->\r\n\r\n<!-- wp:paragraph {\"className\":\"has-text-align-left\"} -->\r\n<p class=\"has-text-align-left\">\u00a0<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:heading {\"className\":\"wp-block-heading\"} -->\r\n<h2 class=\"wp-block-heading\">R\u00e9cup\u00e9ration des donn\u00e9es<\/h2>\r\n<!-- \/wp:heading -->\r\n\r\n<!-- wp:paragraph {\"className\":\"has-text-align-left\"} -->\r\n<p class=\"has-text-align-left\">\u00a0Le programme charge en <span style=\"color: #e6af2a;\"><strong>m\u00e9moire<\/strong> <\/span>les excels gr\u00e2ce aux chemins indiqu\u00e9s dans le code. Pour l\u2019instant, ils sont marqu\u00e9s en dur, mais demain ils pourraient \u00eatre mis dans un <span style=\"color: #e6af2a;\"><strong>fichier de configuration<\/strong><\/span> ou mis en argument dans la ligne de commande qui lance le programme.<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph {\"className\":\"has-text-align-left\"} -->\r\n<p class=\"has-text-align-left\">\u00a0<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:heading {\"className\":\"wp-block-heading\"} -->\r\n<h2 class=\"wp-block-heading\">Transformation des donn\u00e9es<\/h2>\r\n<!-- \/wp:heading -->\r\n\r\n<!-- wp:paragraph {\"className\":\"has-text-align-left\"} -->\r\n<p class=\"has-text-align-left\">\u00a0<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>Pour ce nouveau mod\u00e8le de donn\u00e9es, il y a trois nouvelles entit\u00e9s \u00e0 cr\u00e9er :<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:list -->\r\n<ul class=\"wp-block-list\"><!-- wp:list-item -->\r\n<li>Elections<\/li>\r\n<!-- \/wp:list-item -->\r\n\r\n<!-- wp:list-item -->\r\n<li>D\u00e9partements<\/li>\r\n<!-- \/wp:list-item -->\r\n\r\n<!-- wp:list-item -->\r\n<li>Partis politiques<\/li>\r\n<!-- \/wp:list-item --><\/ul>\r\n<!-- \/wp:list -->\r\n\r\n<!-- wp:spacer {\"height\":\"35px\"} -->\r\n<div class=\"wp-block-spacer\" style=\"height: 35px;\" aria-hidden=\"true\">\u00a0<\/div>\r\n<!-- \/wp:spacer -->\r\n<h3 class=\"wp-block-heading\">Elections<\/h3>\r\n<!-- wp:paragraph -->\r\n<p>Comme expliqu\u00e9 juste avant, les <span style=\"color: #e6af2a;\"><strong>Elections<\/strong> <\/span>sont constitu\u00e9es d\u2019une ann\u00e9e d\u2019\u00e9lections et d\u2019une liste de circonscriptions.<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph {\"className\":\"has-text-align-left\"} \/-->\r\n\r\n<!-- wp:paragraph -->\r\n<p>Chaque ligne correspond \u00e0 une <span style=\"color: #e6af2a;\"><strong>circonscription<\/strong><\/span>.<\/p>\r\n<p class=\"has-text-align-left\"><!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph --><\/p>\r\n<p>Tout d'abord voici les donn\u00e9es issues d'une ligne de la lecture d'Excel.<\/p>\r\n<p class=\"has-text-align-left\"><!-- \/wp:paragraph -->\r\n\r\n<!-- wp:image {\"id\":513,\"sizeSlug\":\"full\",\"linkDestination\":\"none\"} --><\/p>\r\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"945\" height=\"111\" class=\"wp-image-513\" src=\"https:\/\/buildmytech.fr\/wp-content\/uploads\/2026\/01\/image-4.png\" alt=\"\" srcset=\"https:\/\/buildmytech.fr\/wp-content\/uploads\/2026\/01\/image-4.png 945w, https:\/\/buildmytech.fr\/wp-content\/uploads\/2026\/01\/image-4-300x35.png 300w, https:\/\/buildmytech.fr\/wp-content\/uploads\/2026\/01\/image-4-768x90.png 768w, https:\/\/buildmytech.fr\/wp-content\/uploads\/2026\/01\/image-4-81x10.png 81w\" sizes=\"auto, (max-width: 945px) 100vw, 945px\" \/><\/figure>\r\n<p class=\"has-text-align-left\"><!-- \/wp:image -->\r\n\r\n<!-- wp:image {\"id\":515,\"sizeSlug\":\"large\",\"linkDestination\":\"none\"} --><\/p>\r\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"906\" class=\"wp-image-515\" src=\"https:\/\/buildmytech.fr\/wp-content\/uploads\/2026\/01\/Transformer-donnees-elections-1-1024x906.png\" alt=\"\" srcset=\"https:\/\/buildmytech.fr\/wp-content\/uploads\/2026\/01\/Transformer-donnees-elections-1-1024x906.png 1024w, https:\/\/buildmytech.fr\/wp-content\/uploads\/2026\/01\/Transformer-donnees-elections-1-300x265.png 300w, https:\/\/buildmytech.fr\/wp-content\/uploads\/2026\/01\/Transformer-donnees-elections-1-768x679.png 768w, https:\/\/buildmytech.fr\/wp-content\/uploads\/2026\/01\/Transformer-donnees-elections-1-81x72.png 81w, https:\/\/buildmytech.fr\/wp-content\/uploads\/2026\/01\/Transformer-donnees-elections-1.png 1340w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\r\n<p class=\"has-text-align-left\"><!-- \/wp:image -->\r\n\r\n<!-- wp:paragraph --><\/p>\r\n<p>&nbsp;<\/p>\r\n<p class=\"has-text-align-left\"><!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph --><\/p>\r\n<p>En faisant cette op\u00e9ration dans chaque liste, on obtient les donn\u00e9es de toutes les circonscriptions d'une \u00e9lection.<\/p>\r\n<p class=\"has-text-align-left\"><!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph {\"className\":\"has-text-align-left\"} --><\/p>\r\n<p class=\"has-text-align-left\"><!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph --><\/p>\r\n<p class=\"has-text-align-left\"><!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph --><\/p>\r\n<p>Maintenant, on peut construire, les donn\u00e9es \u00e9lections en :<\/p>\r\n<p class=\"has-text-align-left\"><!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph {\"className\":\"has-text-align-left\"} --><\/p>\r\n<p class=\"has-text-align-left\"><!-- \/wp:paragraph -->\r\n\r\n<!-- wp:list {\"ordered\":true} --><\/p>\r\n<ol class=\"wp-block-list\"><!-- wp:list-item -->\r\n<li>Ajoutant l\u2019ann\u00e9e r\u00e9cup\u00e9r\u00e9e de la configuration et li\u00e9 au fichier qu\u2019on parse<\/li>\r\n<li>Ajoutant la liste des circonscriptions<\/li>\r\n<\/ol>\r\n<p class=\"has-text-align-left\"><!-- \/wp:list-item -->\r\n\r\n<!-- wp:heading {\"level\":3} --><\/p>\r\n<h3 class=\"wp-block-heading\">D\u00e9partements<\/h3>\r\n<p class=\"has-text-align-left\"><!-- \/wp:heading -->\r\n\r\n<!-- wp:paragraph --><\/p>\r\n<p>Comme les d\u00e9partements sont immuables, on va juste les r\u00e9cup\u00e9rer \u00e0 partir d\u2019un seul fichier excel \u00e0 analyser.<\/p>\r\n<p class=\"has-text-align-left\"><!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph --><\/p>\r\n<p>Dans chaque fichier excel, les donn\u00e9es li\u00e9es aux d\u00e9partements se trouvent dans les deux premi\u00e8res colonnes. Pour construire une liste de tous les d\u00e9partements existants, on passe par ces \u00e9tapes :<\/p>\r\n<p class=\"has-text-align-left\"><!-- \/wp:paragraph -->\r\n\r\n<!-- wp:table {\"hasFixedLayout\":false,\"className\":\"is-style-stripes\"} --><\/p>\r\n<figure class=\"wp-block-table is-style-stripes\">\r\n<table>\r\n<tbody>\r\n<tr>\r\n<td><strong>Ordre<\/strong><\/td>\r\n<td><strong>Etape<\/strong><\/td>\r\n<\/tr>\r\n<tr>\r\n<td><strong>1<\/strong><\/td>\r\n<td>On parcourt ligne par ligne<\/td>\r\n<\/tr>\r\n<tr>\r\n<td><strong>2<\/strong><\/td>\r\n<td>On lit les deux premi\u00e8res colonnes<\/td>\r\n<\/tr>\r\n<tr>\r\n<td><strong>3<\/strong><\/td>\r\n<td>On construit le d\u00e9partement<\/td>\r\n<\/tr>\r\n<tr>\r\n<td><strong>4a<\/strong><\/td>\r\n<td>Si il n'existe pas dans la liste des d\u00e9partements qu'on constitue, on le rajoute<\/td>\r\n<\/tr>\r\n<tr>\r\n<td><strong>4b<\/strong><\/td>\r\n<td>Si il existe dans la liste des d\u00e9partements qu'on constitute, on passe \u00e0 l'\u00e9tape 5<\/td>\r\n<\/tr>\r\n<tr>\r\n<td><strong>5<\/strong><\/td>\r\n<td>S\u2019il reste encore des lignes on repasse \u00e0 l\u2019\u00e9tape 1 sinon le programme a termin\u00e9.<\/td>\r\n<\/tr>\r\n<\/tbody>\r\n<\/table>\r\n<\/figure>\r\n<p class=\"has-text-align-left\"><!-- \/wp:table -->\r\n\r\n<!-- wp:paragraph --><\/p>\r\n<p>La construction des donn\u00e9es li\u00e9es aux \u00e9lections et des donn\u00e9es li\u00e9es aux d\u00e9partements nous oblige \u00e0 parcourir plusieurs fois l\u2019excel. Pour des soucis d\u2019optimisation, on pourrait tout faire en m\u00eame temps. Cependant, comme on ne cherche pas \u00e0 optimiser l\u2019ex\u00e9cution du programme, mais \u00e0 avoir une ex\u00e9cution d\u2019un programme facile \u00e0 comprendre, l'optimisation n'a pas \u00e9t\u00e9 mise en place.<\/p>\r\n<p class=\"has-text-align-left\"><!-- \/wp:paragraph -->\r\n\r\n<!-- wp:heading {\"level\":3} --><\/p>\r\n<h3 class=\"wp-block-heading\">Partis<\/h3>\r\n<p class=\"has-text-align-left\"><!-- \/wp:heading -->\r\n\r\n<!-- wp:paragraph --><\/p>\r\n<p>Pour les partis politiques, ses objets sont construits en dur dans le programme. Pourquoi avoir choisi cette solution triviale\u00a0?<\/p>\r\n<p class=\"has-text-align-left\"><!-- \/wp:paragraph -->\r\n\r\n<!-- wp:list {\"ordered\":true} --><\/p>\r\n<ol class=\"wp-block-list\"><!-- wp:list-item -->\r\n<li>Rapidit\u00e9<\/li>\r\n<!-- \/wp:list-item -->\r\n\r\n<!-- wp:list-item -->\r\n<li>Flemme de chercher un document opendata regroupant les donn\u00e9es dont j\u2019avais besoin et de l\u2019int\u00e9grer ensuite dans le workflow<\/li>\r\n<li>Besoin d\u2019ajouter des donn\u00e9es custom<\/li>\r\n<\/ol>\r\n<p class=\"has-text-align-left\"><!-- \/wp:list-item -->\r\n\r\n<!-- wp:heading --><\/p>\r\n<h2 class=\"wp-block-heading\">Sauvegarder nouvelles donn\u00e9es<\/h2>\r\n<p class=\"has-text-align-left\"><!-- \/wp:heading -->\r\n\r\n<!-- wp:paragraph --><\/p>\r\n<p>Apr\u00e8s avoir obtenu ces nouvelles donn\u00e9es, le programme doit\u00a0transformer cet ensemble d\u2019objets pythons en un objet \u00ab\u00a0Results_Elections\u00a0\u00bb au format \u00ab\u00a0Json\u00a0\u00bb en passant par ces \u00e9tapes :<\/p>\r\n<p class=\"has-text-align-left\"><!-- \/wp:paragraph -->\r\n\r\n<!-- wp:table {\"hasFixedLayout\":false,\"className\":\"is-style-stripes\"} --><\/p>\r\n<figure class=\"wp-block-table is-style-stripes\">\r\n<table>\r\n<tbody>\r\n<tr>\r\n<td>Ordre<\/td>\r\n<td>Etapes<\/td>\r\n<\/tr>\r\n<tr>\r\n<td>1<\/td>\r\n<td>Transformer l\u2019objet python Elections en objet Json<\/td>\r\n<\/tr>\r\n<tr>\r\n<td>2<\/td>\r\n<td>Transformer l\u2019objet python D\u00e9partements en objet Json<\/td>\r\n<\/tr>\r\n<tr>\r\n<td>3<\/td>\r\n<td>Transformer l\u2019objet python Parties en objet Json<\/td>\r\n<\/tr>\r\n<tr>\r\n<td>4<\/td>\r\n<td>Construire un objet Results_Elections au format Json ayant pour attributs <span style=\"color: #e6af2a;\"><strong>Elections<\/strong><\/span>, <strong><span style=\"color: #e6af2a;\">Departments<\/span> <\/strong>et <strong><span style=\"color: #e6af2a;\">Partis<\/span><\/strong>.<\/td>\r\n<\/tr>\r\n<\/tbody>\r\n<\/table>\r\n<\/figure>\r\n<p class=\"has-text-align-left\"><!-- \/wp:table -->\r\n\r\n<!-- wp:paragraph --><\/p>\r\n<p>Apr\u00e8s avoir obtenu ce nouvel objet json, le programme va cr\u00e9er un fichier json et \u00e9crire cet objet dedans. Ce nouveau fichier sera dans le path indiqu\u00e9 dans la ligne de commande d\u2019ex\u00e9cution de ce programme.<\/p>\r\n<p class=\"has-text-align-left\"><!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph --><\/p>\r\n<p>Apr\u00e8s avoir explor\u00e9 quel \u00e9tait le fonctionnel de cette application, il serait int\u00e9ressant de comprendre techniquement comment cette application fonctionne.<\/p>\r\n<p class=\"has-text-align-left\"><!-- \/wp:paragraph -->\r\n\r\n<!-- wp:heading {\"level\":1} --><\/p>\r\n<h1 class=\"wp-block-heading\">Et techniquement\u00a0?<\/h1>\r\n<p class=\"has-text-align-left\"><!-- \/wp:heading -->\r\n\r\n<!-- wp:paragraph --><\/p>\r\n<p>Tous les choix techniques sont expliqu\u00e9s simplement dans ce tableau.<\/p>\r\n<p class=\"has-text-align-left\"><!-- \/wp:paragraph -->\r\n\r\n<!-- wp:table {\"hasFixedLayout\":false} --><\/p>\r\n<figure class=\"wp-block-table\">\r\n<table>\r\n<tbody>\r\n<tr>\r\n<td>Sujets<\/td>\r\n<td>Explications<\/td>\r\n<\/tr>\r\n<tr>\r\n<td>Langage<\/td>\r\n<td>Ce programme a \u00e9t\u00e9 cod\u00e9 en <strong><span style=\"color: #e6af2a;\">Python<\/span><\/strong>. Il est de plus en plus \u00e0 la mode et peut \u00eatre utilis\u00e9 dans beaucoup de domaines (API, IA, Big Data\u2026).<br \/><br \/><\/td>\r\n<\/tr>\r\n<tr>\r\n<td>Type de programme<\/td>\r\n<td>Le programme d\u00e9velopp\u00e9 est une simple <span style=\"color: #e6af2a;\"><strong>ligne de commande<\/strong><\/span>. \u00a0<\/td>\r\n<\/tr>\r\n<tr>\r\n<td>Librairie<\/td>\r\n<td>Pour pouvoir manipuler les excels fourni par datagouv, j\u2019utilise la librairie <strong><span style=\"color: #e6af2a;\">Panda<\/span><\/strong>. Elle fait bien le job et r\u00e9pond au crit\u00e8re du projet.<br \/>J\u2019aurai pu ne pas l\u2019utiliser et coder ma propre librairie mais ayant un outil d\u00e9j\u00e0 fonctionnel et r\u00e9pondant d\u00e9j\u00e0 \u00e0 mes crit\u00e8res, ca aurait \u00e9t\u00e9 une perte de temps. \u00a0<\/td>\r\n<\/tr>\r\n<tr>\r\n<td>Pattern<\/td>\r\n<td>J\u2019ai utilis\u00e9 le pattern Adapter d\u00e9taill\u00e9 <span style=\"color: #0764f0;\"><strong><a style=\"color: #0764f0;\" href=\"https:\/\/refactoring.guru\/fr\/design-patterns\/adapter\">ici<\/a><\/strong><\/span>. Je voulais absolument isoler les sp\u00e9cificit\u00e9s des formats xlsx (pour Excel) et Json aux parties concern\u00e9es. Pour augmenter la maintenabilit\u00e9 d\u2019un projet, il faut \u00e9viter de coupler trop son code. \u00a0<\/td>\r\n<\/tr>\r\n<\/tbody>\r\n<\/table>\r\n<\/figure>\r\n<p class=\"has-text-align-left\"><!-- \/wp:table -->\r\n\r\n<!-- wp:paragraph --><\/p>\r\n<p>Concernant le python, je pourrai ajouter que personnellement ce n\u2019est pas forc\u00e9ment un langage qui me fait vibrer. Le typage dynamique m\u2019a provoqu\u00e9 des bugs bien relous \u00e0 corriger. Je pourrai utiliser les annotations pour rendre mon code plus clair, mais \u00e7a ne m\u2019emp\u00eacherait pas de faire encore des erreurs. Pour terminer, l\u2019absence d\u2019interface me d\u00e9sole aussi surtout quand on veut <strong><span style=\"color: #e6af2a;\">s\u00e9parer<\/span> <\/strong>proprement le code. Sur ce projet, cette architecture n\u2019a pas \u00e9t\u00e9 utilis\u00e9e.<\/p>\r\n<p class=\"has-text-align-left\"><!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph --><\/p>\r\n<p>M\u00eame si ce projet a \u00e9t\u00e9 termin\u00e9 et je suis content de l\u2019avoir fait, beaucoup de points \u00e0 l\u2019heure actuelle ne me plaisent pas et certains doivent \u00eatre retravaill\u00e9. Avec du recul, je pourrai encore <strong><span style=\"color: #e6af2a;\">am\u00e9liorer<\/span><\/strong> DataElectionsScenario. Prenons quelques minutes pour \u00e9changer dessus.<\/p>\r\n<p class=\"has-text-align-left\"><!-- \/wp:paragraph -->\r\n\r\n<!-- wp:heading {\"level\":1} --><\/p>\r\n<h1 class=\"wp-block-heading\">Am\u00e9liorons DataElectionsScenario<\/h1>\r\n<p class=\"has-text-align-left\"><!-- \/wp:heading -->\r\n\r\n<!-- wp:heading --><\/p>\r\n<h2 class=\"wp-block-heading\">Ex\u00e9cution<\/h2>\r\n<p class=\"has-text-align-left\"><!-- \/wp:heading -->\r\n\r\n<!-- wp:paragraph --><\/p>\r\n<p>A l\u2019heure actuelle pour le lancer, j\u2019<strong><span style=\"color: #e6af2a;\">ex\u00e9cute<\/span> <\/strong>cette <span style=\"color: #e6af2a;\"><strong>commande<\/strong> <\/span>python sur mon poste :<\/p>\r\n<p class=\"has-text-align-left\"><!-- \/wp:paragraph -->\r\n\r\n<!-- wp:code --><\/p>\r\n<pre class=\"wp-block-code\"><code>\u00a0<strong>main.py<\/strong> <em>chemin_o\u00f9_nouveaux_fichiers_seront_stock\u00e9s<\/em><\/code><\/pre>\r\n<p class=\"has-text-align-left\"><!-- \/wp:code -->\r\n\r\n<!-- wp:paragraph --><\/p>\r\n<p>Apr\u00e8s, j\u2019obtiens un fichier json que je d\u00e9place dans mon projet API pour pouvoir travailler dessus. Il permet aussi \u00e0 mon API de d\u00e9marrer.<\/p>\r\n<p class=\"has-text-align-left\"><!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph --><\/p>\r\n<p>M\u00eame si c\u2019est fonctionnel, il faudra rendre <strong><span style=\"color: #e6af2a;\">dynamique<\/span> <\/strong>cet ensemble surtout si j\u2019h\u00e9berge le tout dans le cloud.<\/p>\r\n<p class=\"has-text-align-left\"><!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph --><\/p>\r\n<p>Pour lancer ce workflow, je peux faire du <span style=\"color: #e6af2a;\"><strong>serverless<\/strong><\/span>. Par exemple, si j\u2019ajoute une nouvelle version de l\u2019excel dans un dossier h\u00e9berg\u00e9 sur le syst\u00e8me d\u2019h\u00e9bergement du fichier d\u2019un cloud provider comme <span style=\"color: #e6af2a;\"><strong>S3<\/strong> <\/span>pour AWS ou <strong><span style=\"color: #e6af2a;\">Azure Blob Storage<\/span><\/strong> sur Azure, une fonction serverless (<strong><span style=\"color: #e6af2a;\">AWS lambda<\/span><\/strong> pour AWS ou <strong><span style=\"color: #e6af2a;\">Azure Functions<\/span> <\/strong>pour Azure) se d\u00e9clenchera contenant le code de <strong><span style=\"color: #e6af2a;\">DataElectionsScenario<\/span> <\/strong>pour g\u00e9n\u00e9rer le nouveau fichier json et le d\u00e9poser pour alimenter notre API.<\/p>\r\n<p class=\"has-text-align-left\"><!-- \/wp:paragraph -->\r\n\r\n<!-- wp:heading --><\/p>\r\n<h2 class=\"wp-block-heading\">Rustine \u00e0 supprimer<\/h2>\r\n<p class=\"has-text-align-left\"><!-- \/wp:heading -->\r\n\r\n<!-- wp:paragraph --><\/p>\r\n<p>Pendant le d\u00e9veloppement, j\u2019ai eu un petit souci avec certaines cha\u00eenes de caract\u00e8res pr\u00e9sentes dans l'excel.<\/p>\r\n<p>La librairie \u00ab Panda \u00bb qui permet de lire les excels utilise \u00ab \u2018 \u00bb comme s\u00e9parateur. Quand un ensemble de mots a le \u00ab \u2018 \u00bb, mon programme n\u2019arrivait plus \u00e0 regrouper correctement toutes les donn\u00e9es dans un tableau.\u00a0Cette anomalie entra\u00eenera un <strong><span style=\"color: #e6af2a;\">\u00e9chec<\/span> <\/strong>de l'ex\u00e9cution du programme.<\/p>\r\n<p class=\"has-text-align-left\"><!-- \/wp:paragraph -->\r\n\r\n<!-- wp:image {\"id\":497,\"sizeSlug\":\"full\",\"linkDestination\":\"none\"} --><\/p>\r\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"945\" height=\"111\" class=\"wp-image-497\" src=\"https:\/\/buildmytech.fr\/wp-content\/uploads\/2026\/01\/image-3.png\" alt=\"\" srcset=\"https:\/\/buildmytech.fr\/wp-content\/uploads\/2026\/01\/image-3.png 945w, https:\/\/buildmytech.fr\/wp-content\/uploads\/2026\/01\/image-3-300x35.png 300w, https:\/\/buildmytech.fr\/wp-content\/uploads\/2026\/01\/image-3-768x90.png 768w, https:\/\/buildmytech.fr\/wp-content\/uploads\/2026\/01\/image-3-81x10.png 81w\" sizes=\"auto, (max-width: 945px) 100vw, 945px\" \/><\/figure>\r\n<p class=\"has-text-align-left\"><!-- \/wp:image -->\r\n\r\n<!-- wp:paragraph --><\/p>\r\n<p class=\"has-text-align-left\"><!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph --><\/p>\r\n<p>J\u2019avais deux solutions\u00a0:<\/p>\r\n<p class=\"has-text-align-left\"><!-- \/wp:paragraph -->\r\n\r\n<!-- wp:list {\"ordered\":true} --><\/p>\r\n<ol class=\"wp-block-list\"><!-- wp:list-item -->\r\n<li>Faire un <strong><span style=\"color: #e6af2a;\">algo<\/span> <\/strong>bien compliqu\u00e9 pour traiter ce \u00ab\u00a0\u2018\u00a0\u00bb se trouvant dans un groupe de mots.<\/li>\r\n<!-- \/wp:list-item -->\r\n\r\n<!-- wp:list-item -->\r\n<li>Comme les donn\u00e9es changent rarement, on peut facilement voir les mots qui auront des \u00ab \u2018 \u00bb. Comme ils sont peu \u00e0 le poss\u00e9der, on peut donc faire une <em><span style=\"color: #e6af2a;\">rustine<\/span> <\/em>pour traiter ces cas.\u00a0<\/li>\r\n<!-- \/wp:list-item --><\/ol>\r\n<p class=\"has-text-align-left\"><!-- \/wp:list -->\r\n\r\n<!-- wp:paragraph --><\/p>\r\n<p>Comme ce probl\u00e8me est bien localis\u00e9 et limit\u00e9, j\u2019ai d\u00e9cid\u00e9 pour le moment de prendre la solution 2. Ma priorit\u00e9 \u00e9tait d'avancer sur ce projet. J'ai donc modifi\u00e9 mon programme pour avant le traitement supprimer le \u00ab \u2018 \u00bb pour le remettre apr\u00e8s. Cependant, si un jour, je suis amen\u00e9 \u00e0 int\u00e9grer plus de fichiers excels pouvant avoir plus de noms de famille incorporant \u00ab \u2018 \u00bb, il faudra que je d\u00e9veloppe un algorithme pour traiter cette erreur. Pourquoi ? La rustine d\u00e9crite pr\u00e9c\u00e9demment se <strong><span style=\"color: #e6af2a;\">complexifiera<\/span> <\/strong>et la modifier deviendra de plus en plus compliqu\u00e9 avec un gros risque de <strong><span style=\"color: #e6af2a;\">r\u00e9gression<\/span><\/strong>.<\/p>\r\n<p class=\"has-text-align-left\"><!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph --><\/p>\r\n<p>Tout est question de <strong><span style=\"color: #e6af2a;\">curseur<\/span><\/strong>. Des fois mettre des rustines est la bonne solution, car le probl\u00e8me est minime et non prioritaire. En abuser ou les laisser ind\u00e9finiment \u00e0 cet endroit pourra entra\u00eener de gros probl\u00e8mes.<\/p>\r\n<p class=\"has-text-align-left\"><!-- \/wp:paragraph -->\r\n\r\n<!-- wp:heading --><\/p>\r\n<h2 class=\"wp-block-heading\">Architecture logicielle bancale<\/h2>\r\n<p class=\"has-text-align-left\"><!-- \/wp:heading -->\r\n\r\n<!-- wp:paragraph --><\/p>\r\n<p class=\"has-text-align-left\"><!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph --><\/p>\r\n<p>Comment organiser son logiciel pour pouvoir r\u00e9pondre \u00e0 ses besoins fonctionnels et faciliter sa maintenabilit\u00e9 ?<\/p>\r\n<p class=\"has-text-align-left\"><!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph --><\/p>\r\n<p>Voici l\u2019architecture logicielle de mon projet. Je la trouve bancale voir nulle donc je vous demanderai de ne pas \u00eatre trop dur dans votre jugement\u00a0:<\/p>\r\n<p class=\"has-text-align-left\"><!-- \/wp:paragraph -->\r\n\r\n<!-- wp:table {\"hasFixedLayout\":false} --><\/p>\r\n<figure class=\"wp-block-table\">\r\n<table>\r\n<tbody>\r\n<tr>\r\n<td>Couche<\/td>\r\n<td>Description<\/td>\r\n<\/tr>\r\n<tr>\r\n<td>main.py<\/td>\r\n<td>Point d\u2019entr\u00e9e du fichier<\/td>\r\n<\/tr>\r\n<tr>\r\n<td>usecases<\/td>\r\n<td>Repr\u00e9sente les actions m\u00e9tiers que l\u2019application permet de r\u00e9aliser sans aucune d\u00e9pendance avec des technologies ext\u00e9rieures<\/td>\r\n<\/tr>\r\n<tr>\r\n<td>domain<\/td>\r\n<td>Les entit\u00e9s m\u00e9tiers du projet<\/td>\r\n<\/tr>\r\n<tr>\r\n<td>Infrastructure<\/td>\r\n<td>G\u00e8re la partie technique de l\u2019application ici\u00a0: La manipulation des fichiers (lecture et \u00e9criture)Transformer les donn\u00e9es issues des fichiers en donn\u00e9es m\u00e9tiers<\/td>\r\n<\/tr>\r\n<tr>\r\n<td>OpenDatas<\/td>\r\n<td>Fichiers Excels<\/td>\r\n<\/tr>\r\n<\/tbody>\r\n<\/table>\r\n<\/figure>\r\n<p class=\"has-text-align-left\"><!-- \/wp:table -->\r\n\r\n<!-- wp:spacer --><\/p>\r\n<p class=\"has-text-align-left\"><!-- \/wp:spacer -->\r\n\r\n<!-- wp:heading {\"level\":3} --><\/p>\r\n<h3 class=\"wp-block-heading\">Pourquoi je la trouve bancale<\/h3>\r\n<p class=\"has-text-align-left\"><!-- \/wp:heading -->\r\n\r\n<!-- wp:paragraph --><\/p>\r\n<p>Cette architecture semble s\u2019inspirer sur de l\u2019architecture hexagonale sans en \u00eatre vraiment.<\/p>\r\n<p class=\"has-text-align-left\"><!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph --><\/p>\r\n<p>J\u2019avais deux choix pour architecturer cette application\u00a0:<\/p>\r\n<p class=\"has-text-align-left\"><!-- \/wp:paragraph -->\r\n\r\n<!-- wp:list {\"ordered\":true} --><\/p>\r\n<ol class=\"wp-block-list\"><!-- wp:list-item -->\r\n<li>Cette application ne poss\u00e8de pas de m\u00e9tiers. Elle convertit juste des donn\u00e9es A li\u00e9es \u00e0 un excel en des donn\u00e9es B li\u00e9es \u00e0 un Json. Une <strong><span style=\"color: #e6af2a;\">architecture ultra simple<\/span><\/strong> doit sans aucun lien avec l\u2019architecture hexagonale doit \u00eatre faite.<\/li>\r\n<!-- \/wp:list-item -->\r\n\r\n<!-- wp:list-item -->\r\n<li>Cette application poss\u00e8de bien un m\u00e9tier, car les donn\u00e9es A et les donn\u00e9es B sont une repr\u00e9sentation de mod\u00e8les m\u00e9tiers li\u00e9e aux \u00e9lections l\u00e9gislatives. Je peux donc faire une application avec une <strong><span style=\"color: #e6af2a;\">architecture hexagonale<\/span><\/strong> appel\u00e9e par une interface de commande.<\/li>\r\n<!-- \/wp:list-item --><\/ol>\r\n<p class=\"has-text-align-left\"><!-- \/wp:list -->\r\n\r\n<!-- wp:paragraph --><\/p>\r\n<p>Je n\u2019ai jamais r\u00e9ussi \u00e0 me d\u00e9partager et \u00e0 y aller pleinement. L'architecture actuelle de mon application se rapproche de la solution 1. Cette architecture me frustre et je ne suis pas satisfait de cette partie.<\/p>\r\n<p class=\"has-text-align-left\"><!-- \/wp:paragraph -->\r\n\r\n<!-- wp:heading {\"level\":3} --><\/p>\r\n<h3 class=\"wp-block-heading\">Pourquoi ne pas s\u2019occuper de ce probl\u00e8me\u00a0?<\/h3>\r\n<p class=\"has-text-align-left\"><!-- \/wp:heading -->\r\n\r\n<!-- wp:paragraph --><\/p>\r\n<p>Ce projet \u00e0 l\u2019heure actuelle est termin\u00e9. J\u2019ai peut-\u00eatre encore quelques heures de travail dessus pour d\u00e9velopper deux ou trois features.<\/p>\r\n<p class=\"has-text-align-left\"><!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph --><\/p>\r\n<p>Investir du temps sur une application qui ne sera pas appel\u00e9 \u00e0 \u00eatre trop modifi\u00e9e prochainement ne me semble pas \u00eatre une bonne id\u00e9e. De plus, c\u2019est en faisant des erreurs comme celle-l\u00e0 qu\u2019on apprend. Je sais qu\u2019\u00e0 l\u2019avenir, je ne m\u2019y prendrai diff\u00e9remment.<\/p>\r\n<p class=\"has-text-align-left\"><!-- \/wp:paragraph -->\r\n\r\n<!-- wp:heading {\"level\":1} --><\/p>\r\n<h1 class=\"wp-block-heading\">Conclusion<\/h1>\r\n<p class=\"has-text-align-left\"><!-- \/wp:heading -->\r\n\r\n<!-- wp:paragraph --><\/p>\r\n<p>En lisant cet article, vous avez :<\/p>\r\n<p class=\"has-text-align-left\"><!-- \/wp:paragraph -->\r\n\r\n<!-- wp:list {\"ordered\":true} --><\/p>\r\n<ol class=\"wp-block-list\"><!-- wp:list-item -->\r\n<li>vu quelles donn\u00e9es utilisait la brique <strong><span style=\"color: #e6af2a;\">DataElectionsScenario<\/span> <\/strong>pour pouvoir cr\u00e9er les siennes.<\/li>\r\n<!-- \/wp:list-item -->\r\n\r\n<!-- wp:list-item -->\r\n<li>compris son fonctionnement interne.<\/li>\r\n<!-- \/wp:list-item -->\r\n\r\n<!-- wp:list-item -->\r\n<li>analys\u00e9 les briques techniques la composant.<\/li>\r\n<!-- \/wp:list-item -->\r\n\r\n<!-- wp:list-item -->\r\n<li>lu la liste les am\u00e9liorations possibles pour cette brique. \u00a0<\/li>\r\n<!-- \/wp:list-item --><\/ol>\r\n<p class=\"has-text-align-left\"><!-- \/wp:list -->\r\n\r\n<!-- wp:paragraph --><\/p>\r\n<p>Apr\u00e8s avoir parl\u00e9 des briques en d\u00e9veloppement ou des projets, je vous proposerai pour la prochaine fois plut\u00f4t du contenu sur le TDD utilis\u00e9 pendant le d\u00e9veloppement de ce projet et du suivant.<\/p>\r\n<p class=\"has-text-align-left\"><!-- \/wp:paragraph --><\/p>\r\n<!-- \/wp:list --><!-- \/wp:list -->","protected":false},"excerpt":{"rendered":"<p>Dans le pr\u00e9c\u00e9dent article, je vous ai pr\u00e9sent\u00e9 mon premier gros produit en cours de r\u00e9alisation. Il est compos\u00e9 de plusieurs briques permettant de faire des simulations d\u2019\u00e9lections l\u00e9gislatives avec un mode d\u2019\u00e9lections diff\u00e9rentes comme la proportionnelle nationale ou une \u00e9lection \u00e0 un tour. Elles utiliseront les r\u00e9sultats des \u00e9lections de 2022 et de 2024. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":581,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5,7],"tags":[],"class_list":["post-489","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-projet","category-simulationelections"],"_links":{"self":[{"href":"https:\/\/buildmytech.fr\/index.php\/wp-json\/wp\/v2\/posts\/489","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/buildmytech.fr\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/buildmytech.fr\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/buildmytech.fr\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/buildmytech.fr\/index.php\/wp-json\/wp\/v2\/comments?post=489"}],"version-history":[{"count":78,"href":"https:\/\/buildmytech.fr\/index.php\/wp-json\/wp\/v2\/posts\/489\/revisions"}],"predecessor-version":[{"id":586,"href":"https:\/\/buildmytech.fr\/index.php\/wp-json\/wp\/v2\/posts\/489\/revisions\/586"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/buildmytech.fr\/index.php\/wp-json\/wp\/v2\/media\/581"}],"wp:attachment":[{"href":"https:\/\/buildmytech.fr\/index.php\/wp-json\/wp\/v2\/media?parent=489"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/buildmytech.fr\/index.php\/wp-json\/wp\/v2\/categories?post=489"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/buildmytech.fr\/index.php\/wp-json\/wp\/v2\/tags?post=489"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}