mirror of
https://github.com/Hestia-Homes/Model.git
synced 2026-06-08 11:17:27 +00:00
recommendation api working locally
This commit is contained in:
parent
28bdc119fd
commit
cda0ceb009
2 changed files with 38 additions and 45 deletions
|
|
@ -304,11 +304,6 @@ async def trigger_plan(body: PlanTriggerRequest):
|
|||
if not property_recommendations:
|
||||
continue
|
||||
|
||||
# We'll unlist the recommendations so they're a bit easier to handle from here onwards
|
||||
property_recommendations = [
|
||||
rec for recommendations_by_type in property_recommendations for rec in recommendations_by_type
|
||||
]
|
||||
|
||||
recommendations[p.id] = property_recommendations
|
||||
|
||||
# Finally, we'll prepare data for predicting the impact on SAP
|
||||
|
|
@ -330,25 +325,26 @@ async def trigger_plan(body: PlanTriggerRequest):
|
|||
'Suspended, no insulation (assumed)': 'Suspended, insulated (assumed)',
|
||||
'Solid, no insulation (assumed)': 'Solid, insulated (assumed)',
|
||||
}
|
||||
for rec in property_recommendations:
|
||||
scoring_dict = {
|
||||
"UPRN": p.data["uprn"],
|
||||
"id": "+".join([str(p.id), str(rec["recommendation_id"])]),
|
||||
"LOCAL_AUTHORITY": p.data["local-authority"],
|
||||
**starting_epc_data.to_dict("records")[0],
|
||||
**ending_epc_data.to_dict("records")[0],
|
||||
**fixed_data.to_dict("records")[0]
|
||||
}
|
||||
for recommendations_by_type in property_recommendations:
|
||||
for rec in recommendations_by_type:
|
||||
scoring_dict = {
|
||||
"UPRN": p.data["uprn"],
|
||||
"id": "+".join([str(p.id), str(rec["recommendation_id"])]),
|
||||
"LOCAL_AUTHORITY": p.data["local-authority"],
|
||||
**starting_epc_data.to_dict("records")[0],
|
||||
**ending_epc_data.to_dict("records")[0],
|
||||
**fixed_data.to_dict("records")[0]
|
||||
}
|
||||
|
||||
# We update the description to indicate it's insulated
|
||||
if rec["type"] == "wall_insulation":
|
||||
scoring_dict["WALLS_DESCRIPTION_ENDING"] = scoring_map[p.walls["clean_description"]]
|
||||
elif rec["type"] == "floor_insulation":
|
||||
scoring_dict["FLOOR_DESCRIPTION_ENDING"] = scoring_map[p.floor["clean_description"]]
|
||||
else:
|
||||
raise NotImplementedError("Implement me")
|
||||
# We update the description to indicate it's insulated
|
||||
if rec["type"] == "wall_insulation":
|
||||
scoring_dict["WALLS_DESCRIPTION_ENDING"] = scoring_map[p.walls["clean_description"]]
|
||||
elif rec["type"] == "floor_insulation":
|
||||
scoring_dict["FLOOR_DESCRIPTION_ENDING"] = scoring_map[p.floor["clean_description"]]
|
||||
else:
|
||||
raise NotImplementedError("Implement me")
|
||||
|
||||
recommendations_scoring_data.append(scoring_dict)
|
||||
recommendations_scoring_data.append(scoring_dict)
|
||||
|
||||
recommendations_scoring_data = pd.DataFrame(recommendations_scoring_data)
|
||||
|
||||
|
|
@ -416,10 +412,14 @@ async def trigger_plan(body: PlanTriggerRequest):
|
|||
property = [p for p in input_properties if p.id == property_id][0]
|
||||
property_predictions = predictions[predictions["property_id"] == str(property_id)]
|
||||
|
||||
for rec in recommendations[property_id]:
|
||||
rec["sap_points"] = property_predictions[property_predictions["recommendation_id"] == str(
|
||||
rec["recommendation_id"]
|
||||
)]["RDSAP_CHANGE"].values[0]
|
||||
for recommendations_by_type in recommendations[property_id]:
|
||||
for rec in recommendations_by_type:
|
||||
rec["sap_points"] = property_predictions[property_predictions["recommendation_id"] == str(
|
||||
rec["recommendation_id"]
|
||||
)]["RDSAP_CHANGE"].values[0]
|
||||
|
||||
if not rec["sap_points"]:
|
||||
raise ValueError("Sap points missing")
|
||||
|
||||
input_measures = prepare_input_measures(recommendations[property_id], body.goal)
|
||||
|
||||
|
|
@ -441,20 +441,22 @@ async def trigger_plan(body: PlanTriggerRequest):
|
|||
|
||||
selected_recommendations = {r["id"] for r in solution}
|
||||
|
||||
# For selected recommendations, mark them as default
|
||||
for rec in recommendations[property_id]:
|
||||
rec["default"] = rec["recommendation_id"] in selected_recommendations
|
||||
|
||||
for p in input_properties:
|
||||
property_recommendations = [
|
||||
# We'll use the set of selected recommendations to filter the recommendations to upload
|
||||
final_recommendations = [
|
||||
[
|
||||
{**rec, "default": True if rec["recommendation_id"] in selected_recommendations else False}
|
||||
for rec in recommendations_by_type
|
||||
]
|
||||
for recommendations_by_type in property_recommendations
|
||||
for recommendations_by_type in recommendations[property_id]
|
||||
]
|
||||
|
||||
input_measures = prepare_input_measures(property_recommendations, body.goal)
|
||||
# We'll also unlist the recommendations so they're a bit easier to handle from here onwards
|
||||
final_recommendations = [
|
||||
rec for recommendations_by_type in final_recommendations for rec in recommendations_by_type
|
||||
]
|
||||
# We update recommendations[property_id]
|
||||
|
||||
recommendations[property_id] = final_recommendations
|
||||
|
||||
# 1) the property data
|
||||
# 2) the property details (epc)
|
||||
|
|
@ -476,16 +478,6 @@ async def trigger_plan(body: PlanTriggerRequest):
|
|||
if not recommendations_to_upload:
|
||||
continue
|
||||
|
||||
property_predictions = predictions[predictions["property_id"] == str(p.id)]
|
||||
for rec in recommendations_to_upload:
|
||||
# Insert the prediction for sap points
|
||||
rec["sap_points"] = property_predictions[property_predictions["recommendation_id"] == str(
|
||||
rec["recommendation_id"]
|
||||
)]["RDSAP_CHANGE"].values[0]
|
||||
|
||||
if not rec["sap_points"]:
|
||||
raise ValueError("Sap points missing")
|
||||
|
||||
# Create a plan
|
||||
new_plan_id = create_plan(
|
||||
session,
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ def prepare_input_measures(property_recommendations, goal):
|
|||
raise NotImplementedError("Not implemented this gain type - investigate me")
|
||||
|
||||
input_measures = []
|
||||
for rec in property_recommendations:
|
||||
for recs in property_recommendations:
|
||||
input_measures.append(
|
||||
[
|
||||
{
|
||||
|
|
@ -26,6 +26,7 @@ def prepare_input_measures(property_recommendations, goal):
|
|||
"gain": rec[goal_key],
|
||||
"type": rec["type"]
|
||||
}
|
||||
for rec in recs
|
||||
]
|
||||
)
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue