top of page
carrenoir.jpg

Le but de ce projet est de convertir un score PIX sur une note sur 20.

Etape 1:

- établir une fonction moyenne
- déterminer le score max et le score min
- stocker le score, nom et notes des élèves

Les élèves sur PIX ont des notes variant entre 0 et 700, mais réparties de manière inégale autour d'un score moyen. La note de l'élève sera calculée par une fonction linéaire à partir de son score et de la moyenne.

Etablir une fonction moyenne

Il existe 2 fonctions afin d'établir une fonction moyenne, les fonctions sum() et len(). 
On définit ici la fonction score_moyen avec le paramètre liste.
On définit ensuite une boucle for qui va lire les scores dans la liste.

sum : somme 
len : longueur

scoremoyen.PNG

Déterminer le score max et le score min


* Il existe 2 possibilités afin de déterminer un score maximal et minimal sur python.
* Ici, nous utiliserons 2 fonctions, score_max ainsi que score_min.

Je définis alors les 2 fonctions dites précédemment ( score_max score_min ) avec l'ajout d'un nouveau paramètre " liste " qui ,comme son nom l'indique, représente une liste.
* J'attribue une variable qui prendra le premier terme de la liste et créer une boucle for qui va lire tous les scores de celle-ci.

En suite, la fonction va renvoyer le minimum ou le maximum en fonction des cas avec la fonction " return ".

score.PNG
min

Stocker les informations des élèves 

Pour poursuivre mon programme, je vais créer 3 listes qui seront d'abord vide au lancement du script.
eleves_prénoms = []
eleves_score      = []
eleves_notes      = []

prenom.PNG

Calcul des notes des élèves


Nous pouvons utiliser à l'aide des égalités trouvées en classe les notes des élèves.

rappel : Note = a * score + b      20 = a * score_max + b      moyenne_choisie = a * score_moyen + b

reglgage.jpg
Revoir les expressions de a et b 

* Après avoir trouver a et b , je détermine une fonction que je vais nommée " calcul " . Les variables a et b seront attribuées aux égalités trouvées précédemment.
* J'effectue une boucle for pour tous les scores des élèves.
* J'utilise la fonction round afin d'obtenir des notes arrondis à un chiffre après la virgule. Ces notes seront alors mises dans la liste " eleves_notes ".

scor.PNG

ou

moyenne.PNG

Importer un fichier CSV sous Python

read.PNG


Pour importer un fichier CSV sous Python, il nous faut utiliser la fonction de reader.
On ouvre le fichier comportant les collectes des scores PIX par la fonction open(). 
On lit ensuite la première ligne avec fichier.readline() et on récupère tous les éléments de la première ligne.
Je fais une boucle for afin de lire chaque ligne dans le fichier.

Les points virgules signifient que c'est une nouvelle colonne ( strip() , split() )

​

Dans la liste eleves_prenoms --> colonne de rang 4 ( correspond aux prénoms )
Dans la liste eleves_scores --> colonne de rang 8     ( correspond aux scores )

append

Je finis par fermer le fichier avec fichier.close()

Tracer un graphique

Pour tracer un graphique, il faut utiliser " matplotlib.pyplot " que l'on va appeler plt.

Programme python final



import matplotlib.pyplot as plt  #graphique
import numpy as np

eleves_prenoms=["Maxence","Dina","Enzo","Fantine","Gabin","Leo","Lilian","Mathis","Melvyn","Salma","Lila","Joseph","Alexandre","Lilou"]
eleves_scores=[303,480,600,312,378,473,288,"301",371,230,149,265,243,236]
eleves_notes=[]

fichier = open("Resultats-NSI 1_re Collecter.csv.csv",encoding="utf8")
ligne = fichier.readline()    #lire la première ligne
elements = ligne.strip().split(";")   #nouvelle colonne
print("elements=",elements)
Liste_x=[]
Liste_y=[]
for ligne in fichier:
   elements = ligne.strip().split(";")
   Liste_x.append(elements[4])
   Liste_y.append(int(elements[8]))
fichier.close()

def score_min(liste):
   min=liste[0]
   for score in liste:
      if score < min:
          min = score
   return min

def score_max(liste):
    max=liste[0]
    for score in liste:
        if score > max:
            max = score
    return max

score_min=min(Liste_y)
score_max=max(Liste_y)

def moyenne(liste=[]) :
   somme=0
   nb_elements=0
   for valeur in liste:
       somme=somme+valeur
       nb_elements=nb_elements+1
   return moyenne

moyenne = moyenne(Liste_y)
print(moyenne)

notemoyenne=int(input("Choississez la note moyenne"))
b = (20-Notemoyenne*maximum/moyenne)/(1-maximum/moyenne)
a=(Notemoyenne-b)/moyenne
Notes=[round(a*score +b,1) for score in Liste_y]



Dictionnaire_note_eleve  = dict(zip(Liste_x, Notes))
print(Dictionnaire_note_eleve)
for keys,values in Dictionnaire_note_eleve.items():
   print(keys)
   print(values)

def tracer_figure(liste1,liste2):
   plt.figure(figsize = (16, 10))
   plt.plot(liste1,liste2,'bs', label='Nom Elève versus Score PIX',marker='o')

   plt.xlabel('Nom Elève')
   plt.xticks(np.arange(0,len(liste1)), liste1, rotation = 60)
   plt.ylabel('Score PIX')
   plt.title("Nom Elève versus Score PIX")
   plt.legend()
   plt.grid(True)
   plt.show()

if __name__=="__main__":
   tracer_figure(Liste_x,Liste_y)
   tracer_figure(Liste_x,Notes)

à l'aide des données précédentes et de sites, nous avons pu créer un programme Python permettant de convertir un score PIX sur une note sur 20.
bottom of page