[[{"text":"","title":"Recherche dans tine table"}],[{"text":"
import csv\n\nfichier = open (\"eleves.csv\" )\ntable = list (csv.DictReader(fichier))\n#print(table)\n\ndef liste(tab) :\n newlist = []\n for ligne in tab:\n newlist.append({\"Prénom\" : ligne[\"Prénom\"]})\n return newlist\n \n\nprint(\"liste prénoms\",liste(table))
Une fois qu'un ensemble de données est chargé dans une table, il devient possible d'exploiter ces données à l'aide des opérations de manipulation de tableaux.
On va par exemple pouvoir extraire des données cibles, tester la présence de certaines données ou faire des statistiques. Ces opérations sont appelées des requêtes.\nCe chapitre presente differentes manieres dont les manipulations usuelles de tableaux et de n-uplets peuvent etre combinees a ces fins. Comme dans le chapitre precedent, on utilisera pour designer ces operations le vocabulaire des bases de donnees relationnelles aux endroits oii cela peut se faire naturellement."}],[{"text":"
Considérons par exemple la fonction suivante, qui renvoie True ou False selon la présence ou l'absence d'un élement v dans un tableau t.
tableau = [1,4,6]\n\ndef appartient(v, t):\n for x in t:\n if v == x: return True\n return False\n\nprint(\"1?\",appartient(1, tableau))\nprint(\"3?\",appartient(3, tableau))\n
Tester le oode ci-dessus.
Cette fonction peut être appliquée directement à une table de données.
Avec tableau égale à la table et v une ligne de la table.
Tester maintenant avec :
tableau =
","title":"Recherche"},{"input":"","place":"Ecrire le résultat ici."}],[{"text":"Une fonction recherchant dans une table un élève en désignant son prénom et renvoyant True ou False selon sa présence ou non.
On modifie la fonction précédente.
import csv\n\nfichier = open (\"eleves.csv\" )\ntable = list (csv.DictReader(fichier))\n#print(table)\n\ndef appartient(tab, eleve) :\n for ligne in tab:\n if ligne[\"Prénom\"] == eleve:\n return True\n return False\n
print(\"pierre\",appartient(table, \"pierre\"))\nprint(\"Léon\",appartient(table, \"Léon\"))\n
Comme auparavant, on y passe en revue l'ensemble des lignes du tableau.
Puis on teste l'attribut (la clé) souhaitée.
A partir de cette base, on pourra déduire d'autres fonctions qui, au lieu de seulement indiquer la présence ou l'absence d'un élève, renvoient certaines informations associées.
","title":"Recherche en fonction d'un attribut clé"},{"input":"","place":"i"}],[{"text":"
La fonction suivante permet de récupérer l'année de l'élève.\nimport csv\n\nfichier = open (\"eleves.csv\" )\ntable = list (csv.DictReader(fichier))\n#print(table)\n\ndef valeur(tab, eleve) :\n for ligne in tab:\n if ligne[\"Prénom\"] == eleve:\n return ligne[\"Année\"]\n return None\n\nprint(\"pierre \",valeur(table, \"pierre\"))\nprint(\"Léon \",valeur(table, \"Léon\"))\npermet ainsi de recuperer le projet d'un
eleve est désigné par son prénom. La fonction renvoie None si aucun élève n'a ce prénom dans la table.\n
Que se passe-t-il cependant si deux élèves portent le même prénom?
Si on ne s'en est pas déjà convaincu a la simple lecture du code, une petite expérience permet de constater qu'un seul projet est renvoyé, en l'occurrence celui de l'élève dont la ligne apparait en premier.
Ecrire et exécuter le code.
Modifier le code pour qy'uk affiche l'appréciation de l'élève.
"},{"input":"","place":"Ecrire le résultat ici."}],[{"text":"Les opérations d'agrégation combinent les données de plusieurs lignes pour produire un résultat et en particulier une statistique sur ces données.
On pourra par exemple : \n- compter le nombre de lignes répondant à certaine condition;\n- calculer la valeur moyenne d'un attribut.\n- ...
\n","title":"Agregation"},{"input":"","place":"Ecrire le résultat ici."}],[{"text":"
Les fonctions visant à compter le nombre d'occurrences d'un élément dans un tableau, peuvent, comme les fonctions de recherche, être adaptées pour compter dans une table le nombre de lignes validant une condition.
Ainsi, la fonction suivante compte le nombre d'élèves dont l'appréciation est égale à la valeur en paramètre.\n
import csv\n\nfichier = open (\"eleves.csv\" )\ntable = list (csv.DictReader(fichier))\n#print(table)\n\ndef occurence(tab, valeur) :\n nb=0\n for ligne in tab:\n if ligne[\"Appréciation\"] == valeur:\n nb=nb+1\n return nb\n \n\nprint(\"AB \",occurence(table, \"AB\"))\n
Ecrire et tester le code.
","title":"Comptage d'occurrences"},{"input":"","place":"Ecrire le résultat ici."}],[{"text":"De manière générale, les opérations d'agrégation peuvent être réalisées en utilisant des accumulateurs qui enregistrent progressivement un bilan du parcours de in table.
Pour calculer la moyen de \"Note 1\", il nous faut 2 variables, 1 pour compter le nombre de notes (nb) et 1 pour accumuler les notes (somme).
import csv\n\nfichier = open (\"eleves.csv\" )\ntable = list (csv.DictReader(fichier))\n#print(table)\n\ndef moyenne(tab, note) :\n nb=0\n somme=0\n for ligne in tab:\n somme = somme + float(ligne[note])\n nb=nb+1\n \n return somme\n \n\nprint(\"Moyenne \",moyenne(table, \"Note 1\"))\n
Ecrire et tester le code.
Modifier la fonction moyenne pour qu'elle retourne la moyenne au lieu de la somme.
","title":"Sommes et moyennes"},{"input":"","place":"Ecrire le résultat ici."}],[{"text":"Les opérations presentées dans les deux sections précedentes analysent la table pour produire un resultat simple, sous la forme d'une unique valeur :\n- résultat d'un test;\n- valeur d'un attribut;\n- valeur agrégée:\n- ...
Une autre opération courante, appelée sélection, consiste à produire une nouvelle table en extrayant de la table d'origine toutes les lignes vérifiant une condition.
import csv\n\nfichier = open (\"eleves.csv\" )\ntable = list (csv.DictReader(fichier))\n#print(table)\n\ndef lignes(tab, valeur) :\n newlist = []\n for ligne in tab:\n if int(ligne[\"Année\"]) < valeur:\n newlist.append(ligne)\n return newlist\n \n\nprint(\"<2003 \",lignes(table, 2003))\n
On utilise l'instruction append pour unsérer un nouvelle élément en fin de liste.
Ecrire et tester le code.
","title":"Selection de lignes"},{"input":"","place":"Ecrire le résultat ici."}],[{"text":"
Nous pouvons sélectionner certains attrib ut d'une table.
Par exemple, nous poulons sélectionner que les prénoms de la table.import csv\n\nfichier = open (\"eleves.csv\" )\ntable = list (csv.DictReader(fichier))\n#print(table)\n\ndef liste(tab) :\n newlist = []\n for ligne in tab:\n newlist.append({\"Prénom\" : ligne[\"Prénom\"]})\n return newlist\n \n\nprint(\"liste prénoms\",liste(table))
Ecrire et tester le code.","title":"Selection de lignes et colonnes"},{"input":"","place":"Ecrire le résultat ici."}],[{"text":"
Modifier le fonction ci-dessous pour qu'elle retourne une liste avec les prenoms et les appréciations de la table [{\"Prénom\":\"Stéphane\",{\"Appréciation\":\"B\"}].
Ecrire et tester le code."},{"input":"","place":"Ecrire le résultat ici."}],[{"text":"
Imaginons un bon de commande représenté par une table de données dans laquelle chaque ligne correspond à un produit commandé et contient quatre attributs : \n- ref, la référence du produit (string);\n- sa désignation (string):\n- le prix unitaire (float);\n- gté, la quantité (int).
ref | désignation | prix | qté |
113313 | crayon | 1.30 | 3 |
212444 | gomme | 0.90 | 2 |
123366 | stylo | 2.10 | 5 |
Télécharger le fichier csv :\nhttp://sciencesappliquees.com/images/nsi/bonco.csv\n
Le code de base est le suivant :
fichier = open (\"bonco.csv\" )\ntable = list (csv.DictReader(fichier))\n#print(table)\n\n
1. Ecrire une fonction verif ie_quantites qui analyse un bon de cornmande et renvoie True si pour chaque produit commande la quantite est bien positive.
2. Ecrire une fonction nombre_produit qui renvoie le nombre total de produits demande dans un bon de commande.","title":"Exercuce 1"},{"input":"","place":"Ecrire le résultat ici."}],[{"text":"
Dans cet exercice, vous travaillez avec le bon de commande de l'exercice 1.
1. Ecrire une fonction purge_commande qui prend en parametre un bon de commande b et renvoie un nouveau bon de commande dans lequel seuls les produits commandes en quantités strictement supèrieures à 0 sont conservés.
2. Ecrire une fonction prix qui renvoie le prix total d'un bon de commande apres l'avoir purge.
","title":"Exercice 2"},{"input":"","place":"Ecrire le résultat ici."}],[{"text":"
On considere un registre de ventes d'appartements representé par une table de données registre dont chaque ligne décrit un bien vendu avec quatre attributs :\n- lat , latitude(float);\n- long , longitude (float);\n- surface (int);\n- prix (int).
Voici un petit exemple.\nLat.\tLong.\tSurface\tPrix\n48,6938\t6,1893\t91\t169000\n48,6907\t6,1809\t19\t55000\n48,6955\t6,1811\t75\t176000\n
1. Ecrire une fonction surf ace_sup (s , registre) qui renvoie le nombre d'appartements vendus dont la surface est supérieure ou égale a s.\n
2. Ecrire une fonction prix_inf (p, registre) qui renvoie le nombre d'appartements vendus dont le prix est inférieur ou égale a p.\n
3. Ecrire une fonction surf ace_sup_prix_inf (s, p, registre) qui renvoie le nombre d'appartements vendus pour lesquels la fois la surface est supérieure on égale à s et le prix est inférieur ou egal a p.","title":"Exercice 5"},{"input":"","place":"Ecrire le code ici."}],[{"text":"
Rappelons qu'une table peut contenir des attributs indefinis (avec la valeur None).\n1. Ecrire une fonction nb_indefinis qui analyse une table et renvoie le nombre d'attributs de ses lignes valant None.\n2. Ecrire une fonction nb_lignes_incomplètes qui analyse une table et renvoie le nombre de ligne comportant au moins un attribut valant None.\n","title":"Exercice 6"},{"input":"","place":"Ecrire ici le code."}],[{"text":"
On se replace dans le contexte de l'exercice 190 et on suppose que le registre contient au moms les lignes de l'exemple.\n1. Ecrire une fonction prix_m2_max(registre) qui calcule le prix par metre carre le plus eleve.\n2. Ecrire une fonction prix_moyen(registre) qui calcule le prix moyen des appartements vendus.\n3. Ecrire un programme prix_moyen_familial(registre) qui calcule le prix moyen d'un appartement dont la surface est comprise entre 70 et 100 metres carres.\nLLJ\nExercice 193 On se place dans le meme contexte qu'a l'exercice 190.\n1. Ecrire une fonction plus_proche(x , y, registre) qui renvoie la ligne du registre concernant Pappartement le plus proche du point defini par les coordonnees de latitude et longitude x et y. On fera une approximation en considerant que latitude et longitude correspondent a des coordonnees dans le plan cartesien, et on utilisera la distance euclidienne habituelle.\n2. Ecrire une fonction dans_un_rayon_de(r, x, y, registre) qui renvoie une table form& par les lignes du registre concernant des appartements a une distance inferieure ou egale a r du point de coordonnees x et y.\n3. Reprendre la question precedente, mais en renvoyant une table avec seulement trois colonnes, indignant les coordonnees et le prix au metre carre.","title":"Exercice 5"},{"input":"","place":"Ecrire le code ici."}]]
- Détails
- Écrit par : Richard GAUTHIER
- Clics : 1543
[[{"text":"","posi":0,"title":"Indexation de tables"}],[{"text":"
"}],[{"text":"
","title":"Hypothèses et définitions sur les tables"}],[{"text":"
"}],[{"text":"
"}],[{"text":"
"}],[{"text":"
"}],[{"text":"
","title":"Exercice 1"},{"input":"","place":"Ecrire le résultat ici."}],[{"text":"
L'organisation tabulaire des donnees est très répandue et très ancienne.
Le bulletin d'un élève est organisé en table et indique, pour chaque matière, la note de l'élève, la moyenne de la classe, la note la plus basse et la plus haute de la classe et l'appréciation du professeur.
La liste de présence » est une table indiquant pour chaque élève s'il est présent ou absent ce jour.
Les résultats d'un match de tennis sont affichés eux aussi comme une table. Les lignes de la table correspondent aux joueurs, les colonnes indiquent le nombre de jeux gagnés dans chaque set.
Le relevé de compte bancaire indique, pour chaque opération, sa date, son montant et sa nature (débit ou crédit).
Les tables documentées les plus anciennes sont d'ailleurs des livres de comptes (on trouve des mentions de telles tables dans l'Egypte ancienne).
Les données tabulées ont évidemment une place importante en informatique. Avec l'introduction du modèle relationnel, propose par Edgar F. Codd dans les années 1970 alors qu'il est employé par IBM, les tables de données, stockées dans des bases de données deviennent rapidement le principal moyen de stocker de l'information structurée. Même sans utiliser de tels systèmes, la manipulation de données en tables depuis un langage de programmation est un outil important a maitriser. En effet, elles sont utilisées dans de nombreux domaines : calcul scientifique, intelligence artificielle, programmation wen, ...","title":"Notion de table de données"}],[{"text":"https://www.data.gouv.fr/fr/territories/commune/29024@1957-01-01/Carhaix-Plouguer/
Prénom | Année | Note 1 | Note 2 | Appréciation |
Stéphane | 2000 | 12.5 | 9.4 | AB |
Paul | 2003 | 14 | 17 | B |
Régis | 2002 | 9 | 15 | TB |
Bernard | 2001 | 5.5 | 12 | B |
Franck | 1999 | 16 | 14.5 | AB |
Léon | 2004 | 14 | 16 | TB |
Table : Une table des élèves
Les données ci-dessus sont des tables.
Les tables représentent des collections d'éléments.
Chaque ligne représente un élément de la collection.
Les colonnes représentent les attributs d'un element.
Pour un attribut donne, les valeurs sont du même type.\nPar exemple : \n- La colonne année est de type entier.\n- La colonne prénom est de type chaîne de caractère.
Le terme indexation de table désigne la création d'une table répondant aux critères ci-dessous.En bases de donnees, un index est une structure de données permettant un accès rapide aux données de la table(My Sql, Mongo Db, Firebase,...)
La première operation concernant les données en table est de charger (iire) les données.
Nous avons besoin d'un moyen simple pour échanger des données tabulées entre différents programmes.
L'un des moyens les plus simple est l'utilisation d'un fichier. Le programme créant les données les sauvegardes dans un fichier.
Un second programme charge ce fichier et travaille sur les données.
La seule contrainte est que les deux programmes utilisent le même format\n
Pour les données tabuées l'usage est d'utiliser des fichiers au format CSV (Comma Separated Values, ou données séparées par des virgules ).
Exemple :\nPrénom,Année,Note 1,Note 2,Appréciation\nStéphane,2000,12.5,9.4,AB\nPaul,2003,14,17,B\nRégis,2002,9,15,TB\nBernard,2001,5.5,12,B\nFranck,1999,16,14.5,AB\nLéon,2004,14.5,16,TB\n
Ce format est relativement simple :
• les fichiers CSV sont de simples fichiers textes ;\n• chaque ligne du fichier correspond à une ligne de la table ;\n• chaque attribut d'une ligne est séparée au moyen du caractère \" , \" ;\n• toutes les lignes du fichier ont le même nornbre de champs ;\n• la première ligne peut représenter des noms d'attributs ou commencer directement avec les données ;\n• on peut utiliser des guillemets droits \" pour délimiter le contenu des champs.\n","title":"Lire un fichier au format CSV"}],[{"text":"
Python a une bibliothèque csv contenant des fonctions pour lire et écrire des fichiers au format CSV.
Le code Python suivant permet de charger notre fichier users.csv dans une variable table.
import csv\nfichier = open(\"eleves.csv\")\ntable = list (csv.reader(fichier))\nprint(table)
Description du programme : \n- importation du module csv;\n- ouverture du fichier users.csv;\n- la fonction reader du module csv prend en argument un fichier ouvert et renvoie une valeur en tableau:\n- la fonction list convertit le tableau en list.\n- la variable table contient alors un tableau de tableaux de chaines de caractères.
Télécharger le fichier csv :
http://sciencesappliquees.com/images/nsi/eleves.csv
Ecrire et exécuter le programme.
Copier le résultat ci-dessous:","title":"Chargement d'un fichier csv"},{"input":"","place":"Ecrire le résultat ici."},{"edit":"Quel est l'inconvénient de cette méthode sur le typage des entiers?
Une alternative aux problèmes rencontrés précédemment est d'utiliser la fonction offerte par le module csv est la fonction DictReader dans le module CSV.
Le programme devient :
import csv\nfichier = open (\"eleves.csv\" )\ntable = list (csv.DictReader(fichier))\nprint(table)
","title":"Chargement d'un fichier csv (2)"},{"input":"","place":"Ecrire le résultat ici."},{"edit":"Quels sont les avantages de cette méthode?Ecrire et exécuter le programme.Copier le résultat ci-dessous:
Malgré l'utilisation de la fonction DictReader, un problème subsiste.
En effet, les nombres sont chargés comme des chaines de caractères.
On souhaiterait que ces données soit des entiers Python.
Le module csv ne propose pas de moyen pour convertir automatiquement les données.
Nous utiliserons la méthode ci-dessous pour créer une table avec des formats valides pour les attributs.
Pour ce faire il faut connaitre les types des attributs.
import csv\nfichier = open (\"eleves.csv\" )\ntable = list (csv.DictReader(fichier))\nprint(table)\n\nfor x in table :\n x[\"Année\"] = int(x[\"Année\"])\n x[\"Note 1\"] = float(x[\"Note 1\"])\n x[\"Note 2\"] = float(x[\"Note 2\"])\n#les nombres avec le bon typage\nprint(table)
Ecrire et exécuter le programme.
","title":"Validation des donnees"},{"input":"","place":"Ecrire le résultat ici."},{"edit":"Quels sont les avantages de cette méthode?Copier le résultat ci-dessous:
Le module csv de Python propose aussi des fonctions utilitaires pour ecrire le contenu d'un tableau de dictionnaires dans un fichier CSV.\n
import csv\n\nf = open(\"nouveau.csv\", \"w\")\nwriter = csv.DictWriter(\n f, [\"Prénom\", \"Année\", \"Note 1\",\"Note 2\", \"Appréciation\"])\nwriter.writeheader()\nwriter.writerow({'Prénom':'Stéphane', 'Année' : '2000' , 'Note 1': '12.5', 'Note 2': '9.4', 'Appréciation': 'AB'})\nwriter.writerows([{'Prénom':'Stéphane', 'Année' : '2000' , 'Note 1': '12.5', 'Note 2': '9.4', 'Appréciation': 'AB'},{'Prénom':'Stéphane', 'Année' : '2000' , 'Note 1': '12.5', 'Note 2': '9.4', 'Appréciation': 'AB'}])\nf.close()
Descriptions du code :\n- La fonction Di ctWrit er renvoie un objet w permettant d'ecrire des lignes dans le fichier.\n- L'instruction writer.writeheaders() dolt etre appelee en premier et ecrit la ligne d'entetes.\n- L'instruction writer.writerows(...) écrit des lignes correspondantes aux attributs dans le fichier.\n- L'instruction writer.writerow(...) écrit 1 ligne correspondantes aux attributs dans le fichier.Ecrite et exécuter le code ci-dessous.
Lire le fichier nouveau.csv avec le bloc note.
Copier son contenu ci-dessous.
","title":"Ecrire un fichier au format CSV"},{"input":"","place":"Ecrire le résultat ici."},{"edit":"Quels est le format de ce fichier?
Trouver toutes les erreurs de syntaxe dans le fichier CSV suivant :
\nTitre,Auteur,Extrait,Annee\nAir vif,tluard,J'ai regarde devant moi,1951\nJe vis...,Labe,J'ai chaud extreme en endurant froidure Heureux...,du Bellay,Heureux qui come Ulysse, a. fait..., 1552 \"La voix,Baudelaire,Mon berceau s'adossait...\",1857\n
On souhaite stocker dans une table l'inventaire d'un magasin. Ce dernier vend des biens dont il possède une certaine quantité en stock.
Les produits peuvent etre indisponibles (epuisés chez le fournisseur) et être en vente libre ou non.
Proposer des noms de colonnes et types Python\npour une telle table d'inventaire.\tSolution page 472\nExercice 182 Ecrire une fonction stats_csv(fichier) on fichier est le nom d'un fichier CSV et qui affiche le nombre de lignes et le nombre de\ncolonnes de la table stockee dans le fichier.","title":"Exercice 2"},{"input":"","place":"Ecrire le résultat ici."}],[{"text":"
Ecrire un fichier au format CSV décrivant le bon de commande suivant, dans lequel les colonnes ref et désignation contiennent des chaines de caractères, la colonne prix des nombres décimaux et la colonne qte des nombres entiers.
ref | désignation | prix | qté |
113313 | crayon | 1.30 | 3 |
212444 | gomme | 0.90 | 2 |
123366 | stylo | 2.10 | 5 |
Ecrire un programme qui lit ce fichier CSV et en extrait une table de données sous la forme d'un tableau de dictionnaires.","title":"Exercice 3"},{"input":"","place":"Ecrire le résultat ici."}]]
- Détails
- Écrit par : Richard GAUTHIER
- Clics : 1869
[[{"login":"ok"}],[{"quiz":820}]]
- Détails
- Écrit par : Richard GAUTHIER
- Clics : 1498
[[{"text":"Afin de vérifier vos acquis, répondez aux questions suivantes.","posi":0}],[{"text":"En quelle année a été créé le concept d'hypertexte numérique (lien hypertexte)?"},{"radio":[{"label":"1965","sol":true},{"label":"1995","sol":false},{"label":"1935","sol":false},{"label":"1905","sol":false}]}],[{"text":"
En quelle année a été créé le world wide web ( www )?
"},{"radio":[{"label":"1989","sol":true},{"label":"1965","sol":false},{"label":"1889","sol":false},{"label":"1939","sol":false}]}]]
- Détails
- Écrit par : Richard GAUTHIER
- Clics : 1510
[[{"login":"aa"}],[{"quiz":815}]]
- Détails
- Écrit par : Richard GAUTHIER
- Clics : 1403