M55 - Data Science & Scientific Computing 5
  1.   Exercices
  2. Notes L3 Math
  • M55 - Data Science and Scientific Computing 5

  • Syllabus

  •   Cours
    • Introduction
    • Series
    • Data Frames
    • Une analyse complète : le Titanic

  •   Exercices
    • Premières manipulations
    • Notes L3 Math
    • Population France
    • Netflix User
    • Presidentielles USA 2016

  •   Fichiers sources

Contenu de la page

  • 1 Exercice
  1.   Exercices
  2. Notes L3 Math

Notes L3 Mathématiques

Auteur·rice

Gloria FACCANONI

Date de publication

25 novembre 2024

1 Exercice

Considérons les notes pour un étudiant de L3 Mathématiques pour les deux semestres de l’année.

Pour chaque semestre :

  • Crééer une Series qui contient les notes des ECUEs (des entiers aléatoires de 0 à 20) et les indices sont les noms des ECUEs.
  • Créér une Series qui contient les coefficients des ECUEs et les indices sont les noms des ECUEs.
  • Créer un DataFrame qui contient les notes et les coefficients des ECUEs.

Voici un exemple pour le semestre 1

et pour le semestre 2

Utiliser ces deux DataFrames pour répondre aux questions suivantes :

  • Quelle est la moyenne des notes de l’étudiant pendant le premier semestre ?
  • Quelle est la moyenne des notes de l’étudiant pendant le second semestre ?
  • Quelle est la moyenne des notes de l’étudiant pour l’année ?
  • L’étudiant a-t-il amélioré ses performances au second semestre ? Si oui, de combien ?

Bonus : créer un DataFrame qui contient les notes et les coefficients des ECUEs pour les deux semestres. Pour l’exemple précédent, le DataFrame devra être :

import pandas as pd
import numpy as np
# les noms des ECUE du semestre 1 dans une liste
ecue_names_semester1 = ["M51 Intégration", 
                        "M52 Topologie", 
                        "M53 Calcul différentiel", 
                        "M54 Algèbre 5", 
                        "M55 DS&SC 5", 
                        "RDOC", 
                        "PPE"]

# les coefficients des ECUE du semestre 1 dans une Series dont les index sont les noms des ECUE
coefficients_semester1 = pd.Series( data=[8, 8, 8, 4, 2, 0, 0], 
                                    index=ecue_names_semester1)

# les notes de l'étudiant 1 dans une Series dont les index sont les noms des ECUE
etu_1_semester1 = pd.Series( data=np.random.randint(0, 21, size=len(ecue_names_semester1)), 
                             index=ecue_names_semester1)

# on cosntruit le DataFrame comme un dict de Series
df_semester1 = pd.DataFrame( {"Coefficients": coefficients_semester1, 
                              "Étudiant 1": etu_1_semester1}
                              )
display(df_semester1)
Coefficients Étudiant 1
M51 Intégration 8 17
M52 Topologie 8 3
M53 Calcul différentiel 8 13
M54 Algèbre 5 4 18
M55 DS&SC 5 2 12
RDOC 0 19
PPE 0 20
ecue_names_semester2 = ["M61 EDO", "M62 Analyse Complexe", "M63 Modélisation", "M64 DS&SC 6", "UE65", "UE66"]

coefficients_semester2 = pd.Series( data=[5, 9, 4, 4, 6, 2], 
                                    index=ecue_names_semester2)

etu_1_semester2 = pd.Series( data=np.random.randint(0, 21, size=len(ecue_names_semester2)), 
                             index=ecue_names_semester2)

df_semester2 = pd.DataFrame({"Coefficients": coefficients_semester2, 
                             "Étudiant 1": etu_1_semester2}
                             )
display(df_semester2)
Coefficients Étudiant 1
M61 EDO 5 6
M62 Analyse Complexe 9 15
M63 Modélisation 4 15
M64 DS&SC 6 4 1
UE65 6 20
UE66 2 11
# df_semester1["Étudiant 1"].describe() # moyenne pas pertinente car les notes ne tiennent pas compte des coefficients
# df_semester1["Étudiant 1"].agg(["count","min","max"])
# moyenne du semestre 1

# si on utilise les Series
# moy_semester1 = sum(coefficients_semester1*etu_1_semester1)/sum(coefficients_semester1)
# display(moy_semester1)

# si on utilise le DataFrame
moy_semester1 = ( df_semester1["Coefficients"]*df_semester1["Étudiant 1"] ).sum() / df_semester1["Coefficients"].sum() 
display(moy_semester1)

# idem avec "dot"
# moy_semester1 = df_semester1["Étudiant 1"].dot(df_semester1["Coefficients"]) / df_semester1["Coefficients"].sum() 
# display(moy_semester1)

# idem avec "np.average" qui permet de pondérer la moyenne par les coefficients
# moy_semester1 = np.average(df_semester1["Étudiant 1"], weights=df_semester1["Coefficients"])
# # display(moy_semester1)
12.0
df_semester2["Étudiant 1"].agg(["count","min","max"])
count     6
min       1
max      20
Name: Étudiant 1, dtype: int64
# moyenne du semestre 2
moy_semester2 = np.average(df_semester2["Étudiant 1"], weights=df_semester2["Coefficients"])
display(moy_semester2)
12.366666666666667

Notes et coefficients pour l’année entière :

# Fusionner les DataFrame pour obtenir l'année entière

# Les colonnes des deux DataFrame sont les mêmes, on peut donc les concaténer
df_year = pd.concat([df_semester1, df_semester2])

# Autre version avec un DataFrame avec MultiIndex
# df_year = pd.concat([df_semester1, df_semester2], keys=["Semestre 1", "Semestre 2"], axis=0)

df_year
Coefficients Étudiant 1
M51 Intégration 8 17
M52 Topologie 8 3
M53 Calcul différentiel 8 13
M54 Algèbre 5 4 18
M55 DS&SC 5 2 12
RDOC 0 19
PPE 0 20
M61 EDO 5 6
M62 Analyse Complexe 9 15
M63 Modélisation 4 15
M64 DS&SC 6 4 1
UE65 6 20
UE66 2 11
df_year["Étudiant 1"].agg(["count","min","max"])
count    13
min       1
max      20
Name: Étudiant 1, dtype: int64
# Calcule des moyennes pondérées 
moyenne_annee = np.average(df_year["Étudiant 1"], weights=df_year["Coefficients"])

print(f"La pire note de l'année : {df_year['Étudiant 1'].min()} obtenue à l'ECUE {df_year['Étudiant 1'].idxmin()}")
print(f"La meilleure note de l'année : {df_year['Étudiant 1'].max()} obtenue à l'ECUE {df_year['Étudiant 1'].idxmax()}")

print(f"Moyenne des notes pour l'année : {moyenne_annee:.2f}")
print(f"Moyenne des notes pour le premier semestre : {moy_semester1:.2f}")
print(f"Moyenne des notes pour le second semestre : {moy_semester2:.2f}")

# Amélioration des performances ?
amelioration = moy_semester2 - moy_semester1
print(f"Amélioration des performances dans la seconde moitié : {amelioration:.2f}")
La pire note de l'année : 1 obtenue à l'ECUE M64 DS&SC 6
La meilleure note de l'année : 20 obtenue à l'ECUE PPE
Moyenne des notes pour l'année : 12.18
Moyenne des notes pour le premier semestre : 12.00
Moyenne des notes pour le second semestre : 12.37
Amélioration des performances dans la seconde moitié : 0.37
Retour au sommet
Premières manipulations
Population France

© Copyright 2024, Gloria Faccanoni

 

This page is built with ❤️ and Quarto.