Traitement de données en table


  • bo: programme officiel

Contexte : Les élève de première NSI 1 du lycée Mauriac ont suivi une année de cours avec quelques élèves de Poudlard. Les matières suivies sont : ‘Potions’, ‘Botanique’, ‘étude des Moldus’, ‘Sortilèges’, ‘Vol sur Balai’.

Par soucis d’équité les notes entre 0 et 20 sont tirées de façon aléatoire.

L’années est constituée de trois trimestres.

1) Fichier csv et tableur

Ouvrir le fichier poudlard.csv avec notepad++ ou un autre éditeur de texte et justifier l’appellation de l’extension .csv du fichier

fichier à télécharger

La virgule est le séparateur par défaut mais on peut rencontrer aussi d’autres séparateurs.

Le sigle CSV signifie Comma-Separated Values et désigne un fichier texte dont les valeurs sont séparées par des virgules.

La virgule est le séparateur par défaut mais il existe d’autres séparateurs

Vous pouvez ouvrir le fichier avec n’importe quel éditeur de texte et avec le bloc note ou notepad++ par exemple

  1. Quel est le séparateur utilisé ?
  2. Que contient la première ligne?
  3. Pourquoi trouve on parfois des virgules qui se suivent ?

Vous pouvez aussi ouvrir le fichier avec un tableur

LibreOffice vous proposera des options pour l’ouvrir correctement. Vous pouvez en particulier choisir le séparateur

Sur Excel il faut d’abord ouvrir le tableur puis aller dans l’onglet données

Vous verrez apparaitre l’option à partir d’un fichier csv. Après avoir choisi votre fichier dans vos répertoires vous pourrez choisir votre délimiteur(séparateur) ainsi que d’autres options

2) Fichier csv et python

Corrigé et compléments à tester à comprendre et commenter

Comparez en testant les deux méthodes ci-dessous pour lire un fichier csv

Fichier = open('poudlard.csv','r') 
eleves=Fichier.readlines()
Fichier.close() 
import csv
eleves=[]
with open('216.csv',newline='')as csvfile:
          s=csv.DictReader(csvfile,delimiter=';')
          for line in s:
              eleves.append(dict(line))

En utilisant vos connaissances sur les listes et les dictionnaires complétez la variable eleves en attribuant toutes les notes de façon aléatoire.

3)Projet 1


pandas  est la librairie python de référence pour manipuler les données. Elle permet de manipuler les données sous forme de tables (DataFrame) et de les exporter avec différents formats. Elle permet aussi de créer facilement des graphes avec matplotlib par exemple

https://pandas.pydata.org/docs/user_guide/10min.html

Les activités qui suivent doivent être réalisées dans un même notebook sur colaboratory. Les codes sont fournis

Il suffit de les tester les comprendre puis commenter votre code pour pouvoir le réexploiter dans le projet Vortex.

3-1) Lecture des fichiers csv

Vous aurez besoin des deux fichiers ci-dessous pour réaliser l’activité :

http://yb-isn.fr/nsi_hack.csv

Exécuter les deux lignes de code ci-dessous puis importer les

deux fichiers csv que vous avez récupéré grâce aux liens ci-dessus.

from google.colab import files
data_to_load = files.upload()

On peut lire le fichier csv en précisant l’encodage et le type de séparateur. On crée un objet  de type dataframe (pandas.core.frame.DataFrame)

Vous pouvez le vérifier en demandant le type de l’objet poudlard que vous allez créer:

import pandas as pd
poudlard= pd.read_csv('poudlard1.csv',encoding = "ISO-8859-1",sep=";")

Vous pouvez afficher l’objet poudlard ou quelques lignes seulement.5 lignes sont affichées par défaut avec la fonction head().Vous pouvez préciser le nombre n de lignes souhaitées avec head(n)

poudlard.head()

NaN  correspond aux données manquantes Not a Number

Vous pouvez accéder aux champs de la table (première ligne du fichier csv:

Vous pouvez accéder aux champs de la table (première ligne du fichier csv:
poudlard.columns

On peut accéder au contenu de la ligne 16 (17 du fichier csv) avec  la méthode « loc »

poudlard.loc[16]

On peut sélectionner la colonne avec son indice

poudlard.loc[16][0]

ou avec l’étiquette de la colonne

poudlard.loc[16]['Élève']

3-2) Recherche et ajout de données manquantes

La méthode isnull() permet de rechercher les données manquantes. On peut ajouter head() pour limiter l’affichage

poudlard.isnull().head()

Nous savions déjà qu’il manquait toutes les notes. La méthode isnull() a traduit les données par True ou False.

Nous allons remplacer les données manquantes en générant des notes aléatoires. Vous compléterez le code en remplaçant les……

import random
matieres=['Potions', 'Botanique','étude des Moldus', 'Sortilèges', 'Vol sur Balai']
for val in .....:
    poudlard[val]=[random.randint(10,20) for i in range(....)]
poudlard.head()

Vérifiez que les notes ont bien été attribuées
Nous allons modifier la table en ajoutant une colonne de moyennes
matieres=['Potions', 'Botanique','étude des Moldus', 'Sortilèges', 'Vol sur Balai']
poudlard['moyenne']=poudlard[matieres].mean(axis='columns')

poudlard.head()

3-3) Regroupement de catégories et agrégation de données

L’objectif est de créer deux tables en séparant les élèves de Mauriac et de Poudlard.

Il nous faudra la moyenne générale pour Mauriac et pour Poudlard.

exemple de résultat attendu

La méthode groupby() permet de séparer les données.

On peut pour cela commencer à rechercher les critères uniques d’une colonne

poudlard['Lycée'].unique().tolist()
On peut ensuite créer les groupes

classes= poudlard.groupby("Lycée")
group_mauriac= classes.get_group('Mauriac')
group_poudlard= classes.get_group('Poudlard')

Vous pouvez par exemple vérifier que group_poudlard contient les élèves de Poudlard

En réalité on peut sans passer par l’étape précédente Agréger les données en choisissant le critère lycée et en calculant la moyenne des moyennées des données agrégées.

poudlard.groupby(['Lycée'])["moyenne"].agg( "mean").round(1)

4)Projet 2

Il s’agit encore une fois de préparer le projet Vortex .

Corrigé

http://yb-isn.fr/nsi_hack.csv

Deux élèves ont abusé de leurs pouvoirs en supprimant leurs moyennes ou en modifiant la moyenne générale. vous disposez du fichier csv ci-dessus . Les deux élèves sont renvoyés du lycée. On doit trouver les deux lignes modifiées (filtrer ) et les supprimer.

On commence par lire le fichier

import pandas as pd
nsi_hack= pd.read_csv('nsi_hack.csv',encoding = "ISO-8859-1",sep=";")

On peut s’apercevoir qu’un élève n’a pas de moyenne. Recherchons le

nsi_hack[nsi_hack['moyenne'].isnull()]

On peut s’apercevoir qu’une des moyennes égale à 20 n’est pas cohérente. On peut la rechercher aussi

nsi_hack[nsi_hack['moyenne']=="20"]

On peut supprimer les deux lignes avec la méthode drop()

nsi_hack.drop(nsi_hack[nsi_hack['moyenne']=="20"].index)
nsi_hack.drop(nsi_hack[nsi_hack['moyenne'].isnull()].index)

On peut aussi appliquer des fonctions à une colonne ou une ligne. Nous allons essayer de modifier la colonne né le en l’affichant de façon plus explicite.

Corrigé

Il s’agit de tester les codes de comprendre les traitements effectués pour pouvoir les appliquer dans une autre situation.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *