mirror of
https://github.com/Hestia-Homes/Model.git
synced 2026-06-08 11:17:27 +00:00
179 lines
5.6 KiB
Python
179 lines
5.6 KiB
Python
"""
|
|
This script will create an input csv for the recommendation engine and upload it to S3, which can be used for
|
|
testing
|
|
"""
|
|
import os
|
|
|
|
import numpy as np
|
|
import pandas as pd
|
|
from epc_api.client import EpcClient
|
|
from utils.s3 import save_csv_to_s3
|
|
|
|
FILE_SIZE = 5
|
|
EPC_AUTH_TOKEN = os.getenv("EPC_AUTH_TOKEN", None)
|
|
USER_ID = 8
|
|
PORTFOLIO_ID = 54
|
|
|
|
|
|
def app():
|
|
# For this dataset, we want 3 properties, all hourses. A mid-terrace, and end-terrace and a semi-detached
|
|
|
|
epc_client = EpcClient(auth_token=EPC_AUTH_TOKEN)
|
|
|
|
# Birmingham has a Local Authority Code of E08000025
|
|
|
|
# ~~~~~~~~~~~~~~~~~~~~
|
|
# First example
|
|
# ~~~~~~~~~~~~~~~~~~~~
|
|
# Let's take an EPC D property
|
|
example_1_reponse = epc_client.domestic.search(
|
|
params={
|
|
"local-authority": "E08000025",
|
|
"property-type": "house",
|
|
},
|
|
size=1000
|
|
)
|
|
example_1_reponse = example_1_reponse["rows"]
|
|
# Get a property with a cavity wall
|
|
example_1_reponse_filtered = [
|
|
x for x in example_1_reponse if
|
|
"cavity wall, as built, no insulation (assumed)" in x["walls-description"].lower()
|
|
]
|
|
example_1_reponse_filtered = [
|
|
x for x in example_1_reponse_filtered if "pitched, no insulation (assumed)" in x["roof-description"].lower()
|
|
]
|
|
# Get a social housing property
|
|
example_1_reponse_filtered = [
|
|
x for x in example_1_reponse_filtered if x["tenure"] == "Rented (social)"
|
|
]
|
|
|
|
print(example_1_reponse_filtered[0]["postcode"])
|
|
# B13 9LT
|
|
print(example_1_reponse_filtered[0]["address1"])
|
|
# 113 Tenby Road
|
|
print(example_1_reponse_filtered[0]["built-form"])
|
|
# Mid-Terrace
|
|
print(example_1_reponse_filtered[0]["current-energy-rating"])
|
|
# 'D'
|
|
|
|
# ~~~~~~~~~~~~~~~~~~~~
|
|
# Second example
|
|
# ~~~~~~~~~~~~~~~~~~~~
|
|
|
|
# Let's take an EPC E property
|
|
example_2_reponse = epc_client.domestic.search(
|
|
params={
|
|
"local-authority": "E08000025",
|
|
"property-type": "house",
|
|
"energy-band": "e"
|
|
},
|
|
size=1000
|
|
)
|
|
example_2_reponse = example_2_reponse["rows"]
|
|
# Get a solid wall example
|
|
example_2_reponse_filtered = [
|
|
x for x in example_2_reponse if
|
|
"solid brick, as built, no insulation (assumed)" in x["walls-description"].lower()
|
|
]
|
|
# With some existing loft insulation
|
|
example_2_reponse_filtered = [
|
|
x for x in example_2_reponse_filtered if "pitched, 100 mm loft insulation" in x["roof-description"].lower()
|
|
]
|
|
# Get a social housing property
|
|
example_2_reponse_filtered = [
|
|
x for x in example_2_reponse_filtered if x["tenure"] == "Rented (social)"
|
|
]
|
|
|
|
print(example_2_reponse_filtered[0]["postcode"])
|
|
# B28 8JF
|
|
print(example_2_reponse_filtered[0]["address1"])
|
|
# 139 School Road
|
|
print(example_2_reponse_filtered[0]["built-form"])
|
|
# Semi-Detached
|
|
print(example_2_reponse_filtered[0]["current-energy-rating"])
|
|
# E
|
|
|
|
# ~~~~~~~~~~~~~~~~~~~~
|
|
# Third example
|
|
# ~~~~~~~~~~~~~~~~~~~~
|
|
example_3_reponse = epc_client.domestic.search(
|
|
params={
|
|
"local-authority": "E08000025",
|
|
"property-type": "house",
|
|
"energy-band": "f"
|
|
},
|
|
size=1000
|
|
)
|
|
example_3_reponse = example_3_reponse["rows"]
|
|
# Get a social housing property]
|
|
example_3_reponse_filtered = [
|
|
x for x in example_3_reponse if x["tenure"] == "Rented (social)"
|
|
]
|
|
|
|
print(example_3_reponse_filtered[4]["walls-description"])
|
|
print(example_3_reponse_filtered[4]["floor-description"])
|
|
print(example_3_reponse_filtered[4]["roof-description"])
|
|
print(example_3_reponse_filtered[4]["postcode"])
|
|
# B32 1SL
|
|
print(example_3_reponse_filtered[4]["address1"])
|
|
# 77 Simmons Drive
|
|
print(example_3_reponse_filtered[4]["built-form"])
|
|
# Semi-Detached
|
|
|
|
# ~~~~~~~~~~~~~~~~~~~~
|
|
# Final example
|
|
# ~~~~~~~~~~~~~~~~~~~~
|
|
# Let's take a flat that is a D
|
|
example_4_reponse = epc_client.domestic.search(
|
|
params={
|
|
"local-authority": "E08000025",
|
|
"property-type": "flat",
|
|
"energy-band": "d"
|
|
},
|
|
size=1000
|
|
)
|
|
example_4_reponse = example_4_reponse["rows"]
|
|
|
|
example_4_reponse_filtered = [
|
|
x for x in example_4_reponse if
|
|
"cavity wall, as built, no insulation (assumed)" in x["walls-description"].lower()
|
|
]
|
|
# Get a social housing property
|
|
example_4_reponse_filtered = [
|
|
x for x in example_4_reponse_filtered if x["tenure"] == "Rented (social)"
|
|
]
|
|
print(example_4_reponse_filtered[0]["postcode"])
|
|
# B32 1LS
|
|
print(example_4_reponse_filtered[0]["address1"])
|
|
# Flat 2
|
|
|
|
print(example_4_reponse_filtered[0]["floor-description"])
|
|
print(example_4_reponse_filtered[0]["property-type"])
|
|
# Flat
|
|
|
|
test_file = pd.DataFrame(
|
|
[
|
|
# New properties
|
|
{"address": "113 Tenby Road", "postcode": "B13 9LT", "Notes": None},
|
|
{"address": "139 School Road", "postcode": "B28 8JF", "Notes": None},
|
|
{"address": "77 Simmons Drive", "postcode": "B32 1SL", "Notes": None},
|
|
{"address": "Flat 2, 54 Wedgewood Road", "postcode": "B32 1LS", "Notes": None},
|
|
]
|
|
)
|
|
|
|
# Store the data in s3
|
|
filename = f"{USER_ID}/{PORTFOLIO_ID}/test_inputs.csv"
|
|
save_csv_to_s3(
|
|
dataframe=test_file,
|
|
bucket_name="retrofit-plan-inputs-dev",
|
|
file_name=filename
|
|
)
|
|
|
|
body = {
|
|
"portfolio_id": str(PORTFOLIO_ID),
|
|
"housing_type": "Social",
|
|
"goal": "Increase EPC",
|
|
"goal_value": "C",
|
|
"trigger_file_path": filename
|
|
}
|
|
print(body)
|