Files
1ereNSI/donnees_en_table/README.md
Florian Mathieu 616dd49e8c ajout exercices, corrections diverses, glossaire
- 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>
2026-01-29 23:37:26 +01:00

186 lines
6.7 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## Données en table & Fichiers CSV
Un chapitre Excel-lent !
![meme](assets/meme.gif)
> 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>
![bo_1.png](assets/bo_1.png)
### <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 dUtilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International</a>.