mirror of
https://github.com/Hestia-Homes/Model.git
synced 2026-06-08 11:17:27 +00:00
commit
9490fd0005
19 changed files with 12520 additions and 3 deletions
2
.idea/Model.iml
generated
2
.idea/Model.iml
generated
|
|
@ -7,7 +7,7 @@
|
|||
<sourceFolder url="file://$MODULE_DIR$/open_uprn" isTestSource="false" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/recommendations" isTestSource="false" />
|
||||
</content>
|
||||
<orderEntry type="jdk" jdkName="Python 3.10 (backend)" jdkType="Python SDK" />
|
||||
<orderEntry type="jdk" jdkName="ha_15_32_eligibility" jdkType="Python SDK" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
</component>
|
||||
<component name="PyNamespacePackagesService">
|
||||
|
|
|
|||
2
.idea/misc.xml
generated
2
.idea/misc.xml
generated
|
|
@ -3,7 +3,7 @@
|
|||
<component name="Black">
|
||||
<option name="sdkName" value="Python 3.10 (backend)" />
|
||||
</component>
|
||||
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.10 (backend)" project-jdk-type="Python SDK" />
|
||||
<component name="ProjectRootManager" version="2" project-jdk-name="ha_15_32_eligibility" project-jdk-type="Python SDK" />
|
||||
<component name="PythonCompatibilityInspectionAdvertiser">
|
||||
<option name="version" value="3" />
|
||||
</component>
|
||||
|
|
|
|||
|
|
@ -275,6 +275,10 @@ class Property(Definitions):
|
|||
# We need to implement an EPC cleaning process, which we run on the EPC data, immediately after we download
|
||||
# it
|
||||
self.data["built-form"] = BUILT_FORM_REMAP.get(self.data["built-form"], self.data["built-form"])
|
||||
if self.data["built-form"] in self.DATA_ANOMALY_MATCHES:
|
||||
if self.data["property-type"] == "Flat":
|
||||
self.data["built-form"] = "Semi-Detached"
|
||||
|
||||
self.set_energy()
|
||||
self.set_ventilation()
|
||||
self.set_solar_pv()
|
||||
|
|
|
|||
193
backend/SearchEpc.py
Normal file
193
backend/SearchEpc.py
Normal file
|
|
@ -0,0 +1,193 @@
|
|||
import os
|
||||
import time
|
||||
from epc_api.client import EpcClient
|
||||
from utils.logger import setup_logger
|
||||
from typing import List
|
||||
from fuzzywuzzy import process
|
||||
|
||||
logger = setup_logger()
|
||||
|
||||
|
||||
class SearchEpc:
|
||||
"""
|
||||
Given address information about a home, this class is responsible for retrieving the EPC data associated
|
||||
to the property.
|
||||
|
||||
For a home, we might have address lines 1, 2, 3 and 4, as well as a postcode.
|
||||
|
||||
Often, simply searching the EPC database with address line 1 and postcode will be enough to find
|
||||
the property, but there are some cases where this is not true and we might need to utilise other
|
||||
combinations about the home to find the property
|
||||
"""
|
||||
|
||||
MAX_RETRIES = 5
|
||||
|
||||
SUCCESS = {
|
||||
"status": 200,
|
||||
"message": "success",
|
||||
"error": None
|
||||
}
|
||||
|
||||
NODATA = {
|
||||
"status": 201,
|
||||
"message": "No data",
|
||||
"error": None
|
||||
}
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
address1: str,
|
||||
postcode: str,
|
||||
address2: str = None,
|
||||
address3: str = None,
|
||||
address4: str = None,
|
||||
max_retries: int = None
|
||||
):
|
||||
"""
|
||||
Address lines 1 and postcode are mandatory fields. The other address lines are optional
|
||||
but can be used to find the epc for the home, if address1 and postcode are insufficient
|
||||
:param address1: string, propery's address line 1
|
||||
:param postcode: string, propery's postcode
|
||||
:param address2: string, optional, propery's address line 2
|
||||
:param address3: string, optional, propery's address line 3
|
||||
:param address4: string, optional, propery's address line 4
|
||||
"""
|
||||
|
||||
self.address1 = address1
|
||||
self.postcode = postcode
|
||||
self.address2 = address2
|
||||
self.address3 = address3
|
||||
self.address4 = address4
|
||||
|
||||
self.max_retries = max_retries if max_retries is not None else self.MAX_RETRIES
|
||||
|
||||
self.client = EpcClient(auth_token=os.getenv("EPC_AUTH_TOKEN"))
|
||||
|
||||
self.data = None
|
||||
|
||||
def search(self):
|
||||
# Get the EPC data with retries
|
||||
|
||||
for retry in range(self.max_retries):
|
||||
try:
|
||||
response = self.client.domestic.search(
|
||||
params={"address": self.address1, "postcode": self.postcode}
|
||||
)
|
||||
|
||||
if response:
|
||||
self.data = response
|
||||
return self.SUCCESS
|
||||
|
||||
if retry > 0:
|
||||
print("Failed previous attempt but retry successful")
|
||||
# If we got nothing, final try
|
||||
if not response:
|
||||
# TODO: Make a call to OS uprn service and get the address' uprn, just in case there is an
|
||||
# issue with how we are searching the api
|
||||
|
||||
return {
|
||||
"status": 204,
|
||||
"message": "no data",
|
||||
"error": None
|
||||
}
|
||||
|
||||
return {
|
||||
"status": 200,
|
||||
"message": "success",
|
||||
"error": None
|
||||
}
|
||||
|
||||
except Exception as e:
|
||||
if retry < self.max_retries - 1:
|
||||
# If not the last retry, wait for 3 seconds before retrying
|
||||
time.sleep(3)
|
||||
else:
|
||||
# If it's the last retry, we continue
|
||||
return {
|
||||
"status": 500,
|
||||
"message": "Could not retrieve EPC data",
|
||||
"error": str(e)
|
||||
}
|
||||
|
||||
@staticmethod
|
||||
def filter_rows(rows, property_type=None, address=None):
|
||||
"""
|
||||
This method should not be used when property_type and address are both not None
|
||||
:param rows:
|
||||
:param property_type:
|
||||
:param address:
|
||||
:return:
|
||||
"""
|
||||
# Given the results from the EPC api, attempts to reduce the number of rows
|
||||
uprns = {r["uprn"] for r in rows}
|
||||
|
||||
if (property_type is None) and (address is None):
|
||||
return rows
|
||||
|
||||
if len(uprns) == 1:
|
||||
return rows
|
||||
|
||||
logger.error("Multiple UPRNS found - we should use an alternate method of searching - TODO")
|
||||
if property_type is not None:
|
||||
# We can do a filter on the property type
|
||||
rows_filtered = [r for r in rows if r["property-type"] == property_type]
|
||||
|
||||
if rows_filtered:
|
||||
return rows_filtered
|
||||
|
||||
return rows
|
||||
|
||||
if address is not None:
|
||||
# We can do a filter on the property type
|
||||
best_match = process.extractOne(address, [r["address"] for r in rows], score_cutoff=0)
|
||||
rows_filtered = [r for r in rows if r["address"] == best_match[0]]
|
||||
|
||||
if rows_filtered:
|
||||
return rows_filtered
|
||||
|
||||
return rows
|
||||
|
||||
def retrieve(self, property_type=None, address=None):
|
||||
|
||||
"""
|
||||
Given a successful search, this method will format the data and return it
|
||||
:return:
|
||||
"""
|
||||
|
||||
if self.data is None:
|
||||
raise ValueError("data is missing, run search first")
|
||||
|
||||
rows = self.data["rows"]
|
||||
|
||||
# We perform some checks on the rows
|
||||
# Firstly, we should only have 1 urpn so if we have multiple, we'll need to filter down the
|
||||
# property further
|
||||
|
||||
rows = self.filter_rows(rows, property_type=property_type, address=None)
|
||||
rows = self.filter_rows(rows, property_type=None, address=address)
|
||||
|
||||
# We now check for a full sap epc:
|
||||
full_sap_epc = [r for r in rows if r["transaction-type"] == "new dwelling"]
|
||||
full_sap_epc = full_sap_epc[0] if full_sap_epc else {}
|
||||
|
||||
# Finally, we identify the newest epc and the rest, and then return
|
||||
newest_epc, older_epcs = self.filter_newest_epc(list_of_epcs=rows)
|
||||
|
||||
return newest_epc, older_epcs, full_sap_epc
|
||||
|
||||
@staticmethod
|
||||
def filter_newest_epc(list_of_epcs: List):
|
||||
newest_response = [
|
||||
r for r in list_of_epcs if
|
||||
r["lodgement-datetime"] == max([x["lodgement-datetime"] for x in list_of_epcs])
|
||||
]
|
||||
|
||||
if not newest_response:
|
||||
return {}, []
|
||||
|
||||
if len(newest_response) != 1:
|
||||
raise Exception("More than one result found for this address - investigate me")
|
||||
|
||||
older_epcs = [epc for epc in list_of_epcs if epc["lmk-key"] != newest_response[0]["lmk-key"]]
|
||||
|
||||
return newest_response[0], older_epcs
|
||||
|
|
@ -15,7 +15,7 @@ class PropertyValuation:
|
|||
100071264896: 128000,
|
||||
# Based on next door neighbour: https://themovemarket.com/tools/propertyprices/flat-2-queens-wood-house-219
|
||||
# -brandwood-road-birmingham-b14-6pu
|
||||
100070533688: 218000, # Based on Zoopla's estimation of 95 Tenby Road, which is also end terrace
|
||||
100070533688: 218000, # Based on Zoopla's estimation of 95 Tenby Road, which is also mid terrace
|
||||
100070505235: 344000, # Based on Zoopla's estimation of 131 School road, which is also semi-detached
|
||||
100070513306: 182000, # Based on Zoopla's estimation of 61 Simmons Drive
|
||||
100071306896: 77000, # Based on Flat 2 of 44 Wedgewood Road on Zoopla
|
||||
|
|
|
|||
593
etl/eligibility/Eligibility.py
Normal file
593
etl/eligibility/Eligibility.py
Normal file
|
|
@ -0,0 +1,593 @@
|
|||
from recommendations.recommendation_utils import convert_thickness_to_numeric
|
||||
from etl.epc_clean.epc_attributes.RoofAttributes import RoofAttributes
|
||||
from etl.epc_clean.epc_attributes.WallAttributes import WallAttributes
|
||||
from etl.epc_clean.epc_attributes.FloorAttributes import FloorAttributes
|
||||
|
||||
|
||||
class Eligibility:
|
||||
"""
|
||||
Given the epc data about a property, this class holds the logic for determining if the home
|
||||
is eligible for a specific retrofit measure.
|
||||
|
||||
For example, this could be whether the loft has insulation below a standardised threshold, or
|
||||
if it has an empty cavity
|
||||
|
||||
Further to this, this class is responsible for determining if the property is suitable for specific funding
|
||||
schemes
|
||||
"""
|
||||
|
||||
loft = None
|
||||
cavity = None
|
||||
solid_wall = None
|
||||
room_roof = None
|
||||
flat_roof = None
|
||||
suspended_floor = None
|
||||
solid_floor = None
|
||||
|
||||
# schemes based on Warmfront now
|
||||
gbis_warmfront = None
|
||||
eco4_warmfront = None
|
||||
# Schemes based on full eligibility
|
||||
gbis = None
|
||||
eco4 = None
|
||||
|
||||
# If the loft has less than 100mm of insulation, we classify the home has needing loft insulation
|
||||
LOFT_INSULATION_THRESHOLD = 100
|
||||
|
||||
# Because EPCS have different values for tenure, we need to remap them to a common set of values
|
||||
tenure_remap = {
|
||||
'NO DATA!': "unknown",
|
||||
'Not defined - use in the case of a new dwelling for which the intended tenure in not known. It is no':
|
||||
"unknown",
|
||||
'Owner-occupied': 'Owner-occupied',
|
||||
'Rented (private)': 'Rented (private)',
|
||||
'Rented (social)': 'Rented (social)',
|
||||
'owner-occupied': 'Owner-occupied',
|
||||
'rental (private)': 'Rented (private)',
|
||||
'rental (social)': 'Rented (social)',
|
||||
'unknown': "unknown",
|
||||
}
|
||||
|
||||
def __init__(self, epc, cleaned):
|
||||
self.epc = epc
|
||||
self.cleaned = cleaned
|
||||
|
||||
self.walls = self.parse_fabric("walls-description")
|
||||
self.roof = self.parse_fabric("roof-description")
|
||||
self.floor = self.parse_fabric("floor-description")
|
||||
|
||||
self.tenure = self.tenure_remap.get(self.epc["tenure"], None)
|
||||
|
||||
def parse_fabric(self, key):
|
||||
|
||||
# Get the cleaned version of the description
|
||||
remapped = [
|
||||
data for data in self.cleaned[key] if
|
||||
data["original_description"] == self.epc[key]
|
||||
]
|
||||
if remapped:
|
||||
return remapped[0]
|
||||
|
||||
if "SAP05:" in self.epc[key]:
|
||||
# This is a placeholder method for handling this but this will occur in the case of a very old
|
||||
# EPC and therefore we just skip
|
||||
self.epc[key] = "(assumed)"
|
||||
|
||||
if key == "walls-description":
|
||||
cleaner_cls = WallAttributes(self.epc[key])
|
||||
|
||||
elif key == "roof-description":
|
||||
cleaner_cls = RoofAttributes(self.epc[key])
|
||||
|
||||
elif key == "floor-description":
|
||||
cleaner_cls = FloorAttributes(self.epc[key])
|
||||
|
||||
else:
|
||||
raise ValueError("Invalid key")
|
||||
output = cleaner_cls.process()
|
||||
output["clean_description"] = cleaner_cls.description.replace("(assumed)", "").rstrip().capitalize()
|
||||
|
||||
return output
|
||||
|
||||
def loft_insulation(self, loft_thickness_threshold: int = None):
|
||||
"""
|
||||
Given the description of roof, this function determines whether or not the property is suitable for loft
|
||||
insulation. A loft existing insulation with a thickness below loft_thickness_threshold, is deemed to
|
||||
be suitable for loft insulation
|
||||
:param loft_thickness_threshold: Integer, Optional. If provided, any loft found with insulation lower than
|
||||
this thickness is deemed to be suitable for loft insulation. If this
|
||||
parameter is not provided, this method will default to the variable specified
|
||||
in LOFT_INSULATION_THRESHOLD
|
||||
"""
|
||||
|
||||
loft_thickness_threshold = (
|
||||
self.LOFT_INSULATION_THRESHOLD if loft_thickness_threshold is None else loft_thickness_threshold
|
||||
)
|
||||
|
||||
# We firstly check if the roof is a loft
|
||||
is_loft = self.roof["is_pitched"] and (not self.roof["is_roof_room"])
|
||||
|
||||
if not is_loft:
|
||||
self.loft = {
|
||||
"suitability": False,
|
||||
"thickness": None,
|
||||
"reason": "roof not loft"
|
||||
}
|
||||
return
|
||||
|
||||
# If it is a loft, we'll convert the textual thickenss to a numerical value we can easily use
|
||||
insulation_thickness = convert_thickness_to_numeric(
|
||||
string_thickness=self.roof["insulation_thickness"],
|
||||
is_pitched=self.roof["is_pitched"],
|
||||
is_flat=self.roof["is_flat"]
|
||||
)
|
||||
|
||||
if insulation_thickness > loft_thickness_threshold:
|
||||
# Insulation is already thick enough
|
||||
self.loft = {
|
||||
"suitability": False,
|
||||
"thickness": insulation_thickness,
|
||||
"reason": "existing insulation"
|
||||
}
|
||||
return
|
||||
|
||||
self.loft = {
|
||||
"suitability": True,
|
||||
"thickness": insulation_thickness,
|
||||
"reason": None
|
||||
}
|
||||
|
||||
def cavity_insulation(self):
|
||||
|
||||
"""
|
||||
Given the description of the walls, this function determines if the property is suitable for cavity wall
|
||||
insulation
|
||||
:return:
|
||||
"""
|
||||
|
||||
is_cavity = self.walls["is_cavity_wall"]
|
||||
is_empty = (not self.walls["is_filled_cavity"]) or (
|
||||
self.walls["is_as_built"] and self.walls["insulation_thickness"] not in ["average", "above average"]
|
||||
)
|
||||
is_partial_filled = (
|
||||
self.walls["is_as_built"] and self.walls["insulation_thickness"] not in ["below average"]
|
||||
)
|
||||
|
||||
is_unfilled_cavity = is_cavity and is_empty
|
||||
is_partial_filled_cavity = is_cavity and is_partial_filled
|
||||
|
||||
if is_unfilled_cavity:
|
||||
self.cavity = {
|
||||
"suitability": True,
|
||||
"type": "empty",
|
||||
}
|
||||
return
|
||||
|
||||
if is_partial_filled_cavity:
|
||||
self.cavity = {
|
||||
"suitability": True,
|
||||
"type": "partial"
|
||||
}
|
||||
return
|
||||
|
||||
self.cavity = {
|
||||
"suitability": False,
|
||||
"type": "full"
|
||||
}
|
||||
|
||||
def solid_wall_insulation(self):
|
||||
"""
|
||||
Given the description of the walls, this function determines if the property is suitable for solid wall
|
||||
insulation
|
||||
:return:
|
||||
"""
|
||||
|
||||
is_solid = self.walls["is_solid_brick"]
|
||||
is_insulated = self.walls["insulation_thickness"] in ["average", "above average"]
|
||||
|
||||
if is_solid and is_insulated:
|
||||
self.solid_wall = {
|
||||
"suitability": True,
|
||||
}
|
||||
return
|
||||
|
||||
self.solid_wall = {
|
||||
"suitability": False,
|
||||
}
|
||||
|
||||
def room_roof_insulation(self):
|
||||
is_room_roof = self.roof["is_roof_room"]
|
||||
|
||||
insulation_thickness = convert_thickness_to_numeric(
|
||||
self.roof["insulation_thickness"],
|
||||
self.roof["is_pitched"],
|
||||
self.roof["is_flat"]
|
||||
)
|
||||
|
||||
self.room_roof = {
|
||||
"suitability": is_room_roof and insulation_thickness == 0,
|
||||
"thickness": insulation_thickness
|
||||
}
|
||||
|
||||
def flat_roof_insulation(self):
|
||||
is_flat = self.roof["is_flat"]
|
||||
insulation_thickness = convert_thickness_to_numeric(
|
||||
self.roof["insulation_thickness"],
|
||||
self.roof["is_pitched"],
|
||||
self.roof["is_flat"]
|
||||
)
|
||||
|
||||
self.flat_roof = {
|
||||
"suitability": is_flat and insulation_thickness <= 100,
|
||||
"thickness": insulation_thickness
|
||||
}
|
||||
|
||||
def suspended_floor_insulation(self):
|
||||
is_suspended = self.floor["is_suspended"]
|
||||
is_insulated = self.floor["insulation_thickness"] in ["average", "above average"]
|
||||
|
||||
self.suspended_floor = {
|
||||
"suitability": is_suspended and (not is_insulated),
|
||||
}
|
||||
return
|
||||
|
||||
def solid_floor_insulation(self):
|
||||
is_solid = self.floor["is_solid"]
|
||||
is_insulated = self.floor["insulation_thickness"] in ["average", "above average"]
|
||||
|
||||
self.solid_floor = {
|
||||
"suitability": is_solid and (not is_insulated),
|
||||
}
|
||||
return
|
||||
|
||||
def check_gbis_warmfront(self):
|
||||
"""
|
||||
The Eligibility criteria for the Great British Insulation Scheme (GBIS) can be found here:
|
||||
https://www.ofgem.gov.uk/environmental-and-social-schemes/great-british-insulation-scheme/homeowners-and-tenants
|
||||
|
||||
At a high level, the criteria is the following:
|
||||
- The home must be within council tax bands A-D in England, A-E in Scotland, A-E in Wales
|
||||
- It must have an EPC rating of D or below
|
||||
|
||||
For the moment, we won't check whether a property is in the correct council tax band. There is likely
|
||||
to be public data for this since there is a govenment website which allows you to search for properties:
|
||||
https://www.gov.uk/council-tax-bands
|
||||
This data is possibly contained on the council tax valuation list but it remains to be see (seems unlikely)
|
||||
whether or not the data is openly accessible
|
||||
https://www.gov.uk/government/statistics/quality-assurance-of-administrative-data-in-the-uk-house-price-index
|
||||
/valuation-office-agency-council-tax-valuation-lists
|
||||
|
||||
Currently, we tailor this module to the Warmfront Team and their delivery capabilities (both practically and
|
||||
commercially). Therefore, we will check:
|
||||
1) Whether the property is an EPC D or below
|
||||
2) Whether the property is suitible for cavity wall insulation
|
||||
|
||||
However, GBIS applies to many insulation measures, which can be seen in the ofgem document
|
||||
|
||||
GBIS does not have any minimum upgrade requirement so we don't need to simulate the post retrofit sap score
|
||||
using the machine learning model
|
||||
"""
|
||||
|
||||
# Check if the property is suitable for cavity wall
|
||||
self.cavity_insulation()
|
||||
self.loft_insulation()
|
||||
|
||||
self.gbis_warmfront = (self.cavity["suitability"]) and (
|
||||
int(self.epc["current-energy-efficiency"]) <= 68
|
||||
)
|
||||
|
||||
def check_eco4_warmfront(self, post_retrofit_sap=None):
|
||||
"""
|
||||
This funciton will check if the property is eligible for funding under the ECO4 scheme
|
||||
|
||||
For the moment, this function will consider just measures that can be implemented by the
|
||||
Warmfront team, therefore we will only check if a property has an uninsulated loft AND uninsulated
|
||||
cavity
|
||||
|
||||
We use Ofgem's V1.1 ECO 4 guidance document for the conditions under which a property is elligible
|
||||
This document can be found here:
|
||||
https://www.ofgem.gov.uk/sites/default/files/2023-02/ECO4%20Delivery%20Guidance%20v1.1%20%281%29.pdf
|
||||
|
||||
The conditions (to be reviewed) to be eligible for retrofit, under ECO4, are the following:
|
||||
1) The property is a social home (This is assumed prior to this function as this code will often
|
||||
be run on property lists provided by a HA
|
||||
2) The property is an EPC E or below
|
||||
3) The property has an unfilled cavity and uninsulated loft
|
||||
4) After retrofit, the property will hit an EPC C
|
||||
|
||||
Note: This criteria will likely be adjusted depending on the properties that can be served right now
|
||||
|
||||
If the post_retrofit_sap is provided, then is this value is 69 or higher, the property will be deemed
|
||||
to be eligible for ECO4 funding. If the post_retrofit_sap is not provided, the property will be
|
||||
deemed to be eligible, conditional to the post_retrofit_sap score check
|
||||
:param post_retrofit_sap:
|
||||
:return:
|
||||
"""
|
||||
|
||||
current_sap = int(self.epc["current-energy-efficiency"])
|
||||
if current_sap > 54:
|
||||
self.eco4_warmfront = {
|
||||
"eligible": False,
|
||||
"message": "sap too high"
|
||||
}
|
||||
return
|
||||
|
||||
self.cavity_insulation()
|
||||
self.loft_insulation()
|
||||
|
||||
# make sure conditions 2 and 3 are true
|
||||
is_eligible = self.cavity["suitability"] & self.loft["suitability"]
|
||||
|
||||
if post_retrofit_sap is None:
|
||||
self.eco4_warmfront = {
|
||||
"eligible": is_eligible,
|
||||
"message": "subject to post retrofit sap"
|
||||
}
|
||||
return
|
||||
|
||||
is_eligible = is_eligible & (post_retrofit_sap >= 69)
|
||||
|
||||
self.eco4_warmfront = {
|
||||
"eligible": is_eligible,
|
||||
"message": None
|
||||
}
|
||||
return
|
||||
|
||||
def check_gbis(self):
|
||||
|
||||
"""
|
||||
The Eligibility criteria for the Great British Insulation Scheme (GBIS) can be found here:
|
||||
https://www.ofgem.gov.uk/environmental-and-social-schemes/great-british-insulation-scheme/homeowners-and-tenants
|
||||
|
||||
Full delivery guidance and be downloaded here:
|
||||
https://www.ofgem.gov.uk/sites/default/files/2023-08/Great%20British%20Insulation%20Scheme%20Delivery
|
||||
%20Guidance%20V101693416860968.pdf
|
||||
|
||||
For social housing, the criteria is the following:
|
||||
|
||||
If the property is currently an EPC D:
|
||||
- It's valid for innovation measures only but not a heating control measure
|
||||
- The property must be rented at below the market rate. All eligible social housing is treated based on the
|
||||
low income group, therefore the tennant must be in receipt of one the eligible benefits
|
||||
|
||||
If the property is currently an EPC E or below:
|
||||
- It's valid for all eligible insulation measures
|
||||
- The property must be rented at below the market rate. All eligible social housing is treated based on the
|
||||
low income group, therefore the tennant must be in receipt of one the eligible benefits
|
||||
|
||||
From GBIS guidance document:
|
||||
Determining whether the premises are let below market rate
|
||||
|
||||
3.101 Social housing under this provision will only be eligible where the housing is let below
|
||||
the market rate. The supplier must produce a declaration signed by a social landlord
|
||||
providing confirmation that the social housing premises are let below the market rate,
|
||||
or where the premises are currently void, have previously and will be let below the
|
||||
market rate. The declaration to be signed by a social landlord is included within the
|
||||
Eligibility and Pre-Retrofit Declaration form. This declaration form must be retained by
|
||||
suppliers and be available on request for audit purposes.
|
||||
|
||||
3.102 Where social housing is let at or above the market rate, the property can be treated as
|
||||
a private domestic premises, where the occupant meets the eligibility requirements.
|
||||
See section on PRS from paragraph 1.13 for more information.
|
||||
|
||||
This method searches ALL of the possible measures that can be implemented under GBIS. This includes:
|
||||
- cavity wall (including party wall)
|
||||
- loft
|
||||
- solid wall
|
||||
- pitched roof
|
||||
- flat roof
|
||||
- under-floor
|
||||
- solid floor
|
||||
- park home
|
||||
- room-in-roof
|
||||
|
||||
:return:
|
||||
"""
|
||||
|
||||
self.cavity_insulation()
|
||||
self.loft_insulation()
|
||||
self.solid_wall_insulation()
|
||||
self.room_roof_insulation()
|
||||
self.flat_roof_insulation()
|
||||
self.suspended_floor_insulation()
|
||||
self.solid_floor_insulation()
|
||||
|
||||
current_sap = int(self.epc["current-energy-efficiency"])
|
||||
is_below_e = current_sap <= 54
|
||||
is_below_c = current_sap <= 68
|
||||
|
||||
needs_measure = (
|
||||
self.cavity["suitability"] or
|
||||
self.loft["suitability"] or
|
||||
self.solid_wall["suitability"] or
|
||||
self.room_roof["suitability"] or
|
||||
self.flat_roof["suitability"] or
|
||||
self.suspended_floor["suitability"] or
|
||||
self.solid_floor["suitability"]
|
||||
)
|
||||
|
||||
if self.tenure == "Rented (social)":
|
||||
|
||||
if is_below_c and (not is_below_e):
|
||||
# this is a placeholder methodology
|
||||
self.gbis = {
|
||||
"eligible": int(self.epc["potential-energy-efficiency"]) > 68,
|
||||
"message": "contingent on innovation measure delivery"
|
||||
}
|
||||
return
|
||||
elif is_below_e:
|
||||
self.gbis = {
|
||||
"eligible": needs_measure,
|
||||
"message": "eligible under fabric measure"
|
||||
}
|
||||
return
|
||||
else:
|
||||
self.gbis = {
|
||||
"eligible": False,
|
||||
"message": "not eligible"
|
||||
}
|
||||
return
|
||||
|
||||
elif self.tenure == "Rented (private)":
|
||||
self.gbis = {
|
||||
"eligible": is_below_c and needs_measure,
|
||||
"message": "eligible under fabric measure"
|
||||
}
|
||||
return
|
||||
elif self.tenure == "Owner-occupied":
|
||||
self.gbis = {
|
||||
"eligible": False,
|
||||
"message": "Out-of-scope"
|
||||
}
|
||||
return
|
||||
|
||||
elif (self.tenure is None) or self.tenure == "unknown":
|
||||
self.gbis = {
|
||||
"eligible": needs_measure,
|
||||
"message": "unknown tenure"
|
||||
}
|
||||
return
|
||||
else:
|
||||
raise ValueError("Implement me other tenure types")
|
||||
|
||||
def check_eco4(self):
|
||||
"""
|
||||
Because ECO4 supports nearly all measures. If we have commercial agreements in place then a large number
|
||||
of homes would be eligible for eco funding, if identified.
|
||||
|
||||
These are the eligibility criteria we consider for this process:
|
||||
Privately rented, Help to heat group
|
||||
- Sap E-G
|
||||
- Must receive one of solid wall insulation, first time central heating or district heating control
|
||||
- The property must already have cavity walls and roof insulated
|
||||
|
||||
Social Housing, SAP D
|
||||
- Innovation measures and insulation measures to meet the minimum insulation requirement
|
||||
- Improvement to at least band C
|
||||
- Fabric measures
|
||||
- If receiving any heating measures, must have at least one insulation measure first
|
||||
|
||||
Social Housing, SAP E-G
|
||||
- Insulation measures, first time central heating, renewable heating, district heating connection,
|
||||
innovation measures
|
||||
- Improvement to D (F & G properties) or C (E properties)
|
||||
- If receiving any heating measure, must already have cavity and roof insulation
|
||||
|
||||
Privately rented, ECO4 Flex route 1, 2, 3, 4
|
||||
- Must have SAP E-G
|
||||
- Most measures eligible, but must receive one of solid wall insulation, first time central heating,
|
||||
renewable heating and district heating control
|
||||
- Improvement to D (F & G properties) or C (E properties)
|
||||
- All homes receiving heating measures must first have insulated cavity/roof
|
||||
|
||||
|
||||
The flex routes are given here:
|
||||
https://so-eco.co.uk/what-is-eco4-flex/#:~:text=One%20way%20to%20gain%20ECO4,
|
||||
including%20elderly%20residents%20and%20lodgers.
|
||||
|
||||
:return:
|
||||
"""
|
||||
|
||||
self.cavity_insulation()
|
||||
self.loft_insulation()
|
||||
self.solid_wall_insulation()
|
||||
self.room_roof_insulation()
|
||||
self.flat_roof_insulation()
|
||||
self.suspended_floor_insulation()
|
||||
self.solid_floor_insulation()
|
||||
|
||||
current_sap = int(self.epc["current-energy-efficiency"])
|
||||
is_below_e = current_sap <= 54
|
||||
is_below_c = current_sap <= 68
|
||||
sap_potential = int(self.epc["potential-energy-efficiency"])
|
||||
|
||||
first_time_central_heating = "boiler" not in self.epc["mainheat-description"].lower()
|
||||
|
||||
needs_fabric_measure = (
|
||||
self.cavity["suitability"] or
|
||||
self.loft["suitability"] or
|
||||
self.solid_wall["suitability"] or
|
||||
self.room_roof["suitability"] or
|
||||
self.flat_roof["suitability"] or
|
||||
self.suspended_floor["suitability"] or
|
||||
self.solid_floor["suitability"]
|
||||
)
|
||||
|
||||
if current_sap <= 38 and sap_potential >= 55:
|
||||
# sap needs to get to at least a D
|
||||
expected_to_meet_upgrades = True
|
||||
elif current_sap <= 68 and sap_potential >= 69:
|
||||
# sap needs to get to at least a C
|
||||
expected_to_meet_upgrades = True
|
||||
else:
|
||||
expected_to_meet_upgrades = False
|
||||
|
||||
if self.tenure == "Rented (social)":
|
||||
if is_below_c and (not is_below_e) and expected_to_meet_upgrades:
|
||||
# If the property is a D, then it's eligible under innovation measures but requires improvement to a
|
||||
# band C
|
||||
self.eco4 = {
|
||||
"eligible": True,
|
||||
"message": "eligible under innovation measure and improvement to band C"
|
||||
}
|
||||
elif is_below_e and expected_to_meet_upgrades:
|
||||
# If the property is an E or below, then it's eligible under fabric measures or heating/innovation
|
||||
# measures
|
||||
|
||||
message = "eligible under fabric measures, with sufficient post retrofit sap improvement" if (
|
||||
needs_fabric_measure) else (
|
||||
"eligible under heating and innovation measures, with sufficient post retrofit sap improvement"
|
||||
)
|
||||
|
||||
self.eco4 = {"eligible": True, "message": message}
|
||||
else:
|
||||
if (current_sap <= 68) and expected_to_meet_upgrades:
|
||||
raise ValueError("something is wrong")
|
||||
self.eco4 = {
|
||||
"eligible": False,
|
||||
"message": "not eligible, above EPC C"
|
||||
}
|
||||
|
||||
return
|
||||
|
||||
if self.tenure == 'Rented (private)':
|
||||
# For private homes, the property needs to be an E or below
|
||||
|
||||
# For private homes, the cavity must be filled and the roof insulated
|
||||
cavity_filled = not self.cavity["suitability"]
|
||||
roof_insulated = (not self.loft["suitability"]) and (not self.room_roof["suitability"]) and (
|
||||
not self.flat_roof["suitability"])
|
||||
|
||||
if is_below_e and cavity_filled and roof_insulated and expected_to_meet_upgrades:
|
||||
|
||||
if self.solid_wall["suitability"]:
|
||||
self.eco4 = {
|
||||
"eligible": True,
|
||||
"message": "eligible under solid wall insulation, conditional on post retrofit sap and help "
|
||||
"to heat/ECO flex route"
|
||||
}
|
||||
elif first_time_central_heating:
|
||||
|
||||
self.eco4 = {
|
||||
"eligible": True,
|
||||
"message": "eligible under first time central heating, conditional on post retrofit sap and "
|
||||
"help to heat/ECO flex route"
|
||||
}
|
||||
else:
|
||||
self.eco4 = {
|
||||
"eligible": False,
|
||||
"message": "not eligible at this time"
|
||||
}
|
||||
|
||||
return
|
||||
|
||||
else:
|
||||
self.eco4 = {
|
||||
"eligible": False,
|
||||
"message": "not eligible at this time, EPC too high"
|
||||
}
|
||||
|
||||
self.eco4 = {
|
||||
"eligible": False,
|
||||
"message": "Out of scope"
|
||||
}
|
||||
6
etl/eligibility/README.md
Normal file
6
etl/eligibility/README.md
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
# Eligiblity
|
||||
|
||||
This codebase is responsible for determining if properties look like they would be
|
||||
eligible for retrofit funding schemes. In order to do this, we use our SAP ML model, to score
|
||||
what the property would look like after a retrofit. We then compare this to the eligibility
|
||||
criteria of various schemes, to determing if the property looks likely to be eligible for funding.
|
||||
0
etl/eligibility/__init__.py
Normal file
0
etl/eligibility/__init__.py
Normal file
664
etl/eligibility/ha_15_32/HA 15 Identified addresses.csv
Normal file
664
etl/eligibility/ha_15_32/HA 15 Identified addresses.csv
Normal file
|
|
@ -0,0 +1,664 @@
|
|||
Housing Association,No.,Address,Postcode
|
||||
HA15,2,2 Lander Road,HP19 9TT
|
||||
HA15,4,4 Lander Road,HP19 9TT
|
||||
HA15,5,5 Lander Road,HP19 9TT
|
||||
HA15,12,12 Lander Road,HP19 9TT
|
||||
HA15,14,14 Lander Road,HP19 9TT
|
||||
HA15,18,18 Lander Road,HP19 9TT
|
||||
HA15,22,22 Lander Road,HP19 9TT
|
||||
HA15,1,1 Eeles Close,HP19 9TU
|
||||
HA15,2,2 Eeles Close,HP19 9TU
|
||||
HA15,3,3 Eeles Close,HP19 9TU
|
||||
HA15,12,12 Eeles Close,HP19 9TU
|
||||
HA15,15,15 Eeles Close,HP19 9TU
|
||||
HA15,2,2 Dicks Way,HP19 9UA
|
||||
HA15,4,4 Dicks Way,HP19 9UA
|
||||
HA15,5,5 Dicks Way,HP19 9UA
|
||||
HA15,6,6 Dicks Way,HP19 9UA
|
||||
HA15,8,8 Dicks Way,HP19 9UA
|
||||
HA15,9,9 Dicks Way,HP19 9UA
|
||||
HA15,14,14 Dicks Way,HP19 9UA
|
||||
HA15,15,15 Dicks Way,HP19 9UA
|
||||
HA15,17,17 Dicks Way,HP19 9UA
|
||||
HA15,20,20 Dicks Way,HP19 9UA
|
||||
HA15,26,26 Dicks Way,HP19 9UA
|
||||
HA15,28,28 Dicks Way,HP19 9UA
|
||||
HA15,4,4 Fletcher Close,HP19 9UB
|
||||
HA15,5,5 Fletcher Close,HP19 9UB
|
||||
HA15,24,24 Fletcher Close,HP19 9UB
|
||||
HA15,25,25 Fletcher Close,HP19 9UB
|
||||
HA15,27,27 Fletcher Close,HP19 9UB
|
||||
HA15,28,28 Fletcher Close,HP19 9UB
|
||||
HA15,29,29 Fletcher Close,HP19 9UB
|
||||
HA15,31,31 Fletcher Close,HP19 9UB
|
||||
HA15,32,32 Fletcher Close,HP19 9UB
|
||||
HA15,33,33 Fletcher Close,HP19 9UB
|
||||
HA15,34,"34 Fletcher Close,Aylesbury,Bucks",HP19 9UB
|
||||
HA15,1,1 Grimmer Close,HP19 9UD
|
||||
HA15,11,11 Grimmer Close,HP19 9UD
|
||||
HA15,14,14 Grimmer Close,HP19 9UD
|
||||
HA15,15,15 Grimmer Close,HP19 9UD
|
||||
HA15,17,17 Grimmer Close,HP19 9UD
|
||||
HA15,18,18 Grimmer Close,HP19 9UD
|
||||
HA15,21,21 Grimmer Close,HP19 9UD
|
||||
HA15,23,23 Grimmer Close,HP19 9UD
|
||||
HA15,24,24 Grimmer Close,HP19 9UD
|
||||
HA15,28,28 Grimmer Close,HP19 9UD
|
||||
HA15,30,30 Grimmer Close,HP19 9UD
|
||||
HA15,1,1 Vincent Road,HP19 9UN
|
||||
HA15,6,6 Vincent Road,HP19 9UN
|
||||
HA15,10,10 Vincent Road,HP19 9UN
|
||||
HA15,12,12 Vincent Road,HP19 9UN
|
||||
HA15,13,13 Vincent Road,HP19 9UN
|
||||
HA15,16,16 Vincent Road,HP19 9UN
|
||||
HA15,21,21 Vincent Road,HP19 9UN
|
||||
HA15,24,24 Vincent Road,HP19 9UN
|
||||
HA15,26,26 Vincent Road,HP19 9UN
|
||||
HA15,27,27 Vincent Road,HP19 9UN
|
||||
HA15,32,32 Vincent Road,HP19 9UN
|
||||
HA15,1,1 Reading Close,HP19 9UW
|
||||
HA15,2,2 Reading Close,HP19 9UW
|
||||
HA15,3,3 Reading Close,HP19 9UW
|
||||
HA15,4,4 Reading Close,HP19 9UW
|
||||
HA15,5,5 Reading Close,HP19 9UW
|
||||
HA15,6,6 Reading Close,HP19 9UW
|
||||
HA15,7,7 Reading Close,HP19 9UW
|
||||
HA15,9,9 Reading Close,HP19 9UW
|
||||
HA15,10,10 Reading Close,HP19 9UW
|
||||
HA15,6,6 Mary Mac Manus Drive,MK18 1UN
|
||||
HA15,8,8 Mary Mac Manus Drive,MK18 1UN
|
||||
HA15,10,10 Mary Mac Manus Drive,MK18 1UN
|
||||
HA15,2,"2 Rosebery Road Aston Clinton, Aylesbury",HP22 5JY
|
||||
HA15,7,"7 Rosebery Road Aston Clinton, Aylesbury",HP22 5JY
|
||||
HA15,9,"9 Rosebery Road Aston Clinton, Aylesbury",HP22 5JY
|
||||
HA15,11,"11 Rosebery Road Aston Clinton, Aylesbury",HP22 5JY
|
||||
HA15,12,"12 Rosebery Road Aston Clinton, Aylesbury",HP22 5JY
|
||||
HA15,16,"16 Rosebery Road Aston Clinton, Aylesbury",HP22 5JY
|
||||
HA15,17,"17 Rosebery Road Aston Clinton, Aylesbury",HP22 5JY
|
||||
HA15,26,"26 Rosebery Road Aston Clinton, Aylesbury",HP22 5JY
|
||||
HA15,38,"38 Rosebery Road Aston Clinton, Aylesbury",HP22 5JY
|
||||
HA15,41,"41 Rosebery Road Aston Clinton, Aylesbury",HP22 5JY
|
||||
HA15,25,"25 New Road Weston Turville, Aylesbury",HP22 5RA
|
||||
HA15,27,"27 New Road Weston Turville, Aylesbury",HP22 5RA
|
||||
HA15,29,"29 New Road Weston Turville, Aylesbury",HP22 5RA
|
||||
HA15,31,"31 New Road Weston Turville, Aylesbury",HP22 5RA
|
||||
HA15,37,"37 New Road Weston Turville, Aylesbury",HP22 5RA
|
||||
HA15,39,"39 New Road Weston Turville, Aylesbury",HP22 5RA
|
||||
HA15,5,"5 Walton Place Weston Turville, Aylesbury",HP22 5RB
|
||||
HA15,9,"9 Walton Place Weston Turville, Aylesbury",HP22 5RB
|
||||
HA15,18,"18 Walton Place Weston Turville, Aylesbury",HP22 5RB
|
||||
HA15,21,"21 Walton Place Weston Turville, Aylesbury",HP22 5RD
|
||||
HA15,36,"36 Walton Place Weston Turville, Aylesbury",HP22 5RD
|
||||
HA15,42,"42 Walton Place Weston Turville, Aylesbury",HP22 5RD
|
||||
HA15,46,"46 Walton Place Weston Turville, Aylesbury",HP22 5RD
|
||||
HA15,76,"76 Worlds End Lane Weston Turville, Aylesbury",HP22 5RX
|
||||
HA15,78,"78 Worlds End Lane Weston Turville, Aylesbury",HP22 5RX
|
||||
HA15,82,"82 Worlds End Lane Weston Turville, Aylesbury",HP22 5RX
|
||||
HA15,84,"84 Worlds End Lane Weston Turville, Aylesbury",HP22 5RX
|
||||
HA15,86,"86 Worlds End Lane Weston Turville, Aylesbury",HP22 5RX
|
||||
HA15,88,"88 Worlds End Lane Weston Turville, Aylesbury",HP22 5RX
|
||||
HA15,64,"64 Halton Lane Wendover, Aylesbury",HP22 6AZ
|
||||
HA15,66,"66 Halton Lane Wendover, Aylesbury",HP22 6AZ
|
||||
HA15,68,"68 Halton Lane Wendover, Aylesbury",HP22 6AZ
|
||||
HA15,70,"70 Halton Lane Wendover, Aylesbury",HP22 6AZ
|
||||
HA15,8,"8 South Street Wendover, Aylesbury",HP22 6EF
|
||||
HA15,2,"2 Barlow Road Wendover, Aylesbury",HP22 6HP
|
||||
HA15,4,"4 Barlow Road Wendover, Aylesbury",HP22 6HP
|
||||
HA15,14,"14 Barlow Road Wendover, Aylesbury",HP22 6HP
|
||||
HA15,15,"15 Barlow Road Wendover, Aylesbury",HP22 6HP
|
||||
HA15,16,"16 Barlow Road Wendover, Aylesbury",HP22 6HP
|
||||
HA15,28,"28 Barlow Road Wendover, Aylesbury",HP22 6HP
|
||||
HA15,1,"1 Woollerton Crescent Wendover, Aylesbury",HP22 6HT
|
||||
HA15,5,"5 Woollerton Crescent Wendover, Aylesbury",HP22 6HT
|
||||
HA15,7,"7 Woollerton Crescent Wendover, Aylesbury",HP22 6HT
|
||||
HA15,8,"8 Woollerton Crescent Wendover, Aylesbury",HP22 6HT
|
||||
HA15,9,"9 Woollerton Crescent Wendover, Aylesbury",HP22 6HT
|
||||
HA15,13,"13 Woollerton Crescent Wendover, Aylesbury",HP22 6HT
|
||||
HA15,16,"16 Woollerton Crescent Wendover, Aylesbury",HP22 6HT
|
||||
HA15,20,"20 Woollerton Crescent Wendover, Aylesbury",HP22 6HT
|
||||
HA15,24,"24 Woollerton Crescent Wendover, Aylesbury",HP22 6HT
|
||||
HA15,26,"26 Woollerton Crescent Wendover, Aylesbury",HP22 6HT
|
||||
HA15,28,"28 Woollerton Crescent Wendover, Aylesbury",HP22 6HT
|
||||
HA15,38,"38 Woollerton Crescent Wendover, Aylesbury",HP22 6HT
|
||||
HA15,44,"44 Woollerton Crescent Wendover, Aylesbury",HP22 6HT
|
||||
HA15,50,"50 Woollerton Crescent Wendover, Aylesbury",HP22 6HT
|
||||
HA15,15,"15 Hampden Road Wendover, Aylesbury",HP22 6HU
|
||||
HA15,18,"18 Hampden Road Wendover, Aylesbury",HP22 6HU
|
||||
HA15,22,"22 Hampden Road Wendover, Aylesbury",HP22 6HU
|
||||
HA15,26,"26 Hampden Road Wendover, Aylesbury",HP22 6HU
|
||||
HA15,28,"28 Hampden Road Wendover, Aylesbury",HP22 6HU
|
||||
HA15,25,"25 Hampden Road Wendover, Aylesbury",HP22 6HX
|
||||
HA15,27,"27 Hampden Road Wendover, Aylesbury",HP22 6HX
|
||||
HA15,31,"31 Hampden Road Wendover, Aylesbury",HP22 6HX
|
||||
HA15,34,"34 Hampden Road Wendover, Aylesbury",HP22 6HX
|
||||
HA15,36,"36 Hampden Road Wendover, Aylesbury",HP22 6HX
|
||||
HA15,38,"38 Hampden Road Wendover, Aylesbury",HP22 6HX
|
||||
HA15,5,"5 Gainsborough Road, Aylesbury",HP21 9AZ
|
||||
HA15,1,"1 Dart Close, Aylesbury",HP21 9NP
|
||||
HA15,1,"1 Wingrave Road Aston Abbotts, Aylesbury",HP22 4LT
|
||||
HA15,3,"3 Wingrave Road Aston Abbotts, Aylesbury",HP22 4LT
|
||||
HA15,5,"5 Wingrave Road Aston Abbotts, Aylesbury",HP22 4LT
|
||||
HA15,82,"82 Winslow Road Wingrave, Aylesbury",HP22 4QB
|
||||
HA15,84,"84 Winslow Road Wingrave, Aylesbury",HP22 4QB
|
||||
HA15,106,"106 Winslow Road Wingrave, Aylesbury",HP22 4QB
|
||||
HA15,125,"125 Winslow Road Wingrave, Aylesbury",HP22 4QB
|
||||
HA15,19,"19 Abbotts Way Wingrave, Aylesbury",HP22 4QF
|
||||
HA15,37,"37 Abbotts Way Wingrave, Aylesbury",HP22 4QF
|
||||
HA15,41,"41 Abbotts Way Wingrave, Aylesbury",HP22 4QF
|
||||
HA15,43,"43 Abbotts Way Wingrave, Aylesbury",HP22 4QF
|
||||
HA15,2,"2 Chiltern Road Wingrave, Aylesbury",HP22 4QQ
|
||||
HA15,5,"5 Chiltern Road Wingrave, Aylesbury",HP22 4QQ
|
||||
HA15,10,"10 Chiltern Road Wingrave, Aylesbury",HP22 4QQ
|
||||
HA15,12,"12 Chiltern Road Wingrave, Aylesbury",HP22 4QQ
|
||||
HA15,19,"19 Chiltern Road Wingrave, Aylesbury",HP22 4QQ
|
||||
HA15,21,"21 Chiltern Road Wingrave, Aylesbury",HP22 4QQ
|
||||
HA15,22,"22 Chiltern Road Wingrave, Aylesbury",HP22 4QQ
|
||||
HA15,31,"31 Chiltern Road Wingrave, Aylesbury",HP22 4QQ
|
||||
HA15,32,"32 Chiltern Road Wingrave, Aylesbury",HP22 4QQ
|
||||
HA15,33,"33 Chiltern Road Wingrave, Aylesbury",HP22 4QQ
|
||||
HA15,34,"34 Chiltern Road Wingrave, Aylesbury",HP22 4QQ
|
||||
HA15,35,"35 Chiltern Road Wingrave, Aylesbury",HP22 4QQ
|
||||
HA15,37,"37 Chiltern Road Wingrave, Aylesbury",HP22 4QQ
|
||||
HA15,38,"38 Chiltern Road Wingrave, Aylesbury",HP22 4QQ
|
||||
HA15,40,"40 Chiltern Road Wingrave, Aylesbury",HP22 4QQ
|
||||
HA15,42,"42 Chiltern Road Wingrave, Aylesbury",HP22 4QQ
|
||||
HA15,23,"23 Great Lane Bierton, Aylesbury",HP22 5DE
|
||||
HA15,25,"25 Great Lane Bierton, Aylesbury",HP22 5DE
|
||||
HA15,35,"35 Great Lane Bierton, Aylesbury",HP22 5DE
|
||||
HA15,37,"37 Great Lane Bierton, Aylesbury",HP22 5DE
|
||||
HA15,61,"61 Weston Road Aston Clinton, Aylesbury",HP22 5EJ
|
||||
HA15,65,"65 Weston Road Aston Clinton, Aylesbury",HP22 5EJ
|
||||
HA15,67,"67 Weston Road Aston Clinton, Aylesbury",HP22 5EJ
|
||||
HA15,69,"69 Weston Road Aston Clinton, Aylesbury",HP22 5EJ
|
||||
HA15,28,"28a Tring Road Wendover, Aylesbury",HP22 6NT
|
||||
HA15,38,"38a Tring Road Wendover, Aylesbury",HP22 6NT
|
||||
HA15,14,"14 Tring Road Wendover, Aylesbury",HP22 6NT
|
||||
HA15,34,"34 Tring Road Wendover, Aylesbury",HP22 6NT
|
||||
HA15,36,"36 Tring Road Wendover, Aylesbury",HP22 6NT
|
||||
HA15,64,"64 Tring Road Wendover, Aylesbury",HP22 6NX
|
||||
HA15,68,"68 Tring Road Wendover, Aylesbury",HP22 6NX
|
||||
HA15,70,"70 Tring Road Wendover, Aylesbury",HP22 6NX
|
||||
HA15,74,"74 Tring Road Wendover, Aylesbury",HP22 6NX
|
||||
HA15,76,"76 Tring Road Wendover, Aylesbury",HP22 6NX
|
||||
HA15,78,"78 Tring Road Wendover, Aylesbury",HP22 6NX
|
||||
HA15,80,"80 Tring Road Wendover, Aylesbury",HP22 6NX
|
||||
HA15,90,"90 Tring Road Wendover, Aylesbury",HP22 6NX
|
||||
HA15,92,"92 Tring Road Wendover, Aylesbury",HP22 6NX
|
||||
HA15,100,"100 Tring Road Wendover, Aylesbury",HP22 6NX
|
||||
HA15,104,"104 Tring Road Wendover, Aylesbury",HP22 6NX
|
||||
HA15,106,"106 Tring Road Wendover, Aylesbury",HP22 6NX
|
||||
HA15,108,"108 Tring Road Wendover, Aylesbury",HP22 6NX
|
||||
HA15,114,"114 Tring Road Wendover, Aylesbury",HP22 6NX
|
||||
HA15,38,"38 The Beeches Wendover, Aylesbury",HP22 6PB
|
||||
HA15,49,"49 The Beeches Wendover, Aylesbury",HP22 6PB
|
||||
HA15,54,"54 The Beeches Wendover, Aylesbury",HP22 6PB
|
||||
HA15,64,"64 The Beeches Wendover, Aylesbury",HP22 6PB
|
||||
HA15,1,"1 Church End Edlesborough, Dunstable",LU6 2EP
|
||||
HA15,2,"2 Church End Edlesborough, Dunstable",LU6 2EP
|
||||
HA15,5,"5 Church End Edlesborough, Dunstable",LU6 2EP
|
||||
HA15,6,"6 Church End Edlesborough, Dunstable",LU6 2EP
|
||||
HA15,7,"7 Church End Edlesborough, Dunstable",LU6 2EP
|
||||
HA15,9,"9 Church End Edlesborough, Dunstable",LU6 2EP
|
||||
HA15,125,"125 High Street Edlesborough, Dunstable",LU6 2ER
|
||||
HA15,6,"6 Dove Street Stewkley, Leighton Buzzard",LU7 0HT
|
||||
HA15,14,"14 Wantage Crescent Wing, Leighton Buzzard",LU7 0NH
|
||||
HA15,32,"32 Wantage Crescent Wing, Leighton Buzzard",LU7 0NH
|
||||
HA15,38,"38a Wantage Crescent Wing, Leighton Buzzard",LU7 0NH
|
||||
HA15,38,"38b Wantage Crescent Wing, Leighton Buzzard",LU7 0NH
|
||||
HA15,75,"75 High Street Cheddington, Leighton Buzzard",LU7 0RG
|
||||
HA15,12,"12 New Street Cheddington, Leighton Buzzard",LU7 0RL
|
||||
HA15,14,"14 New Street Cheddington, Leighton Buzzard",LU7 0RL
|
||||
HA15,16,"16 New Street Cheddington, Leighton Buzzard",LU7 0RL
|
||||
HA15,2,"2 Sunnybank Cheddington, Leighton Buzzard",LU7 0RN
|
||||
HA15,4,"4 Sunnybank Cheddington, Leighton Buzzard",LU7 0RN
|
||||
HA15,10,"10 Sunnybank Cheddington, Leighton Buzzard",LU7 0RN
|
||||
HA15,11,"11 Sunnybank Cheddington, Leighton Buzzard",LU7 0RN
|
||||
HA15,17,"17 Sunnybank Cheddington, Leighton Buzzard",LU7 0RN
|
||||
HA15,19,"19 Sunnybank Cheddington, Leighton Buzzard",LU7 0RN
|
||||
HA15,20,"20 Sunnybank Cheddington, Leighton Buzzard",LU7 0RN
|
||||
HA15,23,"23 Sunnybank Cheddington, Leighton Buzzard",LU7 0RN
|
||||
HA15,25,"25 Sunnybank Cheddington, Leighton Buzzard",LU7 0RN
|
||||
HA15,26,"26 Sunnybank Cheddington, Leighton Buzzard",LU7 0RN
|
||||
HA15,28,"28 Sunnybank Cheddington, Leighton Buzzard",LU7 0RN
|
||||
HA15,31,"31 Sunnybank Cheddington, Leighton Buzzard",LU7 0RN
|
||||
HA15,33,"33 Sunnybank Cheddington, Leighton Buzzard",LU7 0RN
|
||||
HA15,36,"36 Sunnybank Cheddington, Leighton Buzzard",LU7 0RN
|
||||
HA15,40,"40 Sunnybank Cheddington, Leighton Buzzard",LU7 0RN
|
||||
HA15,4,"4 Barkham Close Cheddington, Leighton Buzzard",LU7 0RT
|
||||
HA15,4,"4 Manor Road Cheddington, Leighton Buzzard",LU7 0RW
|
||||
HA15,7,"7 Manor Road Cheddington, Leighton Buzzard",LU7 0RW
|
||||
HA15,8,"8 Manor Road Cheddington, Leighton Buzzard",LU7 0RW
|
||||
HA15,10,"10 Manor Road Cheddington, Leighton Buzzard",LU7 0RW
|
||||
HA15,11,"11 Manor Road Cheddington, Leighton Buzzard",LU7 0RW
|
||||
HA15,61,"61 Yardley Avenue Pitstone, Leighton Buzzard",LU7 9BD
|
||||
HA15,69,"69 Yardley Avenue Pitstone, Leighton Buzzard",LU7 9BD
|
||||
HA15,71,"71 Yardley Avenue Pitstone, Leighton Buzzard",LU7 9BD
|
||||
HA15,75,"75 Yardley Avenue Pitstone, Leighton Buzzard",LU7 9BD
|
||||
HA15,85,"85 Yardley Avenue Pitstone, Leighton Buzzard",LU7 9BD
|
||||
HA15,87,"87 Yardley Avenue Pitstone, Leighton Buzzard",LU7 9BD
|
||||
HA15,89,"89 Yardley Avenue Pitstone, Leighton Buzzard",LU7 9BD
|
||||
HA15,95,"95 Yardley Avenue Pitstone, Leighton Buzzard",LU7 9BD
|
||||
HA15,101,"101 Yardley Avenue Pitstone, Leighton Buzzard",LU7 9BD
|
||||
HA15,103,"103 Yardley Avenue Pitstone, Leighton Buzzard",LU7 9BD
|
||||
HA15,125,"125 Yardley Avenue Pitstone, Leighton Buzzard",LU7 9BD
|
||||
HA15,129,"129 Yardley Avenue Pitstone, Leighton Buzzard",LU7 9BD
|
||||
HA15,133,"133 Yardley Avenue Pitstone, Leighton Buzzard",LU7 9BD
|
||||
HA15,141,"141 Yardley Avenue Pitstone, Leighton Buzzard",LU7 9BD
|
||||
HA15,151,"151 Yardley Avenue Pitstone, Leighton Buzzard",LU7 9BD
|
||||
HA15,48,"48 Station Road Ivinghoe, Leighton Buzzard",LU7 9EB
|
||||
HA15,52,"52 Station Road Ivinghoe, Leighton Buzzard",LU7 9EB
|
||||
HA15,54,"54 Station Road Ivinghoe, Leighton Buzzard",LU7 9EB
|
||||
HA15,58,"58 Station Road Ivinghoe, Leighton Buzzard",LU7 9EB
|
||||
HA15,1,"1 Maud Janes Close Ivinghoe, Leighton Buzzard",LU7 9ED
|
||||
HA15,3,"3 Maud Janes Close Ivinghoe, Leighton Buzzard",LU7 9ED
|
||||
HA15,12,"12 Maud Janes Close Ivinghoe, Leighton Buzzard",LU7 9ED
|
||||
HA15,26,"26 Ladysmith Road Ivinghoe, Leighton Buzzard",LU7 9EE
|
||||
HA15,24,"24 High Street Ivinghoe, Leighton Buzzard",LU7 9EX
|
||||
HA15,26,"26 High Street Ivinghoe, Leighton Buzzard",LU7 9EX
|
||||
HA15,28,"28 High Street Ivinghoe, Leighton Buzzard",LU7 9EX
|
||||
HA15,30,"30 High Street Ivinghoe, Leighton Buzzard",LU7 9EX
|
||||
HA15,32,"32 High Street Ivinghoe, Leighton Buzzard",LU7 9EX
|
||||
HA15,3,"3 Stonebridge Road, Aylesbury",HP19 9LX
|
||||
HA15,102,"102 Coventon Road, Aylesbury",HP19 9ND
|
||||
HA15,83,"83 Priory Crescent, Aylesbury",HP19 9NY
|
||||
HA15,103,"103 Priory Crescent, Aylesbury",HP19 9NY
|
||||
HA15,83,"83 Weedon Road, Aylesbury",HP19 9PA
|
||||
HA15,7,"7 Haines Close, Aylesbury",HP19 9TS
|
||||
HA15,8,"8 Haines Close, Aylesbury",HP19 9TS
|
||||
HA15,9,"9 Haines Close, Aylesbury",HP19 9TS
|
||||
HA15,13,"13 Haines Close, Aylesbury",HP19 9TS
|
||||
HA15,22,"22 Haines Close, Aylesbury",HP19 9TS
|
||||
HA15,39,"39 Haines Close, Aylesbury",HP19 9TS
|
||||
HA15,45,"45 Haines Close, Aylesbury",HP19 9TS
|
||||
HA15,27,"27 Oakfield Road, Aylesbury",HP20 1LH
|
||||
HA15,11,"11 Wingate Walk, Aylesbury",HP20 1LN
|
||||
HA15,9,"9 Stanhope Road, Aylesbury",HP20 1LP
|
||||
HA15,28,"28 Stanhope Road, Aylesbury",HP20 1LR
|
||||
HA15,12,"12 Cleveland Road, Aylesbury",HP20 2AZ
|
||||
HA15,20,"20 Cleveland Road, Aylesbury",HP20 2AZ
|
||||
HA15,22,"22 Cleveland Road, Aylesbury",HP20 2AZ
|
||||
HA15,7,"7 Bryanston Avenue, Aylesbury",HP20 2BA
|
||||
HA15,17,"17 Bryanston Avenue, Aylesbury",HP20 2BA
|
||||
HA15,36,"36 Bryanston Avenue, Aylesbury",HP20 2BA
|
||||
HA15,38,"38 Bryanston Avenue, Aylesbury",HP20 2BA
|
||||
HA15,6,"6 Matlock Road, Aylesbury",HP20 2BE
|
||||
HA15,9,"9 Lisburn Path, Aylesbury",HP20 2BQ
|
||||
HA15,15,"15 Lisburn Path, Aylesbury",HP20 2BQ
|
||||
HA15,3,"3 Lansdowne Road, Aylesbury",HP20 2DJ
|
||||
HA15,15,"15 Lansdowne Road, Aylesbury",HP20 2DJ
|
||||
HA15,4,"4 Caversham Green, Aylesbury",HP20 2DL
|
||||
HA15,1,"1 Davies Close, Aylesbury",HP20 2SH
|
||||
HA15,62,"62 Stoke Road, Aylesbury",HP21 8BX
|
||||
HA15,64,"64 Stoke Road, Aylesbury",HP21 8BX
|
||||
HA15,78,"78 Stoke Road, Aylesbury",HP21 8BX
|
||||
HA15,4,"4 Court Close, Aylesbury",HP21 8BY
|
||||
HA15,7,"7 Clover Lane, Aylesbury",HP21 8DQ
|
||||
HA15,25,"25 Clover Lane, Aylesbury",HP21 8DQ
|
||||
HA15,31,"31 Clover Lane, Aylesbury",HP21 8DQ
|
||||
HA15,53,"53 Birch Court, Aylesbury",HP21 8DS
|
||||
HA15,59,"59 Birch Court, Aylesbury",HP21 8DS
|
||||
HA15,74,"74 Thrasher Road, Aylesbury",HP21 8DX
|
||||
HA15,2,"2 Vicarage Road, Aylesbury",HP21 8EU
|
||||
HA15,8,"8 Vicarage Road, Aylesbury",HP21 8EU
|
||||
HA15,126,"126 Penn Road, Aylesbury",HP21 8JS
|
||||
HA15,128,"128 Penn Road, Aylesbury",HP21 8JS
|
||||
HA15,140,"140 Penn Road, Aylesbury",HP21 8JS
|
||||
HA15,144,"144 Penn Road, Aylesbury",HP21 8JS
|
||||
HA15,146,"146 Penn Road, Aylesbury",HP21 8JS
|
||||
HA15,4,"4 Montague Road, Aylesbury",HP21 8JT
|
||||
HA15,132,"132 Prebendal Avenue, Aylesbury",HP21 8LF
|
||||
HA15,134,"134 Prebendal Avenue, Aylesbury",HP21 8LF
|
||||
HA15,138,"138 Prebendal Avenue, Aylesbury",HP21 8LF
|
||||
HA15,140,"140 Prebendal Avenue, Aylesbury",HP21 8LF
|
||||
HA15,144,"144 Prebendal Avenue, Aylesbury",HP21 8LF
|
||||
HA15,15,"15 Oak Green, Aylesbury",HP21 8LJ
|
||||
HA15,59,"59 Paterson Road, Aylesbury",HP21 8LW
|
||||
HA15,37,"37 Thame Road, Aylesbury",HP21 8LX
|
||||
HA15,95,"95 Thame Road, Aylesbury",HP21 8LY
|
||||
HA15,3,"3 Edinburgh Place, Aylesbury",HP21 8NG
|
||||
HA15,52,"52 Carrington Road, Aylesbury",HP21 8NL
|
||||
HA15,9,"9 Hartwell End, Aylesbury",HP21 8NZ
|
||||
HA15,12,"12 Hartwell End, Aylesbury",HP21 8NZ
|
||||
HA15,21,"21 Hartwell End, Aylesbury",HP21 8PA
|
||||
HA15,64,"64 Lavric Road, Aylesbury",HP21 8PF
|
||||
HA15,8,"8 Cooks Lane Mursley, Milton Keynes",MK17 0RU
|
||||
HA15,47,"47 Green End Great Brickhill, Milton Keynes",MK17 9AT
|
||||
HA15,14,"14 Green End Great Brickhill, Milton Keynes",MK17 9AU
|
||||
HA15,63,"63 Bourtonville, Buckingham",MK18 1AY
|
||||
HA15,2,"2 Bath Lane Terrace, Buckingham",MK18 1DY
|
||||
HA15,3,"3 Bath Lane Terrace, Buckingham",MK18 1DY
|
||||
HA15,4,"4 Bath Lane Terrace, Buckingham",MK18 1DY
|
||||
HA15,3,"3 Westfields, Buckingham",MK18 1DZ
|
||||
HA15,5,"5 Westfields, Buckingham",MK18 1DZ
|
||||
HA15,6,"6 Westfields, Buckingham",MK18 1DZ
|
||||
HA15,8,"8 Westfields, Buckingham",MK18 1DZ
|
||||
HA15,10,"10 Westfields, Buckingham",MK18 1DZ
|
||||
HA15,13,"13 Westfields, Buckingham",MK18 1DZ
|
||||
HA15,14,"14 Westfields, Buckingham",MK18 1DZ
|
||||
HA15,15,"15 Westfields, Buckingham",MK18 1DZ
|
||||
HA15,18,"18 Westfields, Buckingham",MK18 1DZ
|
||||
HA15,19,"19 Westfields, Buckingham",MK18 1DZ
|
||||
HA15,20,"20 Westfields, Buckingham",MK18 1DZ
|
||||
HA15,21,"21 Westfields, Buckingham",MK18 1DZ
|
||||
HA15,24,"24 Westfields, Buckingham",MK18 1DZ
|
||||
HA15,27,"27 Westfields, Buckingham",MK18 1DZ
|
||||
HA15,28,"28 Westfields, Buckingham",MK18 1DZ
|
||||
HA15,29,"29 Westfields, Buckingham",MK18 1DZ
|
||||
HA15,31,"31 Westfields, Buckingham",MK18 1DZ
|
||||
HA15,32,"32 Westfields, Buckingham",MK18 1DZ
|
||||
HA15,35,"35 Westfields, Buckingham",MK18 1DZ
|
||||
HA15,49,"49 Westfields, Buckingham",MK18 1DZ
|
||||
HA15,51,"51 Westfields, Buckingham",MK18 1DZ
|
||||
HA15,53,"53 Westfields, Buckingham",MK18 1DZ
|
||||
HA15,55,"55 Westfields, Buckingham",MK18 1DZ
|
||||
HA15,57,"57 Westfields, Buckingham",MK18 1DZ
|
||||
HA15,60,"60 Westfields, Buckingham",MK18 1DZ
|
||||
HA15,2,"2 Grenville Road, Buckingham",MK18 1LR
|
||||
HA15,118,"118 Western Avenue, Buckingham",MK18 1LS
|
||||
HA15,5,"5 South Hall Maids Moreton, Buckingham",MK18 1QB
|
||||
HA15,2,"2 Church Close Maids Moreton, Buckingham",MK18 1QG
|
||||
HA15,5,"5 Church Close Maids Moreton, Buckingham",MK18 1QG
|
||||
HA15,7,"7 Church Close Maids Moreton, Buckingham",MK18 1QG
|
||||
HA15,1,"1 The Leys Main Street, Buckingham",MK18 1QT
|
||||
HA15,31a,"31a Springfields Padbury, Buckingham",MK18 2AT
|
||||
HA15,31b,"31b Springfields Padbury, Buckingham",MK18 2AT
|
||||
HA15,1,"1 Arnolds Close Padbury, Buckingham",MK18 2BG
|
||||
HA15,42,"42 Victory Road Steeple Claydon, Buckingham",MK18 2NY
|
||||
HA15,50,"50 Victory Road Steeple Claydon, Buckingham",MK18 2NY
|
||||
HA15,4,"4 Falklands Close Steeple Claydon, Buckingham",MK18 2PN
|
||||
HA15,8,"8 Falklands Close Steeple Claydon, Buckingham",MK18 2PN
|
||||
HA15,10,"10 Falklands Close Steeple Claydon, Buckingham",MK18 2PN
|
||||
HA15,12,"12 Falklands Close Steeple Claydon, Buckingham",MK18 2PN
|
||||
HA15,11,"11 Vicarage Lane Steeple Claydon, Buckingham",MK18 2PR
|
||||
HA15,62,"62 Vicarage Lane Steeple Claydon, Buckingham",MK18 2PR
|
||||
HA15,64,"64 Vicarage Lane Steeple Claydon, Buckingham",MK18 2PR
|
||||
HA15,3,"3 Pound Close Steeple Claydon, Buckingham",MK18 2QL
|
||||
HA15,4,"4 Pound Close Steeple Claydon, Buckingham",MK18 2QL
|
||||
HA15,6,"6 Oak Leys Steeple Claydon, Buckingham",MK18 2RQ
|
||||
HA15,8,"8 Oak Leys Steeple Claydon, Buckingham",MK18 2RQ
|
||||
HA15,8,"8 Old Mill Furlong Winslow, Buckingham",MK18 3EX
|
||||
HA15,23,"23 Old Mill Furlong Winslow, Buckingham",MK18 3EX
|
||||
HA15,24,"24 Old Mill Furlong Winslow, Buckingham",MK18 3EX
|
||||
HA15,25,"25 Old Mill Furlong Winslow, Buckingham",MK18 3EX
|
||||
HA15,30,"30 Old Mill Furlong Winslow, Buckingham",MK18 3EX
|
||||
HA15,32,"32 Old Mill Furlong Winslow, Buckingham",MK18 3EX
|
||||
HA15,34,"34 Old Mill Furlong Winslow, Buckingham",MK18 3EX
|
||||
HA15,1,"1 Roberts Road Haddenham, Aylesbury",HP17 8HH
|
||||
HA15,6,"6 Roberts Road Haddenham, Aylesbury",HP17 8HH
|
||||
HA15,11,"11 Roberts Road Haddenham, Aylesbury",HP17 8HH
|
||||
HA15,15,"15 Roberts Road Haddenham, Aylesbury",HP17 8HH
|
||||
HA15,17,"17 Roberts Road Haddenham, Aylesbury",HP17 8HH
|
||||
HA15,18,"18 Roberts Road Haddenham, Aylesbury",HP17 8HH
|
||||
HA15,38,"38 Roberts Road Haddenham, Aylesbury",HP17 8HH
|
||||
HA15,3,"3 Harts Road Haddenham, Aylesbury",HP17 8HJ
|
||||
HA15,9,"9 Harts Road Haddenham, Aylesbury",HP17 8HJ
|
||||
HA15,11,"11 Harts Road Haddenham, Aylesbury",HP17 8HJ
|
||||
HA15,16,"16 Harts Road Haddenham, Aylesbury",HP17 8HJ
|
||||
HA15,18,"18 Harts Road Haddenham, Aylesbury",HP17 8HJ
|
||||
HA15,22,"22 Harts Road Haddenham, Aylesbury",HP17 8HJ
|
||||
HA15,2,"2 Willis Road Haddenham, Aylesbury",HP17 8HL
|
||||
HA15,4,"4 Willis Road Haddenham, Aylesbury",HP17 8HL
|
||||
HA15,5,"5 Willis Road Haddenham, Aylesbury",HP17 8HL
|
||||
HA15,8,"8 Willis Road Haddenham, Aylesbury",HP17 8HL
|
||||
HA15,20,"20 Willis Road Haddenham, Aylesbury",HP17 8HL
|
||||
HA15,21,"21 Willis Road Haddenham, Aylesbury",HP17 8HL
|
||||
HA15,22,"22 Willis Road Haddenham, Aylesbury",HP17 8HL
|
||||
HA15,26,"26 Willis Road Haddenham, Aylesbury",HP17 8HL
|
||||
HA15,29,"29 Willis Road Haddenham, Aylesbury",HP17 8HL
|
||||
HA15,31,"31 Willis Road Haddenham, Aylesbury",HP17 8HL
|
||||
HA15,33,"33 Willis Road Haddenham, Aylesbury",HP17 8HL
|
||||
HA15,35,"35 Willis Road Haddenham, Aylesbury",HP17 8HL
|
||||
HA15,37,"37 Willis Road Haddenham, Aylesbury",HP17 8HL
|
||||
HA15,39,"39 Willis Road Haddenham, Aylesbury",HP17 8HL
|
||||
HA15,5,"5 Woodways Haddenham, Aylesbury",HP17 8HW
|
||||
HA15,7,"7 Woodways Haddenham, Aylesbury",HP17 8HW
|
||||
HA15,13,"13 Woodways Haddenham, Aylesbury",HP17 8HW
|
||||
HA15,19,"19 Woodways Haddenham, Aylesbury",HP17 8HW
|
||||
HA15,1,"1 Woodlands Butte Furlong, Aylesbury",HP17 8JE
|
||||
HA15,2,"2 Franklin Road Haddenham, Aylesbury",HP17 8LE
|
||||
HA15,8,"8 Franklin Road Haddenham, Aylesbury",HP17 8LE
|
||||
HA15,129,"129 Churchway Haddenham, Aylesbury",HP17 8LG
|
||||
HA15,133,"133 Churchway Haddenham, Aylesbury",HP17 8LG
|
||||
HA15,135,"135 Churchway Haddenham, Aylesbury",HP17 8LG
|
||||
HA15,147,"147 Churchway Haddenham, Aylesbury",HP17 8LG
|
||||
HA15,7,"7 Bishopstone Road Stone, Aylesbury",HP17 8QX
|
||||
HA15,33,"33 Bishopstone Road Stone, Aylesbury",HP17 8QX
|
||||
HA15,8,"8 Chiltern Avenue Stone, Aylesbury",HP17 8QY
|
||||
HA15,20,"20 Chiltern Avenue Stone, Aylesbury",HP17 8QY
|
||||
HA15,28,"28 Chiltern Avenue Stone, Aylesbury",HP17 8QY
|
||||
HA15,32,"32 Chiltern Avenue Stone, Aylesbury",HP17 8QY
|
||||
HA15,34,"34 Chiltern Avenue Stone, Aylesbury",HP17 8QY
|
||||
HA15,46,"46 Chiltern Avenue Stone, Aylesbury",HP17 8QY
|
||||
HA15,60,"60 Chiltern Avenue Stone, Aylesbury",HP17 8QY
|
||||
HA15,62,"62 Chiltern Avenue Stone, Aylesbury",HP17 8QY
|
||||
HA15,7,"7 Chiltern Avenue Stone, Aylesbury",HP17 8QZ
|
||||
HA15,13,"13 Chiltern Avenue Stone, Aylesbury",HP17 8QZ
|
||||
HA15,33,"33 Chiltern Avenue Stone, Aylesbury",HP17 8QZ
|
||||
HA15,41,"41 Chiltern Avenue Stone, Aylesbury",HP17 8QZ
|
||||
HA15,14,"14 Chiltern Close Stone, Aylesbury",HP17 8RA
|
||||
HA15,17,"17 Chiltern Close Stone, Aylesbury",HP17 8RA
|
||||
HA15,10,"10 Round Hill Stone, Aylesbury",HP17 8RD
|
||||
HA15,16,"16 Round Hill Stone, Aylesbury",HP17 8RD
|
||||
HA15,7,"7 Round Hill Stone, Aylesbury",HP17 8RE
|
||||
HA15,17,"17 Round Hill Stone, Aylesbury",HP17 8RE
|
||||
HA15,23,"23 Round Hill Stone, Aylesbury",HP17 8RE
|
||||
HA15,59,"59 Bishopstone Road Stone, Aylesbury",HP17 8RX
|
||||
HA15,1,"1 Bittenham Close Stone, Aylesbury",HP17 8RY
|
||||
HA15,7,"7 Bittenham Close Stone, Aylesbury",HP17 8RY
|
||||
HA15,1,"1 New Road Dinton, Aylesbury",HP17 8UU
|
||||
HA15,3,"3 New Road Dinton, Aylesbury",HP17 8UU
|
||||
HA15,8,"8 New Road Dinton, Aylesbury",HP17 8UU
|
||||
HA15,1,"1 Bernard Close Cuddington, Aylesbury",HP18 0AJ
|
||||
HA15,4,"4 Bernard Close Cuddington, Aylesbury",HP18 0AJ
|
||||
HA15,7,"7 Bernard Close Cuddington, Aylesbury",HP18 0AJ
|
||||
HA15,12,"12 Bernard Close Cuddington, Aylesbury",HP18 0AJ
|
||||
HA15,19,"19 Bernard Close Cuddington, Aylesbury",HP18 0AJ
|
||||
HA15,22,"22 Bernard Close Cuddington, Aylesbury",HP18 0AJ
|
||||
HA15,34,"34 Bernard Close Cuddington, Aylesbury",HP18 0AJ
|
||||
HA15,39,"39 Bernard Close Cuddington, Aylesbury",HP18 0AJ
|
||||
HA15,41,"41 Bernard Close Cuddington, Aylesbury",HP18 0AJ
|
||||
HA15,7,"7 Hillside Cottages Dadbrook, Aylesbury",HP18 0AQ
|
||||
HA15,10,"10 Hillside Cottages Dadbrook, Aylesbury",HP18 0AQ
|
||||
HA15,11,"11 Hillside Cottages Dadbrook, Aylesbury",HP18 0AQ
|
||||
HA15,7,"7 Swan Hill Aylesbury Road, Aylesbury",HP18 0BE
|
||||
HA15,10,"10 Swan Hill Aylesbury Road, Aylesbury",HP18 0BE
|
||||
HA15,1,"1 Grove Way Waddesdon, Aylesbury",HP18 0LH
|
||||
HA15,6,"6 Grove Way Waddesdon, Aylesbury",HP18 0LH
|
||||
HA15,7,"7 Grove Way Waddesdon, Aylesbury",HP18 0LH
|
||||
HA15,1,"1 Sheriff Cottages Quainton Road, Aylesbury",HP18 0LT
|
||||
HA15,2,"2 Sheriff Cottages Quainton Road, Aylesbury",HP18 0LT
|
||||
HA15,3,"3 Sheriff Cottages Quainton Road, Aylesbury",HP18 0LT
|
||||
HA15,5,"5 Sheriff Cottages Quainton Road, Aylesbury",HP18 0LT
|
||||
HA15,6,"6 Sheriff Cottages Quainton Road, Aylesbury",HP18 0LT
|
||||
HA15,7,"7 Sheriff Cottages Quainton Road, Aylesbury",HP18 0LT
|
||||
HA15,9,"9 Sheriff Cottages Quainton Road, Aylesbury",HP18 0LT
|
||||
HA15,21,"21 Goss Avenue Waddesdon, Aylesbury",HP18 0LY
|
||||
HA15,86,"86 Sharps Close Waddesdon, Aylesbury",HP18 0LZ
|
||||
HA15,88,"88 Sharps Close Waddesdon, Aylesbury",HP18 0LZ
|
||||
HA15,3,"3 Hilltop Long Crendon, Aylesbury",HP18 9AT
|
||||
HA15,4,"4 Hilltop Long Crendon, Aylesbury",HP18 9AT
|
||||
HA15,1A,"1a Hilltop Long Crendon, Aylesbury",HP18 9AT
|
||||
HA15,3A,"3a Hilltop Long Crendon, Aylesbury",HP18 9AT
|
||||
HA15,26,"26 Peascroft Long Crendon, Aylesbury",HP18 9AU
|
||||
HA15,30,"30 Peascroft Long Crendon, Aylesbury",HP18 9AU
|
||||
HA15,52,"52 Peascroft Long Crendon, Aylesbury",HP18 9AU
|
||||
HA15,11,"11 Harroell Long Crendon, Aylesbury",HP18 9AY
|
||||
HA15,13,"13 Harroell Long Crendon, Aylesbury",HP18 9AY
|
||||
HA15,14,"14 Harroell Long Crendon, Aylesbury",HP18 9AY
|
||||
HA15,2,"2 Abbot Ridge Long Crendon, Aylesbury",HP18 9AZ
|
||||
HA15,14,"14 Abbot Ridge Long Crendon, Aylesbury",HP18 9AZ
|
||||
HA15,18,"18 Abbot Ridge Long Crendon, Aylesbury",HP18 9AZ
|
||||
HA15,26,"26 Abbot Ridge Long Crendon, Aylesbury",HP18 9AZ
|
||||
HA15,5,"5 Meadowbank Close Long Crendon, Aylesbury",HP18 9DH
|
||||
HA15,11,"11 Bonnersfield Long Crendon, Aylesbury",HP18 9DJ
|
||||
HA15,14,"14 Bonnersfield Long Crendon, Aylesbury",HP18 9DJ
|
||||
HA15,16,"16 Bonnersfield Long Crendon, Aylesbury",HP18 9DJ
|
||||
HA15,26,"26 Bonnersfield Long Crendon, Aylesbury",HP18 9DJ
|
||||
HA15,28,"28 Bonnersfield Long Crendon, Aylesbury",HP18 9DJ
|
||||
HA15,29,"29 Bonnersfield Long Crendon, Aylesbury",HP18 9DJ
|
||||
HA15,30,"30 Bonnersfield Long Crendon, Aylesbury",HP18 9DJ
|
||||
HA15,32,"32 Bonnersfield Long Crendon, Aylesbury",HP18 9DJ
|
||||
HA15,36,"36 Giffard Way Long Crendon, Aylesbury",HP18 9DN
|
||||
HA15,45,"45 Giffard Way Long Crendon, Aylesbury",HP18 9DN
|
||||
HA15,52,"52 Giffard Way Long Crendon, Aylesbury",HP18 9DN
|
||||
HA15,10,"10 Coltman Avenue Long Crendon, Aylesbury",HP18 9DP
|
||||
HA15,11,"11 Coltman Avenue Long Crendon, Aylesbury",HP18 9DP
|
||||
HA15,12,"12 Coltman Avenue Long Crendon, Aylesbury",HP18 9DP
|
||||
HA15,14,"14 Coltman Avenue Long Crendon, Aylesbury",HP18 9DP
|
||||
HA15,16,"16 Coltman Avenue Long Crendon, Aylesbury",HP18 9DP
|
||||
HA15,22,"22 Coltman Avenue Long Crendon, Aylesbury",HP18 9DP
|
||||
HA15,25,"25 Coltman Avenue Long Crendon, Aylesbury",HP18 9DP
|
||||
HA15,26,"26 Coltman Avenue Long Crendon, Aylesbury",HP18 9DP
|
||||
HA15,27,"27 Coltman Avenue Long Crendon, Aylesbury",HP18 9DP
|
||||
HA15,32,"32 Friars Furlong Long Crendon, Aylesbury",HP18 9DQ
|
||||
HA15,4,"4 Highfield Long Crendon, Aylesbury",HP18 9DR
|
||||
HA15,5,"5 Highfield Long Crendon, Aylesbury",HP18 9DR
|
||||
HA15,8,"8 Highfield Long Crendon, Aylesbury",HP18 9DR
|
||||
HA15,9,"9 Highfield Long Crendon, Aylesbury",HP18 9DR
|
||||
HA15,10,"10 Highfield Long Crendon, Aylesbury",HP18 9DR
|
||||
HA15,11,"11 Highfield Long Crendon, Aylesbury",HP18 9DR
|
||||
HA15,14,"14 Highfield Long Crendon, Aylesbury",HP18 9DR
|
||||
HA15,17,"17 Highfield Long Crendon, Aylesbury",HP18 9DR
|
||||
HA15,18,"18 Highfield Long Crendon, Aylesbury",HP18 9DR
|
||||
HA15,20,"20 Highfield Long Crendon, Aylesbury",HP18 9DR
|
||||
HA15,23,"23 Highfield Long Crendon, Aylesbury",HP18 9DR
|
||||
HA15,24,"24 Highfield Long Crendon, Aylesbury",HP18 9DR
|
||||
HA15,14b,"14b Highfield Long Crendon, Aylesbury",HP18 9DR
|
||||
HA15,4,"4 Giffard Way Long Crendon, Aylesbury",HP18 9DW
|
||||
HA15,13,"13 Giffard Way Long Crendon, Aylesbury",HP18 9DW
|
||||
HA15,14,"14 Giffard Way Long Crendon, Aylesbury",HP18 9DW
|
||||
HA15,24,"24 St. Annes Road, Aylesbury",HP19 7RB
|
||||
HA15,55,"55 St. Annes Road, Aylesbury",HP19 7RB
|
||||
HA15,6,"6 Palmer Avenue, Aylesbury",HP19 8EF
|
||||
HA15,18,"18 Palmer Avenue, Aylesbury",HP19 8EF
|
||||
HA15,20,"20 Palmer Avenue, Aylesbury",HP19 8EF
|
||||
HA15,24,"24 Palmer Avenue, Aylesbury",HP19 8EF
|
||||
HA15,25,"25 Palmer Avenue, Aylesbury",HP19 8EF
|
||||
HA15,1,"1 Gatehouse Road, Aylesbury",HP19 8EH
|
||||
HA15,10,"10 Gatehouse Road, Aylesbury",HP19 8EH
|
||||
HA15,12,"12 Gatehouse Road, Aylesbury",HP19 8EH
|
||||
HA15,53,"53 Oxford Road, Aylesbury",HP19 8EQ
|
||||
HA15,59,"59 Oxford Road, Aylesbury",HP19 8EQ
|
||||
HA15,2,"2 Lander Road,Aylesbury,Bucks",HP19 9TT
|
||||
HA15,30,"30 Lander Road,Aylesbury,Bucks",HP19 9TT
|
||||
HA15,31,"31 Lander Road,Aylesbury,Bucks",HP19 9TT
|
||||
HA15,32,"32 Lander Road,Aylesbury,Bucks",HP19 9TT
|
||||
HA15,3,"3 Eeles Close,Aylesbury,Bucks",HP19 9TU
|
||||
HA15,5,"5 Eeles Close,Aylesbury,Bucks",HP19 9TU
|
||||
HA15,6,"6 Eeles Close,Aylesbury,Bucks",HP19 9TU
|
||||
HA15,7,"7 Eeles Close,Aylesbury,Bucks",HP19 9TU
|
||||
HA15,8,"8 Eeles Close,Aylesbury,Bucks",HP19 9TU
|
||||
HA15,9,"9 Eeles Close,Aylesbury,Bucks",HP19 9TU
|
||||
HA15,10,"10 Eeles Close,Aylesbury,Bucks",HP19 9TU
|
||||
HA15,15,"15 Eeles Close,Aylesbury,Bucks",HP19 9TU
|
||||
HA15,17,"17 Dicks Way,Aylesbury,Bucks",HP19 9UA
|
||||
HA15,20,"20 Dicks Way,Aylesbury,Bucks",HP19 9UA
|
||||
HA15,28,"28 Dicks Way,Aylesbury,Bucks",HP19 9UA
|
||||
HA15,30,"30 Dicks Way,Aylesbury,Bucks",HP19 9UA
|
||||
HA15,32,"32 Dicks Way,Aylesbury,Bucks",HP19 9UA
|
||||
HA15,34,"34 Dicks Way,Aylesbury,Bucks",HP19 9UA
|
||||
HA15,36,"36 Dicks Way,Aylesbury,Bucks",HP19 9UA
|
||||
HA15,7,"7 Fletcher Close,Aylesbury,Bucks",HP19 9UB
|
||||
HA15,8,"8 Fletcher Close,Aylesbury,Bucks",HP19 9UB
|
||||
HA15,10,"10 Fletcher Close,Aylesbury,Bucks",HP19 9UB
|
||||
HA15,11,"11 Fletcher Close,Aylesbury,Bucks",HP19 9UB
|
||||
HA15,12,"12 Fletcher Close,Aylesbury,Bucks",HP19 9UB
|
||||
HA15,25,"25 Fletcher Close,Aylesbury,Bucks",HP19 9UB
|
||||
HA15,33,"33 Fletcher Close,Aylesbury,Bucks",HP19 9UB
|
||||
HA15,34,"34 Fletcher Close,Aylesbury,Bucks",HP19 9UB
|
||||
HA15,11,"11 Grimmer Close,Aylesbury,Bucks",HP19 9UD
|
||||
HA15,14,"14 Grimmer Close,Aylesbury,Bucks",HP19 9UD
|
||||
HA15,15,"15 Grimmer Close,Aylesbury,Bucks",HP19 9UD
|
||||
HA15,23,"23 Grimmer Close,Aylesbury,Bucks",HP19 9UD
|
||||
HA15,12,"12 Vincent Road,Aylesbury,Bucks",HP19 9UN
|
||||
HA15,4,"4 Reading Close,Aylesbury,Bucks",HP19 9UW
|
||||
HA15,7,"7 Reading Close,Aylesbury,Bucks",HP19 9UW
|
||||
HA15,10,"10 Reading Close,Aylesbury,Bucks",HP19 9UW
|
||||
HA15,2,"2 Mary Mac Manus Drive, Milton Keynes",MK18 1UN
|
||||
HA15,4,"4 Mary Mac Manus Drive, Milton Keynes",MK18 1UN
|
||||
HA15,6,"6 Mary Mac Manus Drive, Milton Keynes",MK18 1UN
|
||||
HA15,8,"8 Mary Mac Manus Drive, Milton Keynes",MK18 1UN
|
||||
HA15,10,"10 Mary Mac Manus Drive, Milton Keynes",MK18 1UN
|
||||
HA15,14,"14 Mary Mac Manus Drive, Milton Keynes",MK18 1UN
|
||||
HA15,16,"16 Mary Mac Manus Drive, Milton Keynes",MK18 1UN
|
||||
HA15,18,"18 Mary Mac Manus Drive, Milton Keynes",MK18 1UN
|
||||
HA15,20,"20 Mary Mac Manus Drive, Milton Keynes",MK18 1UN
|
||||
HA15,22,"22 Mary Mac Manus Drive, Milton Keynes",MK18 1UN
|
||||
HA15,24,"24 Mary Mac Manus Drive, Milton Keynes",MK18 1UN
|
||||
HA15,1,"1 Mary Mac Manus Drive, Milton Keynes",MK18 1UW
|
||||
HA15,3,"3 Mary Mac Manus Drive, Milton Keynes",MK18 1UW
|
||||
HA15,5,"5 Mary Mac Manus Drive, Milton Keynes",MK18 1UW
|
||||
HA15,7,"7 Mary Mac Manus Drive, Milton Keynes",MK18 1UW
|
||||
HA15,9,"9 Mary Mac Manus Drive, Milton Keynes",MK18 1UW
|
||||
HA15,11,"11 Mary Mac Manus Drive, Milton Keynes",MK18 1UW
|
||||
HA15,13,"13 Mary Mac Manus Drive, Milton Keynes",MK18 1UW
|
||||
HA15,15,"15 Mary Mac Manus Drive, Milton Keynes",MK18 1UW
|
||||
HA15,17,"17 Mary Mac Manus Drive, Milton Keynes",MK18 1UW
|
||||
HA15,24,"24 St. Annes Road, Aylesbury",HP19 7RB
|
||||
HA15,55,"55 St. Annes Road, Aylesbury",HP19 7RB
|
||||
HA15,3,"3 Lansdowne Road, Aylesbury",HP20 2DJ
|
||||
HA15,15,"15 Lansdowne Road, Aylesbury",HP20 2DJ
|
||||
HA15,28,"28 Beechwood Way Aston Clinton, Aylesbury",HP22 5JP
|
||||
HA15,11,"11 Lower Icknield Way Aston Clinton, Aylesbury",HP22 5JS
|
||||
HA15,17,"17 Lower Icknield Way Aston Clinton, Aylesbury",HP22 5JS
|
||||
HA15,5,"5 Beaconsfield Road Aston Clinton, Aylesbury",HP22 5JU
|
||||
HA15,6,"6 Beaconsfield Road Aston Clinton, Aylesbury",HP22 5JU
|
||||
HA15,8,"8 Beaconsfield Road Aston Clinton, Aylesbury",HP22 5JU
|
||||
HA15,12,"12 Beaconsfield Road Aston Clinton, Aylesbury",HP22 5JU
|
||||
HA15,13,"13 Beaconsfield Road Aston Clinton, Aylesbury",HP22 5JU
|
||||
HA15,15,"15 Beaconsfield Road Aston Clinton, Aylesbury",HP22 5JU
|
||||
HA15,16,"16 Beaconsfield Road Aston Clinton, Aylesbury",HP22 5JU
|
||||
HA15,19,"19 Beaconsfield Road Aston Clinton, Aylesbury",HP22 5JU
|
||||
HA15,21,"21 Beaconsfield Road Aston Clinton, Aylesbury",HP22 5JU
|
||||
HA15,23,"23 Beaconsfield Road Aston Clinton, Aylesbury",HP22 5JU
|
||||
HA15,13,"13 Beechwood Way Aston Clinton, Aylesbury",HP22 5JW
|
||||
HA15,24,"24 Beaconsfield Road Aston Clinton, Aylesbury",HP22 5JX
|
||||
HA15,26,"26 Beaconsfield Road Aston Clinton, Aylesbury",HP22 5JX
|
||||
HA15,34,"34 Beaconsfield Road Aston Clinton, Aylesbury",HP22 5JX
|
||||
HA15,39,"39 Beaconsfield Road Aston Clinton, Aylesbury",HP22 5JX
|
||||
HA15,42,"42 Beaconsfield Road Aston Clinton, Aylesbury",HP22 5JX
|
||||
HA15,44,"44 Beaconsfield Road Aston Clinton, Aylesbury",HP22 5JX
|
||||
HA15,45,"45 Beaconsfield Road Aston Clinton, Aylesbury",HP22 5JX
|
||||
HA15,89,"89 Beaconsfield Road Aston Clinton, Aylesbury",HP22 5JX
|
||||
HA15,9,"9 Longcroft Aston Clinton, Aylesbury",HP22 5JZ
|
||||
HA15,14,"14 Longcroft Aston Clinton, Aylesbury",HP22 5JZ
|
||||
HA15,55,"55 Grenville Avenue Wendover, Aylesbury",HP22 6AJ
|
||||
HA15,67,"67 Grenville Avenue Wendover, Aylesbury",HP22 6AJ
|
||||
HA15,75,"75 Grenville Avenue Wendover, Aylesbury",HP22 6AJ
|
||||
HA15,35,"35 Grenville Avenue Wendover, Aylesbury",HP22 6AQ
|
||||
HA15,12,"12 Boddington Road Wendover, Aylesbury",HP22 6HY
|
||||
HA15,16,"16 Boddington Road Wendover, Aylesbury",HP22 6HY
|
||||
HA15,21,"21 Boddington Road Wendover, Aylesbury",HP22 6HY
|
||||
HA15,35,"35 Boddington Road Wendover, Aylesbury",HP22 6HY
|
||||
HA15,39,"39 Boddington Road Wendover, Aylesbury",HP22 6HY
|
||||
HA15,5,"5 Boddington Road Wendover, Aylesbury",HP22 6HZ
|
||||
HA15,1,"1a Lionel Avenue Wendover, Aylesbury",HP22 6LL
|
||||
HA15,22,"22 Barley Close Weston Turville, Aylesbury",HP22 5SF
|
||||
HA15,24,"24 Barley Close Weston Turville, Aylesbury",HP22 5SF
|
||||
HA15,31,"31 Barley Close Weston Turville, Aylesbury",HP22 5SF
|
||||
HA15,39,"39 Barley Close Weston Turville, Aylesbury",HP22 5SF
|
||||
HA15,41,"41 Barley Close Weston Turville, Aylesbury",HP22 5SF
|
||||
HA15,43,"43 Barley Close Weston Turville, Aylesbury",HP22 5SF
|
||||
HA15,46,"46 Hampden Road Stoke Mandeville, Aylesbury",HP22 5TW
|
||||
HA15,6,"6 Hampden Road Stoke Mandeville, Aylesbury",HP22 5UF
|
||||
HA15,7,"7 Hampden Road Stoke Mandeville, Aylesbury",HP22 5UF
|
||||
HA15,21,"21 Hampden Road Stoke Mandeville, Aylesbury",HP22 5UF
|
||||
HA15,14,"14 Eskdale Road Stoke Mandeville, Aylesbury",HP22 5UJ
|
||||
HA15,15,"15 Eskdale Road Stoke Mandeville, Aylesbury",HP22 5UJ
|
||||
HA15,18,"18 Eskdale Road Stoke Mandeville, Aylesbury",HP22 5UJ
|
||||
HA15,20,"20 Eskdale Road Stoke Mandeville, Aylesbury",HP22 5UJ
|
||||
HA15,23,"23 Eskdale Road Stoke Mandeville, Aylesbury",HP22 5UJ
|
||||
HA15,43,"43 Eskdale Road Stoke Mandeville, Aylesbury",HP22 5UJ
|
||||
HA15,44,"44 Eskdale Road Stoke Mandeville, Aylesbury",HP22 5UJ
|
||||
HA15,27,"27 Station Road Stoke Mandeville, Aylesbury",HP22 5UL
|
||||
HA15,29,"29 Station Road Stoke Mandeville, Aylesbury",HP22 5UL
|
||||
HA15,3,"3 Moor Park Wendover, Aylesbury",HP22 6AX
|
||||
HA15,9,"9 Moor Park Wendover, Aylesbury",HP22 6AX
|
||||
HA15,21,"21 Moor Park Wendover, Aylesbury",HP22 6AX
|
||||
HA15,35,"35 Moor Park Wendover, Aylesbury",HP22 6AX
|
||||
HA15,40,"40 Moor Park Wendover, Aylesbury",HP22 6AX
|
||||
HA15,42,"42 Moor Park Wendover, Aylesbury",HP22 6AX
|
||||
HA15,45,"45 Moor Park Wendover, Aylesbury",HP22 6AX
|
||||
HA15,48,"48 Moor Park Wendover, Aylesbury",HP22 6AX
|
||||
HA15,54,"54 Moor Park Wendover, Aylesbury",HP22 6AX
|
||||
HA15,58,"58 Moor Park Wendover, Aylesbury",HP22 6AX
|
||||
|
499
etl/eligibility/ha_15_32/HA 32 Identified addresses.csv
Normal file
499
etl/eligibility/ha_15_32/HA 32 Identified addresses.csv
Normal file
|
|
@ -0,0 +1,499 @@
|
|||
Housing Association,No.,Address,Postcode
|
||||
HA 32,1,SHERWOOD COURT,HU114DF
|
||||
HA 32,2,SHERWOOD COURT,HU114DF
|
||||
HA 32,3,SHERWOOD COURT,HU114DF
|
||||
HA 32,4,SHERWOOD COURT,HU114DF
|
||||
HA 32,5,SHERWOOD COURT,HU114DF
|
||||
HA 32,7,SHERWOOD COURT,HU114DF
|
||||
HA 32,8,SHERWOOD COURT,HU114DF
|
||||
HA 32,9,SHERWOOD COURT,HU114DF
|
||||
HA 32,10,SHERWOOD COURT,HU114DF
|
||||
HA 32,27,Seaton Grove,HU4 6HF
|
||||
HA 32,29,Seaton Grove,HU4 6HF
|
||||
HA 32,31,Seaton Grove,HU4 6HF
|
||||
HA 32,33,Seaton Grove,HU4 6HF
|
||||
HA 32,35,Seaton Grove,HU4 6HF
|
||||
HA 32,39,Seaton Grove,HU4 6HF
|
||||
HA 32,41,Seaton Grove,HU4 6HF
|
||||
HA 32,43,Seaton Grove,HU4 6HF
|
||||
HA 32,7,Norton Grove,HU4 6HG
|
||||
HA 32,9,Norton Grove,HU4 6HG
|
||||
HA 32,11,Norton Grove,HU4 6HG
|
||||
HA 32,15,Norton Grove,HU4 6HG
|
||||
HA 32,17,Norton Grove,HU4 6HG
|
||||
HA 32,19,Norton Grove,HU4 6HG
|
||||
HA 32,21,Norton Grove,HU4 6HG
|
||||
HA 32,28,Coxwold,HU4 6HH
|
||||
HA 32,30,Coxwold,HU4 6HH
|
||||
HA 32,32,Coxwold,HU4 6HH
|
||||
HA 32,34,Coxwold,HU4 6HH
|
||||
HA 32,36,Coxwold,HU4 6HH
|
||||
HA 32,38,Coxwold,HU4 6HH
|
||||
HA 32,40,Coxwold,HU4 6HH
|
||||
HA 32,42,Coxwold,HU4 6HH
|
||||
HA 32,44,Coxwold,HU4 6HH
|
||||
HA 32,971,HESSLE ROAD,HU4 6QG
|
||||
HA 32,973,HESSLE ROAD,HU4 6QG
|
||||
HA 32,975,HESSLE ROAD,HU4 6QG
|
||||
HA 32,977,HESSLE ROAD,HU4 6QG
|
||||
HA 32,981,HESSLE ROAD,HU4 6QG
|
||||
HA 32,983,HESSLE ROAD,HU4 6QG
|
||||
HA 32,1,Hessle Road,HU4 6RS
|
||||
HA 32,2,Hessle Road,HU4 6RS
|
||||
HA 32,3,Hessle Road,HU4 6RS
|
||||
HA 32,4,Hessle Road,HU4 6RS
|
||||
HA 32,5,Hessle Road,HU4 6RS
|
||||
HA 32,6,Hessle Road,HU4 6RS
|
||||
HA 32,7,Hessle Road,HU4 6RS
|
||||
HA 32,8,Hessle Road,HU4 6RS
|
||||
HA 32,9,Hessle Road,HU4 6RS
|
||||
HA 32,10,Hessle Road,HU4 6RS
|
||||
HA 32,11,Hessle Road,HU4 6RS
|
||||
HA 32,12,Hessle Road,HU4 6RS
|
||||
HA 32,14,Hessle Road,HU4 6RS
|
||||
HA 32,15,Hessle Road,HU4 6RS
|
||||
HA 32,16,Hessle Road,HU4 6RS
|
||||
HA 32,17,Hessle Road,HU4 6RS
|
||||
HA 32,18,Hessle Road,HU4 6RS
|
||||
HA 32,19,Hessle Road,HU4 6RS
|
||||
HA 32,20,Hessle Road,HU4 6RS
|
||||
HA 32,21,Hessle Road,HU4 6RS
|
||||
HA 32,22,Hessle Road,HU4 6RS
|
||||
HA 32,23,Hessle Road,HU4 6RS
|
||||
HA 32,24,Hessle Road,HU4 6RS
|
||||
HA 32,25,Hessle Road,HU4 6RS
|
||||
HA 32,26,Hessle Road,HU4 6RS
|
||||
HA 32,27,Hessle Road,HU4 6RS
|
||||
HA 32,28,Hessle Road,HU4 6RS
|
||||
HA 32,29,Hessle Road,HU4 6RS
|
||||
HA 32,30,Hessle Road,HU4 6RS
|
||||
HA 32,31,Hessle Road,HU4 6RS
|
||||
HA 32,32,Hessle Road,HU4 6RS
|
||||
HA 32,33,Hessle Road,HU4 6RS
|
||||
HA 32,34,Hessle Road,HU4 6RS
|
||||
HA 32,35,Hessle Road,HU4 6RS
|
||||
HA 32,36,Hessle Road,HU4 6RS
|
||||
HA 32,37,Hessle Road,HU4 6RS
|
||||
HA 32,46,FORESTER WAY,HU4 6SR
|
||||
HA 32,48,FORESTER WAY,HU4 6SR
|
||||
HA 32,50,FORESTER WAY,HU4 6SR
|
||||
HA 32,54,FORESTER WAY,HU4 6SR
|
||||
HA 32,56,FORESTER WAY,HU4 6SR
|
||||
HA 32,62,FORESTER WAY,HU4 6SR
|
||||
HA 32,64,FORESTER WAY,HU4 6SR
|
||||
HA 32,66,FORESTER WAY,HU4 6SR
|
||||
HA 32,68,FORESTER WAY,HU4 6SR
|
||||
HA 32,70,FORESTER WAY,HU4 6SR
|
||||
HA 32,15,SUMMERGROVES WAY,HU4 6SZ
|
||||
HA 32,1,WALNUT TREE WAY,HU4 6TG
|
||||
HA 32,2,WALNUT TREE WAY,HU4 6TG
|
||||
HA 32,3,WALNUT TREE WAY,HU4 6TG
|
||||
HA 32,4,WALNUT TREE WAY,HU4 6TG
|
||||
HA 32,7,WALNUT TREE WAY,HU4 6TG
|
||||
HA 32,8,WALNUT TREE WAY,HU4 6TG
|
||||
HA 32,9,WALNUT TREE WAY,HU4 6TG
|
||||
HA 32,291,Cottingham Road,HU5 4AT
|
||||
HA 32,293,Cottingham Road,HU5 4AT
|
||||
HA 32,295,Cottingham Road,HU5 4AT
|
||||
HA 32,297,Cottingham Road,HU5 4AT
|
||||
HA 32,299,Cottingham Road,HU5 4AT
|
||||
HA 32,301,Cottingham Road,HU5 4AT
|
||||
HA 32,303,Cottingham Road,HU5 4AT
|
||||
HA 32,305,Cottingham Road,HU5 4AT
|
||||
HA 32,307,Cottingham Road,HU5 4AT
|
||||
HA 32,309,Cottingham Road,HU5 4AT
|
||||
HA 32,1,Edith Cavell Court,HU5 4BA
|
||||
HA 32,2,Edith Cavell Court,HU5 4BA
|
||||
HA 32,3,Edith Cavell Court,HU5 4BA
|
||||
HA 32,4,Edith Cavell Court,HU5 4BA
|
||||
HA 32,5,Edith Cavell Court,HU5 4BA
|
||||
HA 32,6,Edith Cavell Court,HU5 4BA
|
||||
HA 32,7,Edith Cavell Court,HU5 4BA
|
||||
HA 32,8,Edith Cavell Court,HU5 4BA
|
||||
HA 32,9,Edith Cavell Court,HU5 4BA
|
||||
HA 32,10,Edith Cavell Court,HU5 4BA
|
||||
HA 32,11,Edith Cavell Court,HU5 4BA
|
||||
HA 32,12,Edith Cavell Court,HU5 4BA
|
||||
HA 32,106,Barringhton Avenue,HU5 4BE
|
||||
HA 32,112,Barringhton Avenue,HU5 4BE
|
||||
HA 32,114,Barringhton Avenue,HU5 4BE
|
||||
HA 32,116,Barringhton Avenue,HU5 4BE
|
||||
HA 32,118,Barringhton Avenue,HU5 4BE
|
||||
HA 32,120,Barringhton Avenue,HU5 4BE
|
||||
HA 32,122,Barringhton Avenue,HU5 4BE
|
||||
HA 32,124,Barringhton Avenue,HU5 4BE
|
||||
HA 32,126,Barringhton Avenue,HU5 4BE
|
||||
HA 32,1,Florence Nightingale Court,HU5 4BW
|
||||
HA 32,2,Florence Nightingale Court,HU5 4BW
|
||||
HA 32,3,Florence Nightingale Court,HU5 4BW
|
||||
HA 32,4,Florence Nightingale Court,HU5 4BW
|
||||
HA 32,5,Florence Nightingale Court,HU5 4BW
|
||||
HA 32,6,Florence Nightingale Court,HU5 4BW
|
||||
HA 32,7,Florence Nightingale Court,HU5 4BW
|
||||
HA 32,8,Florence Nightingale Court,HU5 4BW
|
||||
HA 32,9,Florence Nightingale Court,HU5 4BW
|
||||
HA 32,10,Florence Nightingale Court,HU5 4BW
|
||||
HA 32,11,Florence Nightingale Court,HU5 4BW
|
||||
HA 32,12,Florence Nightingale Court,HU5 4BW
|
||||
HA 32,14,Florence Nightingale Court,HU5 4BW
|
||||
HA 32,15,Florence Nightingale Court,HU5 4BW
|
||||
HA 32,17,Florence Nightingale Court,HU5 4BW
|
||||
HA 32,19,Florence Nightingale Court,HU5 4BW
|
||||
HA 32,12,Green Close,HU6 8DA
|
||||
HA 32,44,Green Close,HU6 8DA
|
||||
HA 32,49,Green Close,HU6 8DA
|
||||
HA 32,50,Green Close,HU6 8DA
|
||||
HA 32,14,Ashbury Court,HU6 8DY
|
||||
HA 32,38,Westgarth Avenue,HU6 8LS
|
||||
HA 32,46,WESTGARTH AVENUE,HU6 8LS
|
||||
HA 32,48,WESTGARTH AVENUE,HU6 8LS
|
||||
HA 32,54,Westgarth Avenue,HU6 8LS
|
||||
HA 32,10,BEAUTIMAN COURT,HU6 8LX
|
||||
HA 32,1,Rosey Row,HU9 1HF
|
||||
HA 32,2,Rosey Row,HU9 1HF
|
||||
HA 32,3,Rosey Row,HU9 1HF
|
||||
HA 32,4,Rosey Row,HU9 1HF
|
||||
HA 32,5,Rosey Row,HU9 1HF
|
||||
HA 32,6,Rosey Row,HU9 1HF
|
||||
HA 32,7,Rosey Row,HU9 1HF
|
||||
HA 32,8,Rosey Row,HU9 1HF
|
||||
HA 32,9,Rosey Row,HU9 1HF
|
||||
HA 32,10,Rosey Row,HU9 1HF
|
||||
HA 32,11,Rosey Row,HU9 1HF
|
||||
HA 32,12,Rosey Row,HU9 1HF
|
||||
HA 32,14,Rosey Row,HU9 1HF
|
||||
HA 32,15,Rosey Row,HU9 1HF
|
||||
HA 32,16,Rosey Row,HU9 1HF
|
||||
HA 32,17,Rosey Row,HU9 1HF
|
||||
HA 32,18,Rosey Row,HU9 1HF
|
||||
HA 32,19,Rosey Row,HU9 1HF
|
||||
HA 32,20,Rosey Row,HU9 1HF
|
||||
HA 32,21,Rosey Row,HU9 1HF
|
||||
HA 32,24,Steynburg Street,HU9 2PF
|
||||
HA 32,26,Steynburg Street,HU9 2PF
|
||||
HA 32,28,Steynburg Street,HU9 2PF
|
||||
HA 32,30,Steynburg Street,HU9 2PF
|
||||
HA 32,36,Steynburg Street,HU9 2PF
|
||||
HA 32,38,Steynburg Street,HU9 2PF
|
||||
HA 32,40,Steynburg Street,HU9 2PF
|
||||
HA 32,42,Steynburg Street,HU9 2PF
|
||||
HA 32,19,Rustenburg,HU9 2PT
|
||||
HA 32,21,Rustenburg,HU9 2PT
|
||||
HA 32,23,Rustenburg,HU9 2PT
|
||||
HA 32,25,Rustenburg,HU9 2PT
|
||||
HA 32,27,Rustenburg,HU9 2PT
|
||||
HA 32,29,Rustenburg,HU9 2PT
|
||||
HA 32,31,Rustenburg,HU9 2PT
|
||||
HA 32,33,Rustenburg,HU9 2PT
|
||||
HA 32,35,Rustenburg,HU9 2PT
|
||||
HA 32,37,Rustenburg,HU9 2PT
|
||||
HA 32,55,Rustenburg,HU9 2PT
|
||||
HA 32,57,Rustenburg,HU9 2PT
|
||||
HA 32,59,Rustenburg,HU9 2PT
|
||||
HA 32,61,Rustenburg,HU9 2PT
|
||||
HA 32,3,The Broadway,HU9 3JH
|
||||
HA 32,5,THE BROADWAY,HU9 3JH
|
||||
HA 32,7,The Broadway,HU9 3JH
|
||||
HA 32,9,The Broadway,HU9 3JH
|
||||
HA 32,11,The Broadway,HU9 3JH
|
||||
HA 32,1,BOWLING CIRCLE,HU9 3JL
|
||||
HA 32,3,BOWLING CIRCLE,HU9 3JL
|
||||
HA 32,5,BOWLING CIRCLE,HU9 3JL
|
||||
HA 32,7,BOWLING CIRCLE,HU9 3JL
|
||||
HA 32,9,BOWLING CIRCLE,HU9 3JL
|
||||
HA 32,1,MAJESTIC COURT,HU9 3JY
|
||||
HA 32,2,MAJESTIC COURT,HU9 3JY
|
||||
HA 32,3,MAJESTIC COURT,HU9 3JY
|
||||
HA 32,4,MAJESTIC COURT,HU9 3JY
|
||||
HA 32,5,MAJESTIC COURT,HU9 3JY
|
||||
HA 32,6,MAJESTIC COURT,HU9 3JY
|
||||
HA 32,7,MAJESTIC COURT,HU9 3JY
|
||||
HA 32,8,MAJESTIC COURT,HU9 3JY
|
||||
HA 32,9,MAJESTIC COURT,HU9 3JY
|
||||
HA 32,10,MAJESTIC COURT,HU9 3JY
|
||||
HA 32,11,MAJESTIC COURT,HU9 3JY
|
||||
HA 32,12,MAJESTIC COURT,HU9 3JY
|
||||
HA 32,14,MAJESTIC COURT,HU9 3JY
|
||||
HA 32,15,Majestic Court,HU9 3JY
|
||||
HA 32,16,MAJESTIC COURT,HU9 3JY
|
||||
HA 32,1,ROYALE COURT,HU9 3JZ
|
||||
HA 32,2,ROYALE COURT,HU9 3JZ
|
||||
HA 32,3,ROYALE COURT,HU9 3JZ
|
||||
HA 32,4,ROYALE COURT,HU9 3JZ
|
||||
HA 32,5,ROYALE COURT,HU9 3JZ
|
||||
HA 32,6,ROYALE COURT,HU9 3JZ
|
||||
HA 32,7,ROYALE COURT,HU9 3JZ
|
||||
HA 32,8,ROYALE COURT,HU9 3JZ
|
||||
HA 32,9,ROYALE COURT,HU9 3JZ
|
||||
HA 32,10,ROYALE COURT,HU9 3JZ
|
||||
HA 32,11,ROYALE COURT,HU9 3JZ
|
||||
HA 32,12,ROYALE COURT,HU9 3JZ
|
||||
HA 32,14,ROYALE COURT,HU9 3JZ
|
||||
HA 32,16,ROYALE COURT,HU9 3JZ
|
||||
HA 32,17,ROYALE COURT,HU9 3JZ
|
||||
HA 32,18,ROYALE COURT,HU9 3JZ
|
||||
HA 32,19,ROYALE COURT,HU9 3JZ
|
||||
HA 32,20,ROYALE COURT,HU9 3JZ
|
||||
HA 32,21,ROYALE COURT,HU9 3JZ
|
||||
HA 32,22,ROYALE COURT,HU9 3JZ
|
||||
HA 32,23,ROYALE COURT,HU9 3JZ
|
||||
HA 32,24,ROYALE COURT,HU9 3JZ
|
||||
HA 32,25,ROYALE COURT,HU9 3JZ
|
||||
HA 32,26,ROYALE COURT,HU9 3JZ
|
||||
HA 32,12A,ROYALE COURT,HU9 3JZ
|
||||
HA 32,79,MAYBURY ROAD,HU9 3LB
|
||||
HA 32,1,HEBRIDES CLOSE,HU9 3LF
|
||||
HA 32,2,HEBRIDES CLOSE,HU9 3LF
|
||||
HA 32,3,HEBRIDES CLOSE,HU9 3LF
|
||||
HA 32,4,HEBRIDES CLOSE,HU9 3LF
|
||||
HA 32,5,HEBRIDES CLOSE,HU9 3LF
|
||||
HA 32,6,HEBRIDES CLOSE,HU9 3LF
|
||||
HA 32,7,HEBRIDES CLOSE,HU9 3LF
|
||||
HA 32,8,HEBRIDES CLOSE,HU9 3LF
|
||||
HA 32,9,HEBRIDES CLOSE,HU9 3LF
|
||||
HA 32,10,HEBRIDES CLOSE,HU9 3LF
|
||||
HA 32,11,HEBRIDES CLOSE,HU9 3LF
|
||||
HA 32,14,Hebrides Close,HU9 3LF
|
||||
HA 32,15,HEBRIDES CLOSE,HU9 3LF
|
||||
HA 32,16,HEBRIDES CLOSE,HU9 3LF
|
||||
HA 32,17,HEBRIDES CLOSE,HU9 3LF
|
||||
HA 32,18,HEBRIDES CLOSE,HU9 3LF
|
||||
HA 32,19,HEBRIDES CLOSE,HU9 3LF
|
||||
HA 32,20,HEBRIDES CLOSE,HU9 3LF
|
||||
HA 32,21,HEBRIDES CLOSE,HU9 3LF
|
||||
HA 32,22,HEBRIDES CLOSE,HU9 3LF
|
||||
HA 32,23,HEBRIDES CLOSE,HU9 3LF
|
||||
HA 32,24,HEBRIDES CLOSE,HU9 3LF
|
||||
HA 32,25,HEBRIDES CLOSE,HU9 3LF
|
||||
HA 32,27,HEBRIDES CLOSE,HU9 3LF
|
||||
HA 32,28,HEBRIDES CLOSE,HU9 3LF
|
||||
HA 32,29,HEBRIDES CLOSE,HU9 3LF
|
||||
HA 32,30,HEBRIDES CLOSE,HU9 3LF
|
||||
HA 32,31,HEBRIDES CLOSE,HU9 3LF
|
||||
HA 32,32,HEBRIDES CLOSE,HU9 3LF
|
||||
HA 32,33,HEBRIDES CLOSE,HU9 3LF
|
||||
HA 32,34,HEBRIDES CLOSE,HU9 3LF
|
||||
HA 32,35,HEBRIDES CLOSE,HU9 3LF
|
||||
HA 32,36,HEBRIDES CLOSE,HU9 3LF
|
||||
HA 32,39,HEBRIDES CLOSE,HU9 3LF
|
||||
HA 32,40,HEBRIDES CLOSE,HU9 3LF
|
||||
HA 32,41,HEBRIDES CLOSE,HU9 3LF
|
||||
HA 32,42,HEBRIDES CLOSE,HU9 3LF
|
||||
HA 32,2,CROMARTY CLOSE,HU9 3LG
|
||||
HA 32,4,CROMARTY CLOSE,HU9 3LG
|
||||
HA 32,6,CROMARTY CLOSE,HU9 3LG
|
||||
HA 32,8,CROMARTY CLOSE,HU9 3LG
|
||||
HA 32,10,CROMARTY CLOSE,HU9 3LG
|
||||
HA 32,12,CROMARTY CLOSE,HU9 3LG
|
||||
HA 32,14,CROMARTY CLOSE,HU9 3LG
|
||||
HA 32,16,CROMARTY CLOSE,HU9 3LG
|
||||
HA 32,18,CROMARTY CLOSE,HU9 3LG
|
||||
HA 32,20,CROMARTY CLOSE,HU9 3LG
|
||||
HA 32,22,CROMARTY CLOSE,HU9 3LG
|
||||
HA 32,24,CROMARTY CLOSE,HU9 3LG
|
||||
HA 32,26,CROMARTY CLOSE,HU9 3LG
|
||||
HA 32,28,CROMARTY CLOSE,HU9 3LG
|
||||
HA 32,30,CROMARTY CLOSE,HU9 3LG
|
||||
HA 32,32,CROMARTY CLOSE,HU9 3LG
|
||||
HA 32,34,CROMARTY CLOSE,HU9 3LG
|
||||
HA 32,36,CROMARTY CLOSE,HU9 3LG
|
||||
HA 32,40,CROMARTY CLOSE,HU9 3LG
|
||||
HA 32,42,CROMARTY CLOSE,HU9 3LG
|
||||
HA 32,44,CROMARTY CLOSE,HU9 3LG
|
||||
HA 32,46,CROMARTY CLOSE,HU9 3LG
|
||||
HA 32,48,CROMARTY CLOSE,HU9 3LG
|
||||
HA 32,48,CROMARTY CLOSE,HU9 3LG
|
||||
HA 32,50,CROMARTY CLOSE,HU9 3LG
|
||||
HA 32,52,CROMARTY CLOSE,HU9 3LG
|
||||
HA 32,54,CROMARTY CLOSE,HU9 3LG
|
||||
HA 32,56,CROMARTY CLOSE,HU9 3LG
|
||||
HA 32,58,CROMARTY CLOSE,HU9 3LG
|
||||
HA 32,60,CROMARTY CLOSE,HU9 3LG
|
||||
HA 32,62,CROMARTY CLOSE,HU9 3LG
|
||||
HA 32,64,CROMARTY CLOSE,HU9 3LG
|
||||
HA 32,66,CROMARTY CLOSE,HU9 3LG
|
||||
HA 32,68,CROMARTY CLOSE,HU9 3LG
|
||||
HA 32,1,RONALDSWAY CLOSE,HU9 3LH
|
||||
HA 32,2,RONALDSWAY CLOSE,HU9 3LH
|
||||
HA 32,3,RONALDSWAY CLOSE,HU9 3LH
|
||||
HA 32,3,"MALIN LODGE, RONALDSWAY CLOSE",HU9 3LH
|
||||
HA 32,4,"MALIN LODGE, RONALDSWAY CLOSE",HU9 3LH
|
||||
HA 32,6,"MALIN LODGE, RONALDSWAY CLOSE",HU9 3LH
|
||||
HA 32,9,"MALIN LODGE, RONALDSWAY CLOSE",HU9 3LH
|
||||
HA 32,10,"MALIN LODGE, RONALDSWAY CLOSE",HU9 3LH
|
||||
HA 32,15,"MALIN LODGE, RONALDSWAY CLOSE",HU9 3LH
|
||||
HA 32,17,"MALIN LODGE, RONALDSWAY CLOSE",HU9 3LH
|
||||
HA 32,18,"MALIN LODGE, RONALDSWAY CLOSE",HU9 3LH
|
||||
HA 32,7,BROADWAY DRIVE,HU9 3PA
|
||||
HA 32,9,BROADWAY DRIVE,HU9 3PA
|
||||
HA 32,11,BROADWAY DRIVE,HU9 3PA
|
||||
HA 32,15,Broadway Drive,HU9 3PA
|
||||
HA 32,17,Broadway Drive,HU9 3PA
|
||||
HA 32,19,Broadway Drive,HU9 3PA
|
||||
HA 32,21,Broadway Drive,HU9 3PA
|
||||
HA 32,23,Broadway Drive,HU9 3PA
|
||||
HA 32,25,Broadway Drive,HU9 3PA
|
||||
HA 32,27,Broadway Drive,HU9 3PA
|
||||
HA 32,29,Broadway Drive,HU9 3PA
|
||||
HA 32,31,Broadway Drive,HU9 3PA
|
||||
HA 32,33,Broadway Drive,HU9 3PA
|
||||
HA 32,35,Broadway Drive,HU9 3PA
|
||||
HA 32,37,BROADWAY DRIVE,HU9 3PA
|
||||
HA 32,39,BROADWAY DRIVE,HU9 3PA
|
||||
HA 32,41,Broadway Drive,HU9 3PA
|
||||
HA 32,43,BROADWAY DRIVE,HU9 3PA
|
||||
HA 32,45,BROADWAY DRIVE,HU9 3PA
|
||||
HA 32,47,BROADWAY DRIVE,HU9 3PA
|
||||
HA 32,49,BROADWAY DRIVE,HU9 3PA
|
||||
HA 32,2,Broadway Drive,HU9 3PB
|
||||
HA 32,4,Broadway Drive,HU9 3PB
|
||||
HA 32,6,Broadway Drive,HU9 3PB
|
||||
HA 32,8,Broadway Drive,HU9 3PB
|
||||
HA 32,10,Broadway Drive,HU9 3PB
|
||||
HA 32,12,Broadway Drive,HU9 3PB
|
||||
HA 32,14,Broadway Drive,HU9 3PB
|
||||
HA 32,16,Broadway Drive,HU9 3PB
|
||||
HA 32,18,Broadway Drive,HU9 3PB
|
||||
HA 32,20,Broadway Drive,HU9 3PB
|
||||
HA 32,22,Broadway Drive,HU9 3PB
|
||||
HA 32,26,Broadway Drive,HU9 3PB
|
||||
HA 32,28,Broadway Drive,HU9 3PB
|
||||
HA 32,28,ADA HOLMES CIRCLE,HU9 3PB
|
||||
HA 32,30,Broadway Drive,HU9 3PB
|
||||
HA 32,32,Broadway Drive,HU9 3PB
|
||||
HA 32,34,Broadway Drive,HU9 3PB
|
||||
HA 32,36,Broadway Drive,HU9 3PB
|
||||
HA 32,38,Broadway Drive,HU9 3PB
|
||||
HA 32,40,Broadway Drive,HU9 3PB
|
||||
HA 32,42,Broadway Drive,HU9 3PB
|
||||
HA 32,44,Broadway Drive,HU9 3PB
|
||||
HA 32,46,Broadway Drive,HU9 3PB
|
||||
HA 32,48,Broadway Drive,HU9 3PB
|
||||
HA 32,52,Broadway Drive,HU9 3PB
|
||||
HA 32,56,Broadway Drive,HU9 3PB
|
||||
HA 32,58,Broadway Drive,HU9 3PB
|
||||
HA 32,60,Broadway Drive,HU9 3PB
|
||||
HA 32,55,RUTHERGLEN DRIVE,HU9 3PF
|
||||
HA 32,57,RUTHERGLEN DRIVE,HU9 3PF
|
||||
HA 32,59,RUTHERGLEN DRIVE,HU9 3PF
|
||||
HA 32,1,IMPERIAL COURT,HU9 3PG
|
||||
HA 32,3,IMPERIAL COURT,HU9 3PG
|
||||
HA 32,4,IMPERIAL COURT,HU9 3PG
|
||||
HA 32,5,IMPERIAL COURT,HU9 3PG
|
||||
HA 32,6,IMPERIAL COURT,HU9 3PG
|
||||
HA 32,7,IMPERIAL COURT,HU9 3PG
|
||||
HA 32,8,IMPERIAL COURT,HU9 3PG
|
||||
HA 32,9,IMPERIAL COURT,HU9 3PG
|
||||
HA 32,10,IMPERIAL COURT,HU9 3PG
|
||||
HA 32,10,SCHUBERT CLOSE,HU9 3PL
|
||||
HA 32,27,SCHUBERT CLOSE,HU9 3PL
|
||||
HA 32,28,SCHUBERT CLOSE,HU9 3PL
|
||||
HA 32,32,SCHUBERT CLOSE,HU9 3PL
|
||||
HA 32,1,Broadway Manor,HU9 3PN
|
||||
HA 32,1,Broadway Cottages,HU9 3PN
|
||||
HA 32,2,Broadway Manor,HU9 3PN
|
||||
HA 32,2,Broadway Cottages,HU9 3PN
|
||||
HA 32,3,Broadway Cottages,HU9 3PN
|
||||
HA 32,6,Broadway Manor,HU9 3PN
|
||||
HA 32,8,Broadway Manor,HU9 3PN
|
||||
HA 32,17,Broadway Manor,HU9 3PN
|
||||
HA 32,18,Broadway Manor,HU9 3PN
|
||||
HA 32,19,Broadway Manor,HU9 3PN
|
||||
HA 32,20,Broadway Manor,HU9 3PN
|
||||
HA 32,24,Broadway Manor,HU9 3PN
|
||||
HA 32,31,Broadway Manor,HU9 3PN
|
||||
HA 32,35,Broadway Manor,HU9 3PN
|
||||
HA 32,36,Broadway Manor,HU9 3PN
|
||||
HA 32,12A,Broadway Manor,HU9 3PN
|
||||
HA 32,1,FAROES CLOSE,HU9 4AN
|
||||
HA 32,2,Feroes Close,HU9 4AN
|
||||
HA 32,3,FAROES CLOSE,HU9 4AN
|
||||
HA 32,4,FAROES CLOSE,HU9 4AN
|
||||
HA 32,5,FAROES CLOSE,HU9 4AN
|
||||
HA 32,6,FAROES CLOSE,HU9 4AN
|
||||
HA 32,7,FAROES CLOSE,HU9 4AN
|
||||
HA 32,9,FAROES CLOSE,HU9 4AN
|
||||
HA 32,10,FAROES CLOSE,HU9 4AN
|
||||
HA 32,11,FAROES CLOSE,HU9 4AN
|
||||
HA 32,12,FAROES CLOSE,HU9 4AN
|
||||
HA 32,14,FAROES CLOSE,HU9 4AN
|
||||
HA 32,15,FAROES CLOSE,HU9 4AN
|
||||
HA 32,16,FAROES CLOSE,HU9 4AN
|
||||
HA 32,17,FAROES CLOSE,HU9 4AN
|
||||
HA 32,18,FAROES CLOSE,HU9 4AN
|
||||
HA 32,19,FAROES CLOSE,HU9 4AN
|
||||
HA 32,81,MAYBURY ROAD,HU93LB
|
||||
HA 32,1,ZIEGFELD COURT,HU93PH
|
||||
HA 32,2,ZIEGFELD COURT,HU93PH
|
||||
HA 32,3,ZIEGFELD COURT,HU93PH
|
||||
HA 32,4,ZIEGFELD COURT,HU93PH
|
||||
HA 32,5,ZIEGFELD COURT,HU93PH
|
||||
HA 32,6,ZIEGFELD COURT,HU93PH
|
||||
HA 32,7,ZIEGFELD COURT,HU93PH
|
||||
HA 32,8,ZIEGFELD COURT,HU93PH
|
||||
HA 32,9,ZIEGFELD COURT,HU93PH
|
||||
HA 32,1,GOLDEN COURT,HU93PJ
|
||||
HA 32,2,GOLDEN COURT,HU93PJ
|
||||
HA 32,3,GOLDEN COURT,HU93PJ
|
||||
HA 32,4,GOLDEN COURT,HU93PJ
|
||||
HA 32,5,GOLDEN COURT,HU93PJ
|
||||
HA 32,6,GOLDEN COURT,HU93PJ
|
||||
HA 32,7,GOLDEN COURT,HU93PJ
|
||||
HA 32,8,GOLDEN COURT,HU93PJ
|
||||
HA 32,10,GOLDEN COURT,HU93PJ
|
||||
HA 32,11,GOLDEN COURT,HU93PJ
|
||||
HA 32,12,GOLDEN COURT,HU93PJ
|
||||
HA 32,14,GOLDEN COURT,HU93PJ
|
||||
HA 32,15,GOLDEN COURT,HU93PJ
|
||||
HA 32,16,GOLDEN COURT,HU93PJ
|
||||
HA 32,17,GOLDEN COURT,HU93PJ
|
||||
HA 32,18,GOLDEN COURT,HU93PJ
|
||||
HA 32,19,GOLDEN COURT,HU93PJ
|
||||
HA 32,20,GOLDEN COURT,HU93PJ
|
||||
HA 32,22,GOLDEN COURT,HU93PJ
|
||||
HA 32,23,GOLDEN COURT,HU93PJ
|
||||
HA 32,24,GOLDEN COURT,HU93PJ
|
||||
HA 32,15,ROYALE COURT,HU9 3JZ
|
||||
HA 32,6,SHERWOOD COURT,HU114DF
|
||||
HA 32,979,HESSLE ROAD,HU4 6QG
|
||||
HA 32,985,HESSLE ROAD,HU4 6QG
|
||||
HA 32,2,BUSH CLOSE,HU4 6SP
|
||||
HA 32,11,BUSH CLOSE,HU4 6SP
|
||||
HA 32,16,BUSH CLOSE,HU4 6SP
|
||||
HA 32,52,FORESTER WAY,HU4 6SR
|
||||
HA 32,72,FORESTER WAY,HU4 6SR
|
||||
HA 32,74,FORESTER WAY,HU4 6SR
|
||||
HA 32,3,SUMMERGROVES WAY,HU4 6SZ
|
||||
HA 32,5,WALNUT TREE WAY,HU4 6TG
|
||||
HA 32,6,WALNUT TREE WAY,HU4 6TG
|
||||
HA 32,417,Endike Lane,HU6 8AG
|
||||
HA 32,5,Ashbury Court,HU6 8DA
|
||||
HA 32,9,Ashbury Court,HU6 8DA
|
||||
HA 32,12,Ashbury Court,HU6 8DA
|
||||
HA 32,28,Green Close,HU6 8DA
|
||||
HA 32,34,Green Close,HU6 8DA
|
||||
HA 32,51,Green Close,HU6 8DA
|
||||
HA 32,259,Endike Lane,HU6 8DX
|
||||
HA 32,261,Endike Lane,HU6 8DX
|
||||
HA 32,17,Ashbury Court,HU6 8DY
|
||||
HA 32,20,Ashbury Court,HU6 8DY
|
||||
HA 32,30,Westgarth Avenue,HU6 8LS
|
||||
HA 32,45,Westgarth Avenue,HU6 8LS
|
||||
HA 32,65,Westgarth Avenue,HU6 8LS
|
||||
HA 32,12,BEAUTIMAN COURT,HU6 8LX
|
||||
HA 32,1,THE BROADWAY,HU9 3JH
|
||||
HA 32,12,HEBRIDES CLOSE,HU9 3LF
|
||||
HA 32,26,HEBRIDES CLOSE,HU9 3LF
|
||||
HA 32,37,HEBRIDES CLOSE,HU9 3LF
|
||||
HA 32,38,HEBRIDES CLOSE,HU9 3LF
|
||||
HA 32,24,Broadway Drive,HU9 3PB
|
||||
HA 32,50,Broadway Drive,HU9 3PB
|
||||
HA 32,54,Broadway Drive,HU9 3PB
|
||||
HA 32,2,IMPERIAL COURT,HU9 3PG
|
||||
HA 32,5,SCHUBERT CLOSE,HU9 3PL
|
||||
HA 32,8,SCHUBERT CLOSE,HU9 3PL
|
||||
HA 32,19,SCHUBERT CLOSE,HU9 3PL
|
||||
HA 32,34,SCHUBERT CLOSE,HU9 3PL
|
||||
HA 32,8,FAROES CLOSE,HU9 4AN
|
||||
HA 32,9,GOLDEN COURT,HU93PJ
|
||||
HA 32,21,GOLDEN COURT,HU93PJ
|
||||
|
7667
etl/eligibility/ha_15_32/HA15 - ASSET LIST.csv
Normal file
7667
etl/eligibility/ha_15_32/HA15 - ASSET LIST.csv
Normal file
File diff suppressed because it is too large
Load diff
1419
etl/eligibility/ha_15_32/HA32 - ASSET LIST.csv
Normal file
1419
etl/eligibility/ha_15_32/HA32 - ASSET LIST.csv
Normal file
File diff suppressed because it is too large
Load diff
0
etl/eligibility/ha_15_32/__init__.py
Normal file
0
etl/eligibility/ha_15_32/__init__.py
Normal file
1122
etl/eligibility/ha_15_32/app.py
Normal file
1122
etl/eligibility/ha_15_32/app.py
Normal file
File diff suppressed because it is too large
Load diff
318
etl/eligibility/ha_15_32/ha33_app.py
Normal file
318
etl/eligibility/ha_15_32/ha33_app.py
Normal file
|
|
@ -0,0 +1,318 @@
|
|||
import msgpack
|
||||
from pathlib import Path
|
||||
from datetime import datetime
|
||||
import pandas as pd
|
||||
from utils.s3 import read_from_s3
|
||||
from utils.logger import setup_logger
|
||||
from dotenv import load_dotenv
|
||||
from backend.app.utils import read_parquet_from_s3
|
||||
from tqdm import tqdm
|
||||
from backend.SearchEpc import SearchEpc
|
||||
from etl.eligibility.Eligibility import Eligibility
|
||||
from etl.eligibility.ha_15_32.app import prepare_model_data_row
|
||||
from etl.epc.DataProcessor import DataProcessor
|
||||
from etl.epc.settings import COLUMNS_TO_MERGE_ON
|
||||
from backend.ml_models.api import ModelApi
|
||||
|
||||
import re
|
||||
|
||||
ENV_FILE = Path(__file__).parent / "etl" / "eligibility" / "ha_15_32" / ".env"
|
||||
|
||||
logger = setup_logger()
|
||||
load_dotenv(ENV_FILE)
|
||||
|
||||
|
||||
def load_ha_33():
|
||||
"""
|
||||
Load HA33 data
|
||||
:return:
|
||||
"""
|
||||
pd.set_option('display.max_rows', 500)
|
||||
pd.set_option('display.max_columns', 500)
|
||||
pd.set_option('display.width', 1000)
|
||||
|
||||
files = [
|
||||
"HA 33 Assets 1 of 4.csv",
|
||||
"HA 33 Assets 2 of 4.csv",
|
||||
"HA 33 Assets 3 of 4.csv",
|
||||
"HA 33 Assets 4 of 4.csv"
|
||||
]
|
||||
|
||||
data = []
|
||||
for file in files:
|
||||
part = pd.read_csv(f"etl/eligibility/ha_15_32/{file}", low_memory=False)
|
||||
cols_to_top = [c for c in part.columns if "Unnamed:" in c]
|
||||
part = part.drop(columns=cols_to_top)
|
||||
data.append(part)
|
||||
|
||||
data = pd.concat(data)
|
||||
|
||||
return data
|
||||
|
||||
|
||||
def standardise_ha33(data):
|
||||
data = data[~pd.isnull(data["ADDRESS"])]
|
||||
|
||||
split_addresses = data['ADDRESS'].str.split(',', expand=True)
|
||||
split_addresses.columns = ['address1', 'address2', 'address3', 'address4', 'address5']
|
||||
|
||||
data = pd.concat([data, split_addresses], axis=1)
|
||||
del split_addresses
|
||||
|
||||
# Using regex to replace 'FT {number}' or 'FT{number}', with '{number}'
|
||||
data['address1'] = data['address1'].str.replace(r'FT\s*(\d+)', r'\1', regex=True)
|
||||
|
||||
data.columns = [col.strip() for col in data.columns]
|
||||
|
||||
# TODO: we have 23 THIRTY SEVENTH AVENUE, can we replace THIRTY SEVENTH with 37TH
|
||||
|
||||
return data
|
||||
|
||||
|
||||
def get_ha_33data(data, cleaned, cleaning_data, created_at):
|
||||
house_type_lookup = {
|
||||
"Bungalow": "Bungalow",
|
||||
"Flat": "Flat",
|
||||
'House': "House",
|
||||
'Maisonette': "Maisonette",
|
||||
'Flalolflfp mujjjjunjimj': "Flat",
|
||||
'STUDIO': "Flat",
|
||||
}
|
||||
|
||||
# house = data[data["row_id"] == "h3390"].squeeze()
|
||||
|
||||
flat_pattern = r'flat\s+(\d+)'
|
||||
|
||||
# data = data[data["row_id"].isin(eco_row_ids)]
|
||||
|
||||
scoring_data = []
|
||||
results = []
|
||||
nodata = []
|
||||
for _, house in tqdm(data.iterrows(), total=len(data)):
|
||||
|
||||
# Check if we gave a flat in address 3
|
||||
if re.search(flat_pattern, house["address2"].lower(), re.IGNORECASE):
|
||||
address1 = house["address2"].strip()
|
||||
else:
|
||||
address1 = house["address1"].strip()
|
||||
|
||||
# I.e. just a number
|
||||
if len(address1) <= 3:
|
||||
address1 = address1 + " " + house["address2"].strip()
|
||||
|
||||
searcher = SearchEpc(
|
||||
address1=address1,
|
||||
postcode=house["POST CODE"]
|
||||
)
|
||||
|
||||
response = searcher.search()
|
||||
if response["status"] == 204:
|
||||
nodata.append(house["row_id"])
|
||||
continue
|
||||
|
||||
newest_epc, older_epcs, _ = searcher.retrieve(
|
||||
property_type=house_type_lookup.get(house["PROPERTY TYPE"], None),
|
||||
address=house["ADDRESS"],
|
||||
)
|
||||
|
||||
eligibility = Eligibility(epc=newest_epc, cleaned=cleaned)
|
||||
eligibility.check_gbis_warmfront()
|
||||
eligibility.check_eco4_warmfront()
|
||||
|
||||
# If the house is not identified, we do a full gbis and eco4 check
|
||||
eligibility.check_gbis()
|
||||
eligibility.check_eco4()
|
||||
|
||||
if eligibility.eco4_warmfront["eligible"]:
|
||||
scoring_dictionary = prepare_model_data_row(
|
||||
property_id=house["row_id"],
|
||||
modelling_epc=eligibility.epc,
|
||||
cleaned=cleaned,
|
||||
cleaning_data=cleaning_data,
|
||||
created_at=created_at
|
||||
)
|
||||
scoring_data.extend(scoring_dictionary)
|
||||
|
||||
# If nothing is eligible or gbis is eligible, then we make a record this
|
||||
results.append(
|
||||
{
|
||||
"row_id": house["row_id"],
|
||||
"gbis_eligible": eligibility.gbis_warmfront,
|
||||
"eco4_eligible": eligibility.eco4_warmfront["eligible"],
|
||||
"eco4_message": eligibility.eco4_warmfront["message"],
|
||||
"sap": float(eligibility.epc["current-energy-efficiency"]),
|
||||
"gbis_eligible_future": eligibility.gbis["eligible"],
|
||||
"gbis_eligible_future_message": eligibility.gbis["message"],
|
||||
"eco4_eligible_future": eligibility.eco4["eligible"],
|
||||
"eco4_eligible_future_message": eligibility.eco4["message"],
|
||||
# Property components
|
||||
"roof": eligibility.roof["clean_description"],
|
||||
"walls": eligibility.walls["clean_description"],
|
||||
"heating": eligibility.epc["mainheat-description"],
|
||||
"tenure": eligibility.tenure,
|
||||
"date_epc": eligibility.epc["lodgement-date"],
|
||||
}
|
||||
)
|
||||
|
||||
# import pickle
|
||||
# with open("ha33_results.pickle", "wb") as f:
|
||||
# pickle.dump({
|
||||
# "results": results,
|
||||
# "scoring_data": scoring_data,
|
||||
# "nodata": nodata
|
||||
# }, f)
|
||||
# with open("ha33_results.pickle", "rb") as f:
|
||||
# data = pickle.load(f)
|
||||
# results = data["results"]
|
||||
# scoring_data = data["scoring_data"]
|
||||
# nodata = data["nodata"]
|
||||
|
||||
scoring_df = pd.DataFrame(scoring_data)
|
||||
# Implement the same process that is being used in the recommendation engine to cleaning scoring_df
|
||||
|
||||
# Perform the same cleaning as in the model - first clean number of room variables though
|
||||
scoring_df = DataProcessor.apply_averages_cleaning(
|
||||
data_to_clean=scoring_df,
|
||||
cleaning_data=cleaning_data,
|
||||
cols_to_merge_on=['PROPERTY_TYPE', 'BUILT_FORM', 'CONSTRUCTION_AGE_BAND', 'LOCAL_AUTHORITY'],
|
||||
colnames=["NUMBER_HABITABLE_ROOMS", "NUMBER_HEATED_ROOMS"],
|
||||
)
|
||||
|
||||
scoring_df = DataProcessor.apply_averages_cleaning(
|
||||
data_to_clean=scoring_df,
|
||||
cleaning_data=cleaning_data,
|
||||
cols_to_merge_on=COLUMNS_TO_MERGE_ON + ["LOCAL_AUTHORITY"],
|
||||
).drop(columns=["LOCAL_AUTHORITY"])
|
||||
|
||||
scoring_df = DataProcessor.clean_missings_after_description_process(
|
||||
scoring_df,
|
||||
ignore_cols=[c for c in scoring_df.columns if ("thermal_transmittance" in c) or (
|
||||
"insulation_thickness" in c) or ("ENERGY_EFF" in c)]
|
||||
)
|
||||
|
||||
scoring_df = DataProcessor.clean_efficiency_variables(scoring_df)
|
||||
|
||||
model_api = ModelApi(portfolio_id="ha33-eligibility", timestamp=created_at)
|
||||
all_predictions = model_api.predict_all(
|
||||
df=scoring_df,
|
||||
bucket="retrofit-data-dev",
|
||||
prediction_buckets={
|
||||
"sap_change_predictions": "retrofit-sap-predictions-dev",
|
||||
"heat_demand_predictions": "retrofit-heat-predictions-dev",
|
||||
"carbon_change_predictions": "retrofit-carbon-predictions-dev"
|
||||
}
|
||||
)
|
||||
|
||||
# merge the predictions onto the scoring_df
|
||||
predictions = all_predictions["sap_change_predictions"].copy()
|
||||
|
||||
results_df = pd.DataFrame(results)
|
||||
|
||||
predictions = predictions.rename(columns={"property_id": "row_id"}).merge(
|
||||
results_df[["row_id", "sap"]], how="left", on="row_id"
|
||||
)
|
||||
predictions["sap_uplift"] = predictions["predictions"] - predictions["sap"]
|
||||
predictions = predictions.groupby("row_id")["sap_uplift"].sum().reset_index()
|
||||
|
||||
results_df = results_df.merge(
|
||||
predictions[["sap_uplift", "row_id"]],
|
||||
how="left",
|
||||
on="row_id"
|
||||
)
|
||||
|
||||
results_df["post_install_sap"] = results_df["sap"] + results_df["sap_uplift"]
|
||||
|
||||
eligibility_assessment = []
|
||||
for _, row in results_df[results_df["eco4_eligible"] == True].iterrows():
|
||||
# The upgrade requirements are dependent on the current SAP
|
||||
|
||||
# If the property is an F or G, it only needs to upgrade to an %
|
||||
if row["sap"] <= 38:
|
||||
if row["post_install_sap"] >= 57:
|
||||
eligibility_classification = "highest confidence"
|
||||
elif row["post_install_sap"] >= 55:
|
||||
eligibility_classification = "high confidence"
|
||||
elif row["post_install_sap"] >= 53:
|
||||
eligibility_classification = "medium confidence"
|
||||
else:
|
||||
eligibility_classification = "unlikely"
|
||||
else:
|
||||
|
||||
if row["post_install_sap"] >= 71:
|
||||
eligibility_classification = "highest confidence"
|
||||
elif row["post_install_sap"] >= 69:
|
||||
eligibility_classification = "high confidence"
|
||||
elif row["post_install_sap"] >= 67:
|
||||
eligibility_classification = "medium confidence"
|
||||
else:
|
||||
eligibility_classification = "unlikely"
|
||||
|
||||
eligibility_assessment.append(
|
||||
{
|
||||
"row_id": row["row_id"],
|
||||
"eligibility_classification": eligibility_classification
|
||||
}
|
||||
)
|
||||
|
||||
eligibility_assessment = pd.DataFrame(eligibility_assessment)
|
||||
|
||||
results_df = results_df.merge(
|
||||
eligibility_assessment, how="left", on="row_id"
|
||||
)
|
||||
|
||||
return results_df, scoring_data, nodata
|
||||
|
||||
|
||||
def analyse_ha_33(results_df, data):
|
||||
results_df_social = results_df[results_df["tenure"] == "Rented (social)"]
|
||||
|
||||
results_df_social["tenure"].value_counts()
|
||||
|
||||
data[data["row_id"].isin(results_df_social["row_id"].values)]["PROPERTY TYPE"].value_counts()
|
||||
|
||||
n_identified = (results_df_social["gbis_eligible"] | results_df_social["eco4_eligible"]).sum()
|
||||
n_eco4 = results_df_social["eco4_eligible"].sum()
|
||||
n_gbis = results_df_social[~results_df_social["eco4_eligible"]]["gbis_eligible"].sum()
|
||||
|
||||
eco_eligibile = results_df_social[results_df_social["eco4_eligible"]]
|
||||
eco_eligibile["walls"].value_counts()
|
||||
eco_eligibile["roof"].value_counts()
|
||||
|
||||
results_df_social[results_df_social["gbis_eligible"] | results_df_social["eco4_eligible"]]["tenure"].value_counts()
|
||||
|
||||
results_df_social["eligibility_classification"].value_counts()
|
||||
|
||||
future_possibilities_eco = results_df[
|
||||
(results_df["eco4_eligible_future"] == True) & (~(results_df["gbis_eligible"] | results_df["eco4_eligible"]))
|
||||
].copy()
|
||||
|
||||
future_possibilities_gbis = results_df[
|
||||
(results_df["gbis_eligible_future"] == True) & (results_df["eco4_eligible_future"] == False) & (
|
||||
~(results_df["gbis_eligible"] | results_df["eco4_eligible"]))
|
||||
].copy()
|
||||
|
||||
|
||||
def app():
|
||||
"""
|
||||
Because HA33 is large, we deal with it separately
|
||||
:return:
|
||||
"""
|
||||
|
||||
data = load_ha_33()
|
||||
|
||||
data = standardise_ha33(data)
|
||||
data["row_id"] = ["h33" + str(i) for i in range(0, len(data))]
|
||||
|
||||
cleaned = read_from_s3(
|
||||
s3_file_name="cleaned_epc_data/cleaned.bson",
|
||||
bucket_name="retrofit-data-dev"
|
||||
)
|
||||
cleaned = msgpack.unpackb(cleaned, raw=False)
|
||||
|
||||
cleaning_data = read_parquet_from_s3(
|
||||
bucket_name="retrofit-data-dev", file_key="sap_change_model/cleaning_dataset.parquet",
|
||||
)
|
||||
|
||||
created_at = datetime.now().isoformat()
|
||||
|
||||
results_df, _, _ = get_ha_33data(data, cleaned, cleaning_data, created_at)
|
||||
11
etl/eligibility/ha_15_32/requirements.txt
Normal file
11
etl/eligibility/ha_15_32/requirements.txt
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
pandas
|
||||
pydantic==1.10.11
|
||||
epc-api-python==1.0.2
|
||||
msgpack
|
||||
tqdm
|
||||
python-dotenv
|
||||
boto3
|
||||
textblob
|
||||
pyarrow==12.0.1
|
||||
fuzzywuzzy
|
||||
python-Levenshtein
|
||||
|
|
@ -33,6 +33,12 @@ class RoofAttributes(Definitions):
|
|||
"ystafell(oedd) to, dim inswleiddio": "roof room(s), no insulation",
|
||||
}
|
||||
|
||||
DEFAULT_KEYS = [
|
||||
'thermal_transmittance', 'thermal_transmittance_unit', 'is_pitched', 'is_roof_room',
|
||||
'is_loft', 'is_flat', 'is_thatched', 'is_at_rafters', 'is_assumed', 'has_dwelling_above',
|
||||
'is_valid', 'insulation_thickness'
|
||||
]
|
||||
|
||||
def __init__(self, description: str):
|
||||
"""
|
||||
:param description: Description of the roof.
|
||||
|
|
@ -95,6 +101,8 @@ class RoofAttributes(Definitions):
|
|||
result: Dict[str, Union[float, str, bool, None]] = {}
|
||||
|
||||
if self.nodata:
|
||||
for key in self.DEFAULT_KEYS:
|
||||
result[key] = False
|
||||
return result
|
||||
|
||||
description = self.description
|
||||
|
|
|
|||
|
|
@ -68,6 +68,13 @@ class WallAttributes(Definitions):
|
|||
'Cowith external insulation': 'Cob, with external insulation',
|
||||
}
|
||||
|
||||
DEFAULT_KEYS = [
|
||||
'thermal_transmittance', 'thermal_transmittance_unit', 'is_cavity_wall', 'is_filled_cavity',
|
||||
'is_solid_brick', 'is_system_built', 'is_timber_frame', 'is_granite_or_whinstone',
|
||||
'is_as_built', 'is_cob', 'is_assumed', 'is_sandstone_or_limestone',
|
||||
'insulation_thickness', 'external_insulation', 'internal_insulation'
|
||||
]
|
||||
|
||||
def __init__(self, description: str):
|
||||
"""
|
||||
:param description: Description of the walls.
|
||||
|
|
@ -98,6 +105,9 @@ class WallAttributes(Definitions):
|
|||
def process(self) -> Dict[str, Union[float, str, bool, None]]:
|
||||
result: Dict[str, Union[float, str, bool, None]] = {}
|
||||
if self.nodata:
|
||||
for key in self.DEFAULT_KEYS:
|
||||
result[key] = False
|
||||
|
||||
return result
|
||||
|
||||
description = self.description.lower()
|
||||
|
|
|
|||
3
keyzy_pilot.csv
Normal file
3
keyzy_pilot.csv
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
address,postcode,Notes,,,,
|
||||
2 South Terrace,NN1 5JY,,,,,
|
||||
25 Albert Street,PO12 4TY,,,,,
|
||||
|
Loading…
Add table
Reference in a new issue