1
0
forked from ScoDoc/ScoDoc

cast matrice des inscriptions aux modules en booleen

This commit is contained in:
Emmanuel Viennet 2021-11-29 00:00:44 +01:00
parent 09eb73be4a
commit fa896b77ab

View File

@ -14,11 +14,11 @@ from app import models
# sur test debug 116 etuds, 18 modules, on est autour de 250ms. # sur test debug 116 etuds, 18 modules, on est autour de 250ms.
# On a testé trois approches, ci-dessous (et retenu la 1ere) # On a testé trois approches, ci-dessous (et retenu la 1ere)
# #
def df_load_modimpl_inscr(formsemestre_id): def df_load_modimpl_inscr(formsemestre_id: int) -> pd.DataFrame:
"""Charge la matrice des inscriptions aux modules du semestre """Charge la matrice des inscriptions aux modules du semestre
rows: etudid rows: etudid
columns: moduleimpl_id columns: moduleimpl_id (en chaîne)
value: int (0/1 inscrit ou pas) value: bool (0/1 inscrit ou pas)
""" """
# méthode la moins lente: une requete par module, merge les dataframes # méthode la moins lente: une requete par module, merge les dataframes
sem = models.FormSemestre.query.get(formsemestre_id) sem = models.FormSemestre.query.get(formsemestre_id)
@ -36,14 +36,17 @@ def df_load_modimpl_inscr(formsemestre_id):
dtype=int, dtype=int,
) )
df = df.merge(ins_df, how="outer", left_index=True, right_index=True) df = df.merge(ins_df, how="outer", left_index=True, right_index=True)
return df # x100 25.5s 15s 17s # les colonnes de df sont en float (Nan) quand il n'y a
# aucun inscrit au module.
df.fillna(0, inplace=True) # les non-inscrits
return df.astype(bool) # x100 25.5s 15s 17s
# chrono avec timeit: # chrono avec timeit:
# timeit.timeit('x = df_load_module_inscr_v0(696)', number=100, globals=globals()) # timeit.timeit('x = df_load_module_inscr_v0(696)', number=100, globals=globals())
def df_load_modimpl_inscr_v0(formsemestre_id): def df_load_modimpl_inscr_v0(formsemestre_id: int):
# methode 0, pur SQL Alchemy, 1.5 à 2 fois plus lente # methode 0, pur SQL Alchemy, 1.5 à 2 fois plus lente
sem = models.FormSemestre.query.get(formsemestre_id) sem = models.FormSemestre.query.get(formsemestre_id)
moduleimpl_ids = [m.id for m in sem.modimpls] moduleimpl_ids = [m.id for m in sem.modimpls]