Aller au contenu

Exemple d'utilisation

Données en table & Fichiers CSV

Un chapitre Excel-lent !

meme

Le format CSV est fréquemment utilisé pour échanger des données traitées à l'aide de tableurs ou de logiciels de traitement de bases de données. Ici, notre objectif sera d'apprendre à importer et exporter des données dans Python à l'aide du format CSV.

Sommaire

Chapitre Description
Cours principal Fichiers CSV, enregistrements, import/export
Manipulation de tables Recherche, filtrage et tri de données
Fusion de tables Jointure et fusion de données
Introduction à Pandas Utilisation de la bibliothèque Pandas
Exercices Exercices d'application

En informatique, il est courant de traiter d'importantes quantités d'informations, c'est d'ailleurs le modèle économique de bon nombre de sites et services que vous utilisez quotidiennement : réseaux sociaux, magasins en ligne, cabinets d'analyses...

Contenu: Définition d'un fichier CSV, de données en table, recherche dans une table, fonction de tri
Compétences: Savoir exporter et importer des données dans un programme Python depuis un fichier CSV

Le programme


bo_1.png

Apport de connaissances

Les données en table sont une composante essentielle de l'informatique : de très nombreuses entreprises utilisent des tableurs afin de traiter un gros volume de données.

En maîtrisant cet aspect, nous pourrons commencer à utiliser de petites bases de données pour nos activités, mais également travailler sur des projets plus intéressants. --------------- ### Enregistrements  Un **enregistrement** est une structure de données (différentes ou non) auxquelles on accède grâce à un nom. On peut donc représenter les notes d'une élève dans différentes disciplines à l'aide d'un **enregistrement**

{'Nom' : 'Jean-Yves', 'Anglais' : '17', 'NSI' : '18', 'Maths' : '16'}
À quelle structure de données python cela vous fait-il penser ? ✏ *Les clés sont parfois appelées champs ou attributs quand on parle de base de données* ✏ ----------- ### Fichiers CSV Le format CSV (***Comma Separated Value***) est employé poour importer / exporter des données depuis ou vers un tableur. C'est une sorte de fichier texte dans lequel chaque ligne correspond à une ligne du tableau. Comme son nom l'indique, on sépare les colonnes (et donc les valeurs) par une **virgule**, ou par un **point-virgule**. Il permet donc de représenter une liste d'enregistrement ayant les même **champs**. → Exemple de feuille de calcul
| Prénom | DS1 | DS2 | Projet | | ------------ | ---- | ---- | ------ | | Michelangelo | 12 | 14 | B | | Leonardo | 15 | 16 | A | | Raphael | 10 | 12 | C | | Donatello | 13 | 15 | B | On peut donc représenter ce tableau sous forme d'un fichier "notes.csv" :
Prenom; DS1; DS2; Projet
Michelangelo; 12; 14; B
Leonardo; 15; 16; A
Raphael; 10; 12; C
Donatello; 13; 15; B
Chaque ligne est un ***enregistrement***. La première ligne définit les ***attributs*** de chaque enregistrement. ------------------ ### Implémentation en Python On peut choisir de représenter en Python les fichiers **CSV** par des listes de dictionnaires dont les clés sont les noms des colonnes. Par exemple, avec le tableau du dessus, cela donne :
Notes = [{'Prénom' : 'Michelangelo', 'DS1' : '12', 'DS2' : '14', 'Projet' : 'B'},
{'Prénom' : 'Leonardo', 'DS1' : '15', 'DS2' : '16', 'Projet' : 'A'},
{'Prénom' : 'Raphael', 'DS1' : '10', 'DS2' : '12', 'Projet' : 'C'},
{'Prénom' : 'Donatello', 'DS1' : '13', 'DS2' : '15', 'Projet' : 'B'}]
On peut utiliser le vocabulaire décrivant une feuille de calcul de tableau : - Une table est une liste de dictionnaire, ici **Notes** - Chaque ligne est un dictionnaire et correspond à un enregistrement, par exemple **Notes[0]** - Chaque cellule contient la valeur d'une clé du dictionnaire, par exemple **Notes[0] ['DS2']** ----------------- ### Import d'un fichier CSV Il existe un module Python nommé *CSV* qui permet de manipuler ces fichiers. On va donc créer une liste de dictionnaires, soit un par ligne de la table.
import csv

def import_csv(fichier):
  lecteur = csv.DictReader(open(fichier + '.csv', 'r'))
  return [dict(ligne) for ligne in lecteur ]
Ce qui nous donne :
[{'Prénom' : 'Michelangelo', 'DS1' : '12', 'DS2' : '14', 'Projet' : 'B'},
{'Prénom' : 'Leonardo', 'DS1' : '15', 'DS2' : '16', 'Projet' : 'A'},
{'Prénom' : 'Raphael', 'DS1' : '10', 'DS2' : '12', 'Projet' : 'C'},
{'Prénom' : 'Donatello', 'DS1' : '13', 'DS2' : '15', 'Projet' : 'B'}]
On peut également manipuler les fichiers afin de lire puis de le transformer en tableau :
import csv
def import_csv2():
  resultat = []
  with open('notes.csv',newline = '') as csvfile:
    s = csv.reader(csvfile,delimiter = ';')
    for i in s:
      resultat.append(i)
  return resultat 
On obtient donc ici la liste suivante :
resultat = [['Prenom', 'DS1', 'DS2', 'Projet'], ['Michelangelo', '12', '14', 'B'],
           ['Leonardo', '15','16', 'A'], ['Raphael', '10', '12', 'C'], ['Donatello' '13', '15', 'B']]
------- ### Export d'un fichier CSV Pour exporter une table vers un **fichier CSV** - *comprendre, créer un fichier csv depuis une table python* - on passe la table directement en paramètre, ainsi que le nom du fichier et l'ordre des colonnes.
def vers_csv(table, nom_fichier, ordre):
  with open(nom_fichier + '.csv', 'w') as fic:
    dic = csv.DictWriter(fic, fieldnames = ordre)
    dic.writeheader() # première ligne, celle des attributs
    for ligne in table:
      dic.writerow(ligne) # ajoute les lignes de la table
  return None

# Exemple d'utilisation
Notes = [{'Prénom': 'Michelangelo', 'DS1': '12', 'DS2': '14', 'Projet': 'B'}]
vers_csv(Notes, 'notes', ['Prénom', 'DS1', 'DS2', 'Projet'])
---------- Auteur : Florian Mathieu Licence CC BY NC Licence Creative Commons
Ce cours est mis à disposition selon les termes de la Licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International.