top of page

Notation Pix :

Objectifs :

- Récupérer les données d'un fichier csv.

-Convertir ces données en notes sur 20 à l'aide d'une formule.

Les scores Pix sont fournis dans un fichier texte, il faut connaitre le min le max et la moyenne de la liste. Il faut donc tout d'abord importer les valeurs dans Python, calculer chaque note sur 20 et les afficher dans un graphique. J'ai réussi seul à le faire.

1- Ouverture, lecture et utilisation d'un fichier csv

Pour exploiter un fichier csv, je me suis servi d'un autre programme qui ouvre une liste de données sur la production électrique éolienne et dresse un tableau.

Ce programme utilise la bibliothèque matplotlib. 

Portion du programme original :

import matplotlib.pyplot as plt

fichier = open("elec4.csv", encoding="utf8")
ligne = fichier.readline() # lecture de la première ligne
noms_colonnes = ligne.strip().split(",") # récupération de tous les éléments de la première lignes
print("noms colonnes=",noms_colonnes)

Liste_x=[]
Liste_y=[]
for ligne in fichier:
    elements = ligne.strip().split(",")
    if '2010' in elements[0] or '2011' in elements[0]:
        Liste_x.append(elements[0])
        Liste_y.append(int(elements[6]))
print(Liste_x, Liste_y)
fichier.close()

J'ai donc modifié ce programme pour qu'il aille puiser ses informations dans le bon fichier csv, que j'ai décidé de nommer dans la créativité la plus totale : "fichiercsv.csv". Or dans celui-ci les informations ne sont pas séparées par des virgules mais par des point virgules. De plus le programme ci-dessus filtre les éléments qu'il trouve dans le fichier j'ai donc dû modifier le programme :

Portion du programme modifié :

import matplotlib.pyplot as plt

fichier = open("fichiercsv.csv", encoding="utf8")
ligne = fichier.readline() # lecture de la première ligne
noms_colonnes = ligne.strip().split(";") # récupération de tous les éléments de la première lignes
print("noms colonnes=",noms_colonnes)

Liste_x=[]
Liste_y=[]
for ligne in fichier:
    elements = ligne.strip().split(";")
    Liste_x.append(elements[5])
    Liste_y.append(int(elements[9]))
print(Liste_x, Liste_y)
fichier.close()

J'ai ainsi supprimé le début de la boucle qui servait à filtrer les informations du fichier, modifier le nom du fichier dans la fonction open, et changé le split par un point-virgule.

C'est fait, mon programme est capable de lire le fichier csv qui contient les scores pix de mes camarades.

 

2- définir le score pix moyen,  et le maximum

Pour définir la moyenne d'une série, il suffit de faire la somme de toutes les valeurs de celle-ci et de diviser le tout par le nombre de valeurs, pour le minimum et le maximum, il faut comparer toutes les valeurs et définir la quelle est la plus petite et la quelle est la plus grande

Ainsi pour définir la moyenne, j'ai rédigé ce programme à partir d'une boucle qui collecte toutes les valeurs de la liste dans laquelle se trouvent les valeurs une par une, les additionne et les divise par le nombre de valeur obtenu en créant un compteur de boucle : 

Programme de la moyenne:

def moyenne (liste_y):

    sum=0
    compteur=0
    for i in Liste_y:
        #i prend successivement toutes les valeurs de la liste
        compteur = compteur + 1
        sum= i+sum # additionne tous les éléments de la liste score

        print(i)

    print(sum)
    print("La moyenne est :",(sum/compteur))
    moyenne_liste= int(sum/compteur)
    return(moyenne_liste)

m1=moyenne(Liste_y)

En suite, j'ai créé une boucle très simple qui compare toutes les valeurs de la liste et détermine la quelle est la plus grande, pour cela j'ai créé la variable "maximum_liste" qui vaut 0 à la base puis s'affecte la première valeur de la liste et s'affecte ensuite toute valeur supérieure à la précédente:

Programme du maximum:

def maximum(liste):
    maximum_liste=0

    for i in Liste_y:
        if i > maximum_liste:
            maximum_liste= int(i)
    return maximum_liste
m2=maximum(Liste_y)

A ce stade de la programmation, je n'avais encore rencontré aucune erreur ni du affronter aucune difficulté.

