Correction Examen Langage Evolué Python
Session principal 2023
3ème BI
Analyse des données des examens :
Le service examen de la faculté des Sciences Economiques et de Gestion de Nabeul (FSEGN)
souhaite développer une application pour analyser les examens et afficher les résultats.
Les données sont modélisées de la façon suivante :
- C_Matières est une Classe de matières dotée des attributs suivants :
id_matière : l’identifiant de la matière
Coef : Coefficient de la matière
Intitulé : intitulé de la matière
- C_Modules est une Classe de modules dotée des attributs suivants :
id_M : l’identifiant du module
Nb_credit : Nombre de crédit du module
Matières : liste des tuples des matières associées à un module. Sachant
qu’un module est composé de deux matières au maximum.
Exemples : [(‘M_531’,2, ‘Sécurité’), (‘M_532’, 1,‘Gestion de projets’ )]
[(‘M_541’,1.5,’Big Data’)]
- C_Etudiants est une classe d’étudiants dotée des attributs suivants :
id_Et : identifiant de l’étudiant
nom: nom de l’étudiant
prenom: prenom de l’étudiant
Spécialité : parcours suivi. Exemple de parcours : BI, BIS, EB.
Notes : la liste des tuples des notes de l’étudiant. Chaque tuple contient
l’identifiant de la matières (id_matière) et la note associée (Note).
Exemple : [(‘M_521’,12),(‘ M_131’,2.5), (‘M_141’,10),…]
1
Travail demandé :
A. Classe Matières :
1. Ecrire le constructeur de la classe C_Matière « __init__ (self) » qui
permet d’initialiser ses attributs.
2. Ecrire la fonction « Set_matière(self) » qui permet d’ajouter une matière saisie par
l’utilisateur.
3. Ecrire la fonction « Get_matière(self) » qui permet d’envoyer un tuple contenant
l’identifiant, le coefficient et l’intitulé de la matière.
class C_Matière:
def __init__(self):
self.id_matiere = ''
[Link] = 0
[Link]é = ''
def Set_matière(self):
self.id_matiere = input("donner l'identifiant de la matière")
[Link] = float(input("donner le coefficient de la matière"))
[Link] = input("donner l'intitulé de la matière")
def Get_matiere(self):
return (self.id_matiere,[Link],[Link]é)
B. Classe Modules :
4. Ecrire le constructeur de la classe C_Module « __init__ (self,…) » qui
permet d’initialiser ses attributs.
5. Ecrire la fonction « Get_Module(self) » qui permet de retourner un dictionnaire ayant
comme clé l’identifiant (id_M) de module et comme valeurs la liste des tuples de
matières associés.
Exemple : dictionnaire de module est : {‘M_520’ : [(‘M_521’,3, ‘IA’), (‘M_522’,2,
‘Data Mining’)]}
6. Ecrire la fonction « Set_Module(self, …) » qui permet d’ajouter une matière à un
module donné, sachant qu’un module ne contient que deux matières et une matière est
associée à un seul module.
class C_Module:
def __init__(self, id_module, nb_credit):
self.id_module = id_module
self.nb_credit = nb_credit
[Link] = []
def Get_Module(self):
module_dict = {self.id_module: [(m.id_matiere, [Link], [Link]) for m in
[Link]]}
return module_dict
def Set_Module(self, matiere):
if len([Link]) < 2:
[Link](matiere)
print(f"Matière ajoutée au module {self.id_module}: {matiere.id_matiere} –
Coef : {[Link]} - Intitulé : {[Link]}")
else:
print("Erreur: Le module ne peut contenir que deux matières.")
3
C. Classe Etudiants :
7. Ecrire le constructeur de la classe C_Etudiant « __init__ (self) » qui
permet d’initialiser ses attributs.
8. Ecrire la fonction «Set_Etudiant(self) » qui permet de saisir la liste des informations
associées aux N étudiants.
9. Ecrire la fonction «Get_Etudiant(self, ) » qui permet de retourner la liste des listes de
N étudiants.
10. Ecrire la fonction « Get_Notes_Etudiant(self, …) » qui retourne la liste des notes d’un
étudiant.
class C_Etudiant:
def __init__(self, id_etudiant, nom, prenom, specialite):
self.id_etudiant = id_etudiant
[Link] = nom
[Link] = prenom
[Link] = specialite
[Link] = []
def Set_Etudiant(self,n):
etudiants = []
for e in range(n):
id_etudiant = input("Entrez l'identifiant de l'étudiant : ")
nom = input("Entrez le nom de l'étudiant : ")
prenom = input("Entrez le prénom de l'étudiant : ")
specialite = input("Entrez la spécialité de l'étudiant : ")
etudiant = C_Etudiant(id_etudiant, nom, prenom, specialite)
nb_notes = int(input("Entrez le nombre de notes pour cet étudiant : "))
for v in range(nb_notes):
id_matiere = input("Entrez l'identifiant de la matière : ")
note = float(input("Entrez la note associée : "))
[Link]((id_matiere, note))
[Link](etudiant)
return etudiants
def Get_Etudiant(self, etudiants):
return [[etudiant.id_etudiant, [Link], [Link], [Link],
[Link]] for etudiant in etudiants]
def Get_Notes_Etudiant(self):
return [(note[0], note[1]) for note in [Link]]
Toutes les données sont enregistrées dans des fichiers CSV (voir Annexe 2).
11. Ecrire la fonction « Affiche_Notes() » qui permet de montrer les notes des matières par
étudiant.
def Affiche_Notes(notes_file):
# Charger le fichier [Link] en utilisant pandas
df_notes = pd.read_csv(notes_file)
# Afficher les notes des matières par étudiant
notes_Etudiant=df_notes.groupby(['id_etudiants',
'id_matieres'])['Notes'].mean().reset_index()
# Afficher les résultats
print("Notes des matières par étudiant:")
for index, row in notes_Etudiant.iterrows():
print(f"ID Etudiant: {row['id_etudiants']}, ID Matière: {row['id_matieres']},
Note: {row['Notes']}")
12. Ecrire la fonction « Ajouter_Moyenne() » qui permet d’ajouter la colonne Moyenne
dans le fichier « [Link] », qui contient la moyenne de chaque étudiant.
La moyenne est calculée par la formule suivante :
Somme(note_matière * coef_matiere) / Somme(coef_matiere).
def Ajouter_Moyenne( ):
df_resultat = pd.read_csv(“[Link]”)
df_notes = pd.read_csv(“[Link]”)
df_matieres = pd.read_csv("matiè[Link]")
# Fusionner les données pour obtenir les coefficients des matières
merged_df = [Link](df_notes, df_matieres, on='id_matieres')
# Calculer la moyenne pour chaque étudiant
merged_df['note_coef'] = merged_df['Notes'] * merged_df['coef']
sum_notes_coef = merged_df.groupby('id_etudiants')['note_coef'].sum()
sum_coef_matieres = merged_df.groupby('id_etudiants')['coef'].sum()
moyenne_etudiant = sum_notes_coef / sum_coef_matieres
# Ajouter la colonne "Moyenne" au fichier résultat
df_resultat['Moyenne'] = df_resultat['id_etudiants'].map(moyenne_etudiant)
# Enregistrement du fichier résultat mis à jour
df_resultat.to_csv(resultat_file, index=False)
5
13. Ecrire la fonction « Afficher_decision() » qui permet d’afficher dans la colonne
Décision du fichier « [Link] » « Admis » si la moyenne est supérieur ou égale à
10, « Ajourné » sinon.
def Afficher_decision():
# Charger le fichier ré[Link] en utilisant pandas
df_resultat = pd.read_csv(“[Link]”)
# Ajouter la colonne "Décision" en fonction de la moyenne
df_resultat['Décision'] = df_resultat['Moyenne'].apply(lambda moyenne: 'Admis' if
moyenne >= 10 else 'Ajourné')
# Enregistrement du fichier résultat mis à jour
df_resultat.to_csv(resultat_file, index=False)
14. Ecrire la fonction « Selction_Ajourné() » qui permet de sélectionner et d’afficher les
étudiants qui sont ajournés.
def Selection_Ajourné(resultat_file):
# Charger le fichier ré[Link] en utilisant pandas
df_resultat = pd.read_csv(resultat_file)
# Sélectionner les étudiants ajournés
etudiants_ajournes = df_resultat.loc[df_resultat['Décision'] == 'Ajourné']
# Afficher les résultats
print("Étudiants Ajournés :")
print(etudiants_ajournes)
15. Ecrire la fonction « Majore_Promotion » qui affiche le nom, le prénom, la spécialité
et la moyenne de l’étudiant qui a eu la moyenne maximum.
def Majore_Promotion(resultat_file, etudiant_file):
# Charger les fichiers en utilisant pandas
df_resultat = pd.read_csv(resultat_file)
df_etudiant = pd.read_csv(etudiant_file)
# Fusionner les données pour obtenir les informations de l'étudiant ayant la
moyenne maximale
merged_df = [Link](df_resultat, df_etudiant, on='id_etudiants')
# Trouver l'étudiant avec la moyenne maximale
etudiant_majore = merged_df.loc[merged_df['Moyenne'].idxmax()]
# Afficher les résultats
print("Étudiant Majore de la Promotion :")
print(f"Nom: {etudiant_majore['nom']}, Prénom: {etudiant_majore['prenom']},
Spécialité: {etudiant_majore['spécialité']},
Annexe 1
Voici quelques fonctions de la bibliothèque Pandas qui peuvent vous aider.
Catégorie Description
Filtrage et aggrégation [Link][indice_ligne]
des données
[Link][indice_ligne, indice_colonne]
[Link][N°_Ligne, "colonne"] = valeur
[Link][[Link] op_comparaison valeur ]
[Link][(df["colonne1"] op_comparaison1 valeur1) op_logique
(df["colonne2"] op_comparaison2 valeur2), colonnes]
[Link](colonnes_à_agréger)["colonne"].fonction_agrégat()
[Link](colonnes_à_agréger).agg({"colonne1":['fct_agg1',...,
'fct_agg_i'], "colonne_n":'fct_agg'})
Jointure [Link](df1, df2, on='identifiant')
[Link](df2, left_on='id', right_on='identifiant')
[Link](df1, df2, left_on='identifiant', right_on='id')
Fonctions statistiques mean(), sum(), min(), max(), count()
7
Annexe 2
Data_Etudiants Data_Resultats
Data_Notes_Etudiants Data_Matières
Data_Modules
9