Spaces:
Sleeping
Sleeping
Update rules_engine.py
Browse files- rules_engine.py +27 -21
rules_engine.py
CHANGED
|
@@ -1,30 +1,36 @@
|
|
| 1 |
# rules_engine.py
|
| 2 |
|
| 3 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 4 |
|
| 5 |
-
def evaluate_health_risks(df: pd.DataFrame) -> pd.DataFrame:
|
| 6 |
-
"""
|
| 7 |
-
Very simple health risk scoring engine.
|
| 8 |
-
Takes input dataframe with health data and adds risk scores.
|
| 9 |
-
"""
|
| 10 |
|
| 11 |
-
|
|
|
|
|
|
|
| 12 |
|
| 13 |
-
|
| 14 |
-
|
| 15 |
|
| 16 |
-
|
| 17 |
-
|
| 18 |
-
risks["risk_Hypertension Risk"] = 0.7 if row["systolic_bp"] > 140 else 0.3
|
| 19 |
-
risks["risk_Depression/Mood Concern"] = 0.6 if row["sleep_hours"] < 5 else 0.2
|
| 20 |
-
risks["risk_Migraine Risk"] = 0.5 if row["screen_time"] > 8 else 0.2
|
| 21 |
-
risks["risk_Sleep Apnea Risk"] = 0.7 if row["bmi"] > 30 else 0.3
|
| 22 |
-
risks["risk_Anemia Risk"] = 0.6 if row["hemoglobin"] < 12 else 0.2
|
| 23 |
|
| 24 |
-
|
|
|
|
| 25 |
|
| 26 |
-
#
|
| 27 |
-
|
| 28 |
-
final_df = pd.concat([df, risks_df], axis=1)
|
| 29 |
|
| 30 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
# rules_engine.py
|
| 2 |
|
| 3 |
+
def compute_bmi(weight_kg, height_cm):
|
| 4 |
+
"""Compute Body Mass Index (BMI)."""
|
| 5 |
+
if height_cm <= 0:
|
| 6 |
+
return 0
|
| 7 |
+
height_m = height_cm / 100
|
| 8 |
+
return round(weight_kg / (height_m ** 2), 2)
|
| 9 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 10 |
|
| 11 |
+
def evaluate_risks(age, bmi, glucose, systolic_bp, diastolic_bp, cholesterol, hemoglobin):
|
| 12 |
+
"""Return a dictionary of risk scores (0–100)."""
|
| 13 |
+
risks = {}
|
| 14 |
|
| 15 |
+
# Type 2 Diabetes Risk
|
| 16 |
+
risks["Type 2 Diabetes Risk"] = min(100, 0.2 * glucose + 0.3 * bmi + 0.1 * age)
|
| 17 |
|
| 18 |
+
# Hypertension Risk
|
| 19 |
+
risks["Hypertension Risk"] = min(100, 0.25 * systolic_bp + 0.15 * diastolic_bp + 0.1 * age)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 20 |
|
| 21 |
+
# Depression/Mood Concern
|
| 22 |
+
risks["Depression/Mood Concern"] = min(100, 0.05 * age + 0.05 * bmi)
|
| 23 |
|
| 24 |
+
# Migraine Risk
|
| 25 |
+
risks["Migraine Risk"] = min(100, 0.05 * age + 0.1 * systolic_bp)
|
|
|
|
| 26 |
|
| 27 |
+
# Sleep Apnea Risk
|
| 28 |
+
risks["Sleep Apnea Risk"] = min(100, 0.3 * bmi + 0.05 * age)
|
| 29 |
+
|
| 30 |
+
# Anemia Risk
|
| 31 |
+
if hemoglobin < 13.5:
|
| 32 |
+
risks["Anemia Risk"] = min(100, (13.5 - hemoglobin) * 15 + 0.1 * age)
|
| 33 |
+
else:
|
| 34 |
+
risks["Anemia Risk"] = 0
|
| 35 |
+
|
| 36 |
+
return risks
|