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
.1280134r[S=0y9kP)_5(gf8l6umpinh17;ec./]2d3, b-owt:vas050J0D0R0U0x0s0V0M0E0s0U0V0V0f010R0x0w010406050V0u0v0v0U0c0h040e0P0s0u0:0P0y050G0`0|0~100^0w04051g191j0G1g0^0J0x0T0(0*0,0.0*0y0p0u0U0p0D0O0w0h0R0z170M0z0x0p0z0s1L0z0R0?050Z0N0s0D1s0+0-011K1M1O1M0R1U1W1S0R0c1h1G0(130V0w0U0y0.0I011Y1u010q0#0D0y0U0v0D1S1@1_1~1!211W24260?0a0M0k0c0P0w0P0V0x160y0M0X1=0c0c0D0E2r19290y1h0G1G2E1.1:1/1T0J2b1v0x0y232o1S1p1r0)1Z2O2Q0y0P2U1S0w2x1h2C2E2+0_1^2s2W1 2!0c0}0s1S0U1J2x0q0.030m0m0E2#0D1O2Z0P0O0A390?0A190U2,2/0@2.2a2;1!2?2^2`2|0D2~01303234362R390O1|040I3e3g1_3i2C2N013n0U2_1h2{0z2}2 31330X3x2!3z0K0?0K3E2B3h0^3I3l0.3L3N053P3R3t3T3w2P3y3a0b0?0b3$1a3(3j2:1t3m0P2@3M3p3Q3r3S3v3V3^3X3a0n0?0n3~2+3)2/3J3-483;3u3U354e383a0t0?0t4k403*433,453o3O3q3s4s3@373z0B0?0B4B3G4m3k4E3K4G474I494K3?4d4N3a0r0?0r4S2D4U422X4X463.3:4a3=4c4u4)0O0i0?0i4.2E2(0D2E2U2H0J1:2M3+014t2T1q1h552*3h3%3G054t5k2a0x0J0.312C3z0A3p5s5u4|3W4w3b0M2f0D5B4t5D5x1S0G3f414o0?552!0v0V5m2D0M5Q5d0P0?0f5X045Z4D4=0=040d0H5)0^3 5n3I5A015v2/3z3B3/0M5`4%4}3_3A1}5H5J4M655 5O5q4;1 0j0?0Q2q0z5)5+4n5d0y0N0?2m235)5!4W5.0o6v5,2=0?2d0D6A6o4W5$045(5@2D6w4=0V3B3K0U0R0I0g0I0A0F0E0V0T016G4V5-0?0L6m6O6C040v346(6f1!6J6L2-6B1!6Q0?010c6%6M6e3J5.6,736n6)6/233U2P0p6?3J6_7g5d6~0401150q0O4+7j6x0?0l6-6|0.6h040+7w6H4=0y6D0x0E1K0D0c7s6*040S5=7g620m5w3a3Z4I7S5K4v3Y67255I5{5C7!7V5N3f0M7/796@3,7G7I0x7K7M1 6J0F7{3m0?2x0U0J3x7 0.6y7v735?6{4n7S7U0O3{7X5t7)7Z4~3{5G7%694(658h3E7:7;3J7z0q457C7a80041(2Q8B7=010P0Q0?2P8H5R04217^7`736.1!5.7P8a7R8j5|1_3z4h8i8q644f0O4h8o268+5L4g7-5*8v7:8V7?8E1L2Q0m2(2m2x8O5#5%954W7F8~0p8G8U7x8J0?7~9e7D6/0V1.0;8601887Q9j5r8#7T5}4x5z9v8l654y8:7(638?0O4y2E7.8`7/8|3K0?0T3M0D0u0c5W789O7i9X9f9a8F0D912l559p7}9p9a1@1O0R9p6y9p7l010C728c8C877u9s9}2s8e9x0O4P8*8k6a8-4P9E8=7+a68^9M9N9#9Q9S9U9Wa2750?0d9p0v0x0?3D9t8I5.5;9!9k6^97aC9~3K6r042P9=ayaq046zaN6pal1Wan9?aratav3CaW040H894l8!5B8f4+a89Gaf4+ada98r8-a-8uai9O9a9RaU9Va#asaR4Wau3!a#aB2+8w966K987EaJaLa#aQapaS04a~9Tb0b37Nb2bjb4aZ3#bp1 aAa(40aNa48%3a50a.7*4~50a=a/bIaha{ak045T0P5V9,9h9.0?0U0w0w230JbhbWblambobs7Nbz4T6v0G5p1k2)1958190R5ab`2K2F0U1V56b^5h5?0X0Z0#0V04.
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
.1280134r[S=0ykP)_5(gf8l6umpinh17;ec./]D2d3,R b-owt:vas050J0C0S0V0w0r0W0N0D0r0V0W0W0f010S0w0v010406050W0t0u0u0V0c0h040e0Q0r0t0;0Q0x050F0{0}0 110_0v04051h1a1k0F1h0_0J0w0U0)0+0-0/0+0x0o0t0V0o0C0P0v0h0S0y180N0y0w0o0y0r1M0y0S0@050!0O0r0C1t0,0.011L1N1P1N0S1V1X1T0S0c1i1H0)140W0v0V0x0/0I011Z1v010p0$0C0x0V0u0C1T1^1`1 1#221X25270@0a0N0j0c0Q0v0Q0W0w170x0N0Y1?0c0c0C0D2s1a2a0x1i0F1H2F1/1;1:1U0J2c1w0w0x242p1T1q1s0*1!2P2R0x0Q2V1T0v2y1i2D2F2,0`1_2t2X202#0c0~0r1T0V1K2y0p0/030l0l0D2$0C1P2!0Q0P0I0P0z0@0z1a0V2-2:0^2/2b2=1#2@2_2{2}0C2 01313335372S3a3a0@0I3g3i1`3k2D2O013p0V2`1i2|0y2~3032340Y3z2#3B0K0@0K3F2C3j0_3J3n0/3M3O053Q3S3v3U3y2Q3A3b0b0@0b3%1b3)3l2;1u3o0Q2^3N3r3R3t3T3x3W3_3Y3b0m0@0m3 2,3*2:3K3.493=3w3V364f393b0s0@0s4l413+443-463q3P3s3u4t3^383B0A0@0A4C3H4n3m4F3L4H484J4a4L3@4e4O3b0q0@0q4T2E1l2*1a2V2I0J1;2N3,014u2U1r1i2)0C2+3j3(3H054u542b0w0J0/322D3B3d4J5c5e4d4v4*3c1~2g0C5l4u3X4x5p2F3h423K0i0x0@0w0u2o0c0S564:4E2Y010R0@0N5K5a435N0x5D040D0W0U5S0_40573J5k015f2:3B1}5j5d5,5m5v5/5q265s5?5u4w5_5y5T4p0@522#0u0W5S5R5M200Q0@0f695A4|0?040d0G5$5S5A5+5-1`3Z3r6q5@5 3b3!0N5r5t4N3`0P3!616h4X0i0@0R2r0y6g6b3o0O0@2n246o6Q0/6j0n6W4o4|5X2e0C6#4W5N6d046f5(5L6$4X0W5:3L0V0S0I0g0I0z0E5Z0U016+5U206j0L6P6?5V0@0u35753K6.6:2.6X016^0@010c746;626i0@797s6a7b2?0@243V2Q0o7g4|7i7G6@6_160p0P4,7J5N6j0k7a6,206K040,7U763o0@220D1L0C0c7Q770@0T6n7s6p5=6r0x3B3|5;6C4)6E3|6A5{7}5n7 1T0F3h0N897y7V7$041X2A0C0t7,7x6I6-6e7!635Y5!7-1#6.0E8s3-0@0H0w2A0M0C0V0Y8j7k7z1#6Z8w3L7%8A7*8G557l788o6%0@4e0u2r7+8L7I7=7l7n04010B7r8H8c6Y0@7T7s5%8.2t6v5g4h6u7@6w5o4i8127835^8|618a8b7#0/7X0p468U4X5X241/0C6*8k7l0Q5P042Q9f7c8e2z0S8h8Q5)8I8:047:8?7g8`5.4y8}946x0P4z925|4(844g9M8688988a8l7A049i2y9l8^3K6j0d8L8)011`2R288L6j6m9m9A018$2,994p6S9q0x5J8%9_8Ka38/8M9!a19$9=0@9+a69a7m6_9/9k8-8Ra40@0G8=4m9F8~8{0P4Q7|5}6D9S4Q9O9K5oaw3F9W9X7l9haa9kac6k9,6_660O2yal9za79?9s6c8n9^a70x9 2Qa29(7u046!af8p9#aMa/a,aea+7K7oaRaTaNap7;9(9G6s4+9Jay7~9S4,aCb69R5w4,97aH9}8V04650Q678#0@8va?9g0@0V0v0v240JaNa.a_9ta;9%amaW8;b0550F594;534?501a0S4_bP2L2G0V1WbM0F4@5%0Y0!0$0W04.
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
.128013ANé4r[S=0y9kP)_5(Ogfà8l6umpinh17I;eEc/C]FD2d3 b-owtvasL050S0J0Z0#0C0x0$0U0L0x0#0$0$0i010Z0C0B010406050$0z0A0A0#0f0k040h0X0x0z0{0X0D050M12141618100B04051o1h1r0M1o100S0C0!0:0=0@0_0=0D0t0z0#0t0J0W0B0k0Z0E1f0U0E0C0t0E0x1T0E0Z0~050+0V0x0J1A0?0^011S1U1W1U0Z1$1(1!0Z0f1p1O0:1b0$0B0#0D0_0R011*1C010u0-0J0D0#0A0J1!1 21261,291(2c2e0~0a0U0n0f0X0B0X0$0C1e0D0U0)1}0f0f0J0L2z1h2h0D1p0M1O2M1_1{1`1#0S2j1D0C0D2b2w1!1x1z0;1+2W2Y0D0X2$1!0B2F1p2K2M2?11202A2(272,0f150x1!0#1R2F0u0_030p0p0L2-0J1W2+0X0W0y0W0F0~0U0F1h0#2@2`0 2_2i2|1,2~3032340J3601383a3c3e2Z3h0W24040U0R3o3q213s2K2V013x0#311p330E3537393b0)3H2,3J0T3l0T3P2J3r103T3v0_3W3Y053!3$3D3(3G2X3I3i0e3l0e3;1i3?3t2{1B3w0X2 3X3z3#3B3%3F3*433,3i0q3l0q492?3@2`3U3{4j3 3E3)3d4p3g3i0y3l0y4v4b3^4e3`4g3y3Z3A3C4D423f3J0G3l0G4M3R4x3u4P3V4R4i4T4k4V414o4Y3i0w3l0w4%2L4)4d2)4,4h3|3~4l404n4F4@0W0l3l0l4|3S4y3_514S3}4U4m4E3+4H3j0j0~0F0j5e4~4z4-535l565n4G3J0F3k045F5v4c5x524B554W4?443j3L0F3O0M3p3=4(5K5h4A4/4C4=585R0F3.5H3:5W3Q4}5!4+5$5k4:5m4X5+465H485:5Y5=4O505^544;575o5E4s5H4u614a5Z642}5y5N685C590F4J5H4L6f4w5?656k5%5O5)6a3i0F4!5H4$6t4N5g5@6x5_5(695D6C4_5H4{6H6h6J6w5M6y6m5|4q3j5b5H5d6U636W6j6Y6M6z6O590R5r046@5J6i4f6/675{5Q6$0R5G736{6-6}5j6 5B6#5p0R3L7e764*6X795A5P5*725-0R5/5X6g6,7i6.7k5`7b717d5~0R607s6u6|4Q6~7l6A6P3K6c0R6e7F6I7v784.6:6!7A3J0R6q7!7h4 7w7V7a7m6B3K6E0R6G7R6V7T7I7x6N6n5R0R6R7}7%5L7_6;7{726(0R6*7=7u7(7U5z7y7,7M0T6^8h805#6L7+7L590T5G8q8k6K7J8e8o5R0T3L8z8t7j7*7K6=8y5-0T7r5;5f7@5i8E8w8G6$0T5~8T8C7)8d7`7c3-6c0T7Q8L5w8l8v8Z7Y3i0T6q8:8W8c6l707n5p0T6E8|8?7^8P8-8`3-6R0T6T898M8b908Y838!8/6(0T888L1s2;1h2$2P0S1{2U5h4E2#1y1p2:0J2=3r621p4E9z2i0C0S0_392K5E3z9G9I8R5p3k0U2n0J9O849Q1!617H010L5G030U0#5Q0U0J0$0Z0U0=9:0C9.1)2C0Z0X1d9-9:9}2b1_0d9}3b2E9-2v0D0S219/0#0z0U2:0d2,0A0U010b5Q019B107t9E2A9N019J2`7Z9M9Hau9Pax9S2d9UaA9Wax2M5X9!0D0~9*5*9B0U6v270X0~0iaQaS1,0}040g9BaY3`0~a02F0JaX9!0m0~0u4ga.77a)04a+0Ja-aqaR9!0X0Y0~2Xa@8NaM049xah0$b59a01a:040C0ubc4za*0D1_a|a%9!a!a$aqa(010A0C5sbpa^01a!0Obj5haU040iaWa~bu0$3Lak0Q0K0%0H0c0Kanbtbq0~bDaqap2^3Tatav213-ay9V9e0W3.aD2eb-8.b/9Y3pb#9Ab%azb)0D3J5~5kb(aB45259Tb?93c6aJar3U9$0~9(212Y0J0p6@0j0G9,9.9:331W9@2B1)9`9|0/1(0/a+a20/a42F1 1fa9bm0U0v9:00cia23N0jcnaobz9Fb~0p9K4rb,aGb.4sb;aF8x6$6c3;aLaN0Dc;ckcm6G2?a bAbGbJc_bubrcVbdb7a{a}c~a/a;a?bKc/a`bma,bE4+b1b31gdabAb7b90X0Abbdk8Nbfbhdf65blbnd5b|bAd0bWbAbw0~5Vb$dBbYdvaTaVc}3rc`8NdF6_cSc^dA8NbCcUdDcW9OcZ3hc#c+5p4Jc)c97-6q3Pb{3R5Kc4d%6Ec3cXaH3i4!d-c$b@d`9ZbAcf049(2lcAcp9/9;ct0Z9^cw9{efcz9 ddcD2DcGa7cJ9/cM0)0/afba0U0u0dbw0D2Xdq6ud!ascXd%6Rd{d.7M4_e0d*3JeKe4b6a;0-cAdL1,c|eY0_dCdIeUdcdye#bed80fe,d3ddbodrbddhbgdjd6dl0~dndpe,dtbie@bke*deeG3Ue%dWbddS5uf85hdYf4bFdNe,bM0~010PbVe(bdfheFfr0Ud^aw3i6(eLe1ca5ac7aEeM59fA5:d=2Ld@eIfy5qd)c5fQePfS5tb_cd9s9%1}0z0f0ZcBcqed9?efcv0Ucxej9~cBema34gepcIaadZfvfxb*6C5GfBeQg1fFb=fC7-5FfXbue69(et9}ewdocE9{f%0/0r0T9~1=cG0U9{0U0A0XeD0of}fbfwfOg05SfRd}gEfUgG5Ugbdb3bf$f(e,e!fi4+fad?dbd4f1e.e:dxf7e|8Ne_b4gSdwb82FbagYbgf3g%d20V0~2md1f90~0rg{5#g#e?fvfg0~bsh34+dS3nffgTbYgyg+dM04020x0Z0IdO3RdQfcbx045/h750ft4bf8f c06C5-g3fVb:c8g87M5,fXfLcdhy5Ec233c4gJ46gIb.0Fc2eTbdgd9:1f0tf)eccsf,egf/ei9}eacCf^a5cHa8f|b!g{hM6Cc-hPd|hUc(hFg43jc-hXcef!gfev0faggih!1Fgm9.0f0C2H0J2ecK0B1c0/2C5tgpbn0$hefugAh{3jd:h~fH5+d,i2fVd:i6h0040xh#eEdPbugRg?g|a#g 5@h1dzhnbubfa=e/hf3wiXgQb2e`g!g-2Zf0i(0_f2e:g^iL2biVhug}i|2}i*hbi}iUj227h9i aZhdgQ0~020thke,h9feht27hv5ZhxgChz3jd`iChG6od iGgJe3b`h`jo5EeKjsi30FeOjwhUeSaKe5f!eC3b1Bcl0jjGebcr9=cu9_h-ekf?a1h;f`h@bmgzgV4yiz0FfAjEfV5bhTb@j/gLjMcg9)adghai010cij1b0?fqhwf~jB3i6@gFb.kbj@fDkbccgcf!2vf$cNcP1)6@jGj+fMb}d$fP73kcb@kxkf7-kxkidbjOk40$jRkri=01iRiPbXj4jji)f6h2kObAi#d9iSiKgXkLg)e{kVe)e iOiZd7g;i.k#kRe$h5j80_j7j5j904bZkZdgfkkLfm04k10H0N0s0%0b0hk6k-c{i,210Sk:e=iYktdJkQgA5hdSdHlohck}jbbHhm2Lho3UlqjS6Tk=bBdKh_jnkvgD7ekykg24kB7MlLcchKfNlJjp7qlMkChEfGjt7|hBiJ4+hZa{0p0q0p0*0p5t0pbw0x1(jUf+jXehcyf=9,f@gjh=eqh^ixj,d#aAd%7DlYlQhSjIkzhWjL8NhZ0S1f0D0dj#2F0U0q0UcS0j9,9/ismueygw0/120f0U0z2Y9)c;cQ0r2X0;0zcz00mGmwkn1d2Fiwk7iyk97Nmc6?i1l#i37Pj`e)l,l.l:l=l@1(lvlx3Mc k@k{a_k;k)bdkXi%k g,m}ldg(i,g*n2j0i/g/kLi@kLdSl.mulvhihkm@lzk!ljk^lFlnm7hp0~hslsj3k~m~3UbGnkhljghql=nim{nrnzjmk8lV7ZiBgBiD72iFm(fS7!hJjAnOkajrnRl$72jvnVgG7:m+hYf!e9cknHcSl`h)l|h,l~h/m1eoa6f{j*lHnNm9kwjDn%m)jHn+kdjKfYl*i8cviaicdpeyeA2XeDkshLmZ87m#7|j?mfkgfJmin/j|mlmJevipf.myn@a=9?0UmDmFmHko0UmL0DmNivoplUo5gD8hot8S5rlP8p6^c.e}04n;l;0j0pnIn9eZaVe,gUllm,npndgZkLe;e+k$n7k(n5d2e~g.gig:duo j1lEo_oe50fdnqjllyiQl1o=0_l3folcplb0lfa8lip1pem`lEdSnwntiTnLptc{jcjenEnfnGo/o;nxjklGm6o`eHn!b/g2j;gG8qg6c*fSp#lSnZoXjp8zo!8{lOow7-p.kEj{e71}0A2v0$9 f*n_f-jYn|elj$m2j(eroVkup,3-hBpZb.8Jp$nS8{l(ozi7j|i9aeibex3bp|2wmoqaj-mZ8Tp/3-meobb@qAp^mjf!0Nggqrid3bbm0C2b2+9/mR1_0,9/0SmQeC1fqxm8b 8#qB8/m%g7i38%n.f5qtp}9-m?o^pApQkSn4pHdso~po3VpdnAbFp3i.k+pag=r44+pq0Wpsm^pudipxg$q{k?nspUlAnGpjbYpG3slIqc8/nQhQqgnUq-p(iIjzrvq(8/n$rzqFn*rCp!jypg27hZ0#0p0)0V1dn^jWq2l}f;n}q6n h?q9o3mYpW96q*b/oarNqgodkjqoohqqojiq0drW0+bmev16jV1(gq1)akrflTqbrHb/j:o8p(ovqEfD9hq:iKrTrV1dq^kLpfbup0rkp53Un0rjkUsxr5ripcnbp9o}k/sFq}rQk|h6rlbvrqnJbCsOpElphqjisPpkrgpIlwflbN0brfm_lur,d?0M9D9k9y9m9v1h0Z9ps_2S2N0#1%s?0M9nap0)0+0-0$04.
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
.128013NéS=P)5(Ogfà6pinhI7e/xC]D3 b-ovLA4r[0y9k_8lum1;EcF2dwtas050!0u0$0%0p0R0(0B0X0R0%0(0(0e010$0p0o010406050(0S0T0T0%0J0M040d0E0R0S0|0E0q050v13151719110o04051p1i1s0v1p110!0p0F0;0?0^0`0?0q0k0S0%0k0u0D0o0M0$0r1g0B0r0p0k0r0R1U0r0$0 050,0C0R0u1B0@0_011T1V1X1V0$1%1)1#0$0J1q1P0;1c0(0o0%0q0`0Z011+1D010l0.0u0q0%0T0u1#2022271-2a1)2d2f0 0a0B0f0J0E0o0E0(0p1f0q0B0*1~0J0J0u0X2A1i2i0q1q0v1P2N1`1|1{1$0!2k1E0p0q2c2x1#1y1A0=1,2X2Z0q0E2%1#0o2G1q2L2N2@12212B2)282-0J160R1#0%1S2G0l0`030P0P0X2.0u1X2,0E0D0U0L3i0 0B0U1i0%2^2{102`2j2}1-2 3133350u3701393b3d3f2!3i3k25040B0Z3p3r223t2L2W013y0%321q340r36383a3c0*3I2-3K0D0A3m0A3Q2K3s113U3w0`3X3Z053#3%3E3)3H2Y3J3j0D0I3m0I3?1j3^3u2|1C3x0E303Y3A3$3C3(3G3+453-470h3m0h4c2@3_2{3V3}4m413F3*3e4s3h470n3m0n4y4e3`4h3|4j3z3!3B3D4G443g3.0t3m0t4P3S4A3v4S3W4U4l4W4n4Y434r4#470Q3m0Q4*2M4,4g2*4/4k3~404o424q4I4`3k0N3m0N4 3T4B3{544V3 4X4p4H3,4K3k3j0 3j5h514C4:565o595q4J3.0U0U5v3o0v3q3@4+4f5z554E584Z4_465t3M0U3P5L3R505P5k4D4=4F4^5b5W3i3:040U3=5#5N5%4R535*5n4?5p4!5/0U495=4b5^4d5O5{2~5A5S4@5a5r5G4v5=4x674z5(4.5}576e5E5c3i4M5=4O6l4Q5j6o6c5+5T5-6g470U4%5=4)6y696A5|6C5~5,6f5F6H4|5=4~6M5`6O6b5R6D6r614t5t5e5=5g6Z5i4-6P6%6R6E6T6t0Z0L0 6|5x6n6?5m6q605V6+0D0Z5I0479706a4i6@745D6*5s783M0Z5!5M686!6=6$735C5U5.770Z5;7z7d6#7f7u5 7i767k0Z647K7C7s7E4;6^6)7I3.0Z6i7V7N527t7Q7h7w6G3L6v0Z6x7p6m7e4T7g7v6F6U3L6J0Z6L7-6z7O7:7F6S6s5/0Z6W847Y5Q806_827y6-0Z6/7|6N7~5l7#7=6`5/0A6}048o875)6Q7$7?6t0A7a8y8s6B7;7G7%7@3/3M0A7o5$6;7Z7P5B8E8w8n5;0A5@8g7r8N7 8k8Q8m770A648(8B728!817j3.0A6i8;8+7!8P8.7T470A6v8}8@8O6d757x7k0A6J96908Z8_8a8/8|6W0A6Y8W8M888-9c8{3k0A6-9p5h1t2=1i2%2Q0!1|2V5k4H2$1z1q2;0u2?3s5_1q4H9I2j0p0!0`3a2L5G3A9P9R8$7k5I0B2o0u9X8b9Z1#5^7/010X7a030B0%5V0B0u0(0$0B0?9|0p9`1*2D0$0E1e9_9|a62c1`0ca63c2F9_2w0q0!229{0%0S0B2;0c2-0T0B010H5V019K117q9N2B9W019S2{7U9V9QaD9YaG9#2e9%aJ9)aG2N5M9-0q0 9?5.9K0B71280E0 0eaZa#1-0~040K9Ka+3|0 a92G0ua*9-0O0 0l4ja`7Da=04a@0ua_aza!9-0E0#0 2Yb08iaV049Gaq0(be8Y01a|040p0lbl4Ca?0q1`b5a:9-a-a/aza;010(3M01bi0E0TawbCbz0 0ybs5ka%040ea)b7bDbF0 at0z0W0G0s0b0WbL2_bN04bPazayb,4BaCaE228:aH9(9d9o269$b|9n3/9+3qb;9J3Ub@0P9T47645nc9aQccb aNc1943.cd9,b19.9:9=0q2Z0u0P6|0L0t9^9`9|341Xa02C1*a3a50:1)0:a@ab0:ad2G201gaibv0B0m9|00220qab3O0Lcyaxbyb?aIb^0q3.6icec-aK4uci2fck7(0Dc;cobfaWct2Zcwc(6L2@b8cpbSbVd7bDbAc+d0b3bva^bQ4.boa~0Jdk5|bubwb6dcb9bbbp1hbWaU0 bI0Tbkdzcpbobqdp2~drdjbMcpdedN8ibY0401c!b5b+c7dObOdJ1-dadb3sd88i0T0p6~d5dfbma-b/6mdQaBc?cb3k6vc=c{8G4MaMc`aPb}0Dd}5#c63S5Pc9d{0D6Jd~e4c24%e2aO8R77efc bm9/0 9;2mcLcA9{9}cE0$a1cHa4eAcKa8dicO2EcRagcU9{cX0*0:aobj0B0l0cd,0q2YdEd@b=9Od`aF4{b{ehcle)ekd 6t6W3?dA04eu9_d#0`dae`bH0 bBe#bmbgb4dtd)bDdma dFdgf4e}babcdyducpbgdCeZf6a{bcbrfaf2dLbxd^3VdPf13VdSbE0u0w2gd:fvd!fq3Vd%e}fz0YdXeab-d?4efuece(5de*em7k5ee.e+c|6-3Qe92Mebe%b_6H8pegfX5G6}f!f;f.c4aA3Ver049;3c0S0J0$cMcBey9 eAcG0BcIeEa7cMeHac4jeKcTajc*fSf,c/6H7af:c@5t9!c0f#8G5Hf`bDf}9;eOa6eRbJcPa4g20:0i0Aa71?cR0Ba40B0T0EeY0gglfxfTf-5XfWgs3i25f@g%5Zgze?g0gJfda(e}fwdYfbdiftfh8if8dofH5)fsf53Sd*bmfedxe}fj2Gbje}dHfpg|f20C0 2nfE5ka-0ihl6oh2hp53g@fOcpfzdCfNf*fPgWh04.bS020R0$0Vd(h4bDd,0 5@fxhmfGe!g^d_9Xed5?g$cg5t3:g*h!5:f`f)f{gZgo5tcd34cfe563c_elg+cnaTcpgB9|1g0kg4excDg7eBgaeDa6evcNggaecSahgkb:fEh-6hhZh?4vh%img-h}crgDeQ0JapgGh 1GgK9`0J0p2I0u2fcV0o1d0:2D3jgNbw0(hChThve$hWfU6uilc20Ue1gvf^5te7h|dg0Ri0flhLb9g=hDhte hsdKdhdshda}f9hgbti_dMi~bRdwbdi;i^fki{bphffmfihi04hkfuhR04hojhhqj0g{hUfFa.i@1-hxhbbJhzf{ji0yiQjc8ihF0khIe}hN5=0Ljs0`d=gXjpij6Hefh;c?h(6Ih^e/62eoc5iign5Ge;jTjY770U4|ioiYe;epf|creX3c1Cd4j-ewcC9~cFa2i8eFgeaaicgiifbvjOiShVaJhXf%j*gw6t0UfZi#g+f%j=9Bcralanivaqas0biD1c0@jxh+f+iUg!78f/kgi$kFjXkh83f/ko4.h~2wg1cYc!c$6|j-kahAc,kDh.78gqkHg%79kKkIk+aSjyjmj^ky0(j{6Yj2hEi:k`i=jrjldqjnh32Mh53Vg~h9hrj6d$j4fgjCfrbhjvdDj9dIlab2fcl028hukZdRbGhyjLe~b.g;bThKl4bXbG0b0s0x0j0G0H0djxl5j3d10!l8l2lvlqk:53fzdVfDloa,hSlefIa(lA3NhMd-7b0LkXlZjMl#5Ogmk#7U3Mgrh(7nk,k*l`e8j$l^477ziXe,3Lh$kll|5;e=ires9^g`0P0h0P0+0P3j0Pd,0R1)j}g6k0eCcJgdmgk5gHideLigiRlrkcc.7Uh:0Bh=c27Kl~l|h{lU28h~0!1gc#k42G0B0h0Bc(0L9^9{iMm$eTgU0:130J0B0S2Zcsc#1*0i2Y0=0ScK00m=m(kT1e2GjBl?gYj%m4c;k)l|inmae57Viqg_bwmimk0$mm0Lmo0.1)lyl)lM4.lTbDf3g`l3l*fne@i}l$h1lRll01h7j5k}j7lhi-lBnClknM1-jImjm$lyhGhIntnxl9hQnvi?l:bEbGaq0C2Gjxddl=nQd90 nZhJjHl,mnnXn+jNihl@kdiV7+m6c|o6j/m778i(3to3mHm4jSmKjUnfejnemMj!mR1-h~e^nn0Pm+9_i3j g8k1mwiagfmAk7eMkYh,n83Lj)ojj+7Jj.onob84nheqiscGiuiwdDeTeV2YeYoIkCo4kE8eo78Go-oao8kni)oVmfmUct0ceQiJg9m*c(m,9 0Bm/m;m?kUm_m{iJn55%ofcaiV8oo.8xf?oRc|phk/n$e@nqcvn~c(nsg?n*n(l1lnnT0`l7nInyi`nInKldi.fidBnOljjbpKnij1jpjif0pT4.fz0(fBlYpylpn?nBn^lzfKbGfMfddw22lPpEn%pWk~pVkbfyn-bJn/p#p^p%lxpHn_jFn{nIjIptjKo0p(kBc8oK3/k(oNkL8%gucjqk95gqm1peed8Jpi8ng)pl8Gqupo9-h~3c0T2wpZi2j~ezi6gbi9eGmzeJafgjk9o2n7m39omcnbe58UmOq!mckO53h~itksoZgHqF2xo|o)qfqW3/mJmLob8(q$c2q}qBmef~0B0xgEktix3cbv0p2c2,9{n01`0-9{0!m eX1gq?k!o+k$8;qv8%ndqnkIrrr1dgqEqGe_q4bTpwk p$3xp@pQbmpDpB3WrJn@jDlclQj8nIhep,bZ0DlLbDpIlQpAq1l!rGr)0`ju2!bKlSbOfQn6jPqg8}rs95i!rvg%r`k/qeroog9ooiq{pmomr~h(96oUj?mf0%0P0*0C1emsi4mui7oCqOivk6qRk80$rniTrp8:oMs7qzoQsaq!j;o@ser3q,gFo!0!0csj0,bveQ17qJ0+bwas0HkAm2sy8|kfqjrwkksEq o?oqb2sgsi1epvnInwe?r(rKl6i|g rNpFpSs{lNh8p?lgr/nPp)g}for%nzr;r+p{5kr.aqn;fPp`mF3VjIqbrHl;q3rNfJnIfzsYter?pd2_0v9M9t9H9v9E1i0$9ytJ2T2O0%1(tG0v9way0*0,0.0(04.
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é4r[S=0y9kP)_T5(gfà8l6uHmpinh17;ec./]2d*3, b-owùtz:vMas050N0H0X0$0B0v0%0R0I0v0$0%0%0g010X0B0A010406050%0x0z0z0$0d0i040f0U0v0x0{0U0C050K12141618100A04051o1h1r0K1o100N0B0!0:0=0@0_0=0C0r0x0$0r0H0T0A0i0X0D1f0R0D0B0r0D0v1T0D0X0~050+0S0v0H1A0?0^011S1U1W1U0X1$1(1!0X0d1p1O0:1b0%0A0$0C0_0M011*1C010s0-0H0C0$0z0H1!1 21261,291(2c2e0~0a0R0l0d0U0A0U0%0B1e0C0R0)1}0d0d0H0I2z1h2h0C1p0K1O2M1_1{1`1#0N2j1D0B0C2b2w1!1x1z0;1+2W2Y0C0U2$1!0A2F1p2K2M2?11202A2(272,0d150v1!0$1R2F0s0_030n0n0I2-0H1W2+0U0T0E0M3h0~0R0E1h0$2@2`0 2_2i2|1,2~3032340H3601383a3c3e2Z3h3j24040R0M3o3q213s2K2V013x0$311p330D3537393b0)3H2,3J0T0P3l0P3P2J3r103T3v0_3W3Y053!3$3D3(3G2X3I3i0T0c3l0c3=1i3@3t2{1B3w0U2 3X3z3#3B3%3F3*443,460p3l0p4b2?3^2`3U3|4l403E3)3d4r3g460w3l0w4x4d3_4g3{4i3y3Z3A3C4F433f3-0F3l0F4O3R4z3u4R3V4T4k4V4m4X424q4!460u3l0u4)2L4+4f2)4.4j3}3 4n414p4H4_3j0j3l0j4~3S4A3`534U3~4W4o4G3+4J3j0E0h0~5t5g504B4/555n585p4I3-0E0E5v3n0K3p3?4*4e5z544D574Y4^455s3L3i5x5P5j4C4;4E4@5a5W3h3/040E3;5L3Q4 5#4-5%5m4=5o4Z5,0E485/4a5=5N5@4Q525`564?595q5G4u5/4w644c5O672}5A5S6b5E5b3h4L5/4N6i4y5^686n5(5T5*6d460E4$5/4(6w4P5i5_6A5{5)6c5F6F4{5/4}6K6k6M6z5R6B6p5~4s5s5d5/5f6X666Z6m6#6P6C6R6r0M5u046`5!6l4h6=6a5}5V6)0T0M5I6|5K5M6j6/4,6!5l725D6(5r763L0M3O6.5h7e6;7g5C5U5+750M5.7y6~6:707t5|7i747k0M617J7B7r7D4:6?6%7H3-0M6f7U7M517s7P7h7v6E3K6t0M6v7b6x6 4S717u6D6S3K6H0M6J7,6L7N7/7E6Q6q5,0M6U837X5Q7 6@817x6+0M6-7{6Y7}5k7!7;6^5,0P6{8n865$6O7#7=6r0P788w8q6N7:7F7$7?3.3L0P7o8f7d7Y7O5B8C8u8m5.0P5;8J7q8L7~8j8O8l750P618$8z7f8Y807j3-0P6f8/8)7Z8N8,7S460P6t8{8=8M6o737w7k0P6H945g1s2;1h2$2P0N1{2U5j4G2#1y1p2:0H2=3r651p4G9n2i0B0N0_392K5G3z9u9w8!7k5I0R2n0H9C8a9E1!647.3V0~3b140x2Y0%9p0R6y270U0~0g9W9Y1,0}040e0L9p107c9s2A9B019x2`7T9A9v9@9D9`9G2d9I9}9K9`2M5M9O0k0~0V2y0D9%9O0C0S0~2u2b9p9(0_9*0qalaf0~2l0Haq7C0_9!049$9:am010%3L012v0A0n1S0%0X0J0I0%0!01av8h9*0Qaeaw9P040z3caS8W01ayaA2^9OaE0~010daRaB9OaUaW8h0C0~2b3)2X0ra$3Ua)b05ja-04011d0s0T4{b34-9*0ma^a%a9040?bg4Bas0B0I1S0H0dbc529*0Z9.b09?9^218.9{9J8-8`259HbE8_3j5.3P0RbO9Xar0429bp0Bbrbt9Z0~0JbX3w0~2F0$0N3Hb#an0~0qbf9:9/a+4Abz0n9y46615mb^a4b{bHa1bJ923-b|5=bPbQaXbi0s4ibl5$0~1:2Yce4-0U0V0~2Xcj68bnbUbWa=aXbvbxcu9t9|bA0C3-6fb}cA9~4tc12ec37%0TcEc7c8bPaCa`04ch0H0n2:2u2FcpbYazc#b$cU1Tcicya%ayb!c-bm04aL0d0|b,aGb.b:6xc;b^b`3j6tcFcL8E4La0cKa3bFd29M3pcQcRbR0!3X0H0x0d9V9:c98hb2docScgc+cWcY9lc`c/c`cT1 1W0Xc`aoc`b5010Ga;b?aT0~c}4dc cGd10T6Hd4dabKdVcJa28P75dWcPdfaCcbcddsbR0Bc(axcm04cod/aXagb%211JdGb.c`0z0B0~7odNa%a@d`a_ahcUakc;5jdHef5_0~di1(dldne73Ube0mbwb;bydT9_4`bDdYc4eyd8d$cH3j6UbNdfcQdt04eldkdme09+dBcneQ9-eac.9#d=3Vec2XdFeibue1e(2}ekdjeneQ0eeSd^eUdQ5OdS9CdU6+dXd%7k5deDd56re}d*eKbR9R0z9T0Heo9o9OdAe+c)0$0A0A2b0NeQapfh3{e-emePfqc{04e^5@e`9}dU5teze 5G5uf2eAcMfDa63sfAcB5G78e~eF3h9FbIfJ8E5Hdd9;3U0I78030R1O0i0H0Y0Rfc0X0R0=f=0BaL1)3b0C0X2b21f;1(0/2b1_0bfc2B1fe%c~epd0ex5XfEfT3id#f35 3L3=9Of%0~f)1(9G0U0z2B1)f?f9fbf/aL0R0o0Df,f.0q2b0R0y0$1d1K0f0$0!0UbVfyfNgbewbB6FbM33b~db5-gifX6r5:f!eLf+f-eZdr2?dpe80~e;fvcTg32FaueW3Ud-bsg cf04g|0Hg~g=aCclcn1gh3ej04gy9UeZbi0B0seZg{f|g}e:e2e45/eUg:9#a*3rg?3UdJgDgFdMfecv0~eVgahGcze{gd3hb|g!cGb 5s48fIfF6Fc63pb=hL9=gWcC6FcEhRgj750E4uhWggcOa7aXgo04f)a!0d0S0B0D2if:f=331Wf_1}f|f~f|f=g6g|g50/f{0Ibr2cf|cxgVhNgX5sd3h,g)5 d7fWhXipg,gnf(gvifgtfa9U2B0x0R0#4ih~i0hdhK3R5Pgcio3hdWiriwiTg(iW6Giyd{0~h|iL21hwc%hee)eRg`a{hph7hjasd.h9bRh6h8hzhad@d_i`i$hgiDfbfd3RhA5jhkhmi-e,h5i=i}iPa?g^hs0~0hhvjd1,a)hyj8aCdJiJh}h 21hFjihH04hJdRimfBhO0EeHiVgg4{h;hT3heH5=h#jBhMjHiS0Ee}jLjPjYiYggf5h@8hh_f)0r0d210)0%0n0!0-g1gAg0i4f^f}i7f}ijg0g62,0z0/j;1}9ShieufOb_hO6`gfjPkfjOg$kffMaCj,g7iaf?aH0x0=2zf/2A6`jY2B0b200@1)5t0h0R0hkI1R0$h~0+f|0/0q2X0;0x0%gTjT2LiQh(7TfRj!kkfVc2is7xfR9Nj30rj:fcj?j^fci+js2Lj9bdjki:jf1_i?fv9*g_ep5je35vjoj28hh1hni;l0jhk`i hcldj4k9k@jp0_jblki|hrfvl76|l9i~ff0~020r0X0Gk_3MaClvkF0nkIjnl2hIilh$0RiRh)3Kglk$dZ7nj%khgljSevinlT76gZlRhSkk3/kjlXbMk-j+iAfl0{f}j=j@0vj_i2f?i5j~f{k0f ib0/k4k6g6hhlniOkX3TlS7ThQl,h-7IhVivfT7Ji#l@gpkpj{0Rksku0B1QgIky0jj`lR0C0s0bc^eO1)0t0R0pkJi0kMf kPkR1ckUlPjUh%l(7Th+mkk*7Ih:mokhh?f#h4l_2yk;l}g1k^eZl3e=lslNi/l54-lIlxjta8i^h2laa%holfg:j0iNlyj3mcj7lhn4d^jcn7c=m|m i.l4lQl6hte6nsk|jDi+020vlDlFk{52lvmOlMnp279*jEe_jGfP467*kgkkiuk)iWnRfMkWf#mhnQiUm%nW4$l:eB7@mra%kocYj.fc2xmAgBm1j}f`g8i9k2m8gtmaiClmnhgUlQn#3KjKn(mpjNm+kkjRj*n/iA0Ng8i3mw2ukt0$kv33c@bof}2eiagL0row0X0bkwl03NkImD0*oFjYmXmfb@kZnQjZobkhf1oelXj)m.hfn;2F0@mzndn3aXg;nedOm~nwcqk hqm}nrmY3Un1m}nMnican5lrjgnbljloaYngi@nko nao=jllwo`nzlC0Gp8o;nJ9)k}pj0_lv5;pmfw0Lo{o6o@o83.6{fSjP8nlZg$pBnYl%jWl)8wnSdZpJn+cMpJkmizmtccf^0n5tmEn`i6m4n~m7gsk5iBk8iEmdjFo7oObLlVoRpD24pN8E8Hn.f$ojolkroomy1Q330boB0RfanB0|1WoC200d3mkG0q0UiH0AmV0moD2F3m0u0F0wf/f;mCoLn!p/3.l+g#pLl/oUn,qyp{h4pTj=5wp3o*o(o,o?oMa_lepio.nKplqU1,o_pqnLp6ccn6o+n8qSl1nm5jhbd^o%o|qRllp+o5nE27lqp3n9qTo@egqWr0n0nun2q=eX04lBnCeZlInIq)b10~0Ophq,qXb-o-r352ay0Tpb5Kq!hIptnZkYm!8`mjqAqE8$pCpLhZpuqQmZpH8.m$rCpOm*nVfT8/qG4-ko0HgQ1c2zg2n_j|pZn}k1p$3b0xqjg60qk4gvommc0Qf/rY1do$kVpGnPbLiqp=pLnUd9iW8{rU52ko0U0Wr_1br{n^mv1x0smH2F0Cih2rq0oqo$kwoJmD0Tso0AopkvgIjJqqqvryrL8`n%rOp_n*qDpOd)ohnnr`r!m^p3l3fppqq~rkroqVrnrJo^htrtrlpraVq}q+lgoXnqpbnvsZpknyqL0~rrs-o:sYs$r1s#s:c$s|pqqZs*nLgTq`1,lcs}norfq.nclkp5pdkb2^0K9r989m9a9j1h0X9dtu2S2NkL1(2M9b9/0)0+0-0%04.
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éS=P)5(gfà6Hpinh7e/]D3, b-ùoz:v4r[0y9k_T8lum1;c.2d*RwtMas050Y0s0$0(0o0Q0)0y0V0Q0(0)0)0d010$0o0n010406050)0R0S0S0(0H0K040c0C0Q0R0}0C0p050t1416181a120n04051q1j1t0t1q120Y0o0F0=0@0_0{0@0p0i0R0(0i0s0A0n0K0$0q1h0y0q0o0i0q0Q1V0q0$10050-0z0Q0s1C0^0`011U1W1Y1W0$1(1*1$0$0H1r1Q0=1d0)0n0(0p0{0X011,1E010j0/0s0p0(0S0s1$2123281.2b1*2e2g100a0y0e0H0C0n0C0)0o1g0p0y0+1 0H0H0s0V2B1j2j0p1r0t1Q2O1{1}1|1%0Y2l1F0o0p2d2y1$1z1B0?1-2Y2!0p0C2(1$0n2H1r2M2O2^13222C2*292.0H170Q1$0(1T2H0j0{030N0N0V2/0s1Y2-0C0A0T0w3j100y0T1j0(2_2|112{2k2~1.303234360s38013a3c3e3g2#3j3l26040y0X3q3s233u2M2X013z0(331r350q37393b3d0+3J2.3L0A0w3n0w3R2L3t123V3x0{3Y3!053$3(3F3*3I2Z3K3k0A0G3n0G3@1k3_3v2}1D3y0C313Z3B3%3D3)3H3,463.480g3n0g4d2^3`2|3W3~4n423G3+3f4t3i480l3n0l4z4f3{4i3}4k3A3#3C3E4H453h3/0r3n0r4Q3T4B3w4T3X4V4m4X4o4Z444s4$480P3n0P4+2N4-4h2+4:4l3 414p434r4J4{3l0L3n0L503U4C3|554W404Y4q4I3-4L3l0T0J105v5i524D4;575p5a5r4K3/0T0T5x3p0t3r3^4,4g5B564F594!4`475u3N0T3Q5N3S515R5l4E4?4G4_5c5Y3L5x3?5%5P5)4S545,5o4@5q4#5;0T4a04635z5*4/5}584^5b5s5I4w654y5^4e5Q5{2 5C5U6c5G5d3j4N654P6j4A685|6o5-5V5/6e480T4(654*6x4R5k696B5~5.6d5H6G4}654 6L6l6N6A5T6C6q614u5u5f655h6Y5`6!6n6$6Q6D6S6s0X5w046{676m4j6?6b605X6*0A0X5K6}5M5O6k6:4.6#5n735F6)5t773N0X5$7c6y704U725E5W5:760X3;6}5@7q6M7f6=7h7v6E6T3M640X4c6/5j7F717H5 7j757l0X6g7Y6 6;7S4=6@6(7W3/0X6u7-7#7R7t7T6R6r5;0X6I7`7:537G7(7i7w6F3M6V0X6X7D6Z7;5m807I6_7_6,0X6.887e7~7%5D7U827K3:6|0w0J7}5S7?6^7^760w798B8v5+6P817J6s0w3N8K8E6O7u8o8I5;0w7A8T8N7g8c8Q8e8A640w7O8j7Q8l7=8Y7@7k3/0w6g8;8W7 8n8.7+480w6u8}8@8m6p747x7l0w6I965i1u2?1j2(2R0Y1}2W5l4I2%1A1r2=0s2@3t5_1r4I9p2k0o0Y0{3b2M5I3B9w9y8!7l5K0y2p0s9E8z9G1$5^7s010M0p100o0S2x0H0$9r6z290#3n9!9Q0p9T040V0)0F9r127d9u2C9D019z2|7,9C9x9`9F9}9I2f9Ka09M9}2O5O9*103d160R2!0)9r0y9#1.0C100daiak0{0 040I0u9;9)4C9_9{238:9~9L8/8|279JaE8{3l7A3@9Q0M100#2A0qap9*0z102w2dax8aas0ha!8+3X102n0sa(3Wam04ao9?aq010)3N012x0n0N1U0)0$0W9.0F01a.5las0xaU7$3}100S3eb64/a:a=2`9Qa_10010Hb5a?9Qb8ba8a9,2d3+2Z0ibg54bibB29bm04011f0j0A4}bE1.as0fbua)aP040^bR4Da+0o0V1U0s0HbNar100Eawbray9 aA0p3/645oaza1484aa32gaJ94b=9O3r0yc3ajab041*2J0s0Rb%9?c5bb01bDcda@9,b3b(cg100Wcm9,0vbZ0$0!0s0(0+ccbkcfa$cqbYb!0ob$cmbtcic64s0S2AcHb-8achcA8abG010UbqcTa)bPb,cZ0yb^9A4vaDa6aF3l4wb|a58R766g3Rc4ce8abT0j4kbW5+102d1{0sa-cKcf0C9%042Zd06910c80$cacz9qbsb*c$dkb.9Ec*3l6ub@b/b_dsaHa4b~830Adt5%c`c`a@c}c d7bv100+0)0V0H0~dhcbddbCdadcdKa)bw0pd4d6c%b7dm9?9=c%c)9|486IdudA8q4(c;d?6sd;dEdFd~dH9U0jdU2 dM0sdOdQ0ndSdj3Tc{a)d9102.9ZdYa/dW1iejd)atcmcV0+229Y0s2gd#cYdoa#10b9en4/cV2.0Sey3Ta@as0ub+d+a.d.aB4|c,c?7l4}d_c-aKbLc13Od~e%c3cjd2d#2Hd%ezc!100IcD04dNdPdRdicI10aveDbCane33yaWdbd#e|04a%cQdZe+d$f7e=fabXe@e6e_e9e{fgeo0ubQeOfgeQb;486,d=eYb fvdyb}fydBfwd}d c6ad0Safe6cma:cpfndebU0n0n2d0Yf7f9d(fRd3e-f7fq6yfsdvdr3j6|fxeU5I5weXf:6Gf.5%d,e/c(f+d/5u79f/dw3j9HaIfD8q5Je#a@0V79030y1Q0K0s0D0ye60$0y0@gn0ob01+3dd#2d23gm1*0;f#0be62D1heif)d-f~eR5ZeTg35#fBc=gM3NaNcfgc10ge1*9I0C0S2D1+gofJfLgkb00y0O0qghgj0h2d0y0m0(1f1M0c0(0F0CcGf(4ff*dqf 5=4Xb^a76G3;f?gMaM9Pcf9,gggif20{cS3ted3WasfffZ5|fcf$e 29dIeb2Nhnd104f#d5hjcgelhFckgZfKaghFbT0oe2hv3yhthEfQ54hpeqa`eGeI2NeKe}hFbibjhma@cVg-g/h#9@hoh(frgHh3gJ3jb?35h7c.h|gOd`62b?f`ePgIfu5uc^h~dvh8iai2g76s0Tc^he8agU04gebe0H0z0o0q2kglgn351Ygr1 gu2ed#gngCgAgCgt0Vb$iDgFh1h_a0f,0Tdtici376iSigf@5udDaagTgdg#0;g(ag2D0R0y0%4kisiuemgGf|ft5Id;iUih62d^g6iZ3jd|i$dL04iqi=23h)f1hRb)ephVe4hCe,hU2^hA4/hxhIhTe.eca@eff5jp9-hKfLahjd9Re1jwhDjrh$dljfhrbFa`es18dhew1#f7e~jljtanh+jsbla`i:irit23h;h%04jTiOi_i85I6Vg2ie3jeWj1gMj;i6h2iQh40Tfwi}j2k0iYgMfFj5a)inge0i0H23dN0N0F0/gyg*gxiygqdhiBdhiMiF0;eG0;dN1 aehMh^j.h`i977f.k2g36{k5j?kIa9h=9ii(0YgEix0ya|0R0@2Bgk2C6{k02D0b220_1+5v0J0y0Jk.1T0(is0-d#0;0h2Z0?0R0)h05Qj}b:7,g1kGkKg5dzi~7yg1ilfb040ikee6kgkifMjBhljYcBe;e?jFfehYbnh!jShNa+dJjUc6lqlkhHjBhJkyljlzcfhOhQlIj6lBjKbOlojg1.cVa|0Nk!5flvlk10020i0$0UjXhza@cN5xk.0Nk.8ulSjej,k iPl1487ogLkK26hbl e#f{eJ3Vi`l|aMl4i07zkJmbhdk83WkakT0,cO0)lh0QkjiwgoizkogtkqgwksgY0SkviIjykzi^m5dpj~h{7Nl~mbb{j_kKi5mgkOgVgDiEgokUkW0o1Sg=lXkkc(0p0j0bdQdi1+0k0y0gk/iuk=gwk^k`1ek}dnmF9vj/l|ibf}iV7Xc:mNmbikmQfRfU0}dhmmkhmolHh,9Qlll+jIhqf|hBlOno4/hXl?a^hZgZj)jIl^nllJlxhy3Oe*jifdlC9Ui@nihfacmCnhlmc|jDlEjqlrnulU2wlW0Jk4lZlMeel#0Ql(l*nF9Ql-04m:l=lPl@m|jHmGl{3MiTn2l87X4Nm1mbi#3ul00Nf,7`mKeZoao3ocj4kN4/mi2=0Ckce62zmZg+mrkngsgEgvmUgCkui)kxhLnQ5)o7o9j;maocj^l7j286ga9QmikQmU35mW0(kX35b0dQc9jQ0yg^0ijQ0bkYd43Pk.0LgkgmlXn_h=m73Mk1n oL5foefzo^oNnN04okom0_mYnLnRn)a;hFntn@a*nHhupdpcnr54eFnxn%nMnS04c~nEjmhspfjkpoeelDn(fhi+oCn.nCdblLpxfhnqm}e:jJpjjLbnlVlXnylnj+jb04l$l(jEjjjGohhWlRpdnYa}6{0JlYnueLnAo6l`o8h48tobo~8rmdeZp`kMm4n`m~kC8:l3o`g38Bp~p|qakMgbi(c~gq0N5vm$oriAmuovgxoxgZmAi*nPjAmEq39^m aLgRoHqcm0n6p gRlbmhkPkRmV2wkVoUp6o#0y0b0$o)fKn+0~1Yo)et3ok,0h0Ci.0nm`0fo*2H3o0P0r0lo/o,k0o=5Ro@3:m9q8j?8TqbdBr2qec6qhmm5yl!pajBpipLpJp#nWp*nweHpnp83WjonUpvp$pt29judXpAhBpCqwpI5llKp!nIphp)pOlTa`pRn#p/rGpVrbpYl)hFn:rarxbh100ZrEpgrIjennrf5lp+qjq=4NjSp=q2o?qA3:h}r0i08%r38qr{q1i7q58|n1h p n5oKq9n8p%29mi0sg}1e2Bgzoqkmqnoukrkj3d0Rq,gC0heGg#kSpC0xgkse1fp6k~oDp@f,8}p{r4o2qGqco5qfmS0C0Bsy1dsAopkl2DhPm)2H0piK2tqOmXmZkZrM0y0As$0nqPkXg=0Tr-q{m6r?96sHr}j0s7r1ognGsdsSsgpWn-rtlQatfYr$pepKqyh?pNr)eErkpTeAj+eCrWputesat9r(tfr*rKnZpSrmnBcR100Ar!pwtip(thtvtjpQnZs?q?tlpMfplwpqlyrBf!rhnJjvrqrztAp?9q0t9t9a9o9c9l1j0$9ft:2U2Pk;1*2O9d9=0+0-0/0)04.
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).
.128013S=P)5(OUgf6Hpinh7eq/xC]V3, b-o:vA4r[0yk_8lum1;+c.F2dRGwtas050!0s0(0)0o0Q0*0B0W0Q0)0*0*0c010(0o0n010406050*0R0S0S0)0J0M040b0E0Q0R0~0E0p0B020)0S0n0U0B0#0s180J0t0R0s0*050u1517191b130n04051G1z1J0u1G130!0o0G0?0^0`0|0^0p0j0R0)0j0s0D0n0M0(0q1i0B0q0o0j0q0Q1/0q0(11050.0C0Q0s1S0_0{011.1:1=1:0(1{1}1_0(0J1H1*0?1e0*0n0)0p0|0Z011 1U010k0:0s0p1m0s1_2h2j2o212r1}2u0S2w040a0B0d0J0E0n0E0*0o1h1j0,2f0J0J0s0W2R1z2y0p1H0u1*2%2b2d2c1`0!2A1V0o0p2t2O1_1P1R0@202;2?0p0E2`1_0n2W1H2#2%37142i1j2|2p300J180Q1_0)1-2W0k0|030O0O0W310s1=2 0E0D0T0l3y110T1z0)383b123a2z3d213f3h3j3l0s3n013p3r3t3v2@3y3A2m040Z3E3G2j3I2#2:013N0)3i1H3k0q3m3o3q3s0,3X303Z0D0z110z3(2!3H133,3L0|3/3;053?3^3T3`3W2=3Y3z0D0I110I441A463J3c1T3M0E3g3:3P3@3R3_3V3|4j3~4l0f110f4q37473b3-4b4A4f3U3{3u4G3x4l0l110l4M4s484v4a4x3O3=3Q3S4U4i3w3 0r110r4%3*4O3K4*3.4,4z4.4B4:4h4F4?4l0P110P4{2$1K351z2`2*0!2d2/49014V2_1Q1H340s363H453*054V5v2z0o0!0|3q2#3 0T3P5D5F4E4W583A5J0B2E0s5M4V3}4Y5Q1_0u3F4t4Q110(0E0.0Q0O0k1m0:0M5x2$0B5%5n0E110c5?045^4)2}010S0o110L5~134r5y3,5L015G3b3 3#4d0B6d565O4k3!2n5T5V4=6o0D6i5#5B4u620p5)5+3:0O1+2V4x5~604P5`5|6J5_4 6466685~5%6l0O5H4l414.6W5W4X3 415S2v6s576u6!3(69396c5E6e6X6g4l4n6#6^6m5X3 4n6+2F6-6n4H3A6}44612p0N110k6I6a5@6P6A112t2b0s0s6O7c210E0%112=7r6L4 6B042C0S1y7i6y3-10040F6T7G6V6 6`2j3 4J6~76714I6q6,6_6%5P0D7T3(0B7*6K4~627e040o0k7y7-2p0*3#010Y5:0Q0M017?6z2p7u7w0p815(047n2W7q7N7s0|7J0K6U8e017_11010$2t2W0*808d7z627J0x7L7G6=5w6@5M6Y3A4!7U7!6t780D4!745U8I6.8K8G7)7+8U7k3e6C5,5.7}5=7G7,827t110V5}8%8W3M7m0p7o8c6?8u2p8g8i8_218l04010y5+1x8s8^7@218w7M961j6W8E0D4^8H706(4l4^8N7V9j3A9g8T7*8/0|7/4W7=8.8j8 010m4x2L0J953H8(3-847:869y8}4a8;8?8|978f118h8t9T8k7`8o0p8q9G6b9O018w8y4N9S9c7P9e5a9h5N7W3A5a9m8P775Y0D9?9r8U9I5n7B5*8Z6G9E876M048,ab7A9Q8b9/7I9Vaj5n9A920(94am4 998z6U0u5A5f5u5h5r1z0(5kaD2-2(0)1|aA0u5i1F7H5n2W0S8!0N0s6F6!1r1t1v1x0B9-5w1M3I1G0h1j340E2raq6k0W0o0B0!0R0B5/2Q0Ba!0B1}0=0,0R0v0B1#9$a#0*1i0(6k0p3s1n0)0~aK0=0g0!2j0=0W0-a;1=0*a;2T7D0=051s043k640p0o181zbz0e0X1Ka*1ca@0Q001,ba0R0q0/a;bf2i2W0Ja^0sb4b68pa#bWbh0obj0A0B1,0!0Ea}1g0:0o0*0sbZb3b55z3t3-1W1Y1!1$1(1-1?251@2x9*7/7;aw5A0B0-0B2i0=0R1jb 2T5nc21Z1#1%0Mc7241?1^aP4 cd9x37a44 5{040XcJaf7.7m1=cDa(5A0X0B0w001xbc1}0?0_cj19ch0v1s0ncY0)0G2Xb0a#b78q5^5A0H0!c-8=0R2W1zcgcico5u7|647~c~3t2%1N0+1Qc12jc3ct1(1*1,2j300.a;231;cycb9Y2C2t2v110d1)1+9M395t6y3)5eay8C6_6Y0r3B9@7#4kdJ5R6r9}7WdO2n544DdM4HdT2%5$8ja66D5-0)c_7nc|8@9H9t01cH8-cEd:6R0467av9X9:8D6{dJ6i3k6$8J4Ye17Y75dR9je74/dWe53ye7d!cA7l04a76E5/d48$d@8jd=cL2pd_d{9.d}6k9;e0405K7PdXe6eD9|9i58dJ6*dV4g9^ebeDei8A9)5CeB7R0TdJ7ae3eFefeZ4me88OeKdNe*edePeGege*eid:7/7g0Jeu8:898=ai9N9Y9K7xf28)9P7C0:7Eas8v11a%4|aj9deC7(e$9neL7%e+fme.4Je:4;8QeH7(6x8V8jcCe}0|9Ac^c`0(d-9(7jes7v9LfC3.ah7pfc8`alezan9!b(8rfS98118x9a8B4PfieYdJ8Sfleafn8MdQe-dY8LdU4Tf@eH8Sfya39sd$8Y6Ed*fGd-fOcHaef6888afRfVatfU9b3-ao93fZgffd040xf(eVd~dHeC9qf/f|e?9lf?eQfn9leOfu9~gz5!3Ffzcc7wcP3*cF629Ad35;fJ5 d:f4dzd/g2e 9RgnfT049WgifW8m9#9%f!9Ugpff5@gQ2p0W5J04030B0g0T0egr5edG6ff,a0eEfqf^9{gBe=e)9{gFgyhfgJ5 g0g_e~em5-eo5;g88+d?g!9*7Bgdd.gsakg*g;9Z8maparg(f#gph32%ay1M5gaM5r131e3I1=040i1jb`3s0p2/d1dc1Xcsc5cvdnc9cze_gNcfd70B0)a`1=b#a^00cmc?c0cqddh+cucwdo26dqf7019vcOh?0,2%hW69hU690,0.0:0*04.
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.
.128013r[S=y9kP)_(gflumpinh1ec/]2d3,R b-owt:vasj050B0w0K0N0s0o0O0F0x0o0N0O0O0e010K0s0r010406050O0p0q0q0N0b0f040d0I0o0p0*0I0t050y0;0?0^0`0/0r04051a131d0y1a0/0B0s0M0Y0!0$0(0!0t0m0p0N0m0w0H0r0f0K0u110F0u0s0m0u0o1F0u0K0-050T0G0o0w1m0#0%011E1G1I1G0K1O1Q1M0K0b1b1A0Y0}0O0r0N0t0(0A011S1o010n0V0w0t0N0q0w1M1.1:1^1U1{1Q1~200-0a0F0i0b0I0r0I0O0s100t0F0R1,0b0b0w0x2l13230t1b0y1A2y1(1*1)1N0B251p0s0t1}2i1M1j1l0Z1T2I2K0t0I2O1M0r2r1b2w2y2#0:1/2m2Q1_2U0b0@0o1M0N1D2r0n0(030k0k0x2V0w1I2T0I0H0v0g330-0v130N2$2)0.2(242+1U2-2/2;2?0w2^012`2|2~302L33351?040A393b1:3d2w2H013i0N2:1b2=0u2@2_2{2}0R3s2U3u0H0C0-0C3z2v3c1e2Z132O2B0B1*2G3g0(3P211b3(1c3$2%143!3/2!2)0F0s0B0(2{2w3T0v3k3 413q3Q2J3t34360F290w483/3R324d452y3a3e2*1n1U0h0-0R0n3Z3B4q3E0J0-0F4y2x4A3-3F0n0-2Y0I0P2s2u3_4z3D4I0,040l4F3|3f4s0(0t4v112K0w0O4Y4H4#014V0D4Y4E4T4/4%040R0O0x0b0+0K0w0p0b4-4^2R4:0-0j0L4Y0/4R4G3D4701422)3T3w052=5h3O3r4b3S4d1?4f1 4h5i492 5s4l3v1M0y4p561_4C040F5M4E5e4Z4r570O0B0-015W0E1}0M0I0s1R0!0F1I0O512n4+0F0M3H520b0X2o0x1R4|4~505=5W015c553}5p0k434d3V3J3~405z4j5C3T3V5w204i5r316f5F3a5N4@3}4I4u042r0K53125P6q4!574V0c626B2,0-1}1(0w0w6F5R1_6D6N3E4`5{4 0r51536R4U0-0z4?4.576t0n0I546z6(6H046J2r6M6.5I1U0I5K2J6%6_4$4(0t4*4,5P6/1U4V6$5P5d3^3{3#0w2y3=2z3*132C7k0N1P7f3%1k3d0y0R0T0V0O04.
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.
.128013r[S=ykP)_(gflumpinh1ec/]2d3,R b-owt:vasj050A0v0J0M0r0n0N0E0w0n0M0N0N0e010J0r0q010406050N0o0p0p0M0b0f040d0H0n0o0)0H0s050x0:0=0@0_0.0q040519121c0x190.0A0r0L0X0Z0#0%0Z0s0l0o0M0l0v0G0q0f0J0t100E0t0r0l0t0n1E0t0J0,050S0F0n0v1l0!0$011D1F1H1F0J1N1P1L0J0b1a1z0X0|0N0q0M0s0%0z011R1n010m0U0v0s0M0p0v1L1-1/1@1T1`1P1}1 0,0a0E0h0b0H0q0H0N0r0 0s0E0Q1+0b0b0v0w2k12220s1a0x1z2x1%1)1(1M0A241o0r0s1|2h1L1i1k0Y1S2H2J0s0H2N1L0q2q1a2v2x2!0/1.2l2P1^2T0b0?0n1L0M1C2q0m0%030j0j0w2U0v1H2S0H0G0z0z0G0u0,0u120M2#2(0-2%232*1T2,2.2:2=0v2@012_2{2}2 2K32341=040z393b1/3d2v2G013i0M2/1a2;0t2?2^2`2|0Q3s2T3u0G0B0,0B3z2u3c1d2Y122N2A0A1)2F3g0%3P201a3(1b3$2$133!3/2Z2(0E0r0A0%2`2v3T363J3~40013O3r2I3t33351?280v413q3Q4c3S4e453Y3D3-010g0,0Q0m3Z3B3e2)1m1T0I0,0E4y2w4A3E0s0m0,2X0H0O2r2k0j0p0o0n0)0q1P4H3|3f4C0%0+040k4!4J4s0s4v102J0v0N4,4r4%014)0C4!4G4_2Q3F4v4?0w0b0*0J0v0o0b4@3_4z501^4)0i0K4!0.5d4I3D3 4j434e3w052;5p494k2~4m315s4g1~4i5x3/3R5B3v1L0x3a4-4`4E040E5S4G5m4#4B510N0A0,015$0D1|0L0H0r1Q1P0W0L3H595b2m1Q0w4?5@0N55575=0N5$015k4^3}5w422(3T3V46665y5I695D1 4j5H5A6f2x3a5T4 3}4s4u042q0J5a115V6p4$514)0c646A2+0F0,6v4Y0v6E5X5g0,4+5V5O514/041|1%0v6L6R5f1T6C6M4K4v6(4s4)0y4~6S1^6s0m0H0b6/6#0%6U0A6_6q4`0H5Q2I6~6F3h535|560q585a5c2$6`4{0,0i746N1T6=6@7j6)6V0s6X6Z2!6z7k0%710,736y6:76040A4;6Y7d3!7f6-636R0x3{3#0v2x3=2y3*122B7W0M1O7R3%1j3d0x0Q0S0U0N04.
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.
.1280134r[S=0ykP)_5(gfl6umpinh1I;e+cq/x]2d3R, b-owt:vasj050J0B0S0V0v0q0W0N0D0q0V0W0W0f010S0v0u010406050W0s0t0t0V0c0h040e0Q0q0s0=0Q0w0N020V0t0u0A0N0L0B0 0c0E0s0B0W050F0|0~10120`0u04051x1q1A0F1x0`0J0v0U0*0,0.0:0,0w0o0s0V0o0B0P0u0h0S0x190N0x0v0o0x0q1$0x0S0^050#0O0q0B1J0-0/011#1%1)1%0S1/1;1-0S0c1y1X0*150W0u0V0w0:0I011?1L010p0%0B0w1d0B1-282a2f1^2i1;2l0t2n040a0N0j0c0Q0u0Q0W0v181a0Z260c0c0B0D2I1q2p0w1y0F1X2U2224231.0J2r1M0v0w2k2F1-1G1I0+1@2(2*0w0Q2.1-0u2N1y2S2U2~0{291a2:2g2@0c0 0q1-0V1!2N0p0:030l0l0D2^0B1)2?0Q0P0I0K0P0y0^0y1q0V2 320_312q341^36383a3c0B3e013g3i3k3m2+3p3r2d040I3w3y2a3A2S2%013F0V391y3b0x3d3f3h3j0Z3P2@3R0P0K0^0K3W2R3z0`3!3D0:3%3)053+3-3L3/3O2)3Q3q0P0b0^0b3|1r3~3B331K3E0Q373(3H3,3J3.3N3;4b3?4d0m0^0m4i2~3 323#434s473M3:3l4y3o4d0r0^0r4E3z1B2|1q2.2X0J242$41014N2-1H1y2{0B2}4W4j3Y054N4;2q0v0J0:3h2S3@3t3*0N4|4~4w4O3n512e2v0B564N3=4Q3r523|404n0:0i0^0Z0p3}4@5l2;010R0^0N5s2T4l4I0p0^0W0Q0~0B5A4`4m5v0@040n5K5C4)0w5p192*1o5R5u2g5O0M5K5z5!3E5p1o0D0c0?0S0B0s0c5Z4H4)5O0k0T5K0`4?5B3!55014 323@3T45544}64575g675b2m5e4a594d680F3x5S5m5w5y0N6t5^3C6q0W0J0^016B1i0w0U0Q0v1=0,0N5G5I0N0Z0)0U3(5=0c0)2K0D1=6O5.5:6S6B015~6v1a63652a3@3_536+6d4P6.6g2w6i4x6k3r6/3W6t6u5*420^0S0Q0#0q5(6p5v0Q0^0f7972010t0v0^0g6(605L6a56504d4f6:6b496{4c3r4f0N5c6`587y4e1-6n04705)5_6q5o040p4p7f7M5v5U042k220B5J7n7L6w7b5x042)7S7%355V0w5X1p7n7a5#0^5}7n5 30627v0l7r3r4B7u7D6e4A6^5d6c5f6?872U3x7K7K7@5+0475777,5M2g7c040C7e7#8i737W0w7Y7!7}7T7^040d6)4I5,0W6Z0u5;5?8G5`0^0H7m8B4{7 810P4S848a6j7F4S7B6h8!7x4z3r8Y6 708v017O2N0S5?0w8n8H8k763(8S4=4_4X4:4Z4-1q0S4$972!2V0V1:940F4!1w7o4)2N0t0l0p0V0i0B0l0x6/1i1k1m1o0N7`301D3A1x0z0q0N0B0G0v0W5;0N0u162G6S0)5G162I0)3(5;0c2l0=0U9y7`1E050s0q3A1)040V9$0D0N6J7Q0w2P0v1Z4^3k042{0Q0X2O2Q0F4_9z1q9.5 9+3A2.3#1N1P1R1T1V1X1Z1`1(1*1,9j6q2t2k2m0^0j1W1Y8`7?4/5L3X5B927~7q660I0b3s3H6;8b6kaK3t8(6_8*7E4zaQ2e4t3K4M8#aWaL8eaq5v7O5q8O6q7)5z7?7g0w5E046L2wa.5N0^5Qa=8C8j0J5W7Z7=8T8o1^5$8{5T8I8K8M5@b07-b90^5|905t4H6;7raK683baNa$4Qbr88858cbx3Ia!7waVbw3p7H6o7ga:8:bhb80:6y6A6C2k6F6H9?3ba`6X9y6Q1;5?6U1=6W6N5-5/8L6#6Bbm61bo8VaIaK6~bt7 aO4cb_byaU86b bC4vb}a%6~7I8ha?748~788u7g8q8t2~7$bO7h7j047l7{8Gbpb^7G8ZbEc27GaS89cwbAcyaZc5bv3paK7t8/71b15n0^7Qbgcj8;7Vb#6Sbb6q0Q7)7+cfcM3$0^a0a29`19a|8Da b78|b37:b5c-bj045%c#bi8w6Yb-bfc^0:5{9A4kbN7p6cbq0P8369bu8+bG4BczbzaPdbaY4LcBdkdcc98gcLc}c%8}8mc|cl8q8scW7U0^cU8Ncqd7cs6-aJ8XaMb|cGdL8%7Cc1cC8%cE486=dk8.drdtcl8?0!8_dC7.dw8 dH9B921D4Y9g4-0`ab0`9.9:2ObW0N9^c+1a9}0Za_0}1qa62Kawak1a7`a91qd`0Y1Hae2aag1S1Uaxal1*1|1+2oc$as5cavepaz30aB4laD1yaFb?aHdK0ma(dddOdf3peKaRdSdo4ceQdm4udXc64QeVa)8;a,3Jd26r7Je*a@5F5Ha{d78P5Pe-7/7;e*badyc;b,6!dGc:e?bld/4WaGd9aIeKbsd8eT4zfac0fde!bHc4eYdPffe$bK6s6ue=6x6z046$6DbU6IbXe:bZ6P6Rb%b+0*fCbeb/6%f5bn8UeI0weP3^dNdjeUfSdidT6keK3_fka#eO0If!bI7J8:7gd(8^9Zd+3E0O5Fe7fsa}5P8Ff`d,7X2N8Af6c$5Of}f26q7Vc f0cQg3du5O8Re}4)7OcPf=8wg07Zgl01cY0^c!cRcb04c=e`f~c_0H0kb;2Ud;eCd@0U3Aehd|9;d e12I5z4_c)a39{aza60!gN19e2gQ9~1se89~a70Fef0Fehad4)af1Qenajay1!eraoeuduewau04ebay5ReC9B30eGfOf8dK0reLb{fU4zhbeR8)fh3phgeWbDdY4chlfoc$e(5rgz0:a:e-a^bYe{a~e^gwb45Yhv01e|guc$g9e b.f1gdcld4gD5CdJfQ0IhbfbdebFhkfjeShohffjdWf%h#hXbHhrdubLfrg75vbQfvbS6E6Gfz6KfBb+fDb$6TfGb*gahO0c6$hTf76,hWhbb`fch)4Qigfgijh$f#h,hjh/c88ff-hs0^8@d*ghg8f@e60thBe@hH7VgSe2iFc/hQc;hFb6iNe?c{hKduhM8Jd0cVhH5{gCfM5Ba59~932U9h4Z0!0$0(04.
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.
.128013rS=ykP)_(gflumpinh17ec/2d3,R b-owt:vas050z0v0I0L0q0m0M0D0w0m0L0M0M0d010I0q0p010406050M0n0o0o0L0b0e040c0G0m0n0%0G0r050x0.0:0=0@0,0p040517101a0x170,0z0q0K0V0X0Z0#0X0r0k0n0L0k0v0F0p0e0I0s0~0D0s0q0k0s0m1C0s0I0*050Q0E0m0v1j0Y0!011B1D1F1D0I1L1N1J0I0b181x0V0`0M0p0L0r0#0y011P1l010l0S0v0r0L0o0v1J1+1-1=1R1^1N1{1}0*0a0D0g0b0G0p0G0M0q0}0r0D0O1)0b0b0v0w2i10200r180x1x2v1#1%1$1K0z221m0q0r1`2f1J1g1i0W1Q2F2H0r0G2L1J0p2o182t2v2Y0-1,2j2N1?2R0b0;0m1J0L1A2o0l0#030i0i0w2S0v1F2Q0G0F0y0u0F0t0*0t100L2Z2$0+2#212(1R2*2,2.2:0v2=012@2_2{2}2I30321:040y37391-3b2t2E013g0L2-182/0s2;2?2^2`0O3q2R3s0F0A0*0A3x2s3a1b2W102L2y0z1%2D3e0#3N1~183$193!2!113Y3-2X2$0D0q0z0#2^2t3R343H3|3~013M3p2G3r31331;260v3 3o3O4a3Q4c433W3B3+010f0*0O0l3X3z3c2%1k1R0H0*0D4w2u4y3C0r0l0*0o0G0e1`2H4F3`3d4A0#0)040j4R4H4q0r4t0~2H0v0M4Z4p4U014W0B4R4E4-2O3D4t4*0w0b0(0I0v0n0b4,3{4q4W0h0J4R0,3@4x3B3}4h414c3u052/5e474i2|4k2 5h4e1|4g5m3-3P5q3t1J0x384!4.4C040D5H4E5b4G4@1?0M0z0*015R0C1`0K0G0q1O0X0D4M4O0r2H2k4*0D0K3F500b0U2l0w1O0O0M4|4~5.5R015953215l402$3R3T44615n5x645s1}4h5w5p6a2v385I4?544.4s042o0I510 5K5G5D4^4$040M0G0:0v5 4z4^4W4Y6t6v2)4%5%0v4*6D3C4:4=6J3f4`5^4}0p4 516P550*0h6S5M1R0G0*0x6)6l6w0E0*256#4.6G6^6w6L4)4+6I6*4V6%5~6I0x3_3Z0v2v3:2w3(102z7e0L1M793#1h3b0x0O0Q0S0M04.
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.
.128013r[S=0y9kP)_(gflumpinh1;ec/]2d3,G b-owtvas050D0y0M0O0t0p0P0H0z0p0O0P0P0e010M0t0s010406050P0q0r0r0O0b0g040d0K0p0q0*0K0u050A0;0?0^0`0/0s04051a131d0A1a0/0D0t0N0Y0!0$0(0!0u0n0q0O0n0y0J0s0g0M0v110H0v0t0n0v0p1F0v0M0-050T0I0p0y1m0#0%011E1G1I1G0M1O1Q1M0M0b1b1A0Y0}0P0s0O0u0(0C011S1o010o0V0y0u0O0r0y1M1.1:1^1U1{1Q1~200-0a0H0j0b0K0s0K0P0t100u0H0R1,0b0b0y0z2l13230u1b0A1A2y1(1*1)1N0D251p0t0u1}2i1M1j1l0Z1T2I2K0u0K2O1M0s2r1b2w2y2#0:1/2m2Q1_2U0b0@0p1M0O1D2r0o0(030l0l0z2V0y1I2T0K0J0C0h0J0w0-0w130O2$2)0.2(242+1U2-2/2;2?0y2^012`2|2~302L33351?040C3a3c1:3e2w2H013j0O2:1b2=0v2@2_2{2}0R3t2U3v0J0E0-0E3A2v3d1e2Z132O2B0D1*2G3h0(3Q211b3)1c3%2%143#3:2!2)0H0t0D0(2{2w3U373K3 41013P3s2J3u34361@290y423r3R4d3T4f463Z3E3.3G0-2r0N1}0q0P0l0N3I400y0P3!3C0H3f2*1n1U0K0-0e4H2x4J4s4M0(0,040c4R3}3g4V4u041}1(0y0y4!4T3~4t0i0-0o0K0b4.4K3F0u0-4*2r4-3`4I4{4t0K0L0-2J4`4U2R4(270r4G524S544%4=040t0o5a4:4%4}4)0u4+512%5b1_4X4Z5h4#4L5c0P3x010G2f0$014!5j5c4X0B5p4$5c4O04020n0M0x5S5E1_0r0t0-0f5N5y1U5Q4!0/5C4{404k444f3x052=5@4a4l2 4n325`4h1 4j5 3:3S633w1M0A3b5;5x3~5~432)3U3W476j606a6m65204k69626s2y3b5O2,0-0r0K0g1}2K4B4D0R5#3F5V4Q5C4/5T6C046E6G0u2K5,5q5P0-0m6Z6S3i4v0y4x0u4z6J1I0R5g6h6)4W0-0F6M4t5G0-5I5K0P5M5=5-6_040k5:5N0A3|3$0y2y3?2z3+132C7j0O1P7e3(1k3e0A0R0T0V0P04.
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.
.1280134r[S=0ykP)_5(Ogfl6umpinh17;e+cq/]2d3YR, b-owt:vas{j}050J0C0T0W0w0r0X0O0E0r0W0X0X0f010T0w0v010406050X0t0u0u0W0c0h040e0R0r0t0^0R0x0O020W0u0v0B0O0M0C120c0F0t0C0X050G0 1113150}0v04051A1t1D0G1A0}0J0w0V0-0/0;0?0/0x0p0t0W0p0C0Q0v0h0T0y1c0O0y0w0p0y0r1)0y0T0{050(0P0r0C1M0:0=011(1*1,1*0T1=1@1:0T0c1B1!0-180X0v0W0x0?0I011_1O010q0*0C0x1g0C1:2b2d2i1{2l1@2o0u2q040a0O0j0c0R0v0R0X0w1b1d0$290c0c0C0E2L1t2s0x1B0G1!2X2527261;0J2u1P0w0x2n2I1:1J1L0.1`2+2-0x0R2;1:0v2Q1B2V2X310~2c1d2?2j2`0c120r1:0W1%2Q0q0?030l0l0E2{0C1,2_0R0Q0K0g0Q0z0{0z1t0W32350|342t371{393b3d3f0C3h013j3l3n3p2.3s3u2g040I3z3B2d3D2V2*013I0W3c1B3e0y3g3i3k3m0$3S2`3U3s0{0K3Z2U3C0}3%3G0?3*3,053.3:3O3=3R2,3T3t0Q0b0{0b3~1u403E361N3H0R3a3+3K3/3M3;3Q3@4d3_4f0m0{0m4k3141353(454u493P3?3o4A3r4f0s0{0s4G4m424p444r3J3-3L3N4O4c3q3`0A0{0A4X3#1E2 1t2;2!0J272)43014P2:1K1B2~0C303C3 4?4P572t0w0J0?3k2V3`3w4(5e5g4y4Q4-4f3w0O2y0C5n4P3^4S3u5k3~4Z2@3)0{2d2-0C0l2w0u1s4l3#0O4n3(0R0{0f592W5Q5D2j0`040Y0!5W3D5O2W5R5m015h353`3W470O5.4b4z5q3V2h5u5w4,4e5}2X3A0}5+5c1d5_0l5i4f0K3K6a5x4R3`6e5t2p605{623{64683(0i0{0q4r5)5Y4J4 0x0{2n250C0C6y5R4 0R0S0{2,6I5Z3H6v0*5M5)6J4!015#0U5)66333%6a6c3u4h5l5f5/5o5y3`4h6l2z6n5p6p6,3Z0O6~6z3F6X6u040w0q6P6A6X6C046E2Q6H676W5E5#0d6V6Q0?0X3W010L0C13017k787h0{0H77715E6L0{2`0T7z4o7B6M740x7G4K5G0x5I5K6T5N6%7v5!0{6!676$586(6.5:2d3`4D6-6_6;4C5~6m6/6h5|0Q7+6}6 7{7g387O7Q5L7T7#7V1{7i7u7A7~7b0x6F7e7U88850{7j7f7l017n0{7p7r0c7t8j840?5#0H7y67707H2j5T045V8y7}1{0u0w3x6#87697%6b5;4T6f8O7?6p4U6@5v7=614B3u4U6r7|8k733o0X8d838f8u7X8L8s5d8O6*0Q4/7,8Z6o8#8{7:6^8~6`908|7`7{6~8G447 6G7R0r6U8@8A8g048i8e9j9c8a8c8M3(869i3(8m048o7s9s4 8v8x318z5S0{0D8E9F9b018I8K7Z6V0G5b4@564_531t0T4|9Y2%2Y0W1?9V0G4`1z6s4 2Q0u5K0W0i5J0y6e041l1n1p1r0O7Y331G3D1A0o1d2H0t2P0)0T0O0W0t0;0w0O1a0*0w8-0c0O0/0O6w0x2S0w1$055b2~0R0Z2R2T9S3n04a01E3D2;3(1Q1S1U1W1Y1!1$1}1+1-1/9.6X2w2n2p0{0j1Z1#7L7f55683!5,9T7$5n6c0z3v8S7-6i0Ka?5s5 947.a|2h4v4*5`954Sb16r9M7a5H9e817M6K5Ubf6X5#5%8?9n5^8_8Qa?5?3e6g8!b70Q2g8Xa_5qbrb24Nb5b0bx1:0G659s6)bq6q5@bu8 bw6ka~bFa`a?6kb34x8U4BbXbI3A9M736w0cbi5Ebb7P6Gb.8B7J6O8F8k7aayaAat1c9Bbj0{0nc1b/6S9g824?8k5#0Nb?1{9x9z8qc57W040ka14m9vbM7)a{4ga^a bWctbzcvbBcxbZ4a6:cw6|bJaF6 b*6N76b`8t5F04bc8.5P9M7C047Ece0?cVb_9Lb{9d5Jbe9v9C8=9Qcpbpcra?7_bt8Tbv3sc=928YbVcA4D4)b!c_cs7_cH99cJc%cQb;c)7Scj9k9m8/9ocPcRde8;049E3C9Gbg8DcY9N8J043yc.bncq0xc`0Q8%bPc^bRdC8WbUcEcA8WcC4+dHcsdEd6d8cO8+0+cS5,cbc-4HbLc:dBcs97c@bA4ea?4/cyc~d.91d1cDb#bw97dTd7bac(9f9hbnc,9ldldjdbe68vdt8C9Jdt9Odwbm58aD0$2Xa+9W0V5*0$0(0*0X04.
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.
.128013N4r[S=0ykP)_5(Ogfl6umpinh17;ecq./x]2d3R, b-owt:vas050L0D0U0X0x0s0Y0P0E0s0X0Y0Y0g010U0x0w010406050Y0u0v0v0X0d0i040f0S0s0u0?0S0y0P020X0v0w0C0P0N0D100d0F0u0D0Y050H0}0 11130{0w04051y1r1B0H1y0{0L0x0W0+0-0/0;0-0y0q0u0X0q0D0R0w0i0U0z1a0P0z0x0q0z0s1%0z0U0_050$0Q0s0D1K0.0:011$1(1*1(0U1:1=1.0U0d1z1Y0+160Y0w0X0y0;0K011@1M010r0(0D0y1e0D1.292b2g1_2j1=2m0v2o040a0P0k0d0S0w0S0Y0x191b0!270d0d0D0E2J1r2q0y1z0H1Y2V2325241/0L2s1N0x0y2l2G1.1H1J0,1^2)2+0y0S2/1.0w2O1z2T2V2 0|2a1b2;2h2^0d100s1.0X1#2O0r0;030m0m0E2_0D1*2@0S0R0M0K0R0A0_0A1r0X30330`322r351_37393b3d0D3f013h3j3l3n2,3q3s2e040K3x3z2b3B2T2(013G0X3a1z3c0z3e3g3i3k0!3Q2^3S3q0_0M3X2S3A0{3#3E0;3(3*053,3.3M3:3P2*3R3r0R0c0_0c3|1s3~3C341L3F0S383)3I3-3K3/3O3=4b3@4d0n0_0n4i2 3 333$434s473N3;3m4y3p4d0t0_0t4E4k404n424p3H3+3J3L4M4a3o3^0B0_0B4V3Z1C2}1r2/2Y0L252%41014N2.1I1z2|0D2~3A3}4;4N552r0x0L0;3i2T3^3u4$5c5e4w4O4+4d3u0P2w0D5l4N3?4Q3s5i3|4X2=3%0_2b2+0D0m100I0x572U0P4l3$0S0_0g5M045O5B2h0j0E0_0b1a0D5U0{4j4;3#5k015f333^3U450P5.494x5o3T2f5s5u4*4c5}2V3y5P4}0y0_5J5L5+5N664Y015R045T6c5V6e5C0v0x0_0h5)5U5P5_0m5g4d0M3I6v5v4P3^6z5r2n605{623_643B6k6u5d5/6w5;4d4f5j6Q5`5n6K4f6G2x6I6Z4z3s6V5A4H4}0j0_0r4p5U5W6.6f68045F0D5(6k6^3D6f0S0T0_2*6@6m365E0y5G0m2u0v1q6O5X1_0^040V6s7i4H6v6x3s4B6W6(5w3^4B6$5t6R6C5|0R7u3X0P7I714m5C6:040x0r787j427b7d7f7h317S017l0e6t7Z6{6}6 7Y6_5C7l0J7R7-2h6h020q0U0C7;725C6{6a7%7=7k0_7n6k5*7,5b6X6S2b3^4S7v7C616*0R4S7A7w6D4R1.0H3y7J8s7K4I690X5K7|7L7?5S8z8v6|7c6~7e0(7g817}2h7#8L8A3F7U6~8P3$7/7o881b7r6T3s4-8f6Y7x4d4-8l8g6J8i8%7H8t7I798R8F7d80708^0;6h6j2 8u678S7+4k6O0H594=544@511r0U4`9f2#2W0X1;9c0H4^1x5a8Q0;2O0v7e0X0j5H0z6z041j1l1n1p0P85311E3B1y0p1b2F0u2N0%0U0P0X0u0/0x0P2a0d3k9Q0x0d0P1=0*051k7O0U1k7h9.0P0L0u9@0x2Q0x1a2m9(1?851F0Z1I3$1O1Q1S1U1W1Y1!1{1)1+1-9r3$2u2l2n0_0k1X1Z0y6t539r3Y2U059a5-8a6x0M3t6A8a7D4caC5q5 8.6)4QaI2f4t4(8)8naO6M8~5D8`8H8|92aW908D6/5!045$2+8X56az5laB0R5?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}7l0Oa(6`0_2^0v0Q2Ob=5C7476arb*9saX7*8I0s8K7pb+8 0_0Gb.b?9/9;cd7.0_0o0l9I978Y5^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;993l2Vat9d0W6N0!0$0(0Y04.
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'].
.128013N4r[S=0y9kP)_5(gf8l6umpinh17;e+c./x]2d3,G b-owt:vas{j}050M0E0V0Y0y0t0Z0Q0G0t0Y0Z0Z0g010V0y0x010406050Z0v0w0w0Y0d0i040f0T0t0v0`0T0z050I111315170 0x04051n1g1q0I1n0 0M0y0X0/0;0?0^0;0z0q0v0Y0q0E0S0x0i0V0A1e0Q0A0y0q0A0t1S0A0V0}050*0R0t0E1z0=0@011R1T1V1T0V1#1%1Z0V0d1o1N0/1a0Z0x0Y0z0^0L011)1B010r0,0E0z0Y0w0E1Z1~20251+281%2b2d0}0a0Q0l0d0T0x0T0Z0y1d0z0Q0(1|0d0d0E0G2y1g2g0z1o0I1N2L1^1`1_1!0M2i1C0y0z2a2v1Z1w1y0:1*2V2X0z0T2#1Z0x2E1o2J2L2=101 2z2%262+0d140t1Z0Y1Q2E0r0^030n0n0G2,0E1V2*0T0S0N0o0S0B0}0Q0B1g0Y2?2_0~2^2h2{1+2}2 31330E350137393b3d2Y3g3i23040Q0L3o3q203s2J2U013x0Y301o320A3436383a0(3H2+3J3g3l0N3P2I3r0 3T3v0^3W3Y053!3$3D3(3G2W3I3h0S0c3l0c3;1h3?3t2`1A3w0T2~3X3z3#3B3%3F3*433,450o3l0o4a2=3@2_3U3{4k3 3E3)3c4q3f450u3l0u4w4c3^4f3`4h3y3Z3A3C4E423e3-0C3l0C4N3R4y3u4Q3V4S4j4U4l4W414p4Z450s3l0s4(2K4*4e2(4-4i3|3~4m404o4G4^3i0j3l0j4}3S4z3_524T3}4V4n4F3+4I3i0B0h0}5s5f4 4A4.545m575o4H3-0B3k045G5w4d5y534C564X4@445r3L0B3O0I3p3=4)5L5i4B4:4D4?595S3j0N5u3:5X3Q4~5#4,5%5l4;5n4Y5,0B475I495;5Z2K1r2:1g2#2O0M1`2T5i4F2!1x1o2/0E2;3r641o4F6l2h0y0M0^382J5F3z6s6u585p6x0Q2m0E6A5D5a3j1Z634P510z0}1w3a0n1I0z2E0Z6n0Q5@510T0}0g6Y6!260|040!0$6n0 4b3R5L6z016v2_3-3L5l6^5*6C45236E2c6G6_6B5E726L5Y6N2|0}2d0,1%0v0d6T2a2E6)7d1+6$046(6=2K6Z7p0^0k0G0}0b1e0E6:6n6@6t776w455.4U6 786J5.742d6H5}4r3i7M3;7x3V7f0Y0J0y7o5h4,7r7t2=7w7+510w0y0}0h7F7u6q2z7O7K3i606~7I707980246F7U5R7W467b3s7{7H6A7 0S4t7N837P5,4t7S76846J8k7Z7;260k0}0r4h7*4+6O0}6U6W8C50260T0U0}2W8I4A0}2/0T0#2F2H8f7!6,0p7G7!6P042k0w6X8X8w1+6,0O8P5i0Z3L010P7m0E0Z018#8-0^6,0m0W7`2@3T7~6{4J6y8m6I5,4K8q895+8b4K2L3p0Q9m7:8D7e040Z0T0v0Z7l6V8{8;7,6%9z8E048G9y8,9p7q0}0H8~9I3`0}1~1V0V9M8J8.0}8!9H9U0^8?0}010O0Q8}9Y3U91946m968m8i4#8l9g713i4#9f779c8b9?3P9n9o9Z018y8(8B7{a38Q9E8`9C8K8M048Oa96*3w9P9t9v9F8+958 016,937{6;ar6r9;983i4`9@9}7V5q0S4`9|8s5,aDa1a29nak7y8N0raealac9xaV0^8L0}2+9Saj7!a#ah1fa)as8%6R0T9w8H9+5iau9.6?9:8haB0S5caEaL8b5caK8nb48daPbaaa5$6Q0y6Sap9T9,0}0ebibdaX7na^4,6,0KaZ017-bu7?5ua{65a}7Ja 5s9a9^853j5tb69~aHbF9k3MbbaRa50}3c0Z7Ebq51a`awbi97205F5H82bH6J5G8775b,5~b*5;bbaPbSa:bfa=bhbY6+bkbm5^8Fadb 9V04bta.9Nbv0}0F7.3rbc4,by5IbA7|0Qb%0z5F6}327ObMcqb/7TaF8abN6}b@bR7!a60yaUcaa4b{bg8`aq9/as6,blc69ObobXaya4bsbu7r020q0V0Dbu8%147(c2bZ0}av4xb$aAb(450B7Ycs9baG5F7R88cy9hbN7YcCb^9mb`7f0E7h0E7ja?cVcgbSbwcIab9Fcl8gbDc@5r81c{b;8b5 cw8rb7bN81d5d6d804c+7)dj5idi7/dDa;decNa|cPc1cS7#dEda0t7i7kdldScYb#8f0I6p666k686h1g0V6bd.2R2M0Y1$d+0I696;0(0*0,0Z04.
# Tests(insensible à la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)