- Ajout des 10 TPs d'évaluation (sans PDF) - Création GLOSSAIRE.md et AMELIORATIONS.md - Corrections f-strings, eval(), sommaires Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
186 lines
6.7 KiB
Markdown
186 lines
6.7 KiB
Markdown
## Données en table & Fichiers CSV
|
||
|
||
Un chapitre Excel-lent !
|
||
|
||

|
||
|
||
> 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](#apport-de-connaissances) | Fichiers CSV, enregistrements, import/export |
|
||
| [Manipulation de tables](MANIPULATION.md) | Recherche, filtrage et tri de données |
|
||
| [Fusion de tables](FUSION.md) | Jointure et fusion de données |
|
||
| [Introduction à Pandas](PANDAS.md) | Utilisation de la bibliothèque Pandas |
|
||
| [Exercices](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 <br>**Compétences**: Savoir exporter et importer des données dans un programme Python depuis un fichier CSV
|
||
|
||
### Le programme
|
||
|
||
<br>
|
||
|
||
|
||

|
||
|
||
|
||
### <span style="color:green"> Apport de connaissances </span>
|
||
|
||
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. <p>
|
||
|
||
<p>
|
||
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.
|
||
|
||
---------------
|
||
|
||
### <span style="color: green" > Enregistrements </span>
|
||
|
||
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**
|
||
|
||
```python
|
||
{'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* ✏
|
||
|
||
-----------
|
||
|
||
### <span style="color: green" > Fichiers CSV</span>
|
||
|
||
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<br>
|
||
| 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.
|
||
|
||
------------------
|
||
|
||
### <span style="color: green" > Implémentation en Python</span>
|
||
|
||
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 :
|
||
|
||
```python
|
||
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']**
|
||
|
||
-----------------
|
||
|
||
### <span style = "color : green">Import d'un fichier CSV </span>
|
||
|
||
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.
|
||
|
||
```python
|
||
import csv
|
||
|
||
def import_csv(fichier):
|
||
lecteur = csv.DictReader(open(fichier + '.csv', 'r'))
|
||
return [dict(ligne) for ligne in lecteur ]
|
||
```
|
||
|
||
Ce qui nous donne :
|
||
|
||
```python
|
||
[{'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 :
|
||
|
||
```python
|
||
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 :
|
||
|
||
```python
|
||
resultat = [['Prenom', 'DS1', 'DS2', 'Projet'], ['Michelangelo', '12', '14', 'B'],
|
||
['Leonardo', '15','16', 'A'], ['Raphael', '10', '12', 'C'], ['Donatello' '13', '15', 'B']]
|
||
```
|
||
|
||
-------
|
||
|
||
### <span style = "color : green">Export d'un fichier CSV </span>
|
||
|
||
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.
|
||
|
||
```python
|
||
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
|
||
|
||
<a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/"><img alt="Licence Creative Commons" style="border-width:0" src="https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png" /></a> <br />Ce cours est mis à disposition selon les termes de la <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/">Licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International</a>.
|
||
|