-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathoptim_combine.py
More file actions
120 lines (101 loc) · 4.07 KB
/
optim_combine.py
File metadata and controls
120 lines (101 loc) · 4.07 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
import pickle
import re
from pathlib import Path
import calendar
###############################################################################
# CONFIG
###############################################################################
# Un ou plusieurs dossiers contenant les gridsearch_results_*.pkl
# Tu peux mettre un seul dossier si tu veux.
result_dirs = [
Path("C:/Users/Vincent/Downloads/train/optim/"), # RNN
Path("C:/Users/Vincent/Downloads/train/optim/lin/"), # linéaire
]
# Nom du fichier de sortie fusionné
output_file = Path("ALL_gridsearch_results_v2.pkl")
# ---- mois à EXCLURE (laisse vide pour ne rien exclure) ----
# exemples acceptés: 8, '08', 'Aug', 'August', 'août', 'aout', etc.
exclude_months_input = [] # [] => ne retire aucune date
# -----------------------------------------------------------
###############################################################################
# UTILITAIRES MOIS
###############################################################################
MONTH_LOOKUP = {name.lower(): i for i, name in enumerate(calendar.month_name) if name}
MONTH_LOOKUP.update({name.lower(): i for i, name in enumerate(calendar.month_abbr) if name})
MONTH_LOOKUP.update({'août': 8, 'aout': 8})
def to_month_int(x):
if isinstance(x, int):
if 1 <= x <= 12:
return x
raise ValueError(f"Invalid month int: {x}")
s = str(x).strip().lower()
if s.isdigit():
m = int(s)
if 1 <= m <= 12:
return m
raise ValueError(f"Invalid month number: {x}")
if s in MONTH_LOOKUP:
return MONTH_LOOKUP[s]
raise ValueError(f"Unknown month label: {x}")
exclude_months = {to_month_int(m) for m in exclude_months_input}
def extract_month_from_name(name: str):
"""Retourne le mois (1-12) depuis le premier YYYYMMDD trouvé dans le nom; None si pas trouvé."""
m = re.search(r"(\d{8})", name) # cherche YYYYMMDD
if not m:
return None
yyyymmdd = m.group(1)
return int(yyyymmdd[4:6])
###############################################################################
# FUSION
###############################################################################
all_results = []
selected_pkls = []
skipped_pkls = []
# 1) Lister tous les fichiers dans tous les répertoires
all_pkls = []
for d in result_dirs:
if not d.exists():
print(f"[WARN] Dossier n'existe pas: {d}")
continue
all_pkls.extend(sorted(d.glob("gridsearch_results_*.pkl")))
print(f"Trouvé {len(all_pkls)} fichiers gridsearch_results_*.pkl au total.")
# 2) Appliquer le filtre de mois (si exclude_months non vide)
for p in all_pkls:
mon = extract_month_from_name(p.name)
if mon is not None and mon in exclude_months:
skipped_pkls.append(p)
else:
selected_pkls.append(p)
print(f"Fichiers pris: {len(selected_pkls)} | ignorés (mois exclus): {len(skipped_pkls)}")
if skipped_pkls:
for p in skipped_pkls:
print(f" - ignoré: {p.name}")
# 3) Charger et fusionner
for pkl_file in selected_pkls:
with open(pkl_file, "rb") as f:
try:
data = pickle.load(f)
except Exception as e:
print(f"[ERREUR] Lecture {pkl_file}: {e}")
continue
# Cas typique: list de dict
if isinstance(data, list):
all_results.extend(data)
# Par sécurité: si c'est un DataFrame (au cas où tu aurais changé le format un jour)
else:
# On essaie de gérer proprement:
try:
import pandas as pd
if isinstance(data, pd.DataFrame):
all_results.extend(data.to_dict("records"))
else:
# fallback: on ajoute tel quel
all_results.append(data)
except ImportError:
# si pandas pas dispo, on push juste l'objet
all_results.append(data)
print(f"Fusion terminée! {len(all_results)} runs au total.")
# 4) Sauvegarde
with open(output_file, "wb") as f:
pickle.dump(all_results, f)
print(f"Résultats fusionnés sauvegardés dans: {output_file.resolve()}")