mirror of
https://github.com/Hestia-Homes/Model.git
synced 2026-06-30 13:10:47 +00:00
added loft_insulated_efficiency
This commit is contained in:
parent
9c5befbff6
commit
c8c283cd90
2 changed files with 42 additions and 10 deletions
|
|
@ -122,8 +122,8 @@ class EpcRoofDescriptions(Enum):
|
||||||
# Loft
|
# Loft
|
||||||
# Assumed options
|
# Assumed options
|
||||||
pitched_insulated_assumed = "Pitched, insulated (assumed)"
|
pitched_insulated_assumed = "Pitched, insulated (assumed)"
|
||||||
# Known insulation at joists - we have 12, 25, 50, 75, 100, 125, 150, 175, 200, 225, 250, 270, 300, 350,
|
pitched_no_insulation = "Pitched, no insulation"
|
||||||
# 400+ as options
|
# Insulation thickness options
|
||||||
loft_12mm_insulation: str = "Pitched, 12 mm loft insulation"
|
loft_12mm_insulation: str = "Pitched, 12 mm loft insulation"
|
||||||
loft_25mm_insulation: str = "Pitched, 25 mm loft insulation"
|
loft_25mm_insulation: str = "Pitched, 25 mm loft insulation"
|
||||||
loft_50mm_insulation: str = "Pitched, 50 mm loft insulation"
|
loft_50mm_insulation: str = "Pitched, 50 mm loft insulation"
|
||||||
|
|
@ -182,7 +182,7 @@ class EpcRoofDescriptions(Enum):
|
||||||
|
|
||||||
# Sloping ceiling
|
# Sloping ceiling
|
||||||
# For sloping ceiling tags, we don't use any (assumed) tags so that it's unambiguous that the roof is sloped
|
# For sloping ceiling tags, we don't use any (assumed) tags so that it's unambiguous that the roof is sloped
|
||||||
sloping_pitched_no_insulation: str = "Pithced, no insulation"
|
sloping_pitched_no_insulation: str = "Pitched, no insulation"
|
||||||
sloping_pitched_limited_insulation: str = "Pitched, limited insulation"
|
sloping_pitched_limited_insulation: str = "Pitched, limited insulation"
|
||||||
sloping_pitched_insulated: str = "Pitched, insulated"
|
sloping_pitched_insulated: str = "Pitched, insulated"
|
||||||
|
|
||||||
|
|
@ -372,6 +372,33 @@ def flat_insulated_efficiency(age_band: EpcConstructionAgeBand) -> EpcEfficiency
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
def loft_insulated_efficiency(age_band: EpcConstructionAgeBand) -> EpcEfficiency:
|
||||||
|
"""
|
||||||
|
2023 onwards -> Very Good
|
||||||
|
2012-2022 -> Very Good
|
||||||
|
2007-2011 -> Very Good
|
||||||
|
2003-2006 -> Very Good
|
||||||
|
1996-2002 -> Good
|
||||||
|
1991-1995 -> Good
|
||||||
|
1983-1990 -> Average
|
||||||
|
1976-1982 -> Average
|
||||||
|
1967-1975 -> Average
|
||||||
|
1950-1966 -> Average
|
||||||
|
1930-1949 -> Average
|
||||||
|
1900-1929 -> Average
|
||||||
|
before 1900 -> Average
|
||||||
|
:param age_band: Input age band, EpcConstructionAgeBand
|
||||||
|
:return: EpcEfficiency
|
||||||
|
"""
|
||||||
|
year = age_band.start_year()
|
||||||
|
if year >= 2003:
|
||||||
|
return EpcEfficiency.VERY_GOOD
|
||||||
|
if year >= 1991:
|
||||||
|
return EpcEfficiency.GOOD
|
||||||
|
|
||||||
|
return EpcEfficiency.AVERAGE
|
||||||
|
|
||||||
|
|
||||||
def flat_limited_efficiency(
|
def flat_limited_efficiency(
|
||||||
age_band: EpcConstructionAgeBand,
|
age_band: EpcConstructionAgeBand,
|
||||||
insulation_thickness: int | None,
|
insulation_thickness: int | None,
|
||||||
|
|
@ -407,6 +434,7 @@ ROOF_DESCRIPTION_EFFICIENCIES: Mapping[EpcRoofDescriptions, RoofEfficiencyRule]
|
||||||
EpcRoofDescriptions.flat_insulated: flat_insulated_efficiency,
|
EpcRoofDescriptions.flat_insulated: flat_insulated_efficiency,
|
||||||
|
|
||||||
# Loft:
|
# Loft:
|
||||||
|
# value mappings
|
||||||
EpcRoofDescriptions.loft_12mm_insulation: EpcEfficiency.VERY_POOR,
|
EpcRoofDescriptions.loft_12mm_insulation: EpcEfficiency.VERY_POOR,
|
||||||
EpcRoofDescriptions.loft_25mm_insulation: EpcEfficiency.POOR,
|
EpcRoofDescriptions.loft_25mm_insulation: EpcEfficiency.POOR,
|
||||||
EpcRoofDescriptions.loft_50mm_insulation: EpcEfficiency.POOR,
|
EpcRoofDescriptions.loft_50mm_insulation: EpcEfficiency.POOR,
|
||||||
|
|
@ -421,4 +449,8 @@ ROOF_DESCRIPTION_EFFICIENCIES: Mapping[EpcRoofDescriptions, RoofEfficiencyRule]
|
||||||
EpcRoofDescriptions.loft_300mm_insulation: EpcEfficiency.VERY_GOOD,
|
EpcRoofDescriptions.loft_300mm_insulation: EpcEfficiency.VERY_GOOD,
|
||||||
EpcRoofDescriptions.loft_350mm_insulation: EpcEfficiency.VERY_GOOD,
|
EpcRoofDescriptions.loft_350mm_insulation: EpcEfficiency.VERY_GOOD,
|
||||||
EpcRoofDescriptions.loft_400mm_plus_insulation: EpcEfficiency.VERY_GOOD,
|
EpcRoofDescriptions.loft_400mm_plus_insulation: EpcEfficiency.VERY_GOOD,
|
||||||
|
EpcRoofDescriptions.pitched_no_insulation: EpcEfficiency.VERY_POOR,
|
||||||
|
# function mappings
|
||||||
|
EpcRoofDescriptions.pitched_insulated_assumed: loft_insulated_efficiency,
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -438,7 +438,6 @@ ROOF_UNKNOWN_AGE_FALLBACK = {
|
||||||
"PitchedThatched": EpcRoofDescriptions.thatched_as_built_unknown,
|
"PitchedThatched": EpcRoofDescriptions.thatched_as_built_unknown,
|
||||||
"PitchedNormalLoftAccess": EpcRoofDescriptions.loft_as_built_unknown,
|
"PitchedNormalLoftAccess": EpcRoofDescriptions.loft_as_built_unknown,
|
||||||
"PitchedNormalNoLoftAccess": EpcRoofDescriptions.loft_as_built_unknown,
|
"PitchedNormalNoLoftAccess": EpcRoofDescriptions.loft_as_built_unknown,
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -454,9 +453,7 @@ def fill_roof_as_built(row):
|
||||||
raise NotImplementedError(f"No roof classifier for roof type '{roof_type}'")
|
raise NotImplementedError(f"No roof classifier for roof type '{roof_type}'")
|
||||||
|
|
||||||
if pd.isnull(row.construction_age_band):
|
if pd.isnull(row.construction_age_band):
|
||||||
raise NotImplementedError(
|
return ROOF_UNKNOWN_AGE_FALLBACK.get(roof_type)
|
||||||
f"Missing age band for roof classification ({roof_type})"
|
|
||||||
)
|
|
||||||
|
|
||||||
output = classifier(row.construction_age_band)
|
output = classifier(row.construction_age_band)
|
||||||
if output is None:
|
if output is None:
|
||||||
|
|
@ -477,9 +474,12 @@ data["landlord_roof_description"] = data.progress_apply(
|
||||||
fill_roof_as_built,
|
fill_roof_as_built,
|
||||||
axis=1,
|
axis=1,
|
||||||
)
|
)
|
||||||
|
# Sanity check
|
||||||
for _, row in data.iterrows():
|
assert data["landlord_roof_description"].isnull().sum() == 0, (
|
||||||
fill_roof_as_built(row)
|
"Some roof descriptions could not be resolved"
|
||||||
|
)
|
||||||
|
# TODO: 1) Map energy efficiency
|
||||||
|
# TODO: 2) Flag sloped ceilings
|
||||||
|
|
||||||
# Variables we want to map
|
# Variables we want to map
|
||||||
# 'Org Ref', 'Address 1', 'Address 2', 'Address 3', 'Postcode', 'Type',
|
# 'Org Ref', 'Address 1', 'Address 2', 'Address 3', 'Postcode', 'Type',
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue