Traitement de données CSV (Comma-Separated Value) avec Python¶
Allez sur https://console.basthon.fr/
N'oubliez pas de sauvegarder régulièrement votre travail dans un dossier appelé NSI_VOTRE_PRENOM pour pouvoir le récupérer ensuite si besoin. Nommez le fichier traitement_donnees_activite_1.py et sauvegardez le régulièrement dans ce dossier.
- Uploadez les fichiers contenant les données pour les deux groupes de première.
1) Importer un fichier CSV et filtrer les données¶
Nous allons utiliser la classe DictReader de la librairie. Celle-ci transformera chacune des lignes du CSV en un dictionnaire : https://docs.python.org/3/library/csv.html#csv.DictReader
- Corrigez la fonction ci-dessous qui doit permettre de récupérer dans une liste les élèves internes de Première 4, et de retourner cette liste.
import csv
def liste_eleves(nom_fichier):
eleves = []
with open(nom_fichier) as fichier_csv:
reader = csv.DictReader(fichier_csv, delimiter=';')
for eleve in reader:
# TODO : CORRIGER CETTE LIGNE
if eleve['Classe'] != "PREMIERE 4" or eleve['Regime'] = "Interne":
# TODO : AJOUTER CHAQUE ELEVE A LA LISTE ELEVES
return eleves
- Vérifiez que le résultat est bien correct en utilisant un des fichiers CSV (affichez le résultat par exemple).
2) Fusionner sans doublons¶
On peut distinguer 2 cas de fusions des données:
Concaténation :on ajoute des lignes de données présentes dans la table 2 à la table 1
Jointure :On ajoute des descripteurs présents dans la table 2 à ceux présents dans la table 1
Nous allons concaténer les deux fichiers.
Pour ajouter des données à l'affilée, vous pouvez utiliser la fonction extend
qui modifie une liste sur place
(c'est à dire qu'elle ne crée pas de nouvelle liste mais modifie directement la liste existante), dont la syntaxe est :
-
Ajoutez un paramètre
tous_eleves
à la fonctionliste_eleves
qui vous permettra de sélectionner tous les élèves du fichier lorsquetous_eleves
est àTrue
-
Exécutez la fonction modifiée sur les deux fichiers et fusionner ensuite les deux fichiers (voir code ci-dessous)
-
Supprimer les doublons en complétant et en appelant cette fonction :
def supprimer_doublons(eleves):
eleves_sans_doublons = []
for eleve in eleves:
# TODO: COMPLETER
return eleves_sans_doublons
eleves_groupes_1_2 = supprimer_doublons(eleves_groupes_1_2)
3) Sauvegarder le fichier et trier les données¶
On souhaite obtenir une liste des élèves triés par classe (ordre croissant). Vous pouvez utiliser la fonction sort
de Python : https://docs.python.org/fr/3/howto/sorting.html
La fonction sorted
spécifie un paramètre key
qui va nous permettre de préciser sur quelles valeurs on va effectuer le tri. Pour trier les données on va passer comme argument une fonction anonyme (fonction lambda). Pour le moment vous n'avez pas forcément à comprendre ce dont il s'agit, ce sera des notions que l'on abordera (sans rentrer dans les détails) en Terminale.
'w' (write) dans la fonction open
permet de spécifier que l'on souhaite écrire les données dans un fichier.
- Récupérer les clés du dictionnaire (qui correspondent aux descripteurs du fichier CSV).
- Modifier la clé
'LA_CLE_DICTIONNAIRE'
pour pouvoir trier les données par classe.
colonnes = #1. RECUPERER LES CLES DU DICTIONNAIRE
with open('nsi_eleves_groupe_1_2_trie.csv', 'w', newline='') as fichier_trie:
csv_eleves_trie = csv.DictWriter(fichier_trie, fieldnames=colonnes)
csv_eleves_trie.writeheader()
# 2. modifier la clé du dictionnaire
csv_eleves_trie.writerows(sorted(eleves_groupes_1_2, key=lambda d: d['LA_CLE_DICTIONNAIRE']))
Bravissimo¶
Bravo ! Lorsque vous avez rendu votre travail supprimez votre fichier du disque dur