[[{"text":"","posi":0,"title":"Indexation de tables","tagtitle":"h1"}],[{"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/
"}],[{"text":"
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,...)
","title":"Hypothèses et définitions sur les tables"}],[{"text":"
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 :
https://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?
"}],[{"text":"
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)
Ecrire et exécuter le programme.
Copier le résultat ci-dessous:
","title":"Chargement d'un fichier csv (2)"},{"input":"","place":"Ecrire le résultat ici."},{"edit":"Quels sont les avantages de cette méthode?
"}],[{"text":"
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.
Copier le résultat ci-dessous:
","title":"Validation des donnees"},{"input":"","place":"Ecrire le résultat ici."},{"edit":"Quels sont les avantages de cette méthode?
"}],[{"text":"
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?
"}],[{"text":"
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
","title":"Exercice 1"},{"input":"","place":"Ecrire le résultat ici."}],[{"text":"
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."}]]