Source code for ebm.extractors
import pandas as pd
from loguru import logger
from ebm.areaforecast.s_curve import calculate_s_curves
from ebm.heating_system_forecast import HeatingSystemsForecast
from ebm.holiday_home_energy import calculate_energy_use, transform_holiday_homes_to_horizontal
from ebm.model.area import calculate_all_area
from ebm.model.data_classes import YearRange
from ebm.model.database_manager import DatabaseManager
from ebm.model.energy_requirement import calculate_for_building_category
[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) -> pd.DataFrame:
logger.debug('Calculating area by condition')
area_per_person = database_manager.get_area_per_person()
area_new_residential_buildings = database_manager.get_area_new_residential_buildings()
construction_population = database_manager.get_construction_population()
new_buildings_category_share = database_manager.get_new_buildings_category_share()
df = calculate_all_area(area_new_residential_buildings, area_parameters, area_per_person,
building_code_parameters, construction_population, new_buildings_category_share,
s_curves_by_condition, years)
return df
[docs]
def extract_energy_need(years: YearRange, dm: DatabaseManager) -> pd.DataFrame:
energy_need = 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: DatabaseManager) -> pd.DataFrame:
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() -> None: # noqa: D103
from ebm.model.file_handler import FileHandler # noqa: I001, PLC0415
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()