Chapitre 5.2 - Les Requêtes
1. Requêtes simples
1.1 🦝 Les prénoms donnés en France
On s'intéresse au fichier nat2021.csv regroupant des informations sur les prénoms donnés en France de 1900 à 2021. Ce fichier provient du site de l'INSEE.
Fichier volumineux
Le fichier initial comporte 648 616 lignes !
À vrai dire, il est si long que le moteur permettant de faire fonctionner ce site mettrait beaucoup trop de temps à le lire en entier...
On a donc limité le fichier original aux seules années postérieures à l'an 2000 (inclus).
Même allégé, on déconseille vivement d'afficher la totalité du tableau avec Python...
Les premières lignes de ce fichier sont :
📑 Données CSVsexe;prenom;annee;nombre
G;PRENOMS_RARES;2000;12583
G;PRENOMS_RARES;2001;13285
Remarques
PRENOMS_RARES
correspond à des prénoms donnés moins de 20 fois entre 1900 et 1945 ou entre 1946 et 2021. Tous ces prénoms sont regroupés pour chaque année. On doit donc comprendre qu'en 2000, 12 583 garçons ont reçu un « prénom rare ».
On remarquera de plus que tous les prénoms sont saisis en majuscule (avec potentiellement des accents comme dans LÉONIE
).
Repérer les bonnes informations
Observez l'extrait proposé et répondez aux questions suivantes :
- Quel est le séparateur utilisé ?
- Combien y-a-t-il de descripteurs ?
- Quels sont les types des descripteurs ? (entier, nombre décimal, chaîne de caractères...)
Solution
- Le séparateur est le point virgule
- Il y a quatre descripteurs
sexe
et prenom
sont des chaînes de caractères, annee
et nombre
des entiers.
A. Import(s)
On laisse ici le choix d'importer ce fichier sous forme d'une liste de listes ou d'une liste de dictionnaires. Vous pouvez aussi vous entraîner en réalisant les deux types d'imports !
Quel que soit le choix fait, la liste regroupant l'ensemble des entrées sera nommée prenoms
et les données seront typées.
On rappelle que la structure du fichier est la suivante :
Descripteur |
sexe |
prenom |
annee |
nombre |
Indice |
0 |
1 |
2 |
3 |
Type Python |
str |
str |
int |
int |
Import dans une liste de listes
Compléter le script ci-dessous afin d'importer les données dans une liste de listes.
Les données seront typées.
Il y a beaucoup de données : le script met un peu de temps à s'exécuter
.128013/-8eSwkc]_yuh1a0(f,=6 ;sot7.45)dmq:3pn9vib[Pgr2l050G0e0A0p0P0W0y0w0i0W0p0y0y0u010A0P0L010406050y0m0H0H0p0U0l040f0z0W0m0;0z0M050b0{0}0 110_0L04051h1a1k0b1h0_0G0P0O0)0+0-0/0+0M0T0m0p0T0e0c0L0l0A0n180w0n0P0T0n0W1M0n0A0@050!0Q0W0e1t0,0.011L1N1P1N0A1V1X1T0A0U1i1H0)140y0L0p0M0/0V011Z1v010s0$0e0M0p0H0e1T1^1`1 1#221X25270@0a0w0S0U0z0L0z0y0P170M0w0Y1?0U0U0e0i2s1a2a0M1i0b1H2F1/1;1:1U0G2c1w0P0M242p1T1q1s0*1!2P2R0M0z2V1T0L2y1i2D2F2,0`1_2t2X202#0U0~0W1T0p1K2y0s0/030k0k0i2$0e1P2!0z0c0o3a0@0o1a0p2-2:0^2/2b2=1#2@2_2{2}0e2 01313335372S3a0c1}040V3f3h1`3j2D2O013o0p2`1i2|0n2~3032340Y3y2#3A0K0@0K3F2C3i0_3J3m0/3M3O053Q3S3u3U3x2Q3z3b0D0@0D3%1b3)3k2;1u3n0z2^3N3q3R3s3T3w3W3_3Y3b0E0@0E3 2,3*2:3K3.493=3v3V364f393b0v0@0v4l413+443-463p3P3r3t4t3^383A0B0@0B4C3H4n3l4F3L4H484J4a4L3@4e4O3b0d0@0d4T2E4V432Y4Y473/3;4b3?4d4v4*0c0N0@0N4/2F2)0e2F2V2I0G1;2N3,014u2U1r1i562+3i3(3H054u5l2b0P0G0/322D3A0o3q5t5v4}3X4x3c0w2g0e5C4u5E5y1T0b3g424p0@562#0H0y5n2E0w5R5e0z0@0u5Y045!4E4?0?040R0j5*0_405o3J5B015w2:3A3C3:0w5{4(4~3`3B1~5I5K4N66605P5r4=200h0@0g2r0n5*5,4o5e0M0Q0@2n245*5#4X5/0r6w5-2?0@2e0e6B6p4X5%045)5^2E6x4?0y3C020I0m0z0A0x250A0V0q0V0o0C0i0y0O6T6V6X6H4W5.0@0t6n6P6D040H356:6g1#6K6M2.6C1#6R0@6-6W0x0U786/6N6f3K5/6@7e6o6;6`243V2Q0T6~3K717r5e76047c0x160s0c0d7y7u6y0@0F6^740/6i040,7J6I4?0M6E0P0i1L0e0U7F6=040J5?7r630k5x3b3!4J7)5L4w3Z68265J5|5D7;7,5O3g0w7 7k6 3-7T7V0P7X7Z206K0C883n0@2y0p0G3y8c0/6z7I7e5@734o7)7+0c3|7.5u7_7:4 3|5H7@6a4)668u3F80813K7M0s467P7l8d041)2R8O82010z0g0@2Q8U5S042285877e6_1#5/7$8n7(8w5}1`3A4i8v8D654g0c4i8B278{5M4h7}5+8I808,838R1M2R0k2)2n2y8#5$5(9i4X7S9b0T8T8+7K8W0@8b9r7Q6`0y1/0=8j018l7%9w5s8=7*5~4y5A9I8y664z907^64930c4z2F7~977 993L0@0O3N0e0m0U5X7j9#7t9.9s9n8S0e9e2m569C8a9C9n1^1P0A9C6z9C7w7y0x7E9G8V5/8m4m8;5C8s4Q8`8x6b8}4Q9R927{0cai8H9Z8J6q9%9)9+9-8p8P8k0@0R9C0H0P0@3Eaa7g0@5=9;9x709kaPaC3L6s042Qa2aL5ea4a!9max1Xaza3aEaGaI3Da,040jad41aL8r9K7C9Map4 4,aoak8E8}4,9X969Z9#9n9(a*9,a;aFa%4?aH3#a;aO2,av6JaSbmb9aWaYa;6Abg6`bb9*bdbw8-a-bB0/bi043$bE9DaNa@4Uaf7_8s51aj9Taq51b1bT4 bRatb89=5T2y5VaA5m9s9}bJ9n0p0L0L240Gbu9~a)bzb*5_aQaD04bM4:6w0b5q1l2*1a591a0A5bca2L2G0p1W57c85i5@0Y0!0$0y04.
Import dans une liste de dictionnaires
Compléter le script ci-dessous afin d'importer les données dans une liste de dictionnaires.
Les données seront typées.
Il y a beaucoup de données : le script met un peu de temps à s'exécuter
.128013/-8eSwkc]_yuh1a0(f,D=6 ;sot7.45)dmq:3pnRvib[Pgr2l050H0e0B0p0Q0X0z0x0i0X0p0z0z0v010B0Q0M010406050z0m0I0I0p0V0l040f0A0X0m0=0A0N050b0|0~10120`0M04051i1b1l0b1i0`0H0Q0P0*0,0.0:0,0N0U0m0p0U0e0c0M0l0B0n190x0n0Q0U0n0X1N0n0B0^050#0R0X0e1u0-0/011M1O1Q1O0B1W1Y1U0B0V1j1I0*150z0M0p0N0:0W011!1w010s0%0e0N0p0I0e1U1_1{201$231Y26280^0a0x0T0V0A0M0A0z0Q180N0x0Z1@0V0V0e0i2t1b2b0N1j0b1I2G1:1=1;1V0H2d1x0Q0N252q1U1r1t0+1#2Q2S0N0A2W1U0M2z1j2E2G2-0{1`2u2Y212$0V0 0X1U0p1L2z0s0:030k0k0i2%0e1Q2#0A0c0W0c0o0^0o1b0p2.2;0_2:2c2?1$2^2`2|2~0e3001323436382T3b3b0^0W3h3j1{3l2E2P013q0p2{1j2}0n2 3133350Z3A2$3C0L0^0L3G2D3k0`3K3o0:3N3P053R3T3w3V3z2R3B3c0E0^0E3(1c3*3m2=1v3p0A2_3O3s3S3u3U3y3X3`3Z3c0F0^0F402-3+2;3L3/4a3?3x3W374g3a3c0w0^0w4m423,453.473r3Q3t3v4u3_393C0C0^0C4D3I4o3n4G3M4I494K4b4M3^4f4P3c0d0^0d4U2F1m2+1b2W2J0H1=2O3-014v2V1s1j2*0e2,3k3)3I054v552c0Q0H0:332E3C3e4K5d5f4e4w4+3d1 2h0e5m4v3Y4y5q2G3i433L0h0N0^0Q0I2p0V0B572F0x5B4}0N5E040i0z0P5L3l41583K5l015g2;3C1~5k5e5$5n5w5)5r275t5-5v4x5:5z5b442Z3M0^532$0I0z5W5N4F5~0A0^0v655O4Y0@040S0j5W0`5Y4;5!5,5%1{3!3s5#4)5o3{0c3#0x5s5u4O6w3#5{6d5~0h0^0g2s0n6c672@0R0^2o255W6G216f0r6U6O3p0^2f0e6Z4p4}69046b6l5|3L0z5*020J0m0A0B0y260B0W0q0W0o0D5T0P6@6_6{6)4X5~6f0t6N6*4Y5R0I36795}216,6.2/6!0:6=0^766`0y0V7u786/6V1$7c7e7a2@0^253W2R0U7k3L7n7M4}7s047y0y170s0c0d7T7P6e0^0G7E7l1$6I040-7(4q6$0Q0i1M0e0V7!7b0^0K6j7M6t0k5h3|6s6o5.5_826z5=6B4*6w3}5{0x8f667f5~5R1Y2B0e0m7^6/8h7F1$7O8q7B3.0^747_7m0^0D8A6#040u7;0B0O0e0p0Z8p7p8i6W0^6Y7A7q5 04237=0Q7@8E0:7D8v8V5R4f0I2s8#8U8Q8t6a8$017R7T0y7Z8:8s8%7$7}8}2u7 810c4j5+8a6v4h965;28995/4i1U0b3i8g8r7)0:7+0s477.5P7H0N1:0e6(8)8;0:0A0g5F1a9z8~8W8l0B8n8O568V6f7|6/6k8P5c84954A985@6C9b4A889e9Z8b9#9i9k9l8g8w8W259w9y9T9n016f0S8@8_6^7v1{2S0e8|9^3L6f6i9G9_8u2-9m4q6Q042R5K92a68S8@5R9=2z9@9N9A9`0^9|aj7Q6?9 6{a19xa4ar9Ha77%9R7~9V5(3c4R9Y6u9g0c4R9%5?aP86aR9,049.9/8*9u9?8@9{9}ay776|0A0I0R2zaD5Zasa79s4Yab3kad5Pafaha)alaw7ga%apb26ga+7taza.a:a=bcb80jaH4naJ5m954-aO855p4-aT9faWbo3Ga!8f9:5R61a/64b4688Cam0^0p0M0M250Hb88Ta59t04ao9xb8bj427A0b5a4=544@511b0B4`b*2M2H0p1Xb%0b4^6k0Z0#0%0z04.
B. Requêtes
Dans ce qui suit, les imports ont été effectués et la liste prenoms
est chargée en mémoire. On peut désormais l'interroger afin d'en extraire des résultats.
On propose ci-dessous deux versions du même exercice selon le type de listes choisis : liste de listes ou de dictionnaires.
Requêtes dans une liste de listes
La première entrée de la liste est :
Python Console Session>>> prenoms[0]
['G', 'PRENOMS_RARES', 2000, 12583]
On peut sélectionner les entrées correspondant au prénom ADELINE
en faisant :
Pythonadeline = [entree for entree in prenoms if entree[1] == "ADELINE"]
Vous remarquerez que les prénoms sont saisis en majuscule dans le fichier csv
.
On peut de la même façon sélectionner les entrées correspondant au prénom "ANTOINE
en 2007
:
Pythonantoine_2007 = [entree for entree in prenoms if entree[1] == "ANTOINE" and entree[2] == 2007]
Compléter le script ci-dessous afin d'effectuer les requêtes demandées. prenoms
a déjà été chargé et correctement typé sous forme d'une liste de listes.
Il y a beaucoup de données : le script met un peu de temps à s'exécuter
.128013/-L8eSéwEkc]N_yuh1a0Df(F=6 ;COAsot745)dmàq3pnI9vib[Pgr2l050N0f0I0t0X0(0G0B0l0(0t0G0G0z010I0X0S010406050G0q0O0O0t0$0p040g0H0(0q0|0H0T050b13151719110S04051p1i1s0b1p110N0X0W0;0?0^0`0?0T0#0q0t0#0f0c0S0p0I0r1g0B0r0X0#0r0(1U0r0I0 050,0Y0(0f1B0@0_011T1V1X1V0I1%1)1#0I0$1q1P0;1c0G0S0t0T0`0%011+1D010w0.0f0T0t0O0f1#2022271-2a1)2d2f0 0a0B0!0$0H0S0H0G0X1f0T0B0*1~0$0$0f0l2A1i2i0T1q0b1P2N1`1|1{1$0N2k1E0X0T2c2x1#1y1A0=1,2X2Z0T0H2%1#0S2G1q2L2N2@12212B2)282-0$160(1#0t1S2G0w0`030o0o0l2.0f1X2,0H0c0A0c0s0 0B0s1i0t2^2{102`2j2}1-2 3133350f3701393b3d3f2!3i0c25040B0%3p3r223t2L2W013y0t321q340r36383a3c0*3I2-3K0R3m0R3Q2K3s113U3w0`3X3Z053#3%3E3)3H2Y3J3j0K3m0K3=1j3@3u2|1C3x0H303Y3A3$3C3(3G3+443-3j0L3m0L4a2@3^2{3V3|4k403F3*3e4q3h3j0A3m0A4w4c3_4f3{4h3z3!3B3D4E433g3K0J3m0J4N3S4y3v4Q3W4S4j4U4l4W424p4Z3j0e3m0e4(2M4*4e2*4-4i3}3 4m414o4G4^0c0V3m0V4}3T4z3`524T3~4V4n4F3,4I3k0u0 0s0u5f4 4A4.545m575o4H3K0s3l045G5w4d5y534C564X4@453k3M0s3P0b3q3?4)5L5i4B4:4D4?595S0s3/5I3;5X3R4~5#4,5%5l4;5n4Y5,475I495;5Z5?4P515_554=585p5F4t5I4v624b5!652~5z5O695D5a0s4K5I4M6g4x5@666l5(5P5*6b3j0s4#5I4%6u4O5h5^6y5`5)6a5E6D4`5I4|6I6i6K6x5N6z6n5}4r3k5c5I5e6V646X6k6Z6N6A6P5a0%5s046^5K6j4g6:685|5R6%0%5H746|6.6~5k705C6$5q0%3M7f774+6Y7a5B5Q5+735.0%5:5Y6h6-7j6/7l5{7c727e5 0%617t6v6}4R6 7m6B6Q3L6d0%6f7G6J7w794/6;6#7B3K0%6r7#7i507x7W7b7n6C3L6F0%6H7S6W7U7J7y6O6o5S0%6S7~7(5M7`6=7|736)0%6+7?7v7)7V5A7z7-7N0R6_8i815$6M7,7M5a0R5H8r8l6L7K8f8p5S0R3M8A8u7k7+7L6?8z5.0R7s5=5g7^5j8F8x8H6%0R5 8U8D7*8e7{7d3.6d0R7R8M5x8m8w8!7Z3j0R6r8;8X8d6m717o5q0R6F8}8@7_8Q8.8{3.6S0R6U8a8N8c918Z848#8:6)0R898M1t2=1i2%2Q0N1|2V5i4F2$1z1q2;0f2?3s631q4F9A2j0X0N0`3a2L5F3A9H9J8S5q3l0B2o0f9P859R1#627I010l5H030B0t5R0B0f0G0I0B0?9;0X9/1*2D0I0H1e9.9;9~2c1`0h9~3c2F9.2w0T0N229:0t0q0B2;0h2-0O0B020Q0q0H0I0C0F5Ralanap9C117u9F2B9O019K2{7!9N9IaC9QaF9T2e9VaI9XaF2N5Y9#0T0 9+5+9C0B6w280H0 0zaYa!1-0~040Z9Ca*3{0 a12G0fa)9#0k0 0w4ha_78a;04a?0fa^ayaZ9#0H0i0 2Ya 8OaU049yai0Gbd9b01a{040X0wbk4Aa=0T1`b4a/9#a,a.aya:010O0X5tbxb001a,0mbr5ia$040za(b6bC0G3Mataoaq0v0j0d0U0n0jbWavbBby0 bLayax2_3UaBaD223.aG9W9f0c3/aL2fb{8/b}9Z3qb:9Bb=aHb@0T3K5 5lb?aJ46269Uc194chaRaz3V9%0 9)222Z0f0o6^0u0J9-9/9;341X9^2C1*9{9}0:1)0:a?a30:a52G201gaabu0B0P9;02039i0Ccta33O0ucyawbH9Gc90o9L4sb`aOb|4tb aN8y6%6d3=aTaV0Td2cvcx6H2@b7bIbObRd7bCbzc-blbfb3b5dca`a|a~bSd0b2bua@bM4,b9bb1hdobIbfbh0H0Objdy8Obnbpdt66btbvdjc7bIdeb+bIbE0 5Wb;dPb-dJa#a%db3sd88OdT6`c*d6dO8ObKc,dRc.9Pc;3ic?c|5q4Kc`ck7.6r3Qc63S5Lcfd^6Fcec/aP3j4#d~c@c2e89!bIcq049)2mcLcA9:9=cE0I9_cH9|etcKa0drcO2EcRa8cU9:cX0*0:agbi0B0w0hbE0T2YdE6vd=aAc/d^6Se9d 7N4`eed{3KeYeibea|0.cLdZ1-dae:0`dQdWe,dqdMe?bmdm0$e}dhdrbwdFbldvbodxdkdz0 dBdDe}dHbqf5bse{dseU3Ve^d.bld*5vfm5id:fibNd#e}bU0 b)0C0yfCdffndYb/fGe6aE3j6)eZefcl5bciaMe!5afO5;e32Me5eWfM5rd`cgf(e%f*5uc4co9t9(1~0q0$0IcMcBer9@etcG0BcIex9 cMeAa44heDcTabd;e_eVd@f%5Gf)eb3k9ScjfQ7.ggcnbCek9)eH9~eKdCcP9|f^0:0x0R9 1?cR0B9|0B0O0HeR0Mgbfp0BfLb^6D3MfPe(gSfTc0gm7N5Vf/bCbf3cf@f_e}e=fw4,foe4dpdiffe f1dLflfa8Of7bcg.dKbg2Gbig@bofhg|dg0Y0 2nfGfu0 0xhd5^g`f4gcfHa-hh51d*3oftg/b-gMh0d!04020(apd$3Sd(fqbF045:hlhe04b.eThlgQcb6D5.gUf-b~glgV3khSfYfKf$gR3kcd34cfgi0s47f,h,cde+blgr9;1g0#f`eqcDf}eug0ew9~eocNg6a6cSa9gafJfmhP6cghb|0sc_hWf-c~h=cpf=gteJ0$ahgwh^1GgA9/0$0X2I0f2fcV0S1d0:2D5ugDbv0GhvhNgOic6De1h*eaifd}iih,e1il5$hbh_eSd%bCg-h8hmbAhJhifkhki%dl04a}f0hw3xhjdNhDi(baf8g_h22!fei_0`fgf1ha04hchs51a,hgjc2~i{ho28g:f!9#hqjja+hug,fB0#b*i*5ihqfsi-jdfIiMg;4ziO3ke8iRfV5,ediVifehc5h#geh%0seYjJgZ6pe$jNc2jUg$9#h@eQ3c1Ccw0ujUepcC9?cF9`i1eyg4a2i5g8i8bugNjEd?aId^0sfOjWhXk5gXc{f-fXaSejf=adafiqaiakambX0niy1c0@fFiahOh$hQ3L6_hTgi6^kajK73kyiY4,h@2wf@cYc!0Vc$d2c(6^jUk0jmjFkv7!5Hkzb|74kCjX7}kYkGh1j*kq0Gj-kSj501i)i;dXhnjgi`i/i|2MhE3Vbni@j1g?k;g~f9k@e`fdi$i}i=dIk;f2e|k`e@0 i,gOjxhGhrjAjkjCl8f6fyk;fAhykmap0n0U0D0E0d0F0gksjwdui 220Nl3f3k}f:htk_lq1-d*dVlmlShMlt3VdahCk~bClWj.6UlUljhLkTcojG7fiec2l@h/k!gTh!ibkW3j7rl^fRm2l{l_hZke8Oh@b30o0L0o0+0o5u0obE0(1)j:f|j?evcJg39-g5gxi6eEi9jDkUk2ca7!h)gPiSl_h.j!m4h;m9h?f=0N1g0T0hj`2G0B0L0Bc*0u9-9:iHmYeMgK0:130$0B0q2Z9*kP1*0x2Y0=0qcKcZc#m.m!kLc#adbviL4cl jSkw7Qm37.n8m6m4ikmMfjmcmemgmimk1)jsbPe}jllRh1l4lJ51l1dnnujhk|g,i g nyk{lah5lenE0`d*memYnnhzhBlOlhl.bJlkjpnKhGhIlYjBl:l5fBhA0Cl(3Nl*lo0u0onNlinUn$mzl=m03LiQmFkD7eiUfUk%73iXjQn5k3f%7;n97No9ncnajPnr28h@encvmim%9.h|j=f~j@mri3mueCa7g9j ktiNn`7~oa6@jZo1hXoCgpj(incGipirdDeMeO2YeRl;f#n67!k6n}o27e5codobkdog1-h@mPkPeJiEf m$c*m(9@0Bm+m-m/c%m=m@iEn35!o6mC8:kyk7f*8ik$hXp9oJfbi?e.okn/n;nJk=a%npnVn=lgg{l#5inwi^pkpqi:lcd9nCl7pzl9h3gwnHh7psi.ntn!lrlTpMlVhGjzpPl/l!pDlubPn+k 5ilxfCfElz0CnBd1lNlfjin=nqn-0 nZk1blfvpkbO02jun*e}jyn:c*nWn?pV5?p3c:f%8roD8zgkoGp8k)o5kuoW8:gTp7gi8Apap8l}nff;cr1~0O2w0Ga0f{h}mpi0osezj{mvj}eFoUc8qkb}hSqnb|8Kqqqom8o*0`h@iokioOgxqx2xmSqLkVqN8Uqc8TmIqfqomLqW9$f=0Dgukjis3cbu0X2c2,9:m}1`0-9:0Nm{kNm.0X1gq*mBq9h%8(q.8|ihq;qRneq@g(dCqy9.nnpZddponTpxlQp!4,punRprpWl$pBj1nGk;j7lwbVp)0clIpJ51l6rEpymAp_rxpTbDloq4bKq63tq8d^8;rj3.o0gYpbo4r*qjo7rhjIoZpbjMrmc28}j%kfqv0t0o0*0Y1emnqCoqmqg2otqHovi7qKozp^r|rgkw97r.8:oFr;p8e*qtkHoLeIq!eL0N0hs80,bueJ17j;1)gE1*fC0FrRp2r^p4b}oYh+qRo$mJ7.9is2e`s5s71erupnpOsliZnArLg^p.s/p{rIs=rKpkrMpwp/nTp;jnr$p:b-lls-4,frr%lsrGfxpYfzrOauaqsPrXhmr)fZ2N9E9l9z9n9w1i0I9qtt2T2O0t1(tq0b9oax0*0,0.0G04.
Requêtes dans une liste de dictionnaires
La première entrée de la liste est :
Python Console Session>>> prenoms[0]
{'sexe': 'G', 'prenom': 'PRENOMS_RARES', 'annee': 2000, 'nombre': 12583}
On peut sélectionner les entrées correspondant au prénom ADELINE
en faisant :
Pythonadeline = [entree for entree in prenoms if entree["prenom"] == "ADELINE"]
Vous remarquerez que les prénoms sont saisis en majuscule dans le fichier csv
.
On peut de la même façon sélectionner les entrées correspondant au prénom "ANTOINE
en 2007
:
Pythonantoine_2007 = [entree for entree in prenoms if entree["prenom"] == "ANTOINE" and entree["annee"] == 2007]
Compléter le script ci-dessous afin d'effectuer les requêtes demandées. prenoms
a déjà été chargé et correctement typé sous forme d'une liste de dictionnaires.
Il y a beaucoup de données : le script met un peu de temps à s'exécuter
.128013/-EeSécNyxuh0F= CO7)à3n9vib[Pr2L8wk]_1aDf(6;Asot45dmqpIgl050Z0e0W0N0A0)0U0q0h0)0N0U0U0p010W0A0$010406050U0l0!0!0N0E0j040f0V0)0l0}0V0x050b1416181a120$04051q1j1t0b1q120Z0A0z0=0@0_0{0@0x0(0l0N0(0e0c0$0j0W0m1h0q0m0A0(0m0)1V0m0W10050-0B0)0e1C0^0`011U1W1Y1W0W1(1*1$0W0E1r1Q0=1d0U0$0N0x0{0F011,1E010P0/0e0x0N0!0e1$2123281.2b1*2e2g100a0q0D0E0V0$0V0U0A1g0x0q0+1 0E0E0e0h2B1j2j0x1r0b1Q2O1{1}1|1%0Z2l1F0A0x2d2y1$1z1B0?1-2Y2!0x0V2(1$0$2H1r2M2O2^13222C2*292.0E170)1$0N1T2H0P0{030L0L0h2/0e1Y2-0V0c0M0n3j100q0M1j0N2_2|112{2k2~1.303234360e38013a3c3e3g2#3j3l26040q0F3q3s233u2M2X013z0N331r350m37393b3d0+3J2.3L0c0w3n0w3R2L3t123V3x0{3Y3!053$3(3F3*3I2Z3K3k0c0X3n0X3@1k3_3v2}1D3y0V313Z3B3%3D3)3H3,463.480Y3n0Y4d2^3`2|3W3~4n423G3+3f4t3i480R3n0R4z4f3{4i3}4k3A3#3C3E4H453h3/0t3n0t4Q3T4B3w4T3X4V4m4X4o4Z444s4$480H3n0H4+2N4-4h2+4:4l3 414p434r4J4{3l0y3n0y503U4C3|554W404Y4q4I3-4L3l3k103k5i524D4;575p5a5r4K3/0M0M5w3p0b3r3^4,4g5A564F594!4`475u3N0M3Q5M3S515Q5l4E4?4G4_5c5X3j3;040M3?5$5O5(4S545+5o4@5q4#5:0M4a5?4c5_4e5P5|2 5B5T4^5b5s5H4w5?4y684A5)4/5~586f5F5d3j4N5?4P6m4R5k6p6d5,5U5.6h480M4(5?4*6z6a6B5}6D5 5-6g5G6I4}5?4 6N5{6P6c5S6E6s624u5u5f5?5h6!5j4.6Q6(6S6F6U6u0F0n106}5y6o6@5n6r615W6,0c0F5J047a716b4j6^755E6+5t793N0F5#5N696#6?6%745D5V5/780F5=7A7e6$7g7v607j777l0F657L7D7t7F4=6_6*7J3/0F6j7W7O537u7R7i7x6H3M6w0F6y7q6n7f4U7h7w6G6V3M6K0F6M7.6A7P7;7G6T6t5:0F6X857Z5R816`837z6.0F6:7}6O7 5m7$7?6{5:0w6~048p885*6R7%7@6u0w7b8z8t6C7=7H7(7^3:3N0w7p5%6=7!7Q5C8F8x8o5=0w5^8h7s8O808l8R8n780w658)8C738#827k3/0w6j8=8,7#8Q8/7U480w6w8~8^8P6e767y7l0w6K97918!8`8b8:8}6X0w6Z8X8N898.9d8|3l0w6.9q5i1u2?1j2(2R0Z1}2W5l4I2%1A1r2=0e2@3t5`1r4I9J2k0A0Z0{3b2M5H3B9Q9S8%7l5J0q2p0e9Y8c9!1$5_7:010h7b030q0N5W0q0e0U0W0q0@9}0A9{1+2E0W0V1f9`9}a72d1{0ga73d2G9`2x0x0Z239|0N0l0q2=0g2.0!0q020#0l0V0W0S0T5Wauaway9L127r9O2C9X019T2|7V9W9RaL9ZaO9$2f9(aR9*aO2O5N9.0x109@5/9L0q72290V100pa+a-1.0 040C9La?3}10aa2H0ea=9.0J100P4kb27Ea}04a 0eb1aHa,9.0V0I102Zb88ja%049Har0Ubm8Z01b4040A0Pbt4Da~0x1{bda{9.a^a`aHa|010U3NaCax0Sbq0V0!bPaEbKbH100KbA5la/040pa;bfbLbN10bVaz0O0d0G0%0i0db/bGb901a^b!aHaG2`3VaKaM238;aP9)9e9p279%c99o3:9,3rc19Kc3aQc50x3/655oc4aS484aaU2gce95cpchaI3W9:109=232!0e0L6}0n0t9_9{9}351Ya12D1+a4a60;1*0;a ac0;ae2H211hajbD0q0v9}02039q0ScHac3P0ncMaFb{9Pcm0L9U4vc8aXca0c4wcwaW8S786j3@a$a(0xdhcJcL6M2^bgb|b%b*dmbLbIc~bubobcbedrb3b5b7b+dfbbbDb0b#4/bibk1idDb|bobS0!bsdN8jbwbydI5}bCbEdyckb|dtbXb|b-04b/cHbdb`d)8jb~dXa.a:dq3tdn8j0!0A6 c{dld$d=bZc}d;aJd0d23l6wcrd0aY4MccaVcy7)0cec5$cj3T5Qcsea0c6Kedej8H4(d9ew6ueu9-b|cE049=2ncZcO9|9~cS0Wa2cVa5eOcYa9dGc$2Fc)ahc,9|c/0+0;apbr0q0P0gd~0x2ZdS6ne70qeraN4|d4db7l4}ezd5cf6XdedOb50/cZd@1.dpf80{d(c2f4dFd!fbbvdB0EfidwdGbFdTbudKbxdMdzffdQe;d{bLdVbzfqbBfgdHe?5lfde3bud+b/0U0e0k0ed:fee404b fv8jdpd`3Td|fLbOavbQ0ofSfK3Wd?c0due@e9e_5ee{ctf^e e|3/6.3Reo2Neqf?c66I8qevf0czg6ehcxg9ek5va!cC9C9;1 0l0E0Wc!cPeMa0eOcU0qcWeSa8c!eVad4keYc+ake6fTe89Yes5If_ef5u9#cdge8HgLghbLeF9=e$a7e)bTc%a5gn0;0Q0wa81@c)0qa50q0!0Ve:0ugGf-e^g55YgMd65!gcdaf`3j3Nf3bn103dgmgofifafDfI10bJgHfEdxfibwb6flhe6pdZfGfXfrbjftfm10fxhlbkfCht4D0B102of;hf040QhIhqfFfphihJhhf-5lfMf)aydQf,epbYfVg^hp54b%020)ayf!2Nf$3Wd~105^hQ4/f/e=hig{co6I5=g8f}h h1eA63i0enf;h}5Hcq35csgN3jcvgQi25ucqeD8jgW9}1h0(gpeLcRgsePgveRa7eJc#gBafc*aigFf:e?ia6Iddideeg d8iih30MddimbuiogYe(0Eaqg#ip1Hg)9{0E0A2J0e2gc-0$1e0;2E3kg,bE0Uh%h{g`g4h~5ueciMi5780M4Nf|iRema#ff0)iqfyf#bLhdhDhRhMdYhOd#jfdA04hnhxjmhchvblh(2 hy2HbrhAbxhCfza$hF04hHfHh_10hLjKjlhkjO29fJh!d*f(aDbRjAbThZg2h#0Ki{jFdob.0(bWji4/h=5?0njkjSe5iHh|i~5Heuj2gR6u6Ji4k063eCcii9j|6Wg~cf0Me~iQifkdcBgVgke/3d1DcK0nkdeKcQ9 cTa3iyeTgzabiCgDiFbDg_jUc gJf@3jf j ijkJk3kM0Mf iUcDgkamaoiZarathW0S0ii+1d0^j#3uiIk93Mg7kLh36}kOk;g7kSgjcFaog%c:c=0yc@dhc_6}kdkEj$4CiJ3M7bi1k;gPeik47zlbk_hNklk(0Ukol5jxf9a:fijTl7h7jtlq0{hmdCj/jPfojnh/jgjvfuj*lwhzlyfjjDjsjQh^54lugi4/hVjXhYk!j@a@j_lCd^b(h.3Ob,jWbQ0i0%0r0s0G0T0fk*h:b$hv230ZlQlEl#fchgm2bMl.ayd.fRl!jRl$fVhcd_fij;l46ZlSj^mej`i}kHg|7mkbga3M26j7if7ocBg1cCl979i0k:my3;mxd67Aki9.iobc0L0Y0L0,0L3k0Ld~0)1*krgrkueQcXgy9_gAg$iDeZiGi|kFgIaRes7Lmtekm^mJcfm^gUmNgk0Z1h0x0gky2H0q0Y0qc{0n9_9|i@nbe+g?0;140E0q0l2!9?l21+0Q2Z0?0lcYc;c?nnndk~c?ambEj)5Pk,mqi 79iLf=j37KiPlfkM7WmMffmPmRmTmVmX1*mfb(ltm4mcbalRlKbulAhol(3yhrhPn,3Wfsjwn:balMn{lOdWlNj;mRnbn#h+h-m0fhn)b}n(ml1.lXbQar0B2Hk*dsl%n@b$b.h,0Sl+l{j:d j=0Lo4oah`4fnHm?kI7,m_8HoFm|mu79j9k+j{nI7Vj~nMlg7KeykfmKk6lV54ioeIcJmVng9`itktgtkvm(iAm+eXaggEkDmom;oScn7Vf2mGmKkenQk;f2ljo!gkiXkWi!dRe+e-2Ze:l6mCk-79kKo{k;5foJm`kRjainn1n3n5aoi;gunfc{nha00qnknmnoc^nrnti;nF5(oCo|8}k/plif8pk?pSk^prdvf5mYo%0noxc{n#osola_m5fno9n~n.o8hsondJlIjsn}p@54fBp=n?o`jjoaofayfOfQokj%p)p*9.q40Sf+mbn~fsl~p lFoZmmhSq1lWm70SohojqghTjLmnqhj,o7o1ovo(p(ozomnGoOoDmr8zoG8ylegdkMqMghmBg3oP8}h5o cf8KpUd6q#m eEgk3d0!2xfOiskseNiwgwizeUkzm,kBe!pgqVqKnJ8VqN8Tq$q!i7pXkTk{p8g!pbq,q.n5q~clqW9picpRq%ihp2pSilr8k`eG0q0rgZkXi#3dbD0A2d2-9|nz1{0.9|0Znxl0nn0A1hrhl8pi8=r38(nPqQh3rTq)lwre2y9`p)n%p,oap.p?job|p;lNr-q0lGbhp_r=jz2#dRjCo0n~qd0cl`lHdLqkm5lUl-b.k!lZjXs8bZfWoBqJpO9pj1rmq!j6oWsomAk8rj3:oRieq%oVrpsynTpsk{0N0L0+0B1fm!ium$ixo/q_iZkAo?kC0WrQkGr08;o~snoK9hr5s#p4rs4/iWcUiYpai=0gsI0-bDe(18q;0,bEkZjX0Tk*qUrisX8}pksxq!pnsqs#pqqmn;04sFsH1fr)lNs9dEn+r/dUfks7lNn_lJtnpYbpjZr~lNp~r{lxodm3r+tDm6sblYtxq8d%bZqolvbuj;j?qGqyp|l)b)fiqds qvqplTqHpM2`0b9N9u9I9w9F1j0W9zt;2U2P0N1)t.0b9xaG0+0-0/0U04.
1.2 🦝 Populations des communes françaises (Métropole)
On s'intéresse au fichier pop_hist.csv regroupant des informations sur la population des communes de France Métropolitaine à travers l'histoire.
Ce fichier a été adapté à partir de cette source. Les adaptations faites sont :
-
suppression des données de population pour certaines années,
-
suppression des communes pour lesquelles les données sont incomplètes (populations anciennes manquantes). Cette suppression explique que les communes listées soient toutes en métropole (hors Corse).
Fichier volumineux
Le fichier comporte 34 496 lignes !
On déconseille vivement d'afficher la totalité du tableau avec Python...
Les premières lignes de ce fichier sont :
📑 Données CSVdepartement;nom;pop_2019;pop_2009;pop_1999;pop_1990;pop_1982;pop_1968;pop_1954;pop_1936;pop_1926;pop_1906;pop_1896;pop_1886;pop_1876
Ain;L'Abergement-Clémenciat;779;787;728;579;477;347;424;506;543;629;572;622;604
Les descripteurs sont explicités ci-dessous :
Descripteur |
Indice |
Type Python |
Contenu |
departement |
0 |
str |
département de la commune |
nom |
1 |
str |
nom de la commune |
pop_2019 |
2 |
int |
population en 2019 |
pop_2009 |
3 |
int |
population en 2009 |
pop_1999 |
4 |
int |
population en 1999 |
pop_1990 |
5 |
int |
population en 1990 |
pop_1982 |
6 |
int |
population en 1982 |
pop_1968 |
7 |
int |
population en 1968 |
pop_1954 |
8 |
int |
population en 1954 |
pop_1936 |
9 |
int |
population en 1936 |
pop_1926 |
10 |
int |
population en 1926 |
pop_1906 |
11 |
int |
population en 1906 |
pop_1896 |
12 |
int |
population en 1896 |
pop_1886 |
13 |
int |
population en 1886 |
pop_1876 |
14 |
int |
population en 1876 |
On propose ci-dessous deux versions du même exercice selon le type de listes choisis : liste de listes ou de dictionnaires.
Requêtes dans une liste de listes
Compléter le script ci-dessous afin d'effectuer les requêtes demandées.
Il faudra tout d'abord importer et typer les données ici sous la forme d'une liste de listes.
La liste reprenant l'ensemble des informations sera communes
.
Il y a beaucoup de données : le script met un peu de temps à s'exécuter
.128013/-8eSwékc]_yùuh1a0(f,TM*=6 ;Hsot7.z45)dmàq:3pn9vib[Pgr2l050N0e0G0r0X0(0E0B0j0(0r0E0E0z010G0X0T010406050E0o0O0O0r0$0m040f0F0(0o0|0F0U050b13151719110T04051p1i1s0b1p110N0X0W0;0?0^0`0?0U0#0o0r0#0e0c0T0m0G0p1g0B0p0X0#0p0(1U0p0G0 050,0Y0(0e1B0@0_011T1V1X1V0G1%1)1#0G0$1q1P0;1c0E0T0r0U0`0%011+1D010u0.0e0U0r0O0e1#2022271-2a1)2d2f0 0a0B0!0$0F0T0F0E0X1f0U0B0*1~0$0$0e0j2A1i2i0U1q0b1P2N1`1|1{1$0N2k1E0X0U2c2x1#1y1A0=1,2X2Z0U0F2%1#0T2G1q2L2N2@12212B2)282-0$160(1#0r1S2G0u0`030l0l0j2.0e1X2,0F0c0q0%3i0 0B0q1i0r2^2{102`2j2}1-2 3133350e3701393b3d3f2!3i3k25040B0%3p3r223t2L2W013y0r321q340p36383a3c0*3I2-3K0c0S3m0S3Q2K3s113U3w0`3X3Z053#3%3E3)3H2Y3J3j0c0K3m0K3?1j3^3u2|1C3x0F303Y3A3$3C3(3G3+453-470L3m0L4c2@3_2{3V3}4m413F3*3e4s3h470A3m0A4y4e3`4h3|4j3z3!3B3D4G443g3.0H3m0H4P3S4A3v4S3W4U4l4W4n4Y434r4#470d3m0d4*2M4,4g2*4/4k3~404o424q4I4`3k0V3m0V4 3T4B3{544V3 4X4p4H3,4K3k0q0s0 5u5h514C4:565o595q4J3.0q0q5w3o0b3q3@4+4f5A554E584Z4_465t3M3j5y5Q5k4D4=4F4^5b5X3i3:040q3=5M3R505$4.5(5n4?5p4!5-0q495:4b5?5O5^4R535{574@5a5r5H4v5:4x654d5P682~5B5T6c5F5c3i4M5:4O6j4z5_696o5)5U5+6e470q4%5:4)6x4Q5j5`6B5|5*6d5G6G4|5:4~6L6l6N6A5S6C6q5 4t5t5e5:5g6Y676!6n6$6Q6D6S6s0%5v046{5#6m4i6?6b5~5W6*0c0%5J6}5L5N6k6:4-6#5m735E6)5s773M0%3P6/5i7f6=7h5D5V5,760%5/7z6 6;717u5}7j757l0%627K7C7s7E4;6@6(7I3.0%6g7V7N527t7Q7i7w6F3L6u0%6w7c6y704T727v6E6T3L6I0%6K7-6M7O7:7F6R6r5-0%6V847Y5R806^827y6,0%6.7|6Z7~5l7#7=6_5-0S6|8o875%6P7$7?6s0S798x8r6O7;7G7%7@3/3M0S7p8g7e7Z7P5C8D8v8n5/0S5=8K7r8M7 8k8P8m760S628%8A7g8Z817k3.0S6g8:8*7!8O8-7T470S6u8|8?8N6p747x7l0S6I955h1t2=1i2%2Q0N1|2V5k4H2$1z1q2;0e2?3s661q4H9o2j0X0N0`3a2L5H3A9v9x8#7l5J0B2o0e9D8b9F1#657/3W0 3c150o2Z0E9q0B6z280F0 0z9X9Z1-0~040Z0k9q117d9t2B9C019y2{7U9B9w9^9E9{9H2e9J9~9L9{2N5N9P0i0 0g2z0p9(9P0U0Y0 2v2c9q9)0`9+0tamag0 2m0ear7D0`9#049%9;an010E3M020Q0o0F0G0C2w0T0l1T0E0G0I0j0E0WaHaJaLaw8i9+0vafax9Q040O3da!8X01azaB2_9PaF0 aXaK0C0$a`aZaC9Pa$a(8i0U0 2c3*2Y0#a.3Va;bb5ka^04a~0C1e0u0c0dbibe4.9+0Mb3a/aa040@bt4Cat0X0j1T0e0$bp539+0R9/bb9@9_228/9|9K8.8{269IbR8`3k5/3Q0Bb#9Yas042abC0XbEbG9!0 0Ib.3x0 2G0r0N3Ib=ao0 0tbs9;9:a?4BbM0l9z47625nc5a5c8bUa2bW933.c95?b$b%a)bv0u4jby5%0 1;2Zcr4.0F0g0 2Ycw69bAb+b-b0a)bIbKcH9u9}bN0U3.6gcacN9 4uce2fcg7(0ccRckclb$aDb504cu0e0l2;2v2GcCb/aAc=b?c+1UcvcLa/azb;c}bz04aR0$0}b|01apc06yd1c5c73k6ucScY8F4Ma1cXa4bSdf9N3qc%c(b(0W3Y0e0o0$9W9;cm8ibddBc)ctc{c-c/9md7c d7c*201X0Gd7apd7bgbi0Cbod15kbrcKc3cM9Dde0c6IdhdnbXd,cWa38Q76d-c$dsaDcocqdFb(0Xc^aycz04cBd a)ahb@221KdTb~d70O0X0 7pd(a/b2e7b4aic+ald!bqeeescD04dv1)dydAek3Vbr0MbJc1bLcTd+6Vd.d@7l4|dld?cU3keLd`dsdte80 eydxdzed9,dOcAe%9.enc~9$e23Wep2YdSev28dUe^c_e!eAe%0Ze)e5e+da4edceJ9`476,eMeS0c5eeQdi6sfaeVcldG049S0O9U0eeB9p9PdNe{3|0 0r0T0T2c0Ne%aqfva*e}e$fFd$eHf6d*f85t6|fbccfPd=fg60fQ5?c2fsc4f7bO6G79fRdo3i9GbVd/chf(dq9=3V0j79030B1P0m0e0J0Bfq0G0B0?g30XaR1*3c0U0G2c22g21)0:2c1`0hfq2C1ge@dbeCddfO3KbQf/cZ3jfUgu8Fgwa7f?9hf_g31*2-0O2C1*g4fnfpg0aR0B0w0pf}f 0t2c0B0D0r1e1L0f0r0W0Fb,f45PfM9~d+5;gteN5H3:ffgy6sg:gBflf|f~e:dE2@dCel0 f0fFc*gh2Gave-3Vd}bFhccs04h90ehbh2aDcycA1hhg5`9R0F9T9Ve:bv0X0ue:h8gahae efeh5:e+h09$a=3sh33VdWaIa{gRgTdZeCd#0 e,gof!d)g.gr61g;fch)g^g=6Gcj3qfZ3S5Qgqf%5tcR34cbf+0q4vh-h+c#a8a)f^0 f`a,0$0Y0X0p2jg1g3341Xg71~gagcgagFgghDgj0:g90jbE2dgad%h#9?f$cP6Gdgh|cTfS6tgxh.5tdg9Oi5gE0*ishufo9V2C0o0B0x4jibidhqh!h?3Uh^iC5td-iFfV766HiJh+d_i4b40 i9i!22hKc@hrbHh5f1hjhlhNd|atd~hmb(j4h0e4e6jaeYfmiSfpfr3ShO5khyhAj02~b6hDhkhFfFeg0 0shJjr1-a;hMjmaDhQaY0CiYiaic22hVizeDhYiyi(f#fNh_3ieLi.g_60ePf.iKjYf=h=2Mh@iB5Hfaj!j)0qfej(h+fii^a/i604f`0#0$22iQ0l0W0.gfgOgeihg6gbikgbiwgegkgH0:iQ1~hvfqjTj-i)j/476{h*iHkui1kwfXj|f@iPgmig0BaN0o0?2Ag02B6{j@2C0h210^1*5u0s0B0skX1S0rib0,ga0:0t2Y0=0o0Eg+5^g-cO7Uf)j=fc78i=kwf)iNi_040#k3fqk5k7kojCaye/l6d8j2h7jt1`jvfJlbhW4.jyhIlg04hZj6a9j8hfjgk~jcl9hoe5i$lpjhgMhwl9jphBldhElmh6li53lkejjQhXlni~020#aLjF2MjnljhHkU0lkXjAlmlog,gpks3L3Mf*d:7ok`f+l=gBj,f?i*7UbZk@kwg@j_m0f=aDj~f`fA0|gb0El30(k8ifg4iikdg9kfgdio9HhukkgklCl5i%kqjVh%jX7Kkvl@49kymAm49Pm6gling4kHkJ0X1RgWkN0Vk90B2Y0u0hd5e#1*0P0B0LkYidk#gdk(k*1dk-kpl{l-77h{mSiGl@i0m2m^mEjhm82zl2k6mdmslAdDl8lth4e(lchijuj5jUa#lhlPlZ5wjBn7hdlrlGnblendlXhnjelzjGb(mrjlnslqe5jqnlhhlvlLe_ngnea/lNnkn4e.bh0(lVe:lkm#l(nH9*jSfLl,jWi+77iEm?i/7Jdkm`l;iMh;eIn$7Ui-n*j#7y4%mCl;i@gC4.mGc/k1fq2ymNgPmgkcg8gmimkh0:kjgJiRknnz3tk:c6gr84mzl;j%cfn`7JeUkBgDi7mHkakG2vkI0rkK34d4bBgb2fingZ0#oL0G0hkLle3OkXmQ0+oUj@m.j.n?ktj;n_j)8el?l;j{o0ewo32G0^mMnvnAa)h1nOjRn9nXfwnplIo lao~nhlMl!nNnwcnnnl9hCnqjdhpnonyhxcAnDo|nFncjwp3nMl)lSlU0CnonGp6nIp5nK3Vlk5=p39+0kl*k/n#mwn%8ooqf:bY5vn}pQ3/kAolpLk;8{k?o)fc8xo,pUp(g|mFgEcpg60l5umRo9ijmjodmmogklpjn!jQl|8{l/l f+8Ip)cZq6p,iOoz0NkEmJoDmL1R340hoQ0BfonR0}1XoR210$3nkV0t0FiW0Tm,0MoS2G3n0d0H0Ag0g2mPo!kro$bYl~p$iH8Tq78FqSqak~p/mb5xlwn6pnetpBmulupplJhGnjptlEpcnEhsp1lfq?53lxjfq%ewp~q`28lFpdlHq_pznYq)o/28pspGnZr1jDa_pvlW3NaDlkq!rfl7040ypxq,rdr9hn0 0cq.llrupIqLmvpZbYc9q4d:8%qT8wh:pXq0m:8:pPq8m_otj)rRqWj}gE0eg(1d2Aggo8kbp^ockgmm3c0oqzgk0tgHgJkFmr0vg0r$1eo@k.rOpCq1bYn)h}rJn-rVp%n:ra1-mG0F0nr}1cr o7oB1y0umU2G0Uiu2sqgoFo@kLoYmQ0cst0ToEkKgW0qqF6wmtm/qN3/n^s7p*n|n.sPm|lur~r(i~rjlYj19,fEp3pep2r7b}rv9Prme+a%r4q^nrsds+lKs*01rcs`pHi~rys;pypClQs_t3cxrxrz5LrBs1sZr2q=q~jss=pglypijjlDrBo!0b9s999n9b9k1i0G9etw2T2Ok!1)2N9c9:0*0,0.0E04.
Requêtes dans une liste de dictionnaires
Compléter le script ci-dessous afin d'effectuer les requêtes demandées.
Il faudra tout d'abord importer et typer les données ici sous la forme d'une liste de dictionnaires.
La liste reprenant l'ensemble des informations sera communes
.
Il y a beaucoup de données : le script met un peu de temps à s'exécuter
.128013/-eSécyuh0= H7)à3nR9vib[P,r28wk]_ù1aT(fDM*6;sot.z45dmq:pgl050!0d0V0K0w0*0T0m0g0*0K0T0T0l010V0w0(010406050T0i0#0#0K0B0h040e0U0*0i0~0U0s050b1517191b130(04051r1k1u0b1r130!0w0v0?0^0`0|0^0s0)0i0K0)0d0c0(0h0V0j1i0m0j0w0)0j0*1W0j0V11050.0x0*0d1D0_0{011V1X1Z1X0V1)1+1%0V0B1s1R0?1e0T0(0K0s0|0C011-1F010N0:0d0s0K0#0d1%2224291/2c1+2f2h110a0m0z0B0U0(0U0T0w1h0s0m0,200B0B0d0g2C1k2k0s1s0b1R2P1|1~1}1(0!2m1G0w0s2e2z1%1A1C0@1.2Z2#0s0U2)1%0(2I1s2N2P2_14232D2+2a2/0B180*1%0K1U2I0N0|030H0H0g2:0d1Z2.0U0c0J0r3k110m0J1k0K2`2}122|2l2 1/313335370d39013b3d3f3h2$3k3m27040m0C3r3t243v2N2Y013A0K341s360j383a3c3e0,3K2/3M0c0r3o0r3S2M3u133W3y0|3Z3#053%3)3G3+3J2!3L3l0c0Y3o0Y3^1l3`3w2~1E3z0U323!3C3(3E3*3I3-473/490Z3o0Z4e2_3{2}3X3 4o433H3,3g4u3j490R3o0R4A4g3|4j3~4l3B3$3D3F4I463i3:0o3o0o4R3U4C3x4U3Y4W4n4Y4p4!454t4%490D3o0D4,2O4.4i2,4;4m40424q444s4K4|3m0u3o0u513V4D3}564X414Z4r4J3.4M3m0J0k115w5j534E4=585q5b5s4L3:0J0J5y3q0b3s3_4-4h5C574G5a4#4{485v3O0J3R5O3T525S5m4F4@4H4`5d5Z3M5y3@5(5Q5*4T555-5p4^5r4$5=0J4b04645A5+4:5~594_5c5t5J4x664z5_4f5R5|305D5V6d5H5e3k4O664Q6k4B695}6p5.5W5:6f490J4)664+6y4S5l6a6C5 5/6e5I6H4~66506M6m6O6B5U6D6r624v5v5g665i6Z5{6#6o6%6R6E6T6t0C5x046|686n4k6@6c615Y6+0c0C5L6~5N5P6l6;4/6$5o745G6*5u783O0C5%7d6z714V735F5X5;770C3=6~5^7r6N7g6?7i7w6F6U3N650C4d6:5k7G727I607k767m0C6h7Z706=7T4?6^6)7X3:0C6v7.7$7S7u7U6S6s5=0C6J7{7;547H7)7j7x6G3N6W0C6Y7E6!7=5n817J6`7`6-0C6/897f7 7(5E7V837L3;6}0r0k7~5T7@6_7_770r7a8C8w5,6Q827K6t0r3O8L8F6P7v8p8J5=0r7B8U8O7h8d8R8f8B650r7P8k7R8m7?8Z7^7l3:0r6h8=8X808o8/7,490r6v8~8^8n6q757y7m0r6J975j1v2@1k2)2S0!1~2X5m4J2(1B1s2?0d2^3u5`1s4J9q2l0w0!0|3c2N5J3C9x9z8#7m5L0m2q0d9F8A9H1%5_7t010F0s110w0#2y0B0V9s0m6A309U040g0T0v9s137e9v2D9E019A2}7-9D9y9@9G9`9J2g9L9}9N9`2P5P9R9)3e170i2#0T9#9%1/0U110laf9R10040y0G9.9s5S9?9^248;9{9M8:8}289Kaz8|3m7B3^9R0F110E2B0jal7%3~0x112x2easam110MaWaQ3Y112o0da!8bai04ak9:ag0|0T3O020$0i0U0V0S2y0(0H1V0T0V0W9+0va@a_a{a*8,01an0AaP8b9)0#3fb93Xa,a.2{9Ra=11b6a`0S0Bbrb8a/aX04bd9:9$a8112e3,2!0)bj5mblbJ4:bp04bv0S1g0N0c0DbQbM55an0pbebaaK040_b#4Ea%0w0g1V0d0BbX2aan0%arbx4Dau0H9B49655pb|a4b aCa1aE953:c05(0mccbCa#9)1+2K0d0ib;bBa:01bLcmbD9*9,b=ah110Wcu3~110Ob-0V0t0d0K0,clbna#anaZb`bfb,b.0wb:cybb11bA2_cecO044t0#2BcScNbacpcJ8bbObQ0SbWc)3XbZb_c,9=9|av0s3:6hc1c{9~4wc52hc7840cc cbcdcnb%0N4lb*5,bE0s1|0da)cqa#0U0E9V1jdncZch0VcjcI9rbyb^9:9/c_0mb|b~3m6vd0d68r4Oa0d5a3aAdI9P3scddVcYb$a%dfdtba9)0,0T0g0B0 dwckdg4:dpdrd/5}didkdmdE5mb@c^dzb{d1dH0c6JdKdQaFe3d4a28S77e4dadWdWdc9V0Nd?3011d(d*d,dxekahdq042/9!d#bket2!er0|an0ycTc.a^bs0,239Z0d2hdjc;d{4:bceB01eGb70S2/0#ePd 8ban0GdB6zc=dG9_4}aye6c8e.dOead23m6W3Sefe|dbcr2ed_cTeDcTd%0dd)d+0(d-dy3Ucne%eTc+3udX4EaS042!eweQbYaYf4d^2Id`e#baf3c=dhc!f6eof9eqfyeR110Gb!dCbje,aw496-e5eb7m5ge?dL6tfPeeegcraa0#acf6cTa,cxfFd@b(0(0(2e0!f2fqf,el04f0ftf?04fJe*dEfMc}6H6}fQe^3k5xfUe:d75wdT3ve+e1e-5v7ag6c3gje9fV63gk9Qa#0g7a030m1R0h0d0X0mf60V0m0^gF0wb11,3edj2e24gE1+0=f{0ff62E1ifn4ggg9Fe25$e/fR5J27gag(6H3OaIgtgvgF1,eY2E1,gGf#f%gCb10m0L0jgzgB0M2e0m0n0K1g1N0e0K0v0UcRf gYg1ghfN5vaH36c2dR5?g+g73lgecn9)gygAffajeTfxfof_f{dleTddd!cXhvfshGexbKezdshKf!0UabadhHeieT9)hFfufcbyeEf^1/eVbseYe!h%cKfHhza-bmfhcnh,a{h0h2h/2Ofdh=fKgZ9}g#c0hnd1gm3k4bhria64gedDfvdFhjg35vc i8gp770J4xidhpirhu9Rgu11gwbh0B0x0w0j2lgDgF361ZgJ20gM2fdjg=gRdj0BgT0=gL0gb:iOgX5Ri4c|5JdJiogb8r0JdNaDi+6ti-iwg:izg^iVhUf$ad2E0i0m0P4liDiFhRhhiig25Je4i*g,5v4)ite76Ii?cZiBj324h?h^3Ufid|11h)hD3zhMh$2Ojq4:hIfbjyhLf`iShNhSdohQhZ11g{hWhOjAhYjPf-h#f}jtii5mh{0SeJ19dweN0Vh 9;c?i2jIa+ajjojDboa?eHa{j1iCiE24j*i104aqi3hig!gi3ke`jbhs4~jfe;5ve`5(ihh:9wik5JfPk8iefTi/jc3kfXa7i@04gw0)0B24d(0H0v0:gQg}gPiJgIdwiMdwiZiQ9JhU0=d(20hVf(k2j7kj496|g%g7kZkbd7kZa6j+9jg;0!gWiI0ma}0i0^2CgC2D6|0J0u2E0f230`1,5w0k0m0kl61U0KiD0.dj0=0M2!0@0i0Thgi#k3i5k579k!ialok%8rlok*jE0)kzf6kBkDkUj.c*hAjSb?jsfrjFf1h*eClIlMeUj@eWh.j^0Sf}k1lD3XjBjLlKf|lGesd=l(cz9*i{f%ael+9SjRlYfzjUlPhCjXbNlRbsa}0Hk{0uj~bylXh_9Ra,020)a{j;3Pcnc$5yl60Hl68vl`j-j6khc`k4hk7nlphp7pgoi:7`g.kffLkX3Nhmijip7Y3=ls6{aHgs8biykvk;0-c%0TlA0*kEiHgGiKkJgLkLgOkNeYkQgUjNlCmoi03Wj8kYi7mGmy7zickpk#caktmOk-k/gGk=k@0w1Th5m2kFdF0s0N0fd+dx1,0q0m0Zl7iFlagOldlf1flid~mpm^i%kYinnvk#ism|lqd9m d$11f:0~dwmUkCmWm.jpcnfgnPh(lJl_julNaoeFl~a{lTeWlWhX04dejCmee jGjxn-jJl*l@6ajMl.jOn@55b%0wejl;h!n/jVnZbqlUm0m2m4h;k0h?020*mceTmg04nkmlnWcUockVnum=3Ni)nzlqi.c6m_7YdJmBi$b}lnjaoumvjenCoHjibamPgw2?0Ukxf62An7g~mZkIgKgWgNiPkEm*i_kSi|nO5*oCe287mue7o/mK7`kenF3XoNgVo#36n40Kk^36b1d+cij(0mh80)j(0fk_dk3Ql6k}0-pek|ntm:e0mril78kloGo;kooxkq8ioLb+04oPoR0`n6j5nSdolFn|lHnYlPo2lLoml{nujYn!eXhUoae$mnpF8bl!o1jwffjKp#l-kTl:pI1/n~o0p-l,nVl|fppKomjZo80kk|pVfwpXj=pGbPmblVp)p?pQfGp_p@2ap{2xm1pfp j,k0m6lkkWpn8;g5kmhp8umxkqqtk*kgplkiqo8}gkqre78Cqug7qGlvixg;degI0H5wnaoWiLm$o!gPgUo%kRm-p,m/j+or3;g.qEkcq)qHia8Lpxk,i^k.o}k;2xk?p0pDp70m0f0Vpbf$of0 1ZpbeK3pl40M0Ui 0(nr0ppc2I3p0D0o0RgCgEm2pkq%mD3;mFhoqFmJoJrwq;n^n*hemU5zl;nRq2pWqbq9jTo3mmrKqzbajZn$bsn(l;p!p;a$l$jHm7n=flpErInGp*o*q#pYdYflp:r$cZq8rQqjjWrLqdpSp|p~lUrVrYm9q5mdjz55oirFs3110Ql#r^k+qar{r_pRo6eWm00Jrk0Rqijrqkrqatrs8(o:q,sxo?8$igmCqBaGnyrvsznBpuqInEsg55o{0dhd1f2CgRoVkHqToZkMkE3e0iregU0Mg@2Fg`n`0d0AgCsS1gpDljo,llnwaGotsId78~q.qsoAo_q=mQ0U0Is;1es?oUkG2En nd2I0siX2uq`n5n7k`p}k}0ctk0(q{k^h5sorlsum;swoFs~8r97t1qFedt4rBsRtasUjnhBjscMompMl%pOlOp`pSrTbwtVk0cWr?r+sfj sisOr}sll qfo9s1rOqlr*bk110cserNt#t,h`r~qftxsqt?t#fIn)n+t}pNt(eyn?udfzq!s2q$1k9u9b9p9d9m1k0V9gur2V2Ql91+2P9e9/0,0.0:0T04.
2. Requêtes élaborées
2.1 🐻 Meilleurs films selon IMDB
À ce stade nous savons :
- ouvrir un fichier
csv
à l'aide de Python,
- lire son contenu dans une liste (de listes ou de dictionnaires),
- typer les données,
- effectuer des requêtes sur ces données à l'aide de listes en compréhension.
A. Présentation des données et import
Nous allons pousser notre étude un peu plus loin lors de l'étude du fichier films.csv
. Ce fichier reprend les 517 films les mieux notés sur le site IMDB.
Les descripteurs proposés sont :
Descripteur |
Indice |
Type Python |
Contenu |
Ranking |
0 |
int |
rang du film dans le classement |
Name |
1 |
str |
nom du film |
Year |
2 |
int |
année de production |
Minutes |
3 |
int |
durée (en minutes) |
Genres |
4 |
str |
genres associés (voir remarque) |
Rating |
5 |
float |
note moyenne(sur 10) |
Votes |
6 |
int |
nombre de votes |
Gross |
7 |
float |
revenus générés (en M$) |
Les genres
Chaque film est associé à au moins un genre, certains à trois genres...
Dans le cas où plusieurs genres sont cités, ceux-ci sont séparés par des virgules.
Voici les premières lignes du fichier :
📑 Données CSVRanking;Name;Year;Minutes;Genres;Rating;Votes;Gross
1;Citizen Kane;1941;119;Drama, Mystery;8.3;442770;1.59
2;The Godfather;1972;175;Crime, Drama;9.2;1849989;134.97
3;The Wizard of Oz;1939;102;Adventure, Family, Fantasy;8.1;400883;2.08
On importe les données sous la forme d'une liste de dictionnaires. Le code est le suivant :
Pythonimport csv
films = []
with open("films.csv", "r", encoding="utf-8") as fichier:
lecteur = csv.DictReader(fichier, delimiter=";")
for entree in lecteur:
entree["Ranking"] = int(entree["Ranking"])
entree["Year"] = int(entree["Year"])
entree["Minutes"] = int(entree["Minutes"])
entree["Rating"] = float(entree["Rating"])
entree["Votes"] = int(entree["Votes"])
entree["Gross"] = float(entree["Gross"])
films.append(entree)
Import réalisé !
Dans toute la suite du TP, la liste films
telle qu'importée ci-dessus sera accessible dans chaque éditeur.
B. Votes par genre
Le fichier compte 25 films dont l'un des Genres
est Family
et 26 avec le genre Horror
. On précise qu'aucun film ne possède ces deux genres.
Parmi ces deux genres, quel est celui qui a reçu le plus de votes au total (en additionnant les votes reçus par chaque film) ?
Comparaison de genres
Compléter le script ci-dessous afin de compter :
-
le nombre total de votes qu'ont reçus les films dont l'un des genres est Family
(utiliser la variable total_family
),
-
le nombre total de votes qu'ont reçus les films dont l'un des genres est Horror
(utiliser la variable total_horror
).
.128013/-eScyxuh0F= OCH7UG)3nRvib[P,r28wk]_1a+f(6;Asot.45dmq:Vpgl050Z0d0V0M0z0*0T0n0f0*0M0T0T0m010V0z0(010406050T0i0!0!0M0E0g040e0U0*0i0~0U0w0n020M0!0(0R0n0x0d180E0#0i0d0T050b1517191b130(04051G1z1J0b1G130Z0z0y0?0^0`0|0^0w0)0i0M0)0d0c0(0g0V0j1i0n0j0z0)0j0*1/0j0V11050.0A0*0d1S0_0{011.1:1=1:0V1{1}1_0V0E1H1*0?1e0T0(0M0w0|0F011 1U010O0:0d0w1m0d1_2h2j2o212r1}2u0!2w040a0n0C0E0U0(0U0T0z1h1j0,2f0E0E0d0f2R1z2y0w1H0b1*2%2b2d2c1`0Z2A1V0z0w2t2O1_1P1R0@202;2?0w0U2`1_0(2W1H2#2%37142i1j2|2p300E180*1_0M1-2W0O0|030K0K0f310d1=2 0U0c0L0Q3y110L1z0M383b123a2z3d213f3h3j3l0d3n013p3r3t3v2@3y3A2m040F3E3G2j3I2#2:013N0M3i1H3k0j3m3o3q3s0,3X303Z0c0v110v3(2!3H133,3L0|3/3;053?3^3T3`3W2=3Y3z0c0X110X441A463J3c1T3M0U3g3:3P3@3R3_3V3|4j3~4l0Y110Y4q37473b3-4b4A4f3U3{3u4G3x4l0Q110Q4M4s484v4a4x3O3=3Q3S4U4i3w3 0r110r4%3*4O3K4*3.4,4z4.4B4:4h4F4?4l0G110G4{2$1K351z2`2*0Z2d2/49014V2_1Q1H340d363H453*054V5v2z0z0Z0|3q2#3 0L3P5D5F4E4W583A5J0n2E0d5M4V3}4Y5Q1_0b3F4t4Q110V0U0.0*0K0O1m0:0g5x2$0n5%5n0U110m5?045^4)2}010!0z110k5~134r5y3,5L015G3b3 3#4d0n6d565O4k3!2n5T5V4=6o0c6i5#5B4u620w5)5+3:0K1+2V4x5~604P5`5|6J5_4 6466685~5%6l0K5H4l414.6W5W4X3 415S2v6s576u6!3(69396c5E6e6X6g4l4n6#6^6m5X3 4n6+2F6-6n4H3A6}44612p0I110O6I6a5@6P6A112t2b0d0d6O7c210U0H112=7r6L4 6B042C0!1y7i6y3-10040$6T7G6V6 6`2j3 4J6~76714I6q6,6_6%5P0c7T3(0n7*6K4~627e040z0O7y7-2p0T3#021v5+0R0l5:0*0g7{0i7}7?6z2p7u7w0w865(047n2W7q7N7s0|7J0B6U8j017_11837}0t2t2W0T8s0V0R8n7z627J0J7L7G6=5w6@5M6Y3A4!7U7!6t780c4!745U8Q6.8S8O7)7+8$7k3e6C5,5.805=7G7,877t110N5}8/8(3M7m0w7o8h6?8C2p8l8B7@218q048y0R0%5+1x99948;8k110J7M905C7P8M0c4^8P706(4l4^8V7V9t3A9q8#7*8`0|7/4W7=8_8o97990q4x2L0E9e9I917t7v7:8b9R954a8|8~9f7I118m8i9S0|9K7|8z8u0w8w9Q9l9g018E8G4N9$6W9o5a9r5N7W3A5a9w8X775Y0ca09B8$8:8d5*8+6G9O8c6M048@ak7A9!8g9$5n939*9Y8p7`9.9a9c8xazas4 8E9k5w0b5A5f5u5h5r1z0V5kaP2-2(0M1|aM0b5i1F7H5n2W0!8,0I0d6F6!1r1t1v1x0n9{aI1N1I040o1j340U2r0V1~0z0f0z0n0Z0i0n5/2Q0na:0n1}0=0,0i0h0n1#9;a;0T1i0V6k0w3s1n0M0~aW0=0P0Z2j0=0f0-b0bd0z0TbE2T7D0=051s043k640w0z181zbN0u0W1K3I1G0eb40*001,bn0i0j0/bEbs2i2W0Eb50dbhbj8va;b/bu0zbw0D0n1,0Z0Uba1g0:bG0db=bgbi5z3t3-1W1Y1!1$1(1-1?251@2x9+017/7;6UaJ3t5 0-0n2i0=0i1jcd2T5ncg1Z1#1%0gcl241?1^a#4 cs9H37aeal0WcXao7.7m1=cTaI5A0W0n0p001xbp1}0?0_cz190n0d0h1s0(c:0M0y2Xbda;bk8w5^5A0S0Zc 8}0i2W1z5Ac^bpcE5u7 6481ddcwbY1O1Qcf2jchcJ1(1*1,2j300.bE231;cOcpaw2C2t2v110C1)1+9W395t6y3)5eaK8K6_6Y0r3Ba17#4kdY5R6ra77Wd%2n544Dd#4Hd,2%5$8o7Bag6E0Md87ndb8 3HcV4 5{048^cU9D636504678H9}9n6{dY6i3k6$8R4Yeh7Y75d*9ten4/d/el3yend?cQ7l04d`5-5/dk8.e78oe4e6e1e86RebaH6b4P9~eg405K7Pd:emeUa69s58dY6*d.4ga2ereUey8IeQ9m8LeT7aejeWev0LdY73d)e#d$4md-4Te d;f1eye87/7g0EcZ8)8e8}ar9X9^899Vfc8{7C0:7EaE8D11a?4|eee=7Re{7%eV9xe$fze!e+fC4Jete*eXewfzey8%8ocSfl9,ay848zd7d90Vd 9?eLeI9U7xfh8d8f7pfq929(f-96fT8tb`aCfU8Aav9^9`eP5edV6ffxdY8!e^fBf08Ue~fFg7f24CfJe`g35!3Fad7+e8d_6D5-d|fXd fR01e4anf)5n7Bf+e0e:f|f/f{3-9-f_9bb0f^85gEat9if~7HeSg29pfAeqfC9vg9fKfy9ve)4;8YeY9A6xfOcqfQgw4 gG7}dj5;f!3*e262fjf(eHcqgyfff,gMaFgD9@gFf=9/f@g^f cqf}8/g`2p0f5J04030n0P0L0ugP7Ofw0wfLabg5gVf0a5gYgfaagc55gaf5abg+gjhgfmeC8,eFgsgueKg_glaqh2h6gN049)hWg:h8aAgJhbezf.049jed7Ncv0,2%dQaN0y3I1e3I1=040s1j0T2X1i2/dhdr1XcIcjcLdCcncPf87wc%5yh:5u0n0Mb71=b@b500cCd5cecGdsi7cKcMdD26dF9^9Fc$cuaK0bh|69h`690,0.0:0T04.
C. Projection(s)
Comment faire pour n'obtenir que les noms des films cités dans le fichier ?
On peut procéder ainsi :
Python Console Session>>> [entree["Name"] for entree in films]
['Citizen Kane', 'The Godfather', 'The Wizard of Oz', 'The Shawshank Redemption', 'Pulp Fiction', ...]
Afin de généraliser le procédé, on souhaite écrire une fonction projection
qui :
-
prend en argument la liste de dictionnaires à manipuler ainsi que le nom d'un descripteur,
-
renvoie la liste ne contenant que les valeurs associées à ce descripteur.
La fonction projection
Compléter le code ci-dessous en saisissant la fonction projection
telle que décrite.
Attention, les résultats doivent être dans le même ordre que dans la liste initiale.
.128013/-weSkc]_yuh1a(f,= ;sot)djmq:3pnR9vib[Pgr2l050z0e0x0o0K0R0v0t0h0R0o0v0v0s010x0K0F010406050v0l0B0B0o0P0k040f0w0R0l0,0w0G050b0?0^0`0|0;0F04051c151f0b1c0;0z0K0J0!0$0(0*0$0G0O0l0o0O0e0c0F0k0x0m130t0m0K0O0m0R1H0m0x0/050V0L0R0e1o0%0)011G1I1K1I0x1Q1S1O0x0P1d1C0!0 0v0F0o0G0*0Q011U1q010q0X0e0G0o0B0e1O1:1=1`1W1}1S20220/0a0t0N0P0w0F0w0v0K120G0t0T1.0P0P0e0h2n15250G1d0b1C2A1*1,1+1P0z271r0K0G1 2k1O1l1n0#1V2K2M0G0w2Q1O0F2t1d2y2A2%0=1;2o2S1{2W0P0_0R1O0o1F2t0q0*030j0j0h2X0e1K2V0w0c0n0I350/0n150o2(2+0:2*262-1W2/2;2?2^0e2`012|2~30322N35371^040Q3b3d1=3f2y2J013k0o2=1d2@0m2_2{2}2 0T3u2W3w0c0E0/0E3B2x3e1g2#152Q2D0z1,2I3i0*3R231d3*1e3(2)163$3;2$2+0t0K0z0*2}2y3V0n3m41433s3S2L3v36380t2b0e4a3;3T344f472A3c3g2,1p1W0g0/0T0q3#3D0t4s3G0G0q0/2!0w0A2u2w3{3D4D3/010.040p4A2z4P4u0*0G4x132M0e0v4V3~3h4Y4R0/0r4*4C3F4Q4!040T0v0h0P0-0x0e0l0P4*4X2T4.040y0D4*0;4N4W3F4901442+3V3y052@5f3Q3t4d3U4f1^4h214j5g4b315q4n3x1O0b4r4?4-0d0/0t5K4C5c4+4t550v0z0/020C0l0w0x0u5U5W5Y5!5X0u0H1 0J0w0K1T0$0t1K0v4 2p4(0t0J3J500P0Z2q0h1T4`4|4~5}5%5$5V5(670u5a535e425x454f3X3L406g5o4c333V3X5u224k5p6q6j5D3c5L4=3 4Q4w042t0x51145N6C4,554S0M6e6D4-4^1 1*0e0e6R6N1{6P6Z5P2.4x4(640F4 516%3G4S0i4;541{6F0q0w526L6^3j0/6V2t6Y6~5G550w5I042L6@766)4_4$6X4)5N6 0*6=6d7j0b3}3%0e2A3@2B3,152E7x0o1R7s3)1m3f0b0T0V0X0v04.
La fonction projection_multiple
On souhaite désormais récupérer les données associées à plusieurs descripteurs : la fonction projection_multiple
prend en argument la liste des données et un tuple contenant les descripteurs à conserver.
Par exemple projection_multiple(films, ("Name", "Year", "Rating"))
renverra la liste des tuples formés du nom, de l'année de production et de la note de de chaque film.
Python Console Session>>> projection_multiple(films, ("Name", "Year", "Rating"))
[('Citizen Kane', 1941, 8.3), ('The Godfather', 1972, 9.2), ('The Wizard of Oz', 1939, 8.1), ...]
Aide
Nous avons vu comment créer des listes en compréhension. Il est aussi possible de créer des tuples en compréhension :
Python Console Session>>> tuple(2 * k for k in range(3))
(0, 2, 4)
>>> [tuple(k * lettre for k in range(3)) for lettre in "ab"]
[('', 'a', 'aa'), ('', 'b', 'bb')]
Compléter le code ci-dessous en saisissant la fonction projection_multiple
telle que décrite.
.128013/-weSkc]_yuh1a(f,= ;sot)djmq:3pnRvib[Pgr2l050z0e0x0o0J0Q0v0t0h0Q0o0v0v0s010x0J0F010406050v0l0B0B0o0O0k040f0w0Q0l0+0w0G050b0=0@0_0{0:0F04051b141e0b1b0:0z0J0I0Z0#0%0)0#0G0N0l0o0N0e0c0F0k0x0m120t0m0J0N0m0Q1G0m0x0.050U0K0Q0e1n0$0(011F1H1J1H0x1P1R1N0x0O1c1B0Z0~0v0F0o0G0)0P011T1p010q0W0e0G0o0B0e1N1/1;1_1V1|1R1 210.0a0t0M0O0w0F0w0v0J110G0t0S1-0O0O0e0h2m14240G1c0b1B2z1)1+1*1O0z261q0J0G1~2j1N1k1m0!1U2J2L0G0w2P1N0F2s1c2x2z2$0;1:2n2R1`2V0O0^0Q1N0o1E2s0q0)030j0j0h2W0e1J2U0w0c0P0P0c0n0.0n140o2%2*0/2)252,1V2.2:2=2@0e2_012{2}2 312M34361@040P3b3d1;3f2x2I013k0o2;1c2?0m2^2`2|2~0S3u2V3w0c0E0.0E3B2w3e1f2!142P2C0z1+2H3i0)3R221c3*1d3(2(153$3;2#2*0t0J0z0)2|2x3V383L4042013Q3t2K3v35371^2a0e433s3S4e3U4g473!3F3/010g0.0S0q3#3D0t3g2+1o3j0q0.2Z0w0A2t2m0j0B0l0Q0+0F1R4A2y4D3G0-040p4V3~3h4F0)0G4x122L0e0v4$4X4u4Z0r4$4C4t4)3H4x4/0h0O0,0x0e0l0O4:3{3D4=4|4Z0y0D4$0:584W3F414l454g3y052?5k4b4m304o335n4i204k5s3;3T5w3x1N0b3c5a2S010d0.0t5O4C5h4%4E5K0v0z0.020C0l0w0x0u5Y5!5$5(5#0u0H1~0I0w0J1S1R0Y0I3J54562o1S0h4/5}0v50525{0v5+5*5Z5,670u5f4;5j4a442*3V3X485r4c4n326j5y214l5C5v6q2z3c5P4`3 4u4w042s0x55135R6A4(5K4Z0L6e6B4|0G0K0.6G4T0e6P6L1`4Z4#5R5J2-0.1~1)0e6X6%4{6M0.6O6/6Q5K4+040z6Y5T6!0.0i4_6(1V6D0q0w0O726:6)6{796^1`0w5M042K7d6Z3j4~62510F5355572(7a1V5c7k6~740.76786J734*6*0G6,6.2$6K7z0)7g0.7j7E7v7G6{4-6-7t3$7T014Z715R5g3`3}3%0e2z3@2A3,142D7=0o1Q7-3)1l3f0b0S0U0W0v04.
D. Sommes et moyennes
Quel est le montant total rapporté par l'ensemble de ces films ? Et le montant moyen ? Pour le savoir il faut dans un premier temps additionner les revenus générés.
Écrivons une fonction pour cela.
La fonction somme
Compléter le code ci-dessous en saisissant la fonction somme
qui :
-
prend en argument la liste de dictionnaires à manipuler ainsi que le nom d'un descripteur,
-
renvoie la somme de toutes les valeurs associées à ce descripteur.
Remarque
Vous observerez que l'on ne teste pas la stricte égalité des résultats car les valeurs manipulées sont des flottants et qu'il y a des erreurs d'arrondis.
.128013/-weSkc]_yxuh1a0(f,+=6 ;sot45)djmq:3pnRIvib[Pgr2l050F0e0B0p0Q0X0z0x0h0X0p0z0z0v010B0Q0L010406050z0m0H0H0p0V0k040f0A0X0m0=0A0M0x020p0H0L0y0x0N0e0 0V0I0m0e0z050b0|0~10120`0L04051x1q1A0b1x0`0F0Q0P0*0,0.0:0,0M0U0m0p0U0e0c0L0k0B0n190x0n0Q0U0n0X1$0n0B0^050#0R0X0e1J0-0/011#1%1)1%0B1/1;1-0B0V1y1X0*150z0L0p0M0:0W011?1L010s0%0e0M1d0e1-282a2f1^2i1;2l0H2n040a0x0T0V0A0L0A0z0Q181a0Z260V0V0e0h2I1q2p0M1y0b1X2U2224231.0F2r1M0Q0M2k2F1-1G1I0+1@2(2*0M0A2.1-0L2N1y2S2U2~0{291a2:2g2@0V0 0X1-0p1!2N0s0:030j0j0h2^0e1)2?0A0c0W0K0c0o0^0o1q0p2 320_312q341^36383a3c0e3e013g3i3k3m2+3p3r2d040W3w3y2a3A2S2%013F0p391y3b0n3d3f3h3j0Z3P2@3R0c0K0^0K3W2R3z0`3!3D0:3%3)053+3-3L3/3O2)3Q3q0c0C0^0C3|1r3~3B331K3E0A373(3H3,3J3.3N3;4b3?4d0D0^0D4i2~3 323#434s473M3:3l4y3o4d0w0^0w4E3z1B2|1q2.2X0F242$41014N2-1H1y2{0e2}4W4j3Y054N4;2q0Q0F0:3h2S3@3t3*0x4|4~4w4O3n512e2v0e564N3=4Q3r523|404n0:0g0^0Z0s3}3Y0x4l4I0s0^0z0A0~0e5s2T5v4)0@040r5D4`4m2;3$5p192*1o5K5F5m015H0t5K5u5l5N0M5p1o0h0V0?0B0e0m0V5T5#2g5H0E0J5K0`4?5E3!55014 323@3T45544}60575g635b2m5e4a594d640b3x5U5N0d0^0x6p5u5|5L3#0z0F0^021m0A0B0y6y0m6A6C6z6B1i0M0P0A0Q1=0,0x5z5B0x0Z0)0P3(5.0V0)2K0h1=6U5*5,6Y6D6F6,6B6.0y5`5;4H5 612a3@3_536^694P6{6c2w6e4x6g3r6|3W6q5!4H4)5%040B6A3(5Z6l2g0A0^0v7j5=1^0H0Q0^0q6=6s5v6~504d4f6}6749754c3r4f0x5c74587H4e1-6j047a7k1^5o040s4p7p7c5V7e2k220e5C6s7b3C5V0A6n042)7!7.5$5P0M5R1p7x7q0:5H5_6s5{305~7E0j7A3r4B7D7M6a4A725d685f708f2U3x7a7T7 5O7f7h0X7@5M7l0^0u7o7,7U420^7(2N7+857#5N5H0S6?7^355(0z6)0L5-5/8N8w1^5H0i7w8I4{87890c4S8c8i6f7O4S7K6d8-7G4z3r8+796q8C017W2N0B5/0M8v4I0^7g0#8u835T0b4_4X4:4Z4-1q0B4$9i2!2V0p1:9f0b4!1w6t4)2N0H0j0s0p0g0e0j0n6|1i1k1m1o0x82301D3A1x0O0X0x0e0l0Q0z5-0x0L162G6Y0)5z162I0)3(5-0V2l0=0P9J821E050m0X3A1)040p9;0h0x6P7Y0M2P0Q1Z4^3k042{0A0G2O2Q9ca99K1q9|5{9_3A2.3#1N1P1R1T1V1X1Z1`1(1*1,9u5V2t2k2m0^0T1W1Y937x4/5L3X5E9d86567A0C3s3H6~8j6gaU3t8;738?7N4za!2e4t3K4M8.a*aV8maB5N7W5q947d5x046R2w8W3#5H5J7~8J8P040F5Q7*7}8$8X800^5Y8B8q7e6(5+8T6Yb15G0^5^8#4WaR68aT3paW87aY4caU2da$8h7Fa)4QbDa,4LbH8ebKa?8}7;7Tb58O1^6v6x6H6G6E6/bZ6J6L6Na13ba 6%9J6W1;5/6!1=6$6T5)bm8U0V6:b~bZbt4@bv6_0M3paU783baXa:bJ3^8g8d8kc7bL4u486 aZcda?8pb63E968ta{7/7ncu5N7s7uc15}6@8(620WaU7C65ca8@cc7J7La(bO7P3Ia.bNcg7Pco8|8q7W7Y5:bicq8D04b:boc%bV0:7:0^7?c-be8rabada519bp5Vb3c}7_b8ba5SbUc@5Xcxb7bl6*8Vd5b2br9L4kdd7zcFaU8bcJbAcbc60c4BbFcfcmdsa-4vbBa;dm7R8ocYc(8r977ic?3#7m048zd8crc*6Xdc4Fb1dj6`cG8*bzdubCdYdtcPcV8:dxckdzcc8`dCdEc.8~0^9092dOc)dH99dT7xag0Z2UaM9g0P3Aam0`9|9~2Ob+0xa3c{1aa8e11s1q4_b_2AaI1Z82ak1qe70Y1Hap2aar1S1Ueo1aax1|1+2odFaD5caGeB5Te39M30aQcDaScF0Da=dnd!4zeUa#cOcU6geZcicTcl4ce(bQcZ5(5rdJa|5y5Ab0ddbq5Id0d9d3bcbudFd7e=7$8Q8Sb|e}8YdfcB6tdVc50WeU64c9docL3pfhced(e%bycSdydpfgbye.dFbS8|e`5VbX04b b#b!6Fb(6M6Ob,e^b.6VdR6Zemb^dabn5/fF6-c09adicEdWeUc866eX4Qf(foe$e,cdfsd,fuf-cX6p8}8 0!d_f45$0R5y0}f9bf5I8MfBd18F7*g45W0^g7bd95b8b`dbc$gge{8!f 2gc!7ZgpdPga8H3z7-c@c:7=aK2~gyghb97{bbgc8Z0Efceka99e2U9s9^9`e80Q9}9 ecee2I5u4_c_aea6aKel0!gY19efg#a9eje04:ai0ber0betao4)aq1QezauaJ1!1*eEaA8}eIaF04aHavgC4WeN4=ePgOc388cF0weVfjf+3phne!8=f/4zhse)ftfl0Whxfxd=a_3Jd`3$a}b-gJ0^b4gmf5d2gHd4hO8KbghHbkgjfVglf1d=5@dg3Y84h#1afehrfweWfp4chnbEe#e+hwfrd+a/hAh?7Q6k8qfzf`g82gfDfXb$fGfJb*6Pb-b_fPb;fR6#fOf76+bZi86;f!ggh-hBcnh:hv4Qhn3_d%iwh.izh|iBit78d:f`e/04d^9.hWg1a~g3i5fae|iSc)g%efhLiUhTe~hRf0c2f2hVgtc)fUf8iVgd040EgLiq4=9d1D4Y9r4-5{0Z0#0%0z04.
Il est désormais possible de calculer la moyenne des valeurs d'un descripteurs. Là encore, écrivons une fonction pour cela.
La fonction moyenne
Compléter le code ci-dessous en saisissant la fonction moyenne
qui :
-
prend en argument la liste de dictionnaires à manipuler ainsi que le nom d'un descripteur,
-
renvoie la moyenne de toutes les valeurs associées à ce descripteur.
Remarque
Une version de la fonction somme
précédente est fournie. Vous pouvez l'utiliser dans votre code.
.128013/-weSkc_yuh1a(f,= ;sot7)dmq:3pnRvibPgr2l050z0e0w0n0I0O0u0s0h0O0n0u0u0r010w0I0E010406050u0k0A0A0n0M0j040f0v0O0k0)0v0F050b0:0=0@0_0.0E040519121c0b190.0z0I0H0X0Z0#0%0Z0F0L0k0n0L0e0c0E0j0w0l100s0l0I0L0l0O1E0l0w0,050S0J0O0e1l0!0$011D1F1H1F0w1N1P1L0w0M1a1z0X0|0u0E0n0F0%0N011R1n010p0U0e0F0n0A0e1L1-1/1@1T1`1P1}1 0,0a0s0K0M0v0E0v0u0I0 0F0s0Q1+0M0M0e0h2k12220F1a0b1z2x1%1)1(1M0z241o0I0F1|2h1L1i1k0Y1S2H2J0F0v2N1L0E2q1a2v2x2!0/1.2l2P1^2T0M0?0O1L0n1C2q0p0%030i0i0h2U0e1H2S0v0c0N0x0c0m0,0m120n2#2(0-2%232*1T2,2.2:2=0e2@012_2{2}2 2K32341=040N393b1/3d2v2G013i0n2/1a2;0l2?2^2`2|0Q3s2T3u0c0D0,0D3z2u3c1d2Y122N2A0z1)2F3g0%3P201a3(1b3$2$133!3/2Z2(0s0I0z0%2`2v3T363J3~40013O3r2I3t33351?280e413q3Q4c3S4e453Y3D3-010g0,0Q0p3Z3B0s3e2)1m3h0p0,0A0v0j1|2J4y2w4B3E0+040o4M3|3f4D0%0F4v102J0e0u4T4O4s4Q0q4T4A4r4W3F4v4$0h0M0*0w0e0k0M4(4/2Q014Q0y0C4T0.3_3B4O3 4j434e3w052;5a494k2~4m315d4g1~4i5i3/3R5m3v1L0b3a4)4:0d0,0s5D4A574N4 1^0u0z0,020B0k0v0w0t5N5P5R5T5Q0t0G1|0H0v0I1Q0Z0s4H4J0F2J2m4$0s0H3H4{0M0W2n0h1Q0Q0u4@4_5@5W5V5O5X620t554~3}5h422(3T3V466b5j5t6e5o1 4j5s5l6k2x3a5E4.3}4s4u042q0w4|115G046u4V504Y040u0v0=0e696G1^4Q4S6D5z6H4Z5-0e4$6O4C504+4-6U2+4=5~4^0E4`4|6!4P0,0y6(5I1T0v0,0b6^6v4:0F0J0,276;4*0,6S2$6_4X6W4#4%6T7a516?686T0b3{3#0e2x3=2y3*122B7t0n1O7o3%1j3d0b0Q0S0U0u04.
La fonction moyenne
est donc valide. Pourtant l'appel moyenne(films, "Gross")
renvoie un résultat faux !
En effet, pour certains films le revenu total est inconnu. Néanmoins, afin de proposer un fichier csv
valide, sans valeurs manquantes, la valeur -1.0
a été ajoutée dans ce cas. C'est le cas par exemple pour le 19ème film du classement (« Les 400 coups » de François Truffaut) :
Python Console Session>>> projection_multiple(films, ("Name", "Gross"))[18]
('The 400 Blows', -1.0)
Pouvez-vous calculer la moyenne des revenus générés par les films pour lesquels les revenus sont connus ?
Revenu moyen des films
Calculer le revenu moyen des films proposés. Il ne faut pas tenir compte des films pour lesquels cette valeur est inconnue (-1.0
dans le fichier).
Votre variable contenant la bonne valeur doit s'appeler moyenne_valide
afin de pouvoir passer les tests avec succès.
Les fonctions somme
et moyenne
sont déjà chargées.
.128013/-weSkc]_yuh1a0(f,= ;sotG)dmq3pn9vib[Pgr2l050B0e0y0o0J0Q0w0u0h0Q0o0w0w0t010y0J0F010406050w0l0C0C0o0O0k040f0x0Q0l0+0x0G050b0=0@0_0{0:0F04051b141e0b1b0:0B0J0I0Z0#0%0)0#0G0N0l0o0N0e0c0F0k0y0m120u0m0J0N0m0Q1G0m0y0.050U0K0Q0e1n0$0(011F1H1J1H0y1P1R1N0y0O1c1B0Z0~0w0F0o0G0)0P011T1p010r0W0e0G0o0C0e1N1/1;1_1V1|1R1 210.0a0u0M0O0x0F0x0w0J110G0u0S1-0O0O0e0h2m14240G1c0b1B2z1)1+1*1O0B261q0J0G1~2j1N1k1m0!1U2J2L0G0x2P1N0F2s1c2x2z2$0;1:2n2R1`2V0O0^0Q1N0o1E2s0r0)030j0j0h2W0e1J2U0x0c0P0H0c0n0.0n140o2%2*0/2)252,1V2.2:2=2@0e2_012{2}2 312M34361@040P3b3d1;3f2x2I013k0o2;1c2?0m2^2`2|2~0S3u2V3w0c0E0.0E3B2w3e1f2!142P2C0B1+2H3i0)3R221c3*1d3(2(153$3;2#2*0u0J0B0)2|2x3V383L4042013Q3t2K3v35371^2a0e433s3S4e3U4g473!3F3/3H0.2s0I1~0l0w0j0I3J410e0w3#3D0u3g2+1o1V0x0.0t4I2y4K4t4N0)0-040L4S3~3h4W4v041~1)0e0e4#4U3 4u0g0.0r0x0O4/4L3G0G0.4+2s4.3{4J4|4u0x0d0.2K4{4V2S4)280C4H534T554(4?040J0r5b4;4(4~4*0G4,522(5c1`4Y4!5i4$4M5d0w3y020D0l0x0y0v0z2g0%5J5L5N4#5k5d4Y0i5q4%5d4P04020N5U5D4:5#1`0C0J0.0p5V5z1V5Y4#0:5D4|414l454g3y052?5 4b4m304o33624i204k673;3T6b3x1N0b3c5|5y3 66442*3V3X486r686i6u6d214l6h6a6A2z3c5W2-0.0C0x0k1~2L4C4E0S5!5F1`5%4R5,6J3j6L6N6P5x3$5^4X0.0q5@5r5d5t4x4z4B4D1J0S5h6p5.5_0.0s6U3G5H0.5S5M5O5Q0w765+6}6V6 040A5{5V0b3}3%0e2z3@2A3,142D7s0o1Q7n3)1l3f0b0S0U0W0w04.
E. La meilleure année ?
Quelle année a vu se produire le plus de films présents dans ce classement ? Nous allons compter le nombre de films produits chaque année.
Une approche naïve consisterait à effectuer de nombreuses requêtes, une par année : « quels sont les films produits en 1900 ? », « quels sont les films produits en 1901 ? », etc.
Cette approche présente plusieurs inconvénients :
-
quelles sont les années à chercher ? On a fait l'hypothèse que les films ont été produits à partir de 1900 mais c'est vraisemblablement incorrect...
-
Python doit lire l'ensemble des données à chaque requête ! Donc 100 lectures des 517 films si l'on teste tout le XX-ème siècle...
Une approche plus efficace consiste à utiliser un dictionnaire dont les clés sont les années et les valeurs le nombre de films produits cette année-ci. On peut procéder ainsi :
- initialement le dictionnaire est vide,
- on parcourt l'ensemble des films. Pour chacun :
- si son année de production n'est pas présente dans le dictionnaire, on l'ajoute (en tant que clé) avec la valeur
1
(c'est la première fois que l'on rencontre cette valeur)
- si l'année est déjà dans le dictionnaire on incrémente simplement la valeur associée.
Films par années
Compléter le script ci-dessous permettant de compléter le dictionnaire annee_films
associant à chaque année présente dans la liste des films le nombre de films produits cette année-ci.
.128013/-weS{kc]_yuh1a0+f(,=6} ;YOsot745)djmq:3pnRvib[Pgr2l050J0e0E0p0T0!0C0y0i0!0p0C0C0v010E0T0P010406050C0m0L0L0p0Y0l040f0D0!0m0^0D0Q0y020p0L0P0z0y0R0e120Y0M0m0e0C050b0 1113150}0P04051A1t1D0b1A0}0J0T0S0-0/0;0?0/0Q0X0m0p0X0e0c0P0l0E0n1c0y0n0T0X0n0!1)0n0E0{050(0U0!0e1M0:0=011(1*1,1*0E1=1@1:0E0Y1B1!0-180C0P0p0Q0?0Z011_1O010s0*0e0Q1g0e1:2b2d2i1{2l1@2o0L2q040a0y0W0Y0D0P0D0C0T1b1d0$290Y0Y0e0i2L1t2s0Q1B0b1!2X2527261;0J2u1P0T0Q2n2I1:1J1L0.1`2+2-0Q0D2;1:0P2Q1B2V2X310~2c1d2?2j2`0Y120!1:0p1%2Q0s0?030k0k0i2{0e1,2_0D0c0O0q0c0o0{0o1t0p32350|342t371{393b3d3f0e3h013j3l3n3p2.3s3u2g040Z3z3B2d3D2V2*013I0p3c1B3e0n3g3i3k3m0$3S2`3U3s0{0O3Z2U3C0}3%3G0?3*3,053.3:3O3=3R2,3T3t0c0G0{0G3~1u403E361N3H0D3a3+3K3/3M3;3Q3@4d3_4f0H0{0H4k3141353(454u493P3?3o4A3r4f0w0{0w4G4m424p444r3J3-3L3N4O4c3q3`0F0{0F4X3#1E2 1t2;2!0J272)43014P2:1K1B2~0e303C3 4?4P572t0T0J0?3k2V3`3w4(5e5g4y4Q4-4f3w0y2y0e5n4P3^4S3u5k3~4Z2@3)0{2d2-0e0k2w0L1s4l3#0y4n3(0D0{0v592W5Q5D2j0`040g0x5W3D5O2W5R5m015h353`3W470y5.4b4z5q3V2h5u5w4,4e5}2X3A0}5+5c1d5_0k5i4f0O3K6a5x4R3`6e5t2p605{623{64683(0h0{0s4r5)5Y4J4 0Q0{2n250e0e6y5R4 0D0d0{2,6I5Z3H6v0*5M5)6J4!015#0N5)66333%6a6c3u4h5l5f5/5o5y3`4h6l2z6n5p6p6,3Z0y6~6z3F6X6u040T0s6P6A6X6C046E2Q6H676W5E5#0V6V6Q0?0C3W021p0D0E0z0A0e137p0m7r0z7k787h0{0j77715E6L0{2`0E7G4o7I6M740Q7N4K5G0Q5I5K6T5N6%7C5!0{6!676$586(6.5:2d3`4D6-6_6;4C5~6m6/6h5|0c7=6}6 827g387V7X5L7!7,7$1{7i7B7H857b0Q6F7e7#8f8c0{7j7f7l017n0{7x7z7u7w7q7s8e7O7%040j7F67708C1{5T045V8H841{0L0T3x6#8B5^7.6b5;4T6f8X7}6p4U6@5v7|614B3u4U6r838r733o0C8k8a8m0?6Z8U8q4J6)8Z3u4/7?8,6o8.0c4/8*7@6i4f9581826~8P44866G7Y0!6U908|6Y8o8V6B6D8i7d9v6X8d9r8J7m7o8z7t7v0Y8v8A9D3(5#8F7T6K0{0r8N318I3(8R8T7*6V0b5b4@564_531t0E4|9-2%2Y0p1?9*0b4`1z6s4 2Q0L5K0p0h5J0n6e041l1n1p1r0y7)331G3D1A0B1d2H0m2P0)0E0y0p0m0;0T0y1a0*0T8_0Y0y0/0y6w0Q2S0T1$055b2~0D0K2R2T9%3n04ab1E3D2;3(1Q1S1U1W1Y1!1$1}1+1-1/9|6X2w2n2p0{0W1Z1#7S7f55683!5,9(7-5n6c0o3v8#9d5qb15s5 976`4Bb62h4v4*5`ba4Sbc6r9k5F045H9n889R6X8L9V3C9X4 5#5%8 8l698Xb00c5?3e6g8-bibF7`6^b97^b12g4)4x8%bbbL6r7+4?a~6/bEa55@bI98bK6kb8bgbP3{bS4a6:9eb1b%0b3Abl736w0Ybr5E7abo8`5Pbl7J7Rc08gaJaLaE1c9A7D040tcf8gbq9Nbx0{0uc91{8t049L9I8y7y9MbB9O0{0Iac4m9N927:0Ob16|bH8$bJ3scJbM8+b.b@4gbd4NcSb5cU8;6 b|6N768O8rc27W6Gcq0?c77Lc.01c76Oc)8b9lbnc,5Jclczcn04cD3#bY5,b!7/0QcO7 b3bOcT4D9cddcYdfbebTcNcIdbc!9ibw799mc~7Zcj8n048pd0dsc|5Idw8}7Ec=btc=9Z043y9#cFbD8Zb18:b(cMb*da8)b-b?cY8)dkb=bUbKdSb`aQc#8?6D0+c4d6c`9td2bA8{bCa dQ9adccX4eb19bdYd(da9bd$4+dVdn9gd+dq9jc*dt9o9qdAcgdzd`7UdCc-cm9BdGc_9s8L9UdJ8SdLd_4?aO0$2Xa_9+0S5*0$0(0*0C04.
Il reste à déterminer l'année durant laquelle le plus de films ont été produits.
La meilleure année
On a chargé en mémoire le dictionnaire annee_films
associant à chaque année le nombre de films produits cette année-ci.
Déterminer l'année (nommée annee_maxi
) durant laquelle le plus de films ont été produits.
Pas d'égalité !
Une année sort du lot, il n'y a pas d'ex-aequo.
.128013/-weSkcN]_yxuh1a0(f,=6 ;Osot7.45)dmq:3pnRvib[Pgr2l050I0e0C0q0R0Y0A0x0h0Y0q0A0A0v010C0R0N010406050A0n0J0J0q0W0l040f0B0Y0n0?0B0O0x020q0J0N0y0x0P0e100W0K0n0e0A050b0}0 11130{0N04051y1r1B0b1y0{0I0R0Q0+0-0/0;0-0O0V0n0q0V0e0c0N0l0C0o1a0x0o0R0V0o0Y1%0o0C0_050$0S0Y0e1K0.0:011$1(1*1(0C1:1=1.0C0W1z1Y0+160A0N0q0O0;0X011@1M010t0(0e0O1e0e1.292b2g1_2j1=2m0J2o040a0x0U0W0B0N0B0A0R191b0!270W0W0e0h2J1r2q0O1z0b1Y2V2325241/0I2s1N0R0O2l2G1.1H1J0,1^2)2+0O0B2/1.0N2O1z2T2V2 0|2a1b2;2h2^0W100Y1.0q1#2O0t0;030k0k0h2_0e1*2@0B0c0M0X0c0p0_0p1r0q30330`322r351_37393b3d0e3f013h3j3l3n2,3q3s2e040X3x3z2b3B2T2(013G0q3a1z3c0o3e3g3i3k0!3Q2^3S3q0_0M3X2S3A0{3#3E0;3(3*053,3.3M3:3P2*3R3r0c0F0_0F3|1s3~3C341L3F0B383)3I3-3K3/3O3=4b3@4d0G0_0G4i2 3 333$434s473N3;3m4y3p4d0w0_0w4E4k404n424p3H3+3J3L4M4a3o3^0D0_0D4V3Z1C2}1r2/2Y0I252%41014N2.1I1z2|0e2~3A3}4;4N552r0R0I0;3i2T3^3u4$5c5e4w4O4+4d3u0x2w0e5l4N3?4Q3s5i3|4X2=3%0_2b2+0e0k100m0R572U0x4l3$0B0_0v5M045O5B2h0g0h0_0i1a0e5U0{4j4;3#5k015f333^3U450x5.494x5o3T2f5s5u4*4c5}2V3y5P4}0O0_5J5L5+5N664Y015R045T6c5V6e5C0J0R0_0r5)5U5P5_0k5g4d0M3I6v5v4P3^6z5r2n605{623_643B6k6u5d5/6w5;4d4f5j6Q5`5n6K4f6G2x6I6Z4z3s6V5A4H4}0g0_0t4p5U5W6.6f68045F0e5(6k6^3D6f0B0d0_2*6@6m365E0O5G0k2u0J1q6O5X1_0^040L6s7i4H6v6x3s4B6W6(5w3^4B6$5t6R6C5|0c7u3X0x7I714m5C6:040R0t787j427b7d7f7h317S017l0T6t7Z6{6}6 7Y6_5C7l0j7R7-2h6h020V0C0y7;725C6{6a7%7=7k0_7n6k5*7,5b6X6S2b3^4S7v7C616*0c4S7A7w6D4R1.0b3y7J8s7K4I690q5K7|7L7?5S8z8v6|7c6~7e0(7g817}2h7#8L8A3F7U6~8P3$7/7o881b7r6T3s4-8f6Y7x4d4-8l8g6J8i8%7H8t7I798R8F7d80708^0;6h6j2 8u678S7+4k6O0b594=544@511r0C4`9f2#2W0q1;9c0b4^1x5a8Q0;2O0J7e0q0g5H0o6z041j1l1n1p0x85311E3B1y0z1b2F0n2N0%0C0x0q0n0/0R0x2a0W3k9Q0R0W0x1=0*051k7O0C1k7h9.0x0I0n9@0R2Q0R1a2m9(1?851F0Z1I3$1O1Q1S1U1W1Y1!1{1)1+1-9r3$2u2l2n0_0U1X1Z0O6t539r3Y2U059a5-8a6x0M3t6A8a7D4caC5q5 8.6)4QaI2f4t4(8)8naO6M8~5D8`8H8|92aW908D6/5!045$2+8X56az5laB0c5?3c6B8haNa?5~6HaL8*aC2e4%4vaG4zb18p657(8w8y8}7Za%bd820;6o6qa.5,7qaA6TaC9B5@a_8/a{6FaKaS5obqaP4LbyaH6L3X87a/bna;bp4eaE8mbzbM8-bDb6bQaQb4a`3qaC6,8qai6/6;6?bg8M8_7*8U4}7l0ua(6`0_2^0J0S2Ob=5C7476arb*9saX7*8I0Y8K7pb+8 0_0Eb.b?9/9;cd7.0_0s0H9I978Y5^bo8c0MaC7Ga^aFbXcs7Fa}6%a aTczb3485mb0cz6M8saW7N7Pb|7a04b^b`963Z93730_7^7`cP8_a!bIc97!84blawa:6Ra=8ebscwbubY8jcA7BbSa{8kbVcGb5c}b85V8?cW7~bb6ba#be8Cc18EcSb{868U8!craC8;cvbObE8,bxcHcD8,c 4)c@cy8;b#d5d6cQc4c%cVa$dcdabhc38GcU2UbH4;993l2Vat9d0Q6N0!0$0(0A04.
F. Le meilleur genre ?
Quel genre de film est cité le plus de fois ? Facile, il suffit de compter les apparitions de chaque genre comme l'on vient de compter les années.
Mais les genres sont mal présentés : chaque film est associé à un, deux ou trois genres, si besoin séparés par des virgules, avec des espaces derrière les virgules...
Python Console Session>>> films[3]["Genres"]
'Drama'
>>> films[4]["Genres"]
'Crime, Drama'
>>> films[5]["Genres"]
'Drama, Romance, War'
Pouvez-vous déterminer le genre le plus présent ?
Le meilleur genre
Déterminer le genre le plus représenté dans les films.
La variable contenant ce genre sera nommée meilleur_genre
Astuce
On rappelle que la méthode str.split
découpe une chaîne de caractères à chaque apparition de l'argument et renvoie la liste des chaînes obtenues.
Par exemple "31/5/2007".split("/")
renvoie ['31', '5', '2007']
.
.128013/-8eS{wkcN]_yxuh1a0(f,+=6} ;sot7.G45)djmq:3pn9vib[Pgr2l050M0e0F0s0W0%0D0B0j0%0s0D0D0y010F0W0S010406050D0p0O0O0s0#0n040f0E0%0p0{0E0T050b12141618100S04051o1h1r0b1o100M0W0V0:0=0@0_0=0T0!0p0s0!0e0c0S0n0F0q1f0B0q0W0!0q0%1T0q0F0~050+0X0%0e1A0?0^011S1U1W1U0F1$1(1!0F0#1p1O0:1b0D0S0s0T0_0$011*1C010v0-0e0T0s0O0e1!1 21261,291(2c2e0~0a0B0Z0#0E0S0E0D0W1e0T0B0)1}0#0#0e0j2z1h2h0T1p0b1O2M1_1{1`1#0M2j1D0W0T2b2w1!1x1z0;1+2W2Y0T0E2$1!0S2F1p2K2M2?11202A2(272,0#150%1!0s1R2F0v0_030m0m0j2-0e1W2+0E0c0R0K0c0r0~0B0r1h0s2@2`0 2_2i2|1,2~3032340e3601383a3c3e2Z3h3j24040B0$3p3r213t2K2V013y0s311p330q3537393b0)3I2,3K3h3m0R3Q2J3s103U3w0_3X3Z053#3%3E3)3H2X3J3i0c0J3m0J3=1i3@3u2{1B3x0E2 3Y3A3$3C3(3G3+443-460K3m0K4b2?3^2`3V3|4l403F3*3d4r3g460z3m0z4x4d3_4g3{4i3z3!3B3D4F433f3.0G3m0G4O3S4z3v4R3W4T4k4V4m4X424q4!460d3m0d4)2L4+4f2)4.4j3}3 4n414p4H4_3j0U3m0U4~3T4A3`534U3~4W4o4G3,4J3j0r0t0~5t5g504B4/555n585p4I3.0r3l045H5x4e5z544D574Y4^455s3M0r3P0b3q3?4*5M5j4C4;4E4@5a5T3k0R5v3;5Y3R4 5$4-5(5m4=5o4Z5-0r485J4a5=5!2L1s2;1h2$2P0M1{2U5j4G2#1y1p2:0e2=3s651p4G6m2i0W0M0_392K5G3A6t6v595q6y0B2n0e6B5E5b3k1!644Q520T0~1x3b0m1J0T2F0D6o0B5^520E0~0y6Z6#270}040g0A6o104c3S5M6A016w2`3.3M5m6_5+6D46246F2d6H6`6C5F736M5Z6O2}0~2e0-1(0p0#6U2b2F6*7e1,6%046)6?2L6!7q0_0i0j0~0k1f0e6;6o6^6u786x465/4V70796K5/752e6I5~4s3j7N3=7y3W7g0s0o0W7p5i4-7s7u2?7x7,520O0W0~0t7G7v6r2A7P7L3j616 7J717a81256G7V5S7X477c3t7|7I6B800c4u7O847Q5-4u7T77856K8l7!7=270i0~0v4i7+4,6P0~6V6X8D51270E0h0~2X8J4B0~2:0E0N2G2I8g7#6-0u7H7#6Q042l0O6Y8Y8x1,6-0w8Q5j0D3M020P0p0E0F0C0I7n0e0D8_8{8}8$8.0_6-0L0Q7{2^3U7 6|4K6z8n6J5-4L8r8a5,8c4L2M3q0B9u7;8E7f040D0E0p0D7m6W918=7-6(9H8F048H9G8-9x7r0~0H969Q3{0~1 1W0F9U8K8/0~8#9P9$0_8@0~938|0C0w0B9/959*3V999c6n9e8n8j4$8m9o723j4$9n789k8ca13Q9v9w9+018z8)8C7|ae8R9M909K8L8N048Pak6+3x9X9B9D9N8,9d97016-9b7|6=aC6s9 9g3j4{a2a87W5r0c4{a78t5-aOacad9vav7z8O0vapawan9Fa*0_8M0~2,9!au7#a:as1ga@aD8(6S0E9E8I9_5jaF9|6@9~8iaM0c5daPaW8c5daV8obf8ea!blal5%6R0W6TaA9#9`0~0Ybtboa,7ob34-6-0la.017.bF7@5vb666b87Kba5t9ia3863k5ubha9aSbQ9s3Nbma$ag0~3d0D7FbB52b5aHbt9f215G5I83bS6K5H8876b`5 b^5=bma!b%a~bqb0bsb-6,bvbx5_8Gaoca9%04bEa|9VbG0~0x7/3sbn4-bJ5JbL7}0Bb=0T5G6~337PbXcBb}7UaQ8bbY6~c2b$7#ah0Wa)clafc6br90aB9}aD6-bwch9Wbzb,aJafbDbF7s020!9^7:c57%7)cdb.0~aG4yb;aLb?460r7ZcD9jaR5G7S89cJ9pbY7ZcNc39uc@047h0%7j7l9Nc.9JcTamdob:9_cz5G82d5b 8c60cH8sbibY82dfdgdi15c_dr5jbHdNce04a b19Oc+bu04c$dWbydkdmdUc`cbcjcw1h6q676l696i1h0F6cd?2S2N0s1%d:0b6a6=0)0+0-0D04.
# Tests
(insensible à la casse)(Ctrl+I)