From fa896b77ab9159d457d4c278c6da443483ef65e0 Mon Sep 17 00:00:00 2001 From: Emmanuel Viennet Date: Mon, 29 Nov 2021 00:00:44 +0100 Subject: [PATCH] cast matrice des inscriptions aux modules en booleen --- app/comp/inscr_mod.py | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/app/comp/inscr_mod.py b/app/comp/inscr_mod.py index d3dad9b4..56269dd7 100644 --- a/app/comp/inscr_mod.py +++ b/app/comp/inscr_mod.py @@ -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]