Source code for ebm.extractors

import pandas as pd
from loguru import logger

from ebm.model import area
from ebm.holiday_home_energy import calculate_energy_use, transform_holiday_homes_to_horizontal
from ebm.heating_system_forecast import HeatingSystemsForecast
from ebm.model.construction import ConstructionCalculator

from ebm.model.data_classes import YearRange
from ebm.model.database_manager import DatabaseManager
from ebm.model.energy_requirement import EnergyRequirement
from ebm.s_curve import calculate_s_curves


[docs] def extract_area_forecast(years: YearRange, s_curves_by_condition: pd.DataFrame, building_code_parameters: pd.DataFrame, area_parameters: pd.DataFrame, database_manager:DatabaseManager): logger.debug('Calculating area by condition') s_curve_demolition = s_curves_by_condition['s_curve_demolition'] s_curves_by_condition = s_curves_by_condition[[ 'original_condition', 'small_measure', 'renovation', 'renovation_and_small_measure', 'demolition' ]] area_parameters = area_parameters.set_index(['building_category', 'building_code']) demolition_floor_area_by_year = area.calculate_demolition_floor_area_by_year(area_parameters, s_curve_demolition) building_category_demolition_by_year = area.sum_building_category_demolition_by_year(demolition_floor_area_by_year) construction_floor_area_by_year = ConstructionCalculator.calculate_all_construction( demolition_by_year=building_category_demolition_by_year, database_manager=database_manager, period=years) construction_by_building_category_and_year = area.construction_with_building_code( building_category_demolition_by_year=building_category_demolition_by_year, construction_floor_area_by_year=construction_floor_area_by_year, building_code=building_code_parameters, years=years) existing_area = area.calculate_existing_area(area_parameters, building_code_parameters, years) total_area_floor_by_year = area.merge_total_area_by_year(construction_by_building_category_and_year, existing_area) floor_area_forecast = area.multiply_s_curves_with_floor_area(s_curves_by_condition, total_area_floor_by_year) return floor_area_forecast
[docs] def write_scurve(s_curves_by_condition): try: output_file = 'output/s_curves.xlsx' with pd.ExcelWriter(output_file, engine='xlsxwriter') as writer: s_curves_by_condition.to_excel(writer, sheet_name='s_curves_by_condition', merge_cells=False) # 💾 # s_curve_demolition.to_excel(writer, sheet_name='s_curve_demolition', merge_cells=False) # 💾 except IOError as ex: logger.exception(ex) logger.info(f'There was an IOError while writing to {output_file}. Moving on!')
[docs] def extract_energy_need(years: YearRange, dm: DatabaseManager) -> pd.DataFrame: er_calculator = EnergyRequirement.new_instance(period=years, calibration_year=2023, database_manager=dm) energy_need = er_calculator.calculate_for_building_category(database_manager=dm) energy_need = energy_need.set_index(['building_category', 'building_code', 'purpose', 'building_condition', 'year']) return energy_need
[docs] def extract_heating_systems_forecast(years: YearRange, database_manager: DatabaseManager) -> pd.DataFrame: forecast_period = YearRange(2023, 2050) hsp = HeatingSystemsForecast.new_instance(forecast_period, database_manager) df: pd.DataFrame = hsp.calculate_forecast() df = hsp.pad_projection(df, YearRange(2020, 2022)) heating_system_forecast = df.copy() return heating_system_forecast
[docs] def extract_energy_use_holiday_homes(database_manager): df = transform_holiday_homes_to_horizontal(calculate_energy_use(database_manager)).copy() df = df.rename(columns={'building_category': 'building_group'}) df.loc[df.energy_source=='Elektrisitet', 'energy_source'] = 'Electricity' df.loc[df.energy_source=='fossil', 'energy_source'] = 'Fossil' return df
[docs] def main(): from ebm.model.file_handler import FileHandler fh = FileHandler(directory='input') dm = DatabaseManager(fh) years = YearRange(2020, 2050) building_code_parameters = fh.get_building_code() scurve_params = dm.get_scurve_params() s_curves_by_condition = calculate_s_curves(scurve_params, building_code_parameters, years) area_forecast = extract_area_forecast(years, building_code_parameters=building_code_parameters, area_parameters=dm.get_area_parameters(), s_curves_by_condition=s_curves_by_condition, database_manager=dm) print(area_forecast) energy_need_kwh_m2 = extract_energy_need(years, dm) print(energy_need_kwh_m2) heating_systems_projection = extract_heating_systems_forecast(years, dm) print(heating_systems_projection)
if __name__ == '__main__': main()