Traitement de données en table

1 – Fichier csv et tableur

1- Quel est le séparateur utilisé ?

Les séparateurs sont des virgules.

2- Que contient la première ligne ?

Ce sont les catégories.

3- Pourquoi trouve-t-on parfois des virgules qui se suivent ?

Car les données de ces catégories ne sont pas renseignées dans chaque ligne.

2 – Fichier csv et python

On importe le fichier csv dans le drive :

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

Première méthode pour le lire :

On crée un tableau élèves contenant chacune des lignes du fichier csv :

file=open('poudlard1.csv','r',encoding = "ISO-8859-1")
eleves=[]
for line in file:
    eleves .append(line)
eleves

La première valeur contient les index des colonnes comme dans le fichier csv. Ensuite chacune des lignes est enregistrée dans une variable de type str.

On peut refaire la même chose avec une liste en compréhension.

file=open('poudlard1.csv','r',encoding = "ISO-8859-1")
eleves=[line for line in file]
file.close()
eleves[17]

Les valeurs d’une ligne sont séparés par des « ; » On peut séparer les valeurs d’une ligne dans un tableau.

eleves[17].split(",")

On peut généraliser.

file=open('poudlard1.csv','r',encoding = "ISO-8859-1")
eleves=[line.split(';') for line in file]
file.close()
for val in eleves:
  print(val)

Lecture du fichier csv : méthode 2

import csv
eleves=[]
with open('poudlard1.csv',newline='',encoding = "ISO-8859-1") as csvfile:
          s=csv.DictReader(csvfile,delimiter=';')
          for line in s:
              eleves.append(dict(line))
eleves

Etc sur toute la liste.

On constate que élèves est une liste de dictionnaires.

On récupère une valeur de la liste et on vérifie que c’est bien un dictionnaire.

eleves[16]
type(eleves[16])

Il n’y a plus la première ligne du fichier csv contenant les champs.Les champs sont les clefs des dictionnaires.Ceci explique le décalage pour Hermione qui passe de l’indice 17 à l’indice 16.On peut utiliser les clefs pour récupérer des valeurs. Quel élève se trouve en ligne 16 ?

eleves[16]['Élève']

Hermione est-elle une moldu ?

eleves[16]['Moldu']

Quelle est la note d’Hermione en botanique ?

eleves[16]['Botanique']

Hermione n’a pas de note. Attribuons la note 19 à Hermione en botanique.

eleves[16]['Botanique']=19
eleves[16]

Comment générer une note aléatoire ?

import random
random.randint(0,20)
Note générée aléatoirement.

Comment générer une liste de n notes aléatoires ?

import random
n=10
notes=[]
for i in range(n):
    notes.append(random.randint(0,20))
print(notes)

Comment générer une liste de n notes aléatoires avec une liste en compréhension ?

import random
n=10
notes=[random.randint(0,20) for _ in range(n)]
print(notes)

Pour un élève ici Hermione on peut générer une note aléatoire pour chacune des 5 matières.

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

On génère une note aléatoire pour chacun des élèves dans chacune des matières.

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

Vous pouvez afficher vos résultats comme sur pronote avec un diagramme en « araignée ».

import plotly.graph_objects as go
radar = go.Scatterpolar(r = [eleves[13][val] for val in matieres],theta = matieres,fill = 'toself')
data = [radar]
fig = go.Figure(data = data)
fig.update_layout(title_text = eleves[13]['Élève'])
fig.show()

3 – Projet 1

3-1) Lecture des fichiers csv

https://colab.research.google.com/drive/1eJAatkxK4AAo_K21XXPvbqvt0NpYm5P6?usp=sharing

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

https://colab.research.google.com/drive/1eJAatkxK4AAo_K21XXPvbqvt0NpYm5P6?usp=sharing

https://colab.research.google.com/drive/1DfLkhxq3vjwxGH9FCMLk72FCQVpOQxP0?usp=sharing

Aucune réponse

Laisser un commentaire

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