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}")
|