mrcryptsie
upgrade2
7787309
import gradio as gr
from data import coefficients_C, coefficients_D, filieres, students
from utils import (
get_student_by_id,
calculer_moyennes,
calculer_scores_selection,
selectionner_meilleures_matieres,
compter_occurrences_meilleures_matieres,
selectionner_top_matieres,
proposer_filieres
)
def analyser_etudiant(student_id):
# Vérifier si l'étudiant existe
student = get_student_by_id(students, student_id)
if not student:
return ["Étudiant introuvable"] + ["N/A"] * 14 # Retourner des valeurs par défaut pour chaque champ
# Définir les coefficients et les biais
coefficients = coefficients_C if student.serie == "C" else coefficients_D
biais = {
"Mathématiques": 5,
"Physique-Chimie": 4,
"Informatique": 3,
"Français": 2,
"Philosophie": 1,
"Anglais": 2
}
# Étape 1 : Calcul des moyennes (hors Baccalauréat)
moyennes = calculer_moyennes(student.resultats)
moyennes_seconde = "\n".join([f"- {matiere}: {moyenne}" for matiere, moyenne in moyennes.get("Seconde", {}).items()])
moyennes_premiere = "\n".join([f"- {matiere}: {moyenne}" for matiere, moyenne in moyennes.get("Première", {}).items()])
moyennes_terminale = "\n".join([f"- {matiere}: {moyenne}" for matiere, moyenne in moyennes.get("Terminale", {}).items()])
# Étape 2 : Calcul des scores (hors Baccalauréat)
scores = calculer_scores_selection(moyennes, coefficients, biais)
scores_seconde = "\n".join([f"- {matiere}: {score}" for matiere, score in scores.get("Seconde", {}).items()])
scores_premiere = "\n".join([f"- {matiere}: {score}" for matiere, score in scores.get("Première", {}).items()])
scores_terminale = "\n".join([f"- {matiere}: {score}" for matiere, score in scores.get("Terminale", {}).items()])
# Étape 3 : Calcul des scores pour le Baccalauréat
scores_bac = {}
for matiere, note in student.resultats.get("Baccalauréat", {}).items():
coef = coefficients.get_coefficient(matiere)
score_bac = (note * coef) + note + biais.get(matiere, 0)
scores_bac[matiere] = score_bac
# Ajout des scores du Baccalauréat aux scores globaux
scores["Baccalauréat"] = scores_bac
scores_bac_str = "\n".join([f"- {matiere}: {score}" for matiere, score in scores_bac.items()])
# Étape 4 : Sélection des meilleures matières par année (y compris Baccalauréat)
meilleures_matieres = selectionner_meilleures_matieres(scores)
meilleures_seconde = "\n".join([f"- {matiere}" for matiere in meilleures_matieres.get("Seconde", [])])
meilleures_premiere = "\n".join([f"- {matiere}" for matiere in meilleures_matieres.get("Première", [])])
meilleures_terminale = "\n".join([f"- {matiere}" for matiere in meilleures_matieres.get("Terminale", [])])
meilleures_bac = "\n".join([f"- {matiere}" for matiere in meilleures_matieres.get("Baccalauréat", [])])
# Étape 5 : Comptage des occurrences des meilleures matières
occurrences = compter_occurrences_meilleures_matieres(meilleures_matieres)
occurrences_str = "\n".join([f"- {matiere}: {count}" for matiere, count in occurrences.items()])
# Étape 6 : Sélection des quatre meilleures matières
top_matieres = selectionner_top_matieres(occurrences, biais)
top_matieres_str = "\n".join([f"- {matiere}" for matiere in top_matieres])
# Étape 7 : Proposition des filières
propositions = proposer_filieres(top_matieres, filieres, student.serie)
propositions_str = "\n".join([f"- {filiere.nom}" for filiere in propositions])
# Retourner toutes les étapes (15 valeurs)
return [
f"Étudiant : {student.nom}", # Informations étudiant
moyennes_seconde, moyennes_premiere, moyennes_terminale, # Moyennes par année
scores_seconde, scores_premiere, scores_terminale, # Scores par année
scores_bac_str, # Scores du Baccalauréat
meilleures_seconde, meilleures_premiere, meilleures_terminale, meilleures_bac, # Meilleures matières par année
occurrences_str, # Occurrences des meilleures matières
top_matieres_str, # Quatre meilleures matières
propositions_str # Filières proposées
]
# Interface Gradio stylisée avec années séparées
with gr.Blocks(theme=gr.themes.Soft()) as interface:
gr.Markdown("# 🎓 ALGORITHME DE RECOOMANDATION VERSION 1🎓")
gr.Markdown("Notre algorithme de recommandation de filières est conçu pour aider les étudiants à identifier les domaines d'études les plus adaptés à leurs compétences et performances académiques.")
with gr.Row():
with gr.Column():
student_id_input = gr.Textbox(label="🔍 Identifiant Étudiant", placeholder="E001", lines=1)
analyze_button = gr.Button("🚀 Analyser", variant="primary")
with gr.Column():
student_info = gr.Textbox(label="👤 Informations Étudiant", interactive=False)
with gr.Tab("📊 Moyennes et Scores"):
with gr.Row():
with gr.Column():
gr.Markdown("### 📈 Moyennes par Année")
with gr.Group():
gr.Markdown("#### Seconde")
moyennes_seconde = gr.Textbox(label="", interactive=False, lines=4)
gr.Markdown("#### Première")
moyennes_premiere = gr.Textbox(label="", interactive=False, lines=4)
gr.Markdown("#### Terminale")
moyennes_terminale = gr.Textbox(label="", interactive=False, lines=4)
with gr.Column():
gr.Markdown("### 📊 Scores par Année")
with gr.Group():
gr.Markdown("#### Seconde")
scores_seconde = gr.Textbox(label="", interactive=False, lines=4)
gr.Markdown("#### Première")
scores_premiere = gr.Textbox(label="", interactive=False, lines=4)
gr.Markdown("#### Terminale")
scores_terminale = gr.Textbox(label="", interactive=False, lines=4)
with gr.Column():
gr.Markdown("### 🏆 Scores du Baccalauréat")
scores_bac_output = gr.Textbox(label="", interactive=False, lines=6)
with gr.Tab("🏅 Meilleures Matières"):
with gr.Row():
with gr.Column():
gr.Markdown("### 🥇 Meilleures Matières par Année")
with gr.Group():
gr.Markdown("#### Seconde")
meilleures_seconde = gr.Textbox(label="", interactive=False, lines=3)
gr.Markdown("#### Première")
meilleures_premiere = gr.Textbox(label="", interactive=False, lines=3)
gr.Markdown("#### Terminale")
meilleures_terminale = gr.Textbox(label="", interactive=False, lines=3)
gr.Markdown("#### Baccalauréat")
meilleures_bac = gr.Textbox(label="", interactive=False, lines=3)
with gr.Column():
gr.Markdown("### 🔢 Occurrences des Meilleures Matières")
occurrences_output = gr.Textbox(label="", interactive=False, lines=6)
with gr.Column():
gr.Markdown("### 🏅 Quatre Meilleures Matières")
top_matieres_output = gr.Textbox(label="", interactive=False, lines=4)
with gr.Tab("🎓 Filières Proposées"):
gr.Markdown("### 📚 Filières Proposées")
propositions_output = gr.Textbox(label="", interactive=False, lines=6)
# Lier le bouton à la fonction
analyze_button.click(
analyser_etudiant,
inputs=[student_id_input],
outputs=[
student_info,
moyennes_seconde, moyennes_premiere, moyennes_terminale,
scores_seconde, scores_premiere, scores_terminale,
scores_bac_output,
meilleures_seconde, meilleures_premiere, meilleures_terminale, meilleures_bac,
occurrences_output,
top_matieres_output,
propositions_output
]
)
# Lancer l'application
if __name__ == "__main__":
interface.launch(server_port=7860) # Spécifier un port pour éviter les conflits