Spaces:
Paused
Paused
| import pandas as pd | |
| def run_simulator( | |
| site_name: str, | |
| visitor_count: int, | |
| current_risk: float, | |
| improvement_pct: float # 0-100, do user kΓ©o slider | |
| ) -> tuple[str, pd.DataFrame]: | |
| improvement = improvement_pct / 100 | |
| new_risk = round(max(0.0, current_risk * (1 - improvement)), 3) | |
| # ββ TΓnh toΓ‘n TRΖ―α»C βββββββββββββββββββββββββββββββββββ | |
| waste_total = visitor_count * 0.5 | |
| unmanaged_now = waste_total * current_risk | |
| water_now = round(unmanaged_now * 0.15, 2) | |
| co2_now = round(unmanaged_now * 2.5, 2) if current_risk > 0.5 else 0.0 | |
| cost_now = round(unmanaged_now * 1.5, 1) | |
| # ββ TΓnh toΓ‘n SAU βββββββββββββββββββββββββββββββββββββ | |
| unmanaged_new = waste_total * new_risk | |
| water_new = round(unmanaged_new * 0.15, 2) | |
| co2_new = round(unmanaged_new * 2.5, 2) if new_risk > 0.5 else 0.0 | |
| cost_new = round(unmanaged_new * 1.5, 1) | |
| good_cost = round(waste_total * 0.4, 1) | |
| daily_save = round(max(cost_now - cost_new, 0), 1) | |
| annual_save = int(daily_save * 365) | |
| # ββ Trust grade βββββββββββββββββββββββββββββββββββββββ | |
| def grade(r): | |
| if r < 0.2: return "A π" | |
| if r < 0.4: return "B β " | |
| if r < 0.6: return "C β οΈ" | |
| if r < 0.8: return "D π©" | |
| return "F π¨" | |
| # ββ DataFrame cho bar chart βββββββββββββββββββββββββββ | |
| chart_df = pd.DataFrame({ | |
| "Scenario": ["Current", "After Improvement", "Current", "After Improvement", "Current", "After Improvement"], | |
| "Metric": ["Unmanaged Waste (kg/day)", "Unmanaged Waste (kg/day)", | |
| "CO2 Emission (kg/day)", "CO2 Emission (kg/day)", | |
| "Daily Cost (USD)", "Daily Cost (USD)"], | |
| "Value": [unmanaged_now, unmanaged_new, co2_now, co2_new, cost_now, cost_new] | |
| }) | |
| # ββ Text output βββββββββββββββββββββββββββββββββββββββ | |
| output = f"""## π Before / After Simulator β {site_name} | |
| **Improvement Applied: {improvement_pct:.0f}%** | |
| | | Before | After | Change | | |
| |--|--------|-------|--------| | |
| | Risk Score | {current_risk:.2f} | {new_risk:.2f} | {"β " + str(round((current_risk - new_risk)*100)) + "%" if new_risk < current_risk else "β"} | | |
| | Trust Grade | {grade(current_risk)} | {grade(new_risk)} | {"β¬οΈ Improved" if new_risk < current_risk else "β"} | | |
| | Unmanaged Waste | {unmanaged_now:.1f} kg/day | {unmanaged_new:.1f} kg/day | β {round(unmanaged_now - unmanaged_new, 1)} kg | | |
| | Water Pollution | {water_now} kg BOD | {water_new} kg BOD | β {round(water_now - water_new, 2)} kg | | |
| | COβ Emission | {co2_now} kg/day | {co2_new} kg/day | β {round(co2_now - co2_new, 1)} kg | | |
| | Daily Cost | ${cost_now} | ${cost_new} | β ${daily_save} | | |
| | **Annual Savings** | β | β | **${annual_save:,}/year** | | |
| --- | |
| ### π‘ What {improvement_pct:.0f}% improvement means in practice: | |
| - Reduce unmanaged waste by **{round(unmanaged_now - unmanaged_new, 1)} kg every day** | |
| - Save **${annual_save:,} USD per year** | |
| - Protect **{int((water_now - water_new) * 1000 * 365):,} liters** of clean water annually | |
| - Avoid **{round((co2_now - co2_new) * 365, 1)} kg COβ** per year | |
| > π See bar chart below for visual comparison | |
| """ | |
| return output, chart_df |