Une fois ces données obtenues, monsieur Lacalverie nous a donné la formule permettant d'obtenir la note finale de chaque élève:

Note= a * note individuelle + b

avec a= 20-moyenne des scores/score maximum - moyenne des scores

et b= 20- (20 - moyenne imposée/score maximum - moyenne des scores) * score maximum  

sachant que la moyenne imposée est définie par le professeur.

Ainsi je devais calculer a et b puis en déduire la note moyenne, une nouvelle liste d'objectif en découle donc:

Nouveaux objectifs :

- calculer a et b séparément

-récupérer les éléments de Liste_y et tous les modifier un par un

-afficher le tout dans un joli graphique

3- calculer a et b

Pour calculer a et b, il suffit d'effectuer quelques calculs à partir des données que j'ai calculé mais aussi à l'aide d'une donnée rentrée par l'utilisateur : la moyenne imposée.

Programme calcul de a (n1) et b (n2) :

moyenne_classe= int(input("Note moyenne:"))


n1 = (20 - moyenne_classe)/(m2 - m1)

n2 = 20-((20- moyenne_classe)/(m2-m1))*m2

Ce tout petit bout de programme réalise à lui tout seul une partie extrêmement importante du projet, l'input sur la première ligne permet à l'utilisateur de rentrer la valeur de la moyenne imposée.

Les deux lignes qui suivent permettent de calculer a et b que j'ai ici nommé n1 et n2 car les noms a et b étaient déjà utilisés plus haut.

4-Récupérer les éléments de Liste_y pour les recalculer


Pour récupérer un à un les éléments de Liste_y, il faut utiliser une boucle bornée qui contient notre calcul final (a*note individuelle*b) et qui l'applique à tous les éléments de la liste.

Programme modification de la liste :

note_individuelle=0
g=-1
for score in Liste_y:

    g=g+1

    m = Liste_y[g]

    note_individuelle = round((n1*m)+n2)


    Liste_y[g] =note_individuelle
 

J'ai donc créé les variables note_individuelle à laquelle j'aurais pu affecter n'importe quelle valeur, et la variable g qui est un compteur, auquel j'ai affecté la valeur -1 car il prend +1 à chaque tour de boucle et qu'il faut commencer la modification des données à l'élément 0 de la Liste_y. J'ai aussi créé m qui contiendra chaque score pix. Ainsi la boucle ajoute 1 à g, puis affecte à m l'élément numéro g de Liste_y, affecte a note_individuelle la valeur du score pix transformé en note sur 20 et change l'élément numéro g de la Liste_y par la valeur de note_individuelle. On obtient donc une toute nouvelle Liste_y avec les notes sur 20 de chaque élève. 

6- Afficher tout ça dans un joli graphique

Pour faire cela j'ai utilisé la fin du programme que j'avais utilisé pour extraire les données du fichier csv, car la bibliothèque matplotlib comporte aussi un moyen de faire des graphiques.

Programme initial : 

def tracer_figure(liste1,liste2):
    plt.figure(figsize = (16, 10))
    plt.plot(liste1,liste2, label='eolien=f(t)')

    plt.xlabel('Dates')
    plt.xticks(rotation = 60)
    plt.ylabel('en Gwh')
    plt.title("Production d'électricité d'origine éolienne par an")
    plt.legend()
    plt.show()

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

Programme modifié :

def tracer_figure(liste1,liste2):
    plt.figure(figsize = (8, 5))
    plt.plot(liste1,liste2, label='Notes Pix')

    plt.xlabel('Notes')
    plt.xticks(rotation = 60)
    plt.ylabel('en Pix')
    plt.title("Elève")
    plt.legend()
    plt.show()
if __name__=="__main__":
    tracer_figure(Liste_x,Liste_y)
 

Ainsi, j'ai modifié la taille du graphique, de 16 par 10 vers 8 par 5 (il est donc plus petit), j'ai modifié les légendes et notations sur le graphique, et maintenant la Liste_x se chargera d'afficher les noms en abscisse et la Liste_y se chargera d'afficher les notes sur 20 en ordonnée, ce qui nous offre un magnifique graphique sur lequel on remarque un élève qui se démarque, Gerlero ! 

NSI

Leplusbeausite

© 2023 par Loïs Guillerme. Créé avec Wix.com

bottom of page