DavMelchi commited on
Commit
0782ac5
·
1 Parent(s): 0d0d4da

Add automatic zero-filling for availability KPIs during daily aggregation to handle missing values consistently across all availability metrics

Browse files
process_kpi/kpi_health_check/normalization.py CHANGED
@@ -158,6 +158,24 @@ def infer_agg(kpi: str) -> str:
158
  return "mean"
159
 
160
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
161
  def load_physical_db() -> pd.DataFrame:
162
  physical_db = get_physical_db().copy()
163
  physical_db["code"] = physical_db["Code_Sector"].str.split("_").str[0]
@@ -192,6 +210,9 @@ def build_daily_kpi(df_raw: pd.DataFrame, rat: str) -> tuple[pd.DataFrame, list[
192
  numeric_cols[c] = to_numeric(df[c])
193
 
194
  numeric_df = pd.DataFrame(numeric_cols)
 
 
 
195
  kpi_cols = [c for c in numeric_df.columns if numeric_df[c].notna().any()]
196
  if not kpi_cols:
197
  raise ValueError(f"No numeric KPI columns detected for {rat}")
 
158
  return "mean"
159
 
160
 
161
+ def _is_availability_kpi(kpi: str) -> bool:
162
+ k = str(kpi).strip().lower()
163
+ if not k:
164
+ return False
165
+ return any(
166
+ x in k
167
+ for x in [
168
+ "availability",
169
+ "avail",
170
+ "unavailability",
171
+ "unavail",
172
+ "dispo",
173
+ "disponibil",
174
+ "uptime",
175
+ ]
176
+ )
177
+
178
+
179
  def load_physical_db() -> pd.DataFrame:
180
  physical_db = get_physical_db().copy()
181
  physical_db["code"] = physical_db["Code_Sector"].str.split("_").str[0]
 
210
  numeric_cols[c] = to_numeric(df[c])
211
 
212
  numeric_df = pd.DataFrame(numeric_cols)
213
+ for c in list(numeric_df.columns):
214
+ if _is_availability_kpi(c):
215
+ numeric_df[c] = numeric_df[c].fillna(0.0)
216
  kpi_cols = [c for c in numeric_df.columns if numeric_df[c].notna().any()]
217
  if not kpi_cols:
218
  raise ValueError(f"No numeric KPI columns detected for {rat}")