Traitement de données en tables
Les données organisées en table correspondent à une
liste de p-uplets nommés qui partagent les mêmes
descripteurs
.
La mobilisation de ce type de structure de données permet de préparer
les élèves à aborder la notion de
base de données qui ne sera
présentée qu'en classe terminale. Il s'agit d'utiliser un tableau
doublement indexé ou un tableau de p-uplets, dans un langage de
programmation ordinaire et non dans un système de gestion de bases de
données.
Contenus | Capacités attendues |
Commentaires | Applications |
Indexation de tables
|
Importer une table depuis un fichier texte tabulé ou un fichier
CSV.
|
Est utilisé un tableau doublement indexé ou un tableau de p-uplets
qui partagent les mêmes descripteurs.
|
|
Recherche dans une table
|
Rechercher les lignes d'une table vérifiant des critères exprimés
en logique propositionnelle.
|
La recherche de doublons, les tests de cohérence d'une table
sont présentés.
|
Deux enregistrements (ici ce sera des dictionnaires) sont des
doublons si tous les items des deux dictionnaires sont égaux deux à
deux, il suffit qu'un des items soit différent pour une même clef
pour que les deux dictionnaires soient différents et ne soient pas
des doublons.
Exemple : dic[1] = { "nom" : "Doe", "Prenom" : "John", "age"
: 15 } n'est pas le doublon de
dic[2] = { "nom" : "Doe", "Prenom" : "John", "age" : 35 }, il s'agit
d'enregistrements d'homonymes d'âges différents
Une table est cohérente sssi
elle ne contient pas de doublons !
|
Tri d'une table
|
Trier une table suivant une colonne.
|
Une fonction de tri intégrée au système ou à une bibliothèque
peut être utilisée.
|
La table BDD est une liste de dictionnaires. Pour une clef donnée
, la liste des valeurs correspondantes à cette clefs sera extraite à
partir du parcours de chaque ligne de cette table. Puis la méthode
sort() sera aplliquée à cette liste. Cette liste sera ensuite
parcourue pour recontriure une table triée selon l'ordre croissant
des valeurs associées à cette clef. Pour un ordre décroissant, la
liste triée sera inversée par le slice listeTriee[::-1] qui
inverse en place la liste (cf.
exercice 6).
|
Fusion de tables
|
Construire une nouvelle table en combinant les données de deux
tables.
|
La notion de domaine de valeurs est mise en évidence.
|
La fusion de deux tables est simple lorsque leur différence
ne porte que sur leur contenu et que celui ci est constitué de
dictionnaires de même format (même nombre d'items et même liste
de clefs. Elle se complique, lorsque les deux tables ne
contiennent pas des dictionnaires de même format. Si la fusion
est réalisée, cela entrainera la création d'items de valeur
None associées aux clefs qui sont nouvelles pour
certains dictionnaires.
Les deux tables mettront en communs leurs clefs et valeurs, cela
entraînera peut être la création de doublons mais indétectables
s'il n'y a pas de clef primaire pour les détecter
dans des dictionnaires de format et de contenus légèrement différents.
|
Les données en tables ou tableaux permettent de
synthétiser des sommes importantes d'information récoltées à l'aide de
formulaires.
Python permet d'écrire, de lire ces données sous forme de fichier au
format CSV et autre et de les traiter
Recueil des données dans un tableur et exportation en fichier csv
Utilisation d'un formulaire
Les formulaires en ligne : balises spécifiques des formulaires
La balise HTML form permet de délimiter un plage de formulaire ; elle
contiendra un certain nombre d'éléments permettant de recueillir des
informations :
- la balise input dans laquelle il faut préciser le type d'input avec
l'attribut type='' permet de saisir la plupart des entrées possibles :
- button
- checkbox : cases à cocher (toutes si on le souhaite) ;
- radio : choix unique !
- number : nombre
- range : curseur qui varie dans un intervalle fixe
- password : mot de passe (les entrées sont masquées)
- text : du texte (type string) ;
- color : choix d'une couleur dans la palette ;
- file : ouvrir un fichier
- email : reccueil d'une adresse de courriel ;
- time : heure ;
- url ;
- week ;
- date ;
- datetime-local ;
- month ;
- image ;
- tel ;
- reset : bouton qui réinitialise le formulaire = remise à zéro ou
état initial ;
- search ;
- submit : à cliquer quand on désire envoyer les informations saisies
dans le formulaire au serveur;
- hidden : caché (provisoirement …) ;
Exemple de formulaire en ligne : google form
exercice : dans drive, créer un nouveau formulaire
d'inscription en première pour les élèves de seconde qui
recueillera :
- Prénom ;
- Nom ;
- date de naissance ;
- Adresse (sans code postal) ;
- Code Postal ;
- Ville ;
- Cases à cocher avec (quelques exemples) les spécialités du bac
général et les séries technologiques ;
Les formulaires seront envoyés à vos camarades et vous devrez tous y
répondre rapidement. Les données peuvent être recueillis dans un tableau (google sheet) et ensuite devront être téléchargées au format CSV et ods.
Le format
CSV
Définition
wikipedia
Le for mat 'Comma separated Value' est une mise en for me
standardisées des données de tableaux codés en texte simple (utf-8) :
- la première ligne du tableau contient les titres des colonnes (ou
champs ou clefs) ;
- les autres lignes contiennent un semble de données ou fiche ou
enregistrement ;
- chaque ligne du fichier CSV contient les données séparées par des
virgules (comma en anglais).
Ouverture/écriture d'un fichier en python
Python permet de lire et écrire (et modifier) très facilement des
fichiers. Il crée un objet de type itérateur (parcouru une seule fois !)
; ici cet objet sera arbitrairement appelé 'fichier'.
Il y a deux méthodes de lecture/écriture d'un fichier en python, par
défaut un fichier est lu sans être modifié (lecture seule : 'r' =
read) :
- avec la
fonction prédéfinie fichier = open('nomFichier.csv','r')
dans laquelle la variable appelée fichier représente le contenu
du fichier texte (objet itérateur). Une lecture de l'objet fichier
peut ensuite être réalisée lignes par lignes ; le fichier devra être
fermé par la méthode fichier.close() ;
- avec le mot clef with : qui définit un bloc
d'instructions relatives au traitement du fichier ; l'avantage est
que la sortie du bloc ferme automatiquement le fichier ;
exemple de code simple.
Sources utiles :
https://www.python for beginners.com/files/reading-and-writing-files-in-python
https://www.w3schools.com/python/python_file_write.asp
lecture globale
fichier.read() extrait tout le contenu du fichier ; une fois lu,
l'itérateur est vide !
essayer :
print(fichier.read()) //deux fois de suite !
Remarque à écrire dans votre cours : effet du premier et du second
affichage de l'itérateur complet
lecture ligne par ligne
for ligne in fichier :
print(ligne)
traitement des données du fichier CSV
Recueil des données
Conversion des lignes en listes de clefs ou données
Un objet de type string (mot, phrase ou texte) peut être
divisé grâce à la méthode split dont l'argument
est le séparateur (ici la virgule) :
listeDonnées = ligne.split(',')
Conversion du fichier en tableau à deux dimensions (liste de liste)
Avant de lire le fichier CSV, une variable de type liste
est créée et initialisée :
tableau = [] // type(tableau) renvoie <
class 'list'>
Conversion du fichier CSV en liste de dictionnaires
Le fichier CSV sera ouvert en lecture et lu ligne par ligne :
with :
fichier = open ("tableau.csv"
,"rt"
)
compteur = 0 # voir plus loin …
for ligne in fichier :
La première ligne du fichier CSV contient les titres des colonnes
du tableau qui devientront les clefs de dictionnaires correspondant à
chaque ligne de données du tableau. Cette ligne sera lue la première,
il faut donc utiliser un compteur (variable initialisée à zéro qui sera
incrémenté de un après chaque tour de boucle) pour savoir quand il
faudra stocker les clefs (quand compteur == 0).
if compteur == 0 :
listeClefs = ligne.split(',')
N = len (listeClefs) # compte le nombre de
clefs
n = len (listeClefs[N-1]) #taille de la
dernière clef
listeClefs[N-1] = listeClefs[N-1][:n-2] #
les deux caractères \n de fin de ligne sont enlevés à la dernière clef
compteur += 1
else : # les autres lignes fournissent les données pour construire les
dictionnaires
dico = {} #initialisation du dictionnaire
listeDonnees = ligne.split(',')
for i in range(N) :
if i == N-1 :
n = len (listeDonnees[N-1]) #taille de la
dernière donnée
listeDonnees[i] = listeDonnees [i][:n-2]
dico[listeClefs[i]] = listeDonnees [i]
tableau.append(dico)
Ressources et liens utiles :