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.
# 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
rows: etudid
columns: moduleimpl_id
value: int (0/1 inscrit ou pas)
columns: moduleimpl_id (en chaîne)
value: bool (0/1 inscrit ou pas)
"""
# méthode la moins lente: une requete par module, merge les dataframes
sem = models.FormSemestre.query.get(formsemestre_id)
@ -36,14 +36,17 @@ def df_load_modimpl_inscr(formsemestre_id):
dtype=int,
)
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:
# 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
sem = models.FormSemestre.query.get(formsemestre_id)
moduleimpl_ids = [m.id for m in sem.modimpls]