forked from ScoDoc/ScoDoc
cast matrice des inscriptions aux modules en booleen
This commit is contained in:
parent
09eb73be4a
commit
fa896b77ab
@ -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]
|
||||||
|
Loading…
Reference in New Issue
Block a user