From 722553a177bfb28994d83e1c05cc7c3ea7e14c9d Mon Sep 17 00:00:00 2001 From: F Rehmann <49240249+c0nb4@users.noreply.github.com> Date: Wed, 5 Feb 2025 16:35:52 +0100 Subject: [PATCH] Update readme --- README.md | 7 +- classes.html | 158 - .../data/scenarios/test_scenario_nwg.csv | 12 + img/DVG_Logo.png | Bin 0 -> 206615 bytes packages.html | 35 - test.ipynb | 3549 ----------------- 6 files changed, 13 insertions(+), 3748 deletions(-) delete mode 100644 classes.html create mode 100644 districtgenerator/data/scenarios/test_scenario_nwg.csv create mode 100644 img/DVG_Logo.png delete mode 100644 packages.html delete mode 100644 test.ipynb diff --git a/README.md b/README.md index 39b1f72f..0ee902ca 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,9 @@ ![E.ON EBC RWTH Aachen University](./img/EBC_Logo.png) +![DVG TU Berlin](./img/DVG_Logo.png) # DistrictGenerator [![License](http://img.shields.io/:license-mit-blue.svg)](http://doge.mit-license.org) -[![Documentation](https://rwth-ebc.github.io/FiLiP/master/docs/doc.svg)](https://rwth-ebc.github.io/FiLiP/master/docs/index.html) The districtgenerator is a Python tool for generating building-specific thermal, electrical and occupancy profiles for districts. By integrating several open-source data bases and tools like [TEASER](https://github.com/RWTH-EBC/TEASER) and @@ -74,11 +74,6 @@ The minimal input data set was defined following the [TABULA archetype approach] * _retrofit_: retrofit state according to TABULA (0: existing state, 1: usual refurbishment, 2: advanced refurbishment) * _area_: reference floor area (given in square meters) -- id: building ID (just numerate the buildings) -- building: residential building type (single family house, terraced house, multi family house or apartment block) -- year: construction year (the calendar year in which the building was constructed) -- retrofit: retrofit state according to TABULA (0: existing state, 1: usual refurbishment, 2: advanced refurbishment) -- area: reference floor area (given in square meters) The example.csv file can be used as [template](../districtgenerator/data/scenarios/example.csv). diff --git a/classes.html b/classes.html deleted file mode 100644 index 95a9ba66..00000000 --- a/classes.html +++ /dev/null @@ -1,158 +0,0 @@ - - - -
- - classDiagram - class Datahandler { - SunRad : ndarray - advancedModel : NoneType - counter : dict - district : list - filePath - resultPath : NoneType - scenario : NoneType, TextFileReader - scenario_name : NoneType, str - sheetFile : NoneType - site : dict - srcPath - time : dict - weatherFile : NoneType - generateBuildings() - generateDemands(calcUserProfiles: bool, saveUserProfiles: bool, savePath: str) - generateDistrictComplete(scenario_name, calcUserProfiles, saveUserProfiles) - generateEnvironment() - initializeBuildings(scenario_name) - loadDistrict(scenario_name) - plot(mode, initialTime, timeHorizon, savePlots, timeStamp, show) - saveDistrict() - setAdvancedModel(pathAdvancedModel) - setResultPath(new_path) - } - class DemandPlots { - color : dict - factor - filePath - l - labels : dict - months : list - plots : list - plotsMonthly : list - srcPath - time - titles : dict - y : dict - defaultPlots(plotResolution, initialTime, timeHorizon, savePlots, timeStamp, show) - onePlot(plotType, plotResolution, initialTime, timeHorizon, label, title, color, savePlots, timeStamp, show) - preparePlots(data) - } - class Envelope { - A : dict - A_m - A_tot - C_m - Delta_theta_er : int - F_F : int - F_r : dict - F_sh_gl : int - H_tr_em : dict - H_tr_is - H_tr_ms - H_tr_w - H_ve - I_sol : dict - Lambda : dict - R_se : dict - R_si : dict - T_set_min - U : dict - V - alpha_Sc : dict - attributes : list - b_floor : float - b_tr : dict - c_p_air - construction_type - construction_year - cp : dict - d : dict - d_iso : dict - epsilon : dict - f_class : dict - file_path - g_gl : dict - h_is : float - h_ms : float - h_r : dict - id - kappa : dict - lambda_at : float - opaque : set - opaque_ext : list - phi_ia - phi_m : dict - phi_st : dict - retrofit - rho : dict - rho_air - usage_short - ventilationRate - calcHeatLoad(site, method) - calcNormativeProperties(SunRad, internal_gains) - loadAreas(prj) - loadComponentProperties(prj) - loadMaterialID(mat_id, data_class) - loadParams() - specificHeatCapacity(d, d_iso, density, cp) - } - class Profiles { - activity_profile : NoneType, list - app_load : list, ndarray - initial_day - light_load : list, ndarray - nb_days - number_occupants - occ_profile : list, ndarray - prob_profiles_dhw : dict - time_resolution - generate_activity_profile() - generate_dhw_profile() - generate_el_profile(irradiance, el_wrapper, annual_demand, do_normalization) - generate_gain_profile() - generate_occupancy_profiles() - loadProbabilitiesDhw() - } - class Sun { - filePath - getGeometry(initialTime, timeDiscretization, timesteps, timeZone, location, altitude) - getIncidenceAngle(beta, gamma, phi, omega, delta) - getSolarGains(initialTime, timeDiscretization, timeSteps, timeZone, location, altitude, beta, gamma, beam, diffuse, albedo) - getTotalRadiationTiltedSurface(theta, thetaZ, beamRadiation, diffuseRadiation, airmass, extraterrestrialIrradiance, beta, albedo) - } - class Users { - annual_el_demand : NoneType, ndarray - building - dhw : NoneType, ndarray - el_wrapper : list - elec : NoneType, ndarray - gains : NoneType, ndarray - heat : NoneType, ndarray - lighting_index : list - nb_flats : NoneType, int - nb_occ : list - occ : NoneType, ndarray - calcHeatingProfile(site, envelope, time_resolution) - calcProfiles(site, time_resolution, time_horizon, initital_day) - create_el_wrapper() - generate_annual_el_consumption() - generate_lighting_index() - generate_number_flats(area) - generate_number_occupants() - loadProfiles(unique_name, path) - saveHeatingProfile(unique_name, path) - saveProfiles(unique_name, path) - } - -
- - diff --git a/districtgenerator/data/scenarios/test_scenario_nwg.csv b/districtgenerator/data/scenarios/test_scenario_nwg.csv new file mode 100644 index 00000000..f8b3a0a6 --- /dev/null +++ b/districtgenerator/data/scenarios/test_scenario_nwg.csv @@ -0,0 +1,12 @@ +id;building;year;retrofit;area +0;IWU Office, Administrative or Government Buildings;1963;0;61 +1;IWU Research and University Teaching;1934;0;59 +2;IWU Health and Care;2014;0;25 +3;IWU School, Day Nursery and other Care;1926;0;21 +4;IWU Culture and Leisure;1993;0;21 +5;IWU Sports Facilities;1905;0;54 +6;IWU Trade Buildings;1947;0;64 +7;IWU Technical and Utility (supply and disposal);1924;0;70 +8;IWU Transport;1927;0;89 +9;IWU Generalized (1) Services building;1929;0;16 +10;IWU Generalized (2) Production buildings;1988;0;86 diff --git a/img/DVG_Logo.png b/img/DVG_Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..6602d3293f6d1a248bf21cd072be561295991f75 GIT binary patch literal 206615 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

#6L8FIjm4G5LIc{}BQ?Y5B*_8V!FZAZ!#95Y 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 E7mdr}-T(jq literal 0 HcmV?d00001 diff --git a/packages.html b/packages.html deleted file mode 100644 index 80e92668..00000000 --- a/packages.html +++ /dev/null @@ -1,35 +0,0 @@ - - - -

- - classDiagram - class districtgenerator { - } - class datahandler { - } - class envelope { - } - class plots { - } - class profils { - } - class solar { - } - class users { - } - districtgenerator --> datahandler - districtgenerator --> envelope - districtgenerator --> plots - districtgenerator --> profils - districtgenerator --> solar - districtgenerator --> users - datahandler --> envelope - datahandler --> plots - datahandler --> solar - datahandler --> users - users --> profils - -
- - diff --git a/test.ipynb b/test.ipynb deleted file mode 100644 index 2af52fdb..00000000 --- a/test.ipynb +++ /dev/null @@ -1,3549 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "import os, math\n", - "import json \n", - "import random as rd\n", - "import numpy as np\n", - "import richardsonpy\n", - "import richardsonpy.classes.stochastic_el_load_wrapper as wrap\n", - "import richardsonpy.classes.appliance as app_model\n", - "import richardsonpy.classes.lighting as light_model\n", - "from districtgenerator.profils import Profiles\n", - "import functions.heating_profile_5R1C as heating\n", - "from districtgenerator import Datahandler" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "import random as rd\n", - "annual_el_demand = 1100\n", - " # Write a function, that returns the respective \n", - "src_path = os.path.dirname(richardsonpy.__file__)\n", - "path_app = os.path.join(src_path,'inputs','Appliances.csv')\n", - "path_light = os.path.join(src_path,'inputs','LightBulbs.csv')\n", - "# annual demand of the elictric appliances (annual demand minus lighting)\n", - "# source: https://www.umweltbundesamt.de/daten/private-haushalte-konsum/wohnen/energieverbrauch-privater-haushalte#stromverbrauch-mit-einem-anteil-von-rund-einem-funftel\n", - "# values from diagram for 2018 without heating, dhw and cooling: 8,1 / 81,1 = 10,0%\n", - "appliancesDemand = 0.9 * annual_el_demand\n", - "random_nb = rd.random()\n", - "lighting_index = int(random_nb * 100)\n", - "\n", - "# Create and save appliances object\n", - "appliances = \\\n", - " app_model.Appliances(path_app,\n", - " annual_consumption=appliancesDemand,\n", - " randomize_appliances=True,\n", - " max_iter=15,\n", - " prev_heat_dev=True)\n", - "\n", - "# Create and save light configuration object\n", - "lights = light_model.load_lighting_profile(filename=path_light,\n", - " index=lighting_index)\n", - "\n", - "# Create wrapper object\n", - "el_wrapper = wrap.ElectricityProfile(appliances,lights)" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'data': [[0, 0.163, 6115.75933, 14.0, 190.0, 0.0, 56.0, 0.0, 7.0, 1.0, 0.8],\n", - " [1, 0.651, 6115.75933, 22.0, 190.0, 0.0, 44.0, 0.0, 7.0, 1.0, 0.8],\n", - " [1, 0.43, 6115.75933, 18.0, 110.0, 0.0, 36.0, 0.0, 7.0, 1.0, 0.8],\n", - " [0, 0.291, 6115.75933, 20.0, 155.0, 0.0, 40.0, 0.0, 7.0, 1.0, 0.8],\n", - " [1, 0.9, 1e-05, 0.0, 0.0, 1.0, 0.0, 1.0, 6.0, 1.0, 1.0],\n", - " [1, 0.9, 1212.76286, 60.0, 15.0, 2.0, 0.0, 1.0, 6.0, 1.0, 1.0],\n", - " [1, 0.9, 1e-05, 0.0, 0.0, 2.0, 0.0, 0.0, 7.0, 1.0, 1.0],\n", - " [1, 0.9, 1e-05, 0.0, 0.0, 1.0, 0.0, 1.0, 6.0, 1.0, 1.0],\n", - " [1, 0.9, 109.42554, 60.0, 100.0, 9.0, 0.0, 1.0, 6.0, 1.0, 1.0],\n", - " [1, 0.9, 35.45947, 30.0, 1000.0, 0.0, 0.0, 1.0, 4.0, 0.0185, 1.0],\n", - " [1, 0.937, 110.3676, 20.0, 2000.0, 0.0, 0.0, 1.0, 5.0, 0.0665, 1.0],\n", - " [0, 0.2, 197.12359, 31.0, 37.0, 3.0, 0.0, 1.0, 6.0, 1.0, 0.9],\n", - " [1, 0.708, 449.23798, 300.0, 141.0, 5.0, 0.0, 1.0, 6.0, 1.0, 0.9],\n", - " [1, 0.665, 654.87596, 4.0, 335.0, 4.0, 0.0, 1.0, 6.0, 1.0, 0.9],\n", - " [1, 0.977, 1464.26654, 73.0, 124.0, 3.0, 0.0, 1.0, 0.0, 0.3398, 0.9],\n", - " [0, 0.58, 1464.26654, 73.0, 124.0, 3.0, 0.0, 1.0, 0.0, 0.3398, 0.9],\n", - " [0, 0.18, 1521.49597, 73.0, 124.0, 2.0, 0.0, 1.0, 0.0, 0.3398, 0.9],\n", - " [0, 0.896, 1464.26654, 73.0, 34.0, 2.0, 0.0, 1.0, 0.0, 0.3398, 1.0],\n", - " [1, 0.934, 1464.26654, 73.0, 27.0, 15.0, 0.0, 1.0, 0.0, 0.3398, 1.0],\n", - " [1, 0.463, 417.90201, 16.0, 2400.0, 1.0, 0.0, 1.0, 1.0, 0.1443, 1.0],\n", - " [1, 0.616, 219.7928, 27.0, 2125.0, 3.0, 0.0, 1.0, 1.0, 0.1443, 1.0],\n", - " [0, 0.859, 94.61932, 30.0, 1250.0, 2.0, 0.0, 1.0, 1.0, 0.1443, 1.0],\n", - " [1, 0.975, 1519.82287, 3.0, 2000.0, 1.0, 0.0, 1.0, 6.0, 1.0, 1.0],\n", - " [1, 1.0, 292.32622, 3.0, 1000.0, 2.0, 0.0, 1.0, 1.0, 0.1443, 1.0],\n", - " [0, 0.335, 241.4764, 60.0, 1131.0, 0.0, 0.0, 1.0, 1.0, 0.1443, 0.8],\n", - " [0, 0.416, 122.07292, 60.0, 2500.0, 1.0, 0.0, 1.0, 2.0, 0.0177, 0.8],\n", - " [1, 0.781, 195.9066, 138.0, 406.0, 1.0, 0.0, 1.0, 2.0, 0.0177, 0.8],\n", - " [0, 0.153, 195.9066, 198.0, 792.0, 1.0, 0.0, 1.0, 2.0, 0.0177, 0.8],\n", - " [0, 0.17, 2684.99685, 20.0, 3000.0, 0.0, 0.0, 1.0, 6.0, 1.0, 1.0],\n", - " [0, 0.01, 7208.63284, 5.0, 3000.0, 0.0, 0.0, 1.0, 6.0, 1.0, 1.0],\n", - " [0, 0.67, 290.39551, 3.0, 9000.0, 0.0, 0.0, 1.0, 3.0, 0.1251, 1.0],\n", - " [0, 0.028, 227.20878, 360.0, 10200.0, 0.0, 0.0, 0.0, 8.0, 0.6225, 1.0],\n", - " [0, 0.026, 365.67578, 240.0, 2000.0, 0.0, 0.0, 1.0, 6.0, 1.0, 1.0]],\n", - " 'calib_cycles': [1586.420078106104,\n", - " 1586.420078106104,\n", - " 1586.420078106104,\n", - " 1586.420078106104,\n", - " 2.5939870954766694e-06,\n", - " 314.58912087133785,\n", - " 2.5939870954766694e-06,\n", - " 2.5939870954766694e-06,\n", - " 28.384843867556608,\n", - " 9.19814075924421,\n", - " 28.62921301587308,\n", - " 51.13360486740338,\n", - " 116.5317522918006,\n", - " 169.87397893778953,\n", - " 379.8288509098272,\n", - " 379.8288509098272,\n", - " 394.67409119997575,\n", - " 379.8288509098272,\n", - " 379.8288509098272,\n", - " 108.4032421113762,\n", - " 57.01396868786844,\n", - " 24.544129506277752,\n", - " 394.2400912190315,\n", - " 75.82904423494738,\n", - " 62.638666546216236,\n", - " 31.665557918715578,\n", - " 50.81791923187096,\n", - " 50.81791923187096,\n", - " 696.4847180295505,\n", - " 1869.9100562989333,\n", - " 75.3282205524366,\n", - " 58.93766432989975,\n", - " 94.85582544483654],\n", - " 'calib_scalar': [0.003826843089912523,\n", - " 0.0037691473479786264,\n", - " 0.0036060466920655927,\n", - " 0.0036857935539834656,\n", - " 1.0752260288383644e-11,\n", - " 0.0014146781169209353,\n", - " 4.935287472368093e-12,\n", - " 1.0752260288383644e-11,\n", - " 0.00011849368687317316,\n", - " 0.0020632759443043845,\n", - " 0.0017887584699843937,\n", - " 0.000213354264364235,\n", - " 0.0005648904862136316,\n", - " 0.0007061285303159479,\n", - " 0.005235041493391806,\n", - " 0.005235041493391806,\n", - " 0.005467396916244901,\n", - " 0.005235041493391806,\n", - " 0.005235041493391806,\n", - " 0.003136472643864102,\n", - " 0.0016482646205589915,\n", - " 0.0007071976423047182,\n", - " 0.001642203947105384,\n", - " 0.0021802732188093673,\n", - " 0.0018277931341477247,\n", - " 0.007474456171544179,\n", - " 0.01225708330402154,\n", - " 0.012418738299501174,\n", - " 0.0030638859582565268,\n", - " 0.008063403211194519,\n", - " 0.002498269929769884,\n", - " 0.0001877126782710789,\n", - " 0.0004341525716771488]}" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "vars(el_wrapper.appliances)" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'data': [[0, 0.163, 6115.75933, 14.0, 190.0, 0.0, 56.0, 0.0, 7.0, 1.0, 0.8],\n", - " [1, 0.651, 6115.75933, 22.0, 190.0, 0.0, 44.0, 0.0, 7.0, 1.0, 0.8],\n", - " [1, 0.43, 6115.75933, 18.0, 110.0, 0.0, 36.0, 0.0, 7.0, 1.0, 0.8],\n", - " [0, 0.291, 6115.75933, 20.0, 155.0, 0.0, 40.0, 0.0, 7.0, 1.0, 0.8],\n", - " [1, 0.9, 1e-05, 0.0, 0.0, 1.0, 0.0, 1.0, 6.0, 1.0, 1.0],\n", - " [1, 0.9, 1212.76286, 60.0, 15.0, 2.0, 0.0, 1.0, 6.0, 1.0, 1.0],\n", - " [1, 0.9, 1e-05, 0.0, 0.0, 2.0, 0.0, 0.0, 7.0, 1.0, 1.0],\n", - " [1, 0.9, 1e-05, 0.0, 0.0, 1.0, 0.0, 1.0, 6.0, 1.0, 1.0],\n", - " [1, 0.9, 109.42554, 60.0, 100.0, 9.0, 0.0, 1.0, 6.0, 1.0, 1.0],\n", - " [1, 0.9, 35.45947, 30.0, 1000.0, 0.0, 0.0, 1.0, 4.0, 0.0185, 1.0],\n", - " [1, 0.937, 110.3676, 20.0, 2000.0, 0.0, 0.0, 1.0, 5.0, 0.0665, 1.0],\n", - " [0, 0.2, 197.12359, 31.0, 37.0, 3.0, 0.0, 1.0, 6.0, 1.0, 0.9],\n", - " [1, 0.708, 449.23798, 300.0, 141.0, 5.0, 0.0, 1.0, 6.0, 1.0, 0.9],\n", - " [1, 0.665, 654.87596, 4.0, 335.0, 4.0, 0.0, 1.0, 6.0, 1.0, 0.9],\n", - " [1, 0.977, 1464.26654, 73.0, 124.0, 3.0, 0.0, 1.0, 0.0, 0.3398, 0.9],\n", - " [0, 0.58, 1464.26654, 73.0, 124.0, 3.0, 0.0, 1.0, 0.0, 0.3398, 0.9],\n", - " [0, 0.18, 1521.49597, 73.0, 124.0, 2.0, 0.0, 1.0, 0.0, 0.3398, 0.9],\n", - " [0, 0.896, 1464.26654, 73.0, 34.0, 2.0, 0.0, 1.0, 0.0, 0.3398, 1.0],\n", - " [1, 0.934, 1464.26654, 73.0, 27.0, 15.0, 0.0, 1.0, 0.0, 0.3398, 1.0],\n", - " [1, 0.463, 417.90201, 16.0, 2400.0, 1.0, 0.0, 1.0, 1.0, 0.1443, 1.0],\n", - " [1, 0.616, 219.7928, 27.0, 2125.0, 3.0, 0.0, 1.0, 1.0, 0.1443, 1.0],\n", - " [0, 0.859, 94.61932, 30.0, 1250.0, 2.0, 0.0, 1.0, 1.0, 0.1443, 1.0],\n", - " [1, 0.975, 1519.82287, 3.0, 2000.0, 1.0, 0.0, 1.0, 6.0, 1.0, 1.0],\n", - " [1, 1.0, 292.32622, 3.0, 1000.0, 2.0, 0.0, 1.0, 1.0, 0.1443, 1.0],\n", - " [0, 0.335, 241.4764, 60.0, 1131.0, 0.0, 0.0, 1.0, 1.0, 0.1443, 0.8],\n", - " [0, 0.416, 122.07292, 60.0, 2500.0, 1.0, 0.0, 1.0, 2.0, 0.0177, 0.8],\n", - " [1, 0.781, 195.9066, 138.0, 406.0, 1.0, 0.0, 1.0, 2.0, 0.0177, 0.8],\n", - " [0, 0.153, 195.9066, 198.0, 792.0, 1.0, 0.0, 1.0, 2.0, 0.0177, 0.8],\n", - " [0, 0.17, 2684.99685, 20.0, 3000.0, 0.0, 0.0, 1.0, 6.0, 1.0, 1.0],\n", - " [0, 0.01, 7208.63284, 5.0, 3000.0, 0.0, 0.0, 1.0, 6.0, 1.0, 1.0],\n", - " [0, 0.67, 290.39551, 3.0, 9000.0, 0.0, 0.0, 1.0, 3.0, 0.1251, 1.0],\n", - " [0, 0.028, 227.20878, 360.0, 10200.0, 0.0, 0.0, 0.0, 8.0, 0.6225, 1.0],\n", - " [0, 0.026, 365.67578, 240.0, 2000.0, 0.0, 0.0, 1.0, 6.0, 1.0, 1.0]],\n", - " 'calib_cycles': [1586.420078106104,\n", - " 1586.420078106104,\n", - " 1586.420078106104,\n", - " 1586.420078106104,\n", - " 2.5939870954766694e-06,\n", - " 314.58912087133785,\n", - " 2.5939870954766694e-06,\n", - " 2.5939870954766694e-06,\n", - " 28.384843867556608,\n", - " 9.19814075924421,\n", - " 28.62921301587308,\n", - " 51.13360486740338,\n", - " 116.5317522918006,\n", - " 169.87397893778953,\n", - " 379.8288509098272,\n", - " 379.8288509098272,\n", - " 394.67409119997575,\n", - " 379.8288509098272,\n", - " 379.8288509098272,\n", - " 108.4032421113762,\n", - " 57.01396868786844,\n", - " 24.544129506277752,\n", - " 394.2400912190315,\n", - " 75.82904423494738,\n", - " 62.638666546216236,\n", - " 31.665557918715578,\n", - " 50.81791923187096,\n", - " 50.81791923187096,\n", - " 696.4847180295505,\n", - " 1869.9100562989333,\n", - " 75.3282205524366,\n", - " 58.93766432989975,\n", - " 94.85582544483654],\n", - " 'calib_scalar': [0.003826843089912523,\n", - " 0.0037691473479786264,\n", - " 0.0036060466920655927,\n", - " 0.0036857935539834656,\n", - " 1.0752260288383644e-11,\n", - " 0.0014146781169209353,\n", - " 4.935287472368093e-12,\n", - " 1.0752260288383644e-11,\n", - " 0.00011849368687317316,\n", - " 0.0020632759443043845,\n", - " 0.0017887584699843937,\n", - " 0.000213354264364235,\n", - " 0.0005648904862136316,\n", - " 0.0007061285303159479,\n", - " 0.005235041493391806,\n", - " 0.005235041493391806,\n", - " 0.005467396916244901,\n", - " 0.005235041493391806,\n", - " 0.005235041493391806,\n", - " 0.003136472643864102,\n", - " 0.0016482646205589915,\n", - " 0.0007071976423047182,\n", - " 0.001642203947105384,\n", - " 0.0021802732188093673,\n", - " 0.0018277931341477247,\n", - " 0.007474456171544179,\n", - " 0.01225708330402154,\n", - " 0.012418738299501174,\n", - " 0.0030638859582565268,\n", - " 0.008063403211194519,\n", - " 0.002498269929769884,\n", - " 0.0001877126782710789,\n", - " 0.0004341525716771488]}" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "vars(appliances)" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [], - "source": [ - "data = pd.read_excel(r'C:\\Users\\felix\\Programmieren\\tecdm\\src\\districtgenerator\\data\\Non-domestic-multi-zone-average-usage-profiles-for-Germany.xlsx')" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
ID_Enob_lfdID_HK_UK_Enob_longBez_HK_EnobBez_HK_Enob_EngBez_UK_EnobBez_UK_Enob_Engt_startt_endt_nutz_dd_nutz_a...deltaTheta_i_NAtheta_i_h_mintheta_i_c_maxFeuchteVd_AVd_A_Gebc_RLTF_RLTq_I_pq_I_fac
01HK_UK_1-0Büro-, Verwaltungs- oder AmtsgebäudeOffice, Administrative or Government BuildingsNaNNaN6.94764518.18521911.237574256.563179...3.91073219.90037926.0330880.5815145.0131551.7366070.2303610.86095230.74468256.342308
12HK_UK_1-1Büro-, Verwaltungs- oder AmtsgebäudeOffice, Administrative or Government BuildingsParlaments- oder GerichtsgebäudeParliament or Court Building6.98715018.04892711.061778251.972117...3.99420620.00000026.0000000.4625204.0341341.4284280.1984280.85069622.22264832.672892
23HK_UK_1-2Büro-, Verwaltungs- oder AmtsgebäudeOffice, Administrative or Government BuildingsÖffentliches Verwaltungs- oder Ämtergebäude, R...Public Administration or Office Building, Town...7.05923218.16550611.106273253.662834...4.00000019.98692626.0081280.5805584.5429271.6183660.2186650.82790828.50819138.197157
34HK_UK_1-3Büro-, Verwaltungs- oder AmtsgebäudeOffice, Administrative or Government BuildingsBürogebäudeOffice Building6.82189218.28071211.458820261.808516...3.80605419.81847626.0688690.5299825.0473201.6450560.2303760.87816532.92560266.120123
45HK_UK_1-4Büro-, Verwaltungs- oder AmtsgebäudeOffice, Administrative or Government BuildingsRundfunk- oder FernsehanstaltBroadcasting or Television Station6.82189218.28071211.458820261.808516...3.80605419.81847626.0688690.5299825.0473201.6450560.2303760.87816532.92560266.120123
..................................................................
103104HK_UK_11-1VerkehrsgebäudeTransport BuildingsPark-/Garagengebäude, FahrradparkhausPark/Garage Building, Bicycle Parking Garage2.44127421.81298019.371706342.811152...0.76716615.21443127.3373980.0561761.8838920.3902440.0268720.9874727.91207320.636915
104105HK_UK_11-2VerkehrsgebäudeTransport BuildingsHalle für sonstige Verkehrsmittel (z.B. für Fl...Hall for Other Means of Transportation (e.g., ...2.44127421.81298019.371706342.811152...0.76716615.21443127.3373980.0561761.8838920.3902440.0268720.9874727.91207320.636915
105106HK_UK_11-3VerkehrsgebäudeTransport BuildingsGebäude zur Pflege von Fahrzeugen (z.B. Waschs...Building for Vehicle Maintenance (e.g., Car Wash)5.16771920.05770314.889984308.097599...3.98465220.00000026.0000000.2854043.4115001.0180000.1371380.94674836.048453518.719970
106107HK_UK_11-4VerkehrsgebäudeTransport BuildingsEmpfangsgebäude (Bahnhof, Busbahnhof, Flughafe...Terminal Building (Train Station, Bus Station,...7.44444918.96759611.523147268.656296...3.95265520.00000026.0000000.7982246.2880501.8967500.3868010.86870277.62639911.116274
107108HK_UK_12-0Sonstiges NichtwohngebäudeOther non-doemestic buildingsNaNNaN0.0000000.0000000.0000000.000000...0.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.000000
\n", - "

108 rows × 34 columns

\n", - "
" - ], - "text/plain": [ - " ID_Enob_lfd ID_HK_UK_Enob_long Bez_HK_Enob \\\n", - "0 1 HK_UK_1-0 Büro-, Verwaltungs- oder Amtsgebäude \n", - "1 2 HK_UK_1-1 Büro-, Verwaltungs- oder Amtsgebäude \n", - "2 3 HK_UK_1-2 Büro-, Verwaltungs- oder Amtsgebäude \n", - "3 4 HK_UK_1-3 Büro-, Verwaltungs- oder Amtsgebäude \n", - "4 5 HK_UK_1-4 Büro-, Verwaltungs- oder Amtsgebäude \n", - ".. ... ... ... \n", - "103 104 HK_UK_11-1 Verkehrsgebäude \n", - "104 105 HK_UK_11-2 Verkehrsgebäude \n", - "105 106 HK_UK_11-3 Verkehrsgebäude \n", - "106 107 HK_UK_11-4 Verkehrsgebäude \n", - "107 108 HK_UK_12-0 Sonstiges Nichtwohngebäude \n", - "\n", - " Bez_HK_Enob_Eng \\\n", - "0 Office, Administrative or Government Buildings \n", - "1 Office, Administrative or Government Buildings \n", - "2 Office, Administrative or Government Buildings \n", - "3 Office, Administrative or Government Buildings \n", - "4 Office, Administrative or Government Buildings \n", - ".. ... \n", - "103 Transport Buildings \n", - "104 Transport Buildings \n", - "105 Transport Buildings \n", - "106 Transport Buildings \n", - "107 Other non-doemestic buildings \n", - "\n", - " Bez_UK_Enob \\\n", - "0 NaN \n", - "1 Parlaments- oder Gerichtsgebäude \n", - "2 Öffentliches Verwaltungs- oder Ämtergebäude, R... \n", - "3 Bürogebäude \n", - "4 Rundfunk- oder Fernsehanstalt \n", - ".. ... \n", - "103 Park-/Garagengebäude, Fahrradparkhaus \n", - "104 Halle für sonstige Verkehrsmittel (z.B. für Fl... \n", - "105 Gebäude zur Pflege von Fahrzeugen (z.B. Waschs... \n", - "106 Empfangsgebäude (Bahnhof, Busbahnhof, Flughafe... \n", - "107 NaN \n", - "\n", - " Bez_UK_Enob_Eng t_start t_end \\\n", - "0 NaN 6.947645 18.185219 \n", - "1 Parliament or Court Building 6.987150 18.048927 \n", - "2 Public Administration or Office Building, Town... 7.059232 18.165506 \n", - "3 Office Building 6.821892 18.280712 \n", - "4 Broadcasting or Television Station 6.821892 18.280712 \n", - ".. ... ... ... \n", - "103 Park/Garage Building, Bicycle Parking Garage 2.441274 21.812980 \n", - "104 Hall for Other Means of Transportation (e.g., ... 2.441274 21.812980 \n", - "105 Building for Vehicle Maintenance (e.g., Car Wash) 5.167719 20.057703 \n", - "106 Terminal Building (Train Station, Bus Station,... 7.444449 18.967596 \n", - "107 NaN 0.000000 0.000000 \n", - "\n", - " t_nutz_d d_nutz_a ... deltaTheta_i_NA theta_i_h_min \\\n", - "0 11.237574 256.563179 ... 3.910732 19.900379 \n", - "1 11.061778 251.972117 ... 3.994206 20.000000 \n", - "2 11.106273 253.662834 ... 4.000000 19.986926 \n", - "3 11.458820 261.808516 ... 3.806054 19.818476 \n", - "4 11.458820 261.808516 ... 3.806054 19.818476 \n", - ".. ... ... ... ... ... \n", - "103 19.371706 342.811152 ... 0.767166 15.214431 \n", - "104 19.371706 342.811152 ... 0.767166 15.214431 \n", - "105 14.889984 308.097599 ... 3.984652 20.000000 \n", - "106 11.523147 268.656296 ... 3.952655 20.000000 \n", - "107 0.000000 0.000000 ... 0.000000 0.000000 \n", - "\n", - " theta_i_c_max Feuchte Vd_A Vd_A_Geb c_RLT F_RLT \\\n", - "0 26.033088 0.581514 5.013155 1.736607 0.230361 0.860952 \n", - "1 26.000000 0.462520 4.034134 1.428428 0.198428 0.850696 \n", - "2 26.008128 0.580558 4.542927 1.618366 0.218665 0.827908 \n", - "3 26.068869 0.529982 5.047320 1.645056 0.230376 0.878165 \n", - "4 26.068869 0.529982 5.047320 1.645056 0.230376 0.878165 \n", - ".. ... ... ... ... ... ... \n", - "103 27.337398 0.056176 1.883892 0.390244 0.026872 0.987472 \n", - "104 27.337398 0.056176 1.883892 0.390244 0.026872 0.987472 \n", - "105 26.000000 0.285404 3.411500 1.018000 0.137138 0.946748 \n", - "106 26.000000 0.798224 6.288050 1.896750 0.386801 0.868702 \n", - "107 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 \n", - "\n", - " q_I_p q_I_fac \n", - "0 30.744682 56.342308 \n", - "1 22.222648 32.672892 \n", - "2 28.508191 38.197157 \n", - "3 32.925602 66.120123 \n", - "4 32.925602 66.120123 \n", - ".. ... ... \n", - "103 7.912073 20.636915 \n", - "104 7.912073 20.636915 \n", - "105 36.048453 518.719970 \n", - "106 77.626399 11.116274 \n", - "107 0.000000 0.000000 \n", - "\n", - "[108 rows x 34 columns]" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "data" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": {}, - "outputs": [], - "source": [ - "filtered_data = data[data['Bez_UK_Enob'].isna()]\n", - "filtered_data.to_csv(r'C:\\Users\\felix\\Programmieren\\tecdm\\src\\districtgenerator\\data\\multi_zone_average\\Non-domestic-multi-zone-average-usage-profiles-for-Germany.csv', sep=\";\")" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "ename": "TypeError", - "evalue": "list indices must be integers or slices, not numpy.float64", - "output_type": "error", - "traceback": [ - "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[1;31mTypeError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[1;32mIn[5], line 9\u001b[0m\n\u001b[0;32m 7\u001b[0m df \u001b[38;5;241m=\u001b[39m pd\u001b[38;5;241m.\u001b[39mread_csv(\u001b[38;5;124mr\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mC:\u001b[39m\u001b[38;5;124m\\\u001b[39m\u001b[38;5;124mUsers\u001b[39m\u001b[38;5;124m\\\u001b[39m\u001b[38;5;124mfelix\u001b[39m\u001b[38;5;124m\\\u001b[39m\u001b[38;5;124mProgrammieren\u001b[39m\u001b[38;5;124m\\\u001b[39m\u001b[38;5;124mtecdm\u001b[39m\u001b[38;5;124m\\\u001b[39m\u001b[38;5;124msrc\u001b[39m\u001b[38;5;124m\\\u001b[39m\u001b[38;5;124mdistrictgenerator\u001b[39m\u001b[38;5;124m\\\u001b[39m\u001b[38;5;124mdata\u001b[39m\u001b[38;5;124m\\\u001b[39m\u001b[38;5;124moccupancy_schedules\u001b[39m\u001b[38;5;124m\\\u001b[39m\u001b[38;5;124mGarderobeDusche.csv\u001b[39m\u001b[38;5;124m\"\u001b[39m, sep\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m;\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m 8\u001b[0m occupancy \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m45\u001b[39m \u001b[38;5;241m*\u001b[39m df[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mPeople\u001b[39m\u001b[38;5;124m\"\u001b[39m]\n\u001b[1;32m----> 9\u001b[0m \u001b[43mel_wrapper\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mpower_sim\u001b[49m\u001b[43m(\u001b[49m\u001b[43mirradiation\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mweekend\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mday\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43moccupancy\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[1;32mc:\\Users\\felix\\.conda\\envs\\districtgenerator\\Lib\\site-packages\\richardsonpy-0.2.1-py3.11.egg\\richardsonpy\\classes\\stochastic_el_load_wrapper.py:115\u001b[0m, in \u001b[0;36mElectricityProfile.power_sim\u001b[1;34m(self, irradiation, weekend, day, occupancy)\u001b[0m\n\u001b[0;32m 112\u001b[0m month \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_get_month(day)\n\u001b[0;32m 114\u001b[0m \u001b[38;5;66;03m# Lighting\u001b[39;00m\n\u001b[1;32m--> 115\u001b[0m demand_lighting \u001b[38;5;241m=\u001b[39m \u001b[43mlighting_model\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrun_lighting_simulation\u001b[49m\u001b[43m(\u001b[49m\n\u001b[0;32m 116\u001b[0m \u001b[43m \u001b[49m\u001b[43mvOccupancyArray\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43moccupancy\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 117\u001b[0m \u001b[43m \u001b[49m\u001b[43mvBulbArray\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mlightbulbs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 118\u001b[0m \u001b[43m \u001b[49m\u001b[43mvIrradianceArray\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mirradiation\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 119\u001b[0m \u001b[43m \u001b[49m\u001b[43mlight_mod_config\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mlighting_config\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 121\u001b[0m \u001b[38;5;66;03m# Appliances\u001b[39;00m\n\u001b[0;32m 122\u001b[0m fun \u001b[38;5;241m=\u001b[39m appliance_model\u001b[38;5;241m.\u001b[39mrun_application_simulation\n", - "File \u001b[1;32mc:\\Users\\felix\\.conda\\envs\\districtgenerator\\Lib\\site-packages\\richardsonpy-0.2.1-py3.11.egg\\richardsonpy\\classes\\lighting.py:213\u001b[0m, in \u001b[0;36mrun_lighting_simulation\u001b[1;34m(vOccupancyArray, vBulbArray, vIrradianceArray, light_mod_config)\u001b[0m\n\u001b[0;32m 209\u001b[0m bLowIrradiance \u001b[38;5;241m=\u001b[39m ((iIrradiance \u001b[38;5;241m<\u001b[39m iIrradianceThreshold) \u001b[38;5;129;01mor\u001b[39;00m (\n\u001b[0;32m 210\u001b[0m random\u001b[38;5;241m.\u001b[39mrandom() \u001b[38;5;241m<\u001b[39m \u001b[38;5;241m0.05\u001b[39m))\n\u001b[0;32m 212\u001b[0m \u001b[38;5;66;03m# Get the effective occupancy for this number of active occupants to allow for sharing\u001b[39;00m\n\u001b[1;32m--> 213\u001b[0m fEffectiveOccupancy \u001b[38;5;241m=\u001b[39m \u001b[43mlight_mod_config\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43meff_occupancy\u001b[49m\u001b[43m[\u001b[49m\n\u001b[0;32m 214\u001b[0m \u001b[43m \u001b[49m\u001b[43miActiveOccupants\u001b[49m\u001b[43m]\u001b[49m\n\u001b[0;32m 216\u001b[0m \u001b[38;5;66;03m# Check the probability of a switch on at this time\u001b[39;00m\n\u001b[0;32m 217\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m (bLowIrradiance \u001b[38;5;129;01mand\u001b[39;00m (random\u001b[38;5;241m.\u001b[39mrandom() \u001b[38;5;241m<\u001b[39m (\n\u001b[0;32m 218\u001b[0m fEffectiveOccupancy \u001b[38;5;241m*\u001b[39m fCalibratedRelativeUseWeighting))):\n\u001b[0;32m 219\u001b[0m \n\u001b[0;32m 220\u001b[0m \u001b[38;5;66;03m# This is a switch on event\u001b[39;00m\n\u001b[0;32m 221\u001b[0m \n\u001b[0;32m 222\u001b[0m \u001b[38;5;66;03m# Determine how long this bulb is on for\u001b[39;00m\n", - "\u001b[1;31mTypeError\u001b[0m: list indices must be integers or slices, not numpy.float64" - ] - } - ], - "source": [ - "import pandas as pd\n", - "test_data = Datahandler()\n", - "test_data.generateEnvironment()\n", - "irradiation = test_data.site[\"SunTotal\"] \n", - "weekend = True\n", - "day = 6\n", - "df = pd.read_csv(r\"C:\\Users\\felix\\Programmieren\\tecdm\\src\\districtgenerator\\data\\occupancy_schedules\\GarderobeDusche.csv\", sep=\";\")\n", - "occupancy = 45 * df[\"People\"]\n", - "el_wrapper.power_sim(irradiation, weekend, day, occupancy)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import pandas as pd\n", - "test_data = Datahandler()\n", - "test_data.generateEnvironment()\n", - "irradiation = test_data.site[\"SunTotal\"] \n", - "weekend = True\n", - "day = 6\n", - "df = pd.read_csv(r\"C:\\Users\\felix\\Programmieren\\tecdm\\src\\districtgenerator\\data\\occupancy_schedules\\GarderobeDusche.csv\", sep=\";\")\n", - "occupancy = 45 * df[\"People\"]\n", - "appliances = 1000 * df[\"Appliances\"]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "bldgs = {}\n", - "with open(r'C:\\Users\\felix\\Programmieren\\tecdm\\src\\districtgenerator\\data\\design_building_data.json') as json_file:\n", - " jsonData = json.load(json_file)\n", - " for subData in jsonData:\n", - " bldgs[subData[\"name\"]] = subData[\"value\"]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'T_set_min': 20.0,\n", - " 'T_set_max': 26.0,\n", - " 'T_bivalent': -2.0,\n", - " 'T_heatlimit': 15.0,\n", - " 'ventilation_rate': 0.5,\n", - " 'buildings_short': ['SFH', 'MFH', 'TH', 'AB'],\n", - " 'buildings_long': ['single_family_house',\n", - " 'multi_family_house',\n", - " 'terraced_house',\n", - " 'apartment_block'],\n", - " 'retrofit_short': [0, 1, 2],\n", - " 'retrofit_long': ['tabula_standard',\n", - " 'tabula_retrofit',\n", - " 'tabula_adv_retrofit'],\n", - " 'dhwload': [4662.1, 4662.1, 4662.1, 3999.8],\n", - " 'mean_drawoff_vol_per_day': [40, 40, 40, 40]}" - ] - }, - "execution_count": 50, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "bldgs" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "4662.1" - ] - }, - "execution_count": 55, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# building[\"dhwload\"] \n", - "bldgs[\"dhwload\"][bldgs[\"buildings_short\"].index(\"SFH\")] * 1" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
DAYHOUROCCUPANCYAPPLIANCESLIGHTINGWATERHEATINGCOOLINGPROCESSESSERVERSELECTROMOBILITY
0110.00.10.10.0SETBACKOFF0.00.00.0
1120.00.10.10.0SETBACKOFF0.00.00.0
2130.00.10.10.0SETBACKOFF0.00.00.0
3140.00.10.10.0SETBACKOFF0.00.00.0
4150.00.10.10.0SETBACKOFF0.00.00.0
....................................
1396200.00.10.10.0OFFOFF0.00.00.0
1406210.00.10.10.0OFFOFF0.00.00.0
1416220.00.10.10.0OFFOFF0.00.00.0
1426230.00.10.10.0OFFOFF0.00.00.0
1436240.00.10.10.0OFFOFF0.00.00.0
\n", - "

144 rows × 11 columns

\n", - "
" - ], - "text/plain": [ - " DAY HOUR OCCUPANCY APPLIANCES LIGHTING WATER HEATING COOLING \\\n", - "0 1 1 0.0 0.1 0.1 0.0 SETBACK OFF \n", - "1 1 2 0.0 0.1 0.1 0.0 SETBACK OFF \n", - "2 1 3 0.0 0.1 0.1 0.0 SETBACK OFF \n", - "3 1 4 0.0 0.1 0.1 0.0 SETBACK OFF \n", - "4 1 5 0.0 0.1 0.1 0.0 SETBACK OFF \n", - ".. ... ... ... ... ... ... ... ... \n", - "139 6 20 0.0 0.1 0.1 0.0 OFF OFF \n", - "140 6 21 0.0 0.1 0.1 0.0 OFF OFF \n", - "141 6 22 0.0 0.1 0.1 0.0 OFF OFF \n", - "142 6 23 0.0 0.1 0.1 0.0 OFF OFF \n", - "143 6 24 0.0 0.1 0.1 0.0 OFF OFF \n", - "\n", - " PROCESSES SERVERS ELECTROMOBILITY \n", - "0 0.0 0.0 0.0 \n", - "1 0.0 0.0 0.0 \n", - "2 0.0 0.0 0.0 \n", - "3 0.0 0.0 0.0 \n", - "4 0.0 0.0 0.0 \n", - ".. ... ... ... \n", - "139 0.0 0.0 0.0 \n", - "140 0.0 0.0 0.0 \n", - "141 0.0 0.0 0.0 \n", - "142 0.0 0.0 0.0 \n", - "143 0.0 0.0 0.0 \n", - "\n", - "[144 rows x 11 columns]" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "from functions import schedule_reader as schedule_reader\n", - "schedule, schedule_type = schedule_reader.get_schedule('oag')\n", - "schedule" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Benutzerdefinierte Sortierfunktion definieren\n", - "def custom_sort(val):\n", - " if val < 7:\n", - " return float('inf') # Stellt sicher, dass Werte unter 7 am Ende kommen\n", - " elif val >= 7:\n", - " return -val # Umkehren der Reihenfolge für Werte ab 7\n", - " else:\n", - " return val # Fallback-Fall, falls irgendwie ein ungültiger Wert vorliegt\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# schedules_sorted = schedule.sort_values(by=\"DAY\", key=custom_sort)\n", - "sorter = [ 5 , 6, 0 , 1 , 2, 3 ,4 ]\n", - "#schedule.sort_values(by=\"DAY\", key=lambda column: column.map(lambda e: sorter.index(e)), inplace=True)\n", - "schedule.sort_values(by=[\"DAY\", \"HOUR\"], key=lambda x: sorter.index(x) if x.name == \"DAY\" else x, inplace=True)\n", - "schedule" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "sorter = [ 5 , 6, 0 , 1 , 2, 3 ,4 ] \n", - "# Create a custom sorter index\n", - "sorter_index = {day: index for index, day in enumerate(sorter)}\n", - "\n", - "# Apply sorting\n", - "schedule['DAY'] = pd.Categorical(schedule['DAY'], categories=sorter, ordered=True)\n", - "schedule.sort_values(by=['DAY', 'HOUR'], inplace=True)\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "\n", - "def expand_dataframe(df, total_days):\n", - " unique_days = df['DAY'].unique()\n", - " num_days = len(unique_days)\n", - " \n", - " # Calculate the number of full weeks and extra days needed\n", - " full_cycles = total_days // num_days\n", - " extra_days = total_days % num_days\n", - " \n", - " # Replicate the DataFrame for the number of full cycles\n", - " result_df = pd.concat([df] * full_cycles, ignore_index=True)\n", - " \n", - " # If there are extra days, append the needed days from a new cycle\n", - " if extra_days > 0:\n", - " extra_data = df[df['DAY'].isin(unique_days[:extra_days])]\n", - " result_df = pd.concat([result_df, extra_data], ignore_index=True)\n", - " \n", - " return result_df\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "schedule_len = expand_dataframe(schedule, 14)\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "HOUR\n", - "1 14\n", - "2 14\n", - "3 14\n", - "4 14\n", - "5 14\n", - "6 14\n", - "7 14\n", - "8 14\n", - "9 14\n", - "10 14\n", - "11 14\n", - "12 14\n", - "13 14\n", - "14 14\n", - "15 14\n", - "16 14\n", - "17 14\n", - "18 14\n", - "19 14\n", - "20 14\n", - "21 14\n", - "22 14\n", - "23 14\n", - "24 14\n", - "Name: count, dtype: int64" - ] - }, - "execution_count": 94, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "schedule_len.value_counts(\"HOUR\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
DAYHOUROCCUPANCYAPPLIANCESLIGHTINGWATERHEATINGCOOLINGPROCESSESSERVERSELECTROMOBILITY
96510.00.10.10.0SETBACKOFF0.00.00.0
97520.00.10.10.0SETBACKOFF0.00.00.0
98530.00.10.10.0SETBACKOFF0.00.00.0
99540.00.10.10.0SETBACKOFF0.00.00.0
100550.00.10.10.0SETBACKOFF0.00.00.0
....................................
914200.00.10.10.0SETBACKOFF0.00.00.0
924210.00.10.10.0SETBACKOFF0.00.00.0
934220.00.10.10.0SETBACKOFF0.00.00.0
944230.00.10.10.0SETBACKOFF0.00.00.0
954240.00.10.10.0SETBACKOFF0.00.00.0
\n", - "

144 rows × 11 columns

\n", - "
" - ], - "text/plain": [ - " DAY HOUR OCCUPANCY APPLIANCES LIGHTING WATER HEATING COOLING \\\n", - "96 5 1 0.0 0.1 0.1 0.0 SETBACK OFF \n", - "97 5 2 0.0 0.1 0.1 0.0 SETBACK OFF \n", - "98 5 3 0.0 0.1 0.1 0.0 SETBACK OFF \n", - "99 5 4 0.0 0.1 0.1 0.0 SETBACK OFF \n", - "100 5 5 0.0 0.1 0.1 0.0 SETBACK OFF \n", - ".. .. ... ... ... ... ... ... ... \n", - "91 4 20 0.0 0.1 0.1 0.0 SETBACK OFF \n", - "92 4 21 0.0 0.1 0.1 0.0 SETBACK OFF \n", - "93 4 22 0.0 0.1 0.1 0.0 SETBACK OFF \n", - "94 4 23 0.0 0.1 0.1 0.0 SETBACK OFF \n", - "95 4 24 0.0 0.1 0.1 0.0 SETBACK OFF \n", - "\n", - " PROCESSES SERVERS ELECTROMOBILITY \n", - "96 0.0 0.0 0.0 \n", - "97 0.0 0.0 0.0 \n", - "98 0.0 0.0 0.0 \n", - "99 0.0 0.0 0.0 \n", - "100 0.0 0.0 0.0 \n", - ".. ... ... ... \n", - "91 0.0 0.0 0.0 \n", - "92 0.0 0.0 0.0 \n", - "93 0.0 0.0 0.0 \n", - "94 0.0 0.0 0.0 \n", - "95 0.0 0.0 0.0 \n", - "\n", - "[144 rows x 11 columns]" - ] - }, - "execution_count": 91, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "schedule" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "def get_tek(building_type):\n", - " \"\"\"\n", - " Returns the TEK Warmwasser value according to the building type.\n", - " \n", - " Data is read from 'TEK_districtgenerator.csv' in the specified directory.\n", - "\n", - " Args:\n", - " building_type (str): The key representing the building type.\n", - "\n", - " Returns:\n", - " float: The TEK Warmwasser value for the specified building type.\n", - " str: The descriptive name of the building type.\n", - " \"\"\"\n", - " tek_assignment = {\n", - " \"oag\": \"Bürogebäude\",\n", - " \"IWU Research and University Teaching\": \"Hochschule und Forschung (allgemein)\",\n", - " \"IWU Health and Care\": \"Beherbergungsstätten (allgemein)\",\n", - " \"IWU School, Day Nursery and other Care\": \"Schulen\",\n", - " \"IWU Culture and Leisure\": \"Ausstellungsgebäude\",\n", - " \"IWU Sports Facilities\": \"Sporthallen\",\n", - " \"IWU Hotels, Boarding, Restaurants or Catering\": \"Hotels / Pensionen\",\n", - " \"IWU Production, Workshop, Warehouse or Operations\": \"Gewerbliche und industrielle Gebäude – Mischung aus leichter u. schwerer Arbeit\",\n", - " \"IWU Trade Buildings\": \"Verkaufsstätten (allgemein)\",\n", - " \"IWU Generalized (1) Services building\": \"Verwaltungsgebäude (allgemein)\",\n", - " \"IWU Generalized (2) Production buildings\": \"Gewerbliche und industrielle Gebäude – Mischung aus leichter u. schwerer Arbeit\"\n", - " }\n", - "\n", - " tek_name = tek_assignment.get(building_type)\n", - " if tek_name is None:\n", - " print(f\"No schedule for building type {building_type}\")\n", - " return None, None\n", - "\n", - " data_path = os.path.join(r'C:\\Users\\felix\\Programmieren\\tecdm\\src\\districtgenerator\\data\\TEKs\\TEK_districtgenerator.csv')\n", - "\n", - " try:\n", - " data_schedule = pd.read_csv(data_path, sep=',')\n", - " warm_water_value = data_schedule[data_schedule[\"TEK\"] == tek_name][\"TEK Warmwasser\"].iloc[0]\n", - " return warm_water_value, tek_name\n", - " except FileNotFoundError:\n", - " print(f\"File not found: {data_path}\")\n", - " return None, None\n", - " except IndexError:\n", - " print(f\"No data available for {tek_name}\")\n", - " return None, None" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "data_path = os.path.join(r'C:\\Users\\felix\\Programmieren\\tecdm\\src\\districtgenerator\\data\\TEKs\\TEK_districtgenerator.csv')\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "8.1 Bürogebäude\n" - ] - } - ], - "source": [ - "data, test = get_tek('oag')\n", - "print(data, test)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "def getSchedule(hk_geb, uk_geb):\n", - " \"\"\"\n", - " Find occupancy schedule from SIA2024, depending on hk_geb, uk_geb\n", - " \n", - " \n", - " :external input data: ../auxiliary/occupancy_schedules/occupancy_schedules_zuweisungen.csv\n", - " \n", - " :param hk_geb: usage type (main category)\n", - " :type hk_geb: string\n", - " :param uk_geb: usage type (subcategory)\n", - " :type uk_geb: string\n", - "\n", - " :return: df_schedule, schedule_name\n", - " :rtype: DataFrame (with floats), string\n", - " \"\"\"\n", - " \n", - " zuweisungen = pd.read_csv(os.path.join('../auxiliary/occupancy_schedules/occupancy_schedules_zuweisungen.csv'), sep = ';', encoding = 'latin')\n", - " \n", - " if hk_geb in zuweisungen['hk_geb'].values:\n", - " \n", - " if uk_geb in zuweisungen['uk_geb'].values:\n", - " row = zuweisungen[zuweisungen['uk_geb'] == uk_geb]\n", - " schedule_name = row['schedule_name'].to_string(index = False).strip()\n", - " df_schedule = pd.read_csv(os.path.join('../auxiliary/occupancy_schedules/')+schedule_name+'.csv', sep = ';')\n", - " \n", - " return df_schedule, schedule_name\n", - " \n", - " else: \n", - " return print('uk_geb unbekannt')\n", - " \n", - " else:\n", - " return print('hk_geb unbekannt') \n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
PeopleAppliances
00.00.08
10.00.08
20.00.08
30.00.08
40.00.08
\n", - "
" - ], - "text/plain": [ - " People Appliances\n", - "0 0.0 0.08\n", - "1 0.0 0.08\n", - "2 0.0 0.08\n", - "3 0.0 0.08\n", - "4 0.0 0.08" - ] - }, - "execution_count": 122, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "data = pd.read_csv(r'C:\\Users\\felix\\Programmieren\\tecdm\\src\\districtgenerator\\data\\occupancy_schedules\\Parkhaus.csv', sep=';')\n", - "data.head()\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "Occupancy_Full_Usage_Hours = data.People.sum() # in h/a\n", - "Occupancy_Full_Usage_Hours\n", - "TEK_dhw_per_Occupancy_Full_Usage_Hour = 48.7 / Occupancy_Full_Usage_Hours\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "for hour in range(0, 120):\n", - " dhw_water = data.loc[hour, 'People'] * TEK_dhw_per_Occupancy_Full_Usage_Hour * 1000 * 240" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "We are about to generate a Non Residential building.\n", - "Test, 3 3.125\n", - "{'ow1': 0.541796301, 'win1': 0.345399313, 'rt1': 0.506728916, 'gf1': 0.369112228}\n", - " DAY HOUR OCCUPANCY APPLIANCES LIGHTING WATER HEATING COOLING \\\n", - "0 1 1 0.0 0.1 0.1 0.0 SETBACK OFF \n", - "1 1 2 0.0 0.1 0.1 0.0 SETBACK OFF \n", - "2 1 3 0.0 0.1 0.1 0.0 SETBACK OFF \n", - "3 1 4 0.0 0.1 0.1 0.0 SETBACK OFF \n", - "4 1 5 0.0 0.1 0.1 0.0 SETBACK OFF \n", - ".. ... ... ... ... ... ... ... ... \n", - "139 6 20 0.0 0.1 0.1 0.0 OFF OFF \n", - "140 6 21 0.0 0.1 0.1 0.0 OFF OFF \n", - "141 6 22 0.0 0.1 0.1 0.0 OFF OFF \n", - "142 6 23 0.0 0.1 0.1 0.0 OFF OFF \n", - "143 6 24 0.0 0.1 0.1 0.0 OFF OFF \n", - "\n", - " PROCESSES SERVERS ELECTROMOBILITY \n", - "0 0.0 0.0 0.0 \n", - "1 0.0 0.0 0.0 \n", - "2 0.0 0.0 0.0 \n", - "3 0.0 0.0 0.0 \n", - "4 0.0 0.0 0.0 \n", - ".. ... ... ... \n", - "139 0.0 0.0 0.0 \n", - "140 0.0 0.0 0.0 \n", - "141 0.0 0.0 0.0 \n", - "142 0.0 0.0 0.0 \n", - "143 0.0 0.0 0.0 \n", - "\n", - "[144 rows x 11 columns]\n", - "We are about to generate a Non Residential building.\n", - "Test, 3 3.125\n", - "{'ow1': 0.288649056, 'win1': 0.298723187, 'rt1': 0.331884826, 'gf1': 0.383291576}\n", - " DAY HOUR OCCUPANCY APPLIANCES LIGHTING WATER HEATING COOLING \\\n", - "0 1 1 0.0 0.1 0.1 0.0 SETBACK OFF \n", - "1 1 2 0.0 0.1 0.1 0.0 SETBACK OFF \n", - "2 1 3 0.0 0.1 0.1 0.0 SETBACK OFF \n", - "3 1 4 0.0 0.1 0.1 0.0 SETBACK OFF \n", - "4 1 5 0.0 0.1 0.1 0.0 SETBACK OFF \n", - ".. ... ... ... ... ... ... ... ... \n", - "139 6 20 0.0 0.1 0.1 0.0 OFF OFF \n", - "140 6 21 0.0 0.1 0.1 0.0 OFF OFF \n", - "141 6 22 0.0 0.1 0.1 0.0 OFF OFF \n", - "142 6 23 0.0 0.1 0.1 0.0 OFF OFF \n", - "143 6 24 0.0 0.1 0.1 0.0 OFF OFF \n", - "\n", - " PROCESSES SERVERS ELECTROMOBILITY \n", - "0 0.0 0.0 0.0 \n", - "1 0.0 0.0 0.0 \n", - "2 0.0 0.0 0.0 \n", - "3 0.0 0.0 0.0 \n", - "4 0.0 0.0 0.0 \n", - ".. ... ... ... \n", - "139 0.0 0.0 0.0 \n", - "140 0.0 0.0 0.0 \n", - "141 0.0 0.0 0.0 \n", - "142 0.0 0.0 0.0 \n", - "143 0.0 0.0 0.0 \n", - "\n", - "[144 rows x 11 columns]\n", - "Das ist der Wert 8.1\n" - ] - }, - { - "ename": "AttributeError", - "evalue": "'list' object has no attribute 'power_sim'", - "output_type": "error", - "traceback": [ - "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[1;31mAttributeError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[1;32mIn[13], line 21\u001b[0m\n\u001b[0;32m 19\u001b[0m data\u001b[38;5;241m.\u001b[39minitializeBuildings(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mexample_nrb\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[0;32m 20\u001b[0m data\u001b[38;5;241m.\u001b[39mgenerateBuildings()\n\u001b[1;32m---> 21\u001b[0m \u001b[43mdata\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mgenerateDemands\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[1;32mc:\\Users\\felix\\Programmieren\\tecdm\\src\\districtgenerator\\districtgenerator\\datahandler.py:447\u001b[0m, in \u001b[0;36mDatahandler.generateDemands\u001b[1;34m(self, calcUserProfiles, saveUserProfiles, savePath)\u001b[0m\n\u001b[0;32m 445\u001b[0m \u001b[38;5;66;03m# calculate or load user profiles\u001b[39;00m\n\u001b[0;32m 446\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m calcUserProfiles:\n\u001b[1;32m--> 447\u001b[0m \u001b[43mbuilding\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43muser\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m]\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcalcProfiles\u001b[49m\u001b[43m(\u001b[49m\u001b[43msite\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msite\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 448\u001b[0m \u001b[43m \u001b[49m\u001b[43mtime_horizon\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtime\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mdataLength\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 449\u001b[0m \u001b[43m \u001b[49m\u001b[43mtime_resolution\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtime\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mtimeResolution\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 450\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m saveUserProfiles:\n\u001b[0;32m 451\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m savePath \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n", - "File \u001b[1;32mc:\\Users\\felix\\Programmieren\\tecdm\\src\\districtgenerator\\districtgenerator\\non_residential_users.py:317\u001b[0m, in \u001b[0;36mcalcProfiles\u001b[1;34m(self, site, time_resolution, time_horizon, initital_day)\u001b[0m\n\u001b[0;32m 315\u001b[0m \n\u001b[0;32m 316\u001b[0m self.occ = np.zeros(int(time_horizon/time_resolution))\n\u001b[1;32m--> 317\u001b[0m self.dhw = np.zeros(int(time_horizon/time_resolution))\n\u001b[0;32m 318\u001b[0m self.elec = np.zeros(int(time_horizon/time_resolution))\n\u001b[0;32m 319\u001b[0m self.gains = np.zeros(int(time_horizon/time_resolution))\n", - "File \u001b[1;32mc:\\Users\\felix\\Programmieren\\tecdm\\src\\districtgenerator\\districtgenerator\\profils.py:660\u001b[0m, in \u001b[0;36mNonResidentialProfiles.generate_el_profile\u001b[1;34m(self, irradiance, el_wrapper, annual_demand, do_normalization)\u001b[0m\n\u001b[0;32m 644\u001b[0m day_of_the_year \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m0\u001b[39m \n\u001b[0;32m 645\u001b[0m \u001b[38;5;66;03m# only necessary for electric heating\u001b[39;00m\n\u001b[0;32m 646\u001b[0m \u001b[38;5;66;03m# Perform lighting and appliance usage simulation for one day\u001b[39;00m\n\u001b[0;32m 647\u001b[0m \u001b[38;5;66;03m# Figure out, how to get el_p, light_p and app_p \u001b[39;00m\n\u001b[1;32m (...)\u001b[0m\n\u001b[0;32m 658\u001b[0m \u001b[38;5;66;03m# power_el_app : array\u001b[39;00m\n\u001b[0;32m 659\u001b[0m \u001b[38;5;66;03m# Array holding el. power values for appliance usage in Watt\u001b[39;00m\n\u001b[1;32m--> 660\u001b[0m (el_p_curve, light_p_curve, app_p_curve) \u001b[38;5;241m=\u001b[39m \u001b[43mel_wrapper\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mpower_sim\u001b[49m(irradiation\u001b[38;5;241m=\u001b[39mirrad_day_minutewise,\n\u001b[0;32m 661\u001b[0m weekend\u001b[38;5;241m=\u001b[39mweekend,\n\u001b[0;32m 662\u001b[0m day\u001b[38;5;241m=\u001b[39mi\u001b[38;5;241m+\u001b[39mday_of_the_year,)\n\u001b[0;32m 663\u001b[0m \u001b[38;5;66;03m# Substitution of caluclations \u001b[39;00m\n\u001b[0;32m 664\u001b[0m \u001b[38;5;66;03m# Lighniging \u001b[39;00m\n\u001b[0;32m 665\u001b[0m \u001b[38;5;66;03m# If occupancy -> occupancy electricity occupancy=current_occupancy)\u001b[39;00m\n\u001b[0;32m 666\u001b[0m \u001b[38;5;66;03m# Append results\u001b[39;00m\n\u001b[0;32m 667\u001b[0m demand\u001b[38;5;241m.\u001b[39mappend(el_p_curve)\n", - "\u001b[1;31mAttributeError\u001b[0m: 'list' object has no attribute 'power_sim'" - ] - } - ], - "source": [ - "data = Datahandler()\n", - "\n", - "data.setWeatherFile(r\"data\\weather\\EPW\\DEU_BE_Berlin-Schonefeld.AP.103850_TMYx.2004-2018.epw\")\n", - "\n", - "\n", - "# Next we generate an environment.\n", - "# Based on the location of the district this includes outside temperatures and sun radiation.\n", - "# The location can be changed in the site_data.json file. You find it in \\data.\n", - "# We create our first district in Aachen. When you open the site_data.json file, you should see, the \"location\"\n", - "# is [51.0,6.55], the \"climateZone\" 0 and the \"altitude\" 0.\n", - "# The time resolution can be changed in time_data.json. You also find it in \\data.\n", - "# For this example it should be 900 seconds, which equals 15 Minutes.\n", - "# The weather data is taken from a Test Reference Year Database from the DWD.\n", - "\n", - "# Generate Environment for the District\n", - "\n", - "data.generateEnvironment()\n", - "\n", - "data.initializeBuildings('example_nrb')\n", - "data.generateBuildings()\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'U': {'window': 1.08,\n", - " 'opaque': {'roof': 0.14,\n", - " 'intWall': [],\n", - " 'wall': 0.19,\n", - " 'ceiling': [],\n", - " 'floor': 0.21,\n", - " 'intFloor': [],\n", - " 'window': 1.08}},\n", - " 'd': {'window': [],\n", - " 'opaque': {'roof': [],\n", - " 'intWall': [],\n", - " 'wall': [],\n", - " 'ceiling': [],\n", - " 'floor': [],\n", - " 'intFloor': []}},\n", - " 'd_iso': {'window': [],\n", - " 'opaque': {'roof': [],\n", - " 'intWall': [],\n", - " 'wall': [],\n", - " 'ceiling': [],\n", - " 'floor': [],\n", - " 'intFloor': []}},\n", - " 'rho': {'window': [],\n", - " 'opaque': {'roof': [],\n", - " 'intWall': [],\n", - " 'wall': [],\n", - " 'ceiling': [],\n", - " 'floor': [],\n", - " 'intFloor': []}},\n", - " 'cp': {'window': [],\n", - " 'opaque': {'roof': [],\n", - " 'intWall': [],\n", - " 'wall': [],\n", - " 'ceiling': [],\n", - " 'floor': [],\n", - " 'intFloor': []}},\n", - " 'Lambda': {'window': [],\n", - " 'opaque': {'roof': [],\n", - " 'intWall': [],\n", - " 'wall': [],\n", - " 'ceiling': [],\n", - " 'floor': [],\n", - " 'intFloor': []}},\n", - " 'kappa': {'window': [],\n", - " 'opaque': {'roof': 405000.0,\n", - " 'intWall': 405000.0,\n", - " 'wall': 405000.0,\n", - " 'ceiling': 405000.0,\n", - " 'floor': 405000.0,\n", - " 'intFloor': 405000.0}},\n", - " 'g_gl': {'window': [],\n", - " 'opaque': {'roof': [],\n", - " 'intWall': [],\n", - " 'wall': [],\n", - " 'ceiling': [],\n", - " 'floor': [],\n", - " 'intFloor': []}},\n", - " 'R_se': {'window': 0.0476,\n", - " 'opaque': {'roof': 0.04,\n", - " 'intWall': [],\n", - " 'wall': 0.04,\n", - " 'ceiling': [],\n", - " 'floor': 0.0,\n", - " 'intFloor': []}},\n", - " 'R_si': {'window': 0.13,\n", - " 'opaque': {'roof': 0.13,\n", - " 'intWall': [],\n", - " 'wall': 0.13,\n", - " 'ceiling': [],\n", - " 'floor': 0.13,\n", - " 'intFloor': []}},\n", - " 'epsilon': {'window': 0.9,\n", - " 'opaque': {'roof': 0.9,\n", - " 'intWall': [],\n", - " 'wall': 0.9,\n", - " 'ceiling': [],\n", - " 'floor': 0.9,\n", - " 'intFloor': []}},\n", - " 'alpha_Sc': {'window': [],\n", - " 'opaque': {'roof': 0.6,\n", - " 'intWall': [],\n", - " 'wall': 0.6,\n", - " 'ceiling': [],\n", - " 'floor': 0.6,\n", - " 'intFloor': []}},\n", - " 'id': np.int64(0),\n", - " 'construction_year': np.int64(2022),\n", - " 'construction_type': None,\n", - " 'retrofit': np.int64(1),\n", - " 'usage_short': 'oag',\n", - " 'file_path': 'c:\\\\Users\\\\felix\\\\Programmieren\\\\tecdm\\\\src\\\\districtgenerator\\\\data',\n", - " 'c_p_air': 1000.0,\n", - " 'rho_air': 1.2,\n", - " 'T_set_min': 20.0,\n", - " 'T_set_max': 26.0,\n", - " 'ventilationRate': 0.5,\n", - " 'T_bivalent': -2.0,\n", - " 'T_heatlimit': 15.0,\n", - " 'attributes': [{'window': [],\n", - " 'opaque': {'roof': [],\n", - " 'intWall': [],\n", - " 'wall': [],\n", - " 'ceiling': [],\n", - " 'floor': [],\n", - " 'intFloor': []}},\n", - " {'window': [],\n", - " 'opaque': {'roof': [],\n", - " 'intWall': [],\n", - " 'wall': [],\n", - " 'ceiling': [],\n", - " 'floor': [],\n", - " 'intFloor': []}},\n", - " {'window': [],\n", - " 'opaque': {'roof': [],\n", - " 'intWall': [],\n", - " 'wall': [],\n", - " 'ceiling': [],\n", - " 'floor': [],\n", - " 'intFloor': []}},\n", - " {'window': [],\n", - " 'opaque': {'roof': [],\n", - " 'intWall': [],\n", - " 'wall': [],\n", - " 'ceiling': [],\n", - " 'floor': [],\n", - " 'intFloor': []}},\n", - " {'window': [],\n", - " 'opaque': {'roof': [],\n", - " 'intWall': [],\n", - " 'wall': [],\n", - " 'ceiling': [],\n", - " 'floor': [],\n", - " 'intFloor': []}},\n", - " {'window': 1.08,\n", - " 'opaque': {'roof': 0.14,\n", - " 'intWall': [],\n", - " 'wall': 0.19,\n", - " 'ceiling': [],\n", - " 'floor': 0.21,\n", - " 'intFloor': [],\n", - " 'window': 1.08}},\n", - " {'window': [],\n", - " 'opaque': {'roof': 405000.0,\n", - " 'intWall': 405000.0,\n", - " 'wall': 405000.0,\n", - " 'ceiling': 405000.0,\n", - " 'floor': 405000.0,\n", - " 'intFloor': 405000.0}},\n", - " {'window': 0.0476,\n", - " 'opaque': {'roof': 0.04,\n", - " 'intWall': [],\n", - " 'wall': 0.04,\n", - " 'ceiling': [],\n", - " 'floor': 0.0,\n", - " 'intFloor': []}},\n", - " {'window': 0.13,\n", - " 'opaque': {'roof': 0.13,\n", - " 'intWall': [],\n", - " 'wall': 0.13,\n", - " 'ceiling': [],\n", - " 'floor': 0.13,\n", - " 'intFloor': []}},\n", - " {'window': 0.9,\n", - " 'opaque': {'roof': 0.9,\n", - " 'intWall': [],\n", - " 'wall': 0.9,\n", - " 'ceiling': [],\n", - " 'floor': 0.9,\n", - " 'intFloor': []}},\n", - " {'window': [],\n", - " 'opaque': {'roof': 0.6,\n", - " 'intWall': [],\n", - " 'wall': 0.6,\n", - " 'ceiling': [],\n", - " 'floor': 0.6,\n", - " 'intFloor': []}},\n", - " {'window': [],\n", - " 'opaque': {'roof': [],\n", - " 'intWall': [],\n", - " 'wall': [],\n", - " 'ceiling': [],\n", - " 'floor': [],\n", - " 'intFloor': []}}],\n", - " 'opaque_ext': ['wall', 'roof', 'floor'],\n", - " 'opaque': {'ceiling', 'floor', 'intFloor', 'intWall', 'roof', 'wall'},\n", - " 'V': 1837.5,\n", - " 'A': {'f': 196.0,\n", - " 'opaque': {'south': 26.548018749,\n", - " 'north': 26.548018749,\n", - " 'west': 26.548018749,\n", - " 'east': 26.548018749,\n", - " 'roof': 99.318867536,\n", - " 'floor': 72.345996688,\n", - " 'wall': 106.192074996,\n", - " 'intFloor': 196.0,\n", - " 'ceiling': 72.345996688,\n", - " 'intWall': 159.28811249400002},\n", - " 'window': {'south': 16.924566336999998,\n", - " 'north': 16.924566336999998,\n", - " 'west': 16.924566336999998,\n", - " 'east': 16.924566336999998,\n", - " 'roof': 0.0,\n", - " 'floor': 0.0,\n", - " 'sum': 67.69826534799999}}}" - ] - }, - "execution_count": 34, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "vars(data.district[0]['envelope'])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "ename": "TypeError", - "evalue": "'Datahandler' object is not subscriptable", - "output_type": "error", - "traceback": [ - "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[1;31mTypeError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[1;32mIn[25], line 1\u001b[0m\n\u001b[1;32m----> 1\u001b[0m \u001b[38;5;28mvars\u001b[39m(\u001b[43mdata\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mdistrict\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m]\u001b[49m[\u001b[38;5;241m0\u001b[39m][\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mbuildingFeatures\u001b[39m\u001b[38;5;124m'\u001b[39m][\u001b[38;5;124m'\u001b[39m\u001b[38;5;124menvelope\u001b[39m\u001b[38;5;124m'\u001b[39m])\n", - "\u001b[1;31mTypeError\u001b[0m: 'Datahandler' object is not subscriptable" - ] - } - ], - "source": [ - "vars(data['district'][0]['buildingFeatures']['envelope'])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import pandas as pd" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "ename": "ParserError", - "evalue": "Error tokenizing data. C error: Expected 14 fields in line 6, saw 16\n", - "output_type": "error", - "traceback": [ - "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[1;31mParserError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[1;32mIn[36], line 1\u001b[0m\n\u001b[1;32m----> 1\u001b[0m data \u001b[38;5;241m=\u001b[39m \u001b[43mpd\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mread_csv\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43mr\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mC:\u001b[39;49m\u001b[38;5;124;43m\\\u001b[39;49m\u001b[38;5;124;43mUsers\u001b[39;49m\u001b[38;5;124;43m\\\u001b[39;49m\u001b[38;5;124;43mfelix\u001b[39;49m\u001b[38;5;124;43m\\\u001b[39;49m\u001b[38;5;124;43mProgrammieren\u001b[39;49m\u001b[38;5;124;43m\\\u001b[39;49m\u001b[38;5;124;43mtecdm\u001b[39;49m\u001b[38;5;124;43m\\\u001b[39;49m\u001b[38;5;124;43msrc\u001b[39;49m\u001b[38;5;124;43m\\\u001b[39;49m\u001b[38;5;124;43mdistrictgenerator\u001b[39;49m\u001b[38;5;124;43m\\\u001b[39;49m\u001b[38;5;124;43mdata\u001b[39;49m\u001b[38;5;124;43m\\\u001b[39;49m\u001b[38;5;124;43mconsumption_data\u001b[39;49m\u001b[38;5;124;43m\\\u001b[39;49m\u001b[38;5;124;43minternal_loads.csv\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m)\u001b[49m\n", - "File \u001b[1;32mc:\\Users\\felix\\.conda\\envs\\districtgenerator\\Lib\\site-packages\\pandas-2.2.2-py3.11-win-amd64.egg\\pandas\\io\\parsers\\readers.py:1026\u001b[0m, in \u001b[0;36mread_csv\u001b[1;34m(filepath_or_buffer, sep, delimiter, header, names, index_col, usecols, dtype, engine, converters, true_values, false_values, skipinitialspace, skiprows, skipfooter, nrows, na_values, keep_default_na, na_filter, verbose, skip_blank_lines, parse_dates, infer_datetime_format, keep_date_col, date_parser, date_format, dayfirst, cache_dates, iterator, chunksize, compression, thousands, decimal, lineterminator, quotechar, quoting, doublequote, escapechar, comment, encoding, encoding_errors, dialect, on_bad_lines, delim_whitespace, low_memory, memory_map, float_precision, storage_options, dtype_backend)\u001b[0m\n\u001b[0;32m 1013\u001b[0m kwds_defaults \u001b[38;5;241m=\u001b[39m _refine_defaults_read(\n\u001b[0;32m 1014\u001b[0m dialect,\n\u001b[0;32m 1015\u001b[0m delimiter,\n\u001b[1;32m (...)\u001b[0m\n\u001b[0;32m 1022\u001b[0m dtype_backend\u001b[38;5;241m=\u001b[39mdtype_backend,\n\u001b[0;32m 1023\u001b[0m )\n\u001b[0;32m 1024\u001b[0m kwds\u001b[38;5;241m.\u001b[39mupdate(kwds_defaults)\n\u001b[1;32m-> 1026\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43m_read\u001b[49m\u001b[43m(\u001b[49m\u001b[43mfilepath_or_buffer\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mkwds\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[1;32mc:\\Users\\felix\\.conda\\envs\\districtgenerator\\Lib\\site-packages\\pandas-2.2.2-py3.11-win-amd64.egg\\pandas\\io\\parsers\\readers.py:626\u001b[0m, in \u001b[0;36m_read\u001b[1;34m(filepath_or_buffer, kwds)\u001b[0m\n\u001b[0;32m 623\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m parser\n\u001b[0;32m 625\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m parser:\n\u001b[1;32m--> 626\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mparser\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mread\u001b[49m\u001b[43m(\u001b[49m\u001b[43mnrows\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[1;32mc:\\Users\\felix\\.conda\\envs\\districtgenerator\\Lib\\site-packages\\pandas-2.2.2-py3.11-win-amd64.egg\\pandas\\io\\parsers\\readers.py:1923\u001b[0m, in \u001b[0;36mTextFileReader.read\u001b[1;34m(self, nrows)\u001b[0m\n\u001b[0;32m 1916\u001b[0m nrows \u001b[38;5;241m=\u001b[39m validate_integer(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mnrows\u001b[39m\u001b[38;5;124m\"\u001b[39m, nrows)\n\u001b[0;32m 1917\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m 1918\u001b[0m \u001b[38;5;66;03m# error: \"ParserBase\" has no attribute \"read\"\u001b[39;00m\n\u001b[0;32m 1919\u001b[0m (\n\u001b[0;32m 1920\u001b[0m index,\n\u001b[0;32m 1921\u001b[0m columns,\n\u001b[0;32m 1922\u001b[0m col_dict,\n\u001b[1;32m-> 1923\u001b[0m ) \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_engine\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mread\u001b[49m\u001b[43m(\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;66;43;03m# type: ignore[attr-defined]\u001b[39;49;00m\n\u001b[0;32m 1924\u001b[0m \u001b[43m \u001b[49m\u001b[43mnrows\u001b[49m\n\u001b[0;32m 1925\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 1926\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mException\u001b[39;00m:\n\u001b[0;32m 1927\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mclose()\n", - "File \u001b[1;32mc:\\Users\\felix\\.conda\\envs\\districtgenerator\\Lib\\site-packages\\pandas-2.2.2-py3.11-win-amd64.egg\\pandas\\io\\parsers\\c_parser_wrapper.py:234\u001b[0m, in \u001b[0;36mCParserWrapper.read\u001b[1;34m(self, nrows)\u001b[0m\n\u001b[0;32m 232\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m 233\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mlow_memory:\n\u001b[1;32m--> 234\u001b[0m chunks \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_reader\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mread_low_memory\u001b[49m\u001b[43m(\u001b[49m\u001b[43mnrows\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 235\u001b[0m \u001b[38;5;66;03m# destructive to chunks\u001b[39;00m\n\u001b[0;32m 236\u001b[0m data \u001b[38;5;241m=\u001b[39m _concatenate_chunks(chunks)\n", - "File \u001b[1;32mparsers.pyx:838\u001b[0m, in \u001b[0;36mpandas._libs.parsers.TextReader.read_low_memory\u001b[1;34m()\u001b[0m\n", - "File \u001b[1;32mparsers.pyx:905\u001b[0m, in \u001b[0;36mpandas._libs.parsers.TextReader._read_rows\u001b[1;34m()\u001b[0m\n", - "File \u001b[1;32mparsers.pyx:874\u001b[0m, in \u001b[0;36mpandas._libs.parsers.TextReader._tokenize_rows\u001b[1;34m()\u001b[0m\n", - "File \u001b[1;32mparsers.pyx:891\u001b[0m, in \u001b[0;36mpandas._libs.parsers.TextReader._check_tokenize_status\u001b[1;34m()\u001b[0m\n", - "File \u001b[1;32mparsers.pyx:2061\u001b[0m, in \u001b[0;36mpandas._libs.parsers.raise_parser_error\u001b[1;34m()\u001b[0m\n", - "\u001b[1;31mParserError\u001b[0m: Error tokenizing data. C error: Expected 14 fields in line 6, saw 16\n" - ] - } - ], - "source": [ - "data = pd.read_csv(r'C:\\Users\\felix\\Programmieren\\tecdm\\src\\districtgenerator\\data\\consumption_data\\internal_loads.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import pandas as pd\n", - "def getTryWeather(file_path: str) -> pd.DataFrame:\n", - " \"\"\"\n", - " Parse a TRY weather data file into a DataFrame with a timestamp index.\n", - " Assumes specific file formatting.\n", - " \n", - " Parameters:\n", - " - file_path: str, the path to the TRY weather data file.\n", - "\n", - " Returns:\n", - " - weather: pd.DataFrame, a DataFrame with a timestamp.\n", - " \"\"\"\n", - " if \"2015\" or \"2045\" in file_path:\n", - " if \"2015\" in file_path:\n", - " year = 2015\n", - " elif \"2045\" in file_path:\n", - " year = 2015\n", - " with open(file_path, \"r\") as file:\n", - " for line_number, line in enumerate(file, start=1):\n", - " if \"***\" in line:\n", - " header_row = (\n", - " line_number - 1 - 1\n", - " ) # -1 for header above *** and -1 for start to count at 0\n", - " break\n", - "\n", - " \n", - "\n", - " else:\n", - " raise ValueError(\"Unsupported format type for TRY files. Only 2015 and 2045 are supported.\")\n", - " df = pd.read_table(\n", - " filepath_or_buffer=file_path,\n", - " header=header_row,\n", - " sep='\\s+',\n", - " skip_blank_lines=False,\n", - " encoding=\"latin\",\n", - " )\n", - " df = df.iloc[1:]\n", - " df[\"YEAR\"] = year \n", - " df[\"MONTH\"] = df[\"MM\"].astype(int)\n", - " df[\"DAY\"] = df[\"DD\"].astype(int)\n", - " df[\"HOUR\"] = df[\"HH\"].astype(int)\n", - " df['Timestamp'] = pd.to_datetime(df[[\"YEAR\", 'MONTH', 'DAY', 'HOUR']])\n", - " return df" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "df = getTryWeather(r\"C:\\Users\\felix\\Programmieren\\tecdm\\src\\districtgenerator\\data\\weather\\DWD\\TRY2015_Zone8_kalt.txt\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
RWHWMMDDHHtpWRWGN...BDAEILYEARMONTHDAYHOURTimestamp
140405002770500.01.01.01.0-5.7924.050.04.08.0...0.00.0265.0-288.00.020151112015-01-01 01:00:00
240405002770500.01.01.02.0-5.8924.050.03.68.0...0.00.0265.0-288.00.020151122015-01-01 02:00:00
340405002770500.01.01.03.0-5.9924.060.04.98.0...0.00.0265.0-287.00.020151132015-01-01 03:00:00
440405002770500.01.01.04.0-5.9924.070.04.48.0...0.00.0266.0-287.00.020151142015-01-01 04:00:00
540405002770500.01.01.05.0-5.8924.050.04.08.0...0.00.0267.0-286.00.020151152015-01-01 05:00:00
..................................................................
875640405002770500.012.031.020.0-4.6924.060.03.58.0...0.00.0259.0-293.00.020151231202015-12-31 20:00:00
875740405002770500.012.031.021.0-4.8924.060.03.67.0...0.00.0258.0-292.00.020151231212015-12-31 21:00:00
875840405002770500.012.031.022.0-5.0925.060.03.97.0...0.00.0249.0-291.00.020151231222015-12-31 22:00:00
875940405002770500.012.031.023.0-5.2925.070.03.58.0...0.00.0259.0-290.00.020151231232015-12-31 23:00:00
876040405002770500.012.031.024.0-5.6925.060.03.48.0...0.00.0267.0-289.00.020151231242016-01-01 00:00:00
\n", - "

8760 rows × 22 columns

\n", - "
" - ], - "text/plain": [ - " RW HW MM DD HH t p WR WG N ... \\\n", - "1 4040500 2770500.0 1.0 1.0 1.0 -5.7 924.0 50.0 4.0 8.0 ... \n", - "2 4040500 2770500.0 1.0 1.0 2.0 -5.8 924.0 50.0 3.6 8.0 ... \n", - "3 4040500 2770500.0 1.0 1.0 3.0 -5.9 924.0 60.0 4.9 8.0 ... \n", - "4 4040500 2770500.0 1.0 1.0 4.0 -5.9 924.0 70.0 4.4 8.0 ... \n", - "5 4040500 2770500.0 1.0 1.0 5.0 -5.8 924.0 50.0 4.0 8.0 ... \n", - "... ... ... ... ... ... ... ... ... ... ... ... \n", - "8756 4040500 2770500.0 12.0 31.0 20.0 -4.6 924.0 60.0 3.5 8.0 ... \n", - "8757 4040500 2770500.0 12.0 31.0 21.0 -4.8 924.0 60.0 3.6 7.0 ... \n", - "8758 4040500 2770500.0 12.0 31.0 22.0 -5.0 925.0 60.0 3.9 7.0 ... \n", - "8759 4040500 2770500.0 12.0 31.0 23.0 -5.2 925.0 70.0 3.5 8.0 ... \n", - "8760 4040500 2770500.0 12.0 31.0 24.0 -5.6 925.0 60.0 3.4 8.0 ... \n", - "\n", - " B D A E IL YEAR MONTH DAY HOUR Timestamp \n", - "1 0.0 0.0 265.0 -288.0 0.0 2015 1 1 1 2015-01-01 01:00:00 \n", - "2 0.0 0.0 265.0 -288.0 0.0 2015 1 1 2 2015-01-01 02:00:00 \n", - "3 0.0 0.0 265.0 -287.0 0.0 2015 1 1 3 2015-01-01 03:00:00 \n", - "4 0.0 0.0 266.0 -287.0 0.0 2015 1 1 4 2015-01-01 04:00:00 \n", - "5 0.0 0.0 267.0 -286.0 0.0 2015 1 1 5 2015-01-01 05:00:00 \n", - "... ... ... ... ... ... ... ... ... ... ... \n", - "8756 0.0 0.0 259.0 -293.0 0.0 2015 12 31 20 2015-12-31 20:00:00 \n", - "8757 0.0 0.0 258.0 -292.0 0.0 2015 12 31 21 2015-12-31 21:00:00 \n", - "8758 0.0 0.0 249.0 -291.0 0.0 2015 12 31 22 2015-12-31 22:00:00 \n", - "8759 0.0 0.0 259.0 -290.0 0.0 2015 12 31 23 2015-12-31 23:00:00 \n", - "8760 0.0 0.0 267.0 -289.0 0.0 2015 12 31 24 2016-01-01 00:00:00 \n", - "\n", - "[8760 rows x 22 columns]" - ] - }, - "execution_count": 50, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "def getEpWeather(file_path:str) -> pd.DataFrame:\n", - " \"\"\"\n", - " Function gets EPW weather data from a file and returns it as a pandas dataframe. \n", - "\n", - " Information about epw files: https://bigladdersoftware.com/epx/docs/8-3/auxiliary-programs/energyplus-weather-file-epw-data-dictionary.html#field-dry-bulb-temperature \n", - " Returns:\n", - " weather: pandas dataframe with the columns: \n", - " - DirNormRad\n", - " - DiffHorRad\n", - " - DryBulbTemp\n", - " Index is a timestamp in the yyyy-mm-dd-hh format. \n", - " \"\"\"\n", - "\n", - " # Define the column names as per EPW file documentation\n", - " col_names = [\"Year\", \"Month\", \"Day\", \"Hour\", \"Minute\", \n", - " \"Data Source and Uncertainty Flags\", \"Dry Bulb Temperature\", \n", - " \"Dew Point Temperature\", \"Relative Humidity\", \"Atmospheric Station Pressure\", \n", - " \"Extraterrestrial Horizontal Radiation\", \"Extraterrestrial Direct Normal Radiation\", \n", - " \"Horizontal Infrared Radiation Intensity\", \"Global Horizontal Radiation\", \n", - " \"Direct Normal Radiation\", \"Diffuse Horizontal Radiation\", \n", - " \"Global Horizontal Illuminance\", \"Direct Normal Illuminance\", \n", - " \"Diffuse Horizontal Illuminance\", \"Zenith Luminance\", \"Wind Direction\", \n", - " \"Wind Speed\", \"Total Sky Cover\", \"Opaque Sky Cover\", \"Visibility\", \n", - " \"Ceiling Height\", \"Present Weather Observation\", \"Present Weather Codes\", \n", - " \"Precipitable Water\", \"Aerosol Optical Depth\", \"Snow Depth\", \n", - " \"Days Since Last Snowfall\", \"Albedo\", \"Liquid Precipitation Depth\", \n", - " \"Liquid Precipitation Quantity\"]\n", - " \n", - " # Load the file\n", - " df = pd.read_csv(file_path, skiprows=8, header=None, names=col_names)\n", - " \n", - " # Creating a timestamp column in the required format\n", - " df['Timestamp'] = pd.to_datetime(df[['Year', 'Month', 'Day', 'Hour']]) - pd.Timedelta(hours=1)\n", - " \n", - " # Adjust the minute and second to 00:00, as EPW files do not contain this information\n", - " #df['Timestamp'] = df['Timestamp'].dt.strftime('%Y-%m-%d-%H-00-00')\n", - " \n", - " # Select the required columns\n", - " df = df[['Timestamp', 'Direct Normal Radiation', 'Diffuse Horizontal Radiation', 'Dry Bulb Temperature', \n", - " \"Direct Normal Illuminance\", \"Diffuse Horizontal Illuminance\",]]\n", - " \n", - " return df\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "1 2015-01-01 01:00:00\n", - "2 2015-01-01 02:00:00\n", - "3 2015-01-01 03:00:00\n", - "4 2015-01-01 04:00:00\n", - "5 2015-01-01 05:00:00\n", - " ... \n", - "8756 2015-12-31 20:00:00\n", - "8757 2015-12-31 21:00:00\n", - "8758 2015-12-31 22:00:00\n", - "8759 2015-12-31 23:00:00\n", - "8760 2016-01-01 00:00:00\n", - "Name: Timestamp, Length: 8760, dtype: datetime64[ns]" - ] - }, - "execution_count": 51, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df[\"Timestamp\"]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "8760" - ] - }, - "execution_count": 53, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df[\"Timestamp\"].nunique()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "df = getEpWeather(r'C:\\Users\\felix\\Programmieren\\tecdm\\src\\districtgenerator\\data\\weather\\EPW\\DEU_BE_Berlin-Schonefeld.AP.103850_TMYx.2004-2018.epw')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
TimestampDirect Normal RadiationDiffuse Horizontal RadiationDry Bulb TemperatureDirect Normal IlluminanceDiffuse Horizontal Illuminance
02011-01-01 00:00:00001.000
12011-01-01 01:00:00001.000
22011-01-01 02:00:00001.000
32011-01-01 03:00:00001.000
42011-01-01 04:00:00002.000
.....................
87552013-12-31 19:00:00001.000
87562013-12-31 20:00:00000.000
87572013-12-31 21:00:00000.000
87582013-12-31 22:00:00000.000
87592013-12-31 23:00:00000.000
\n", - "

8760 rows × 6 columns

\n", - "
" - ], - "text/plain": [ - " Timestamp Direct Normal Radiation \\\n", - "0 2011-01-01 00:00:00 0 \n", - "1 2011-01-01 01:00:00 0 \n", - "2 2011-01-01 02:00:00 0 \n", - "3 2011-01-01 03:00:00 0 \n", - "4 2011-01-01 04:00:00 0 \n", - "... ... ... \n", - "8755 2013-12-31 19:00:00 0 \n", - "8756 2013-12-31 20:00:00 0 \n", - "8757 2013-12-31 21:00:00 0 \n", - "8758 2013-12-31 22:00:00 0 \n", - "8759 2013-12-31 23:00:00 0 \n", - "\n", - " Diffuse Horizontal Radiation Dry Bulb Temperature \\\n", - "0 0 1.0 \n", - "1 0 1.0 \n", - "2 0 1.0 \n", - "3 0 1.0 \n", - "4 0 2.0 \n", - "... ... ... \n", - "8755 0 1.0 \n", - "8756 0 0.0 \n", - "8757 0 0.0 \n", - "8758 0 0.0 \n", - "8759 0 0.0 \n", - "\n", - " Direct Normal Illuminance Diffuse Horizontal Illuminance \n", - "0 0 0 \n", - "1 0 0 \n", - "2 0 0 \n", - "3 0 0 \n", - "4 0 0 \n", - "... ... ... \n", - "8755 0 0 \n", - "8756 0 0 \n", - "8757 0 0 \n", - "8758 0 0 \n", - "8759 0 0 \n", - "\n", - "[8760 rows x 6 columns]" - ] - }, - "execution_count": 56, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "ename": "ValueError", - "evalue": "Column 'oag' does not exist in the table.", - "output_type": "error", - "traceback": [ - "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[1;31mValueError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[1;32mIn[58], line 2\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mfunctions\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mschedule_reader\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m \u001b[38;5;21;01mschedule_reader\u001b[39;00m\n\u001b[1;32m----> 2\u001b[0m \u001b[43mschedule_reader\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget_schedule\u001b[49m\u001b[43m(\u001b[49m\u001b[43mbuilding_type\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43moag\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m)\u001b[49m\n", - "File \u001b[1;32mc:\\Users\\felix\\Programmieren\\tecdm\\src\\districtgenerator\\functions\\schedule_reader.py:58\u001b[0m, in \u001b[0;36mget_schedule\u001b[1;34m(building_type)\u001b[0m\n\u001b[0;32m 41\u001b[0m type_assignment \u001b[38;5;241m=\u001b[39m {\n\u001b[0;32m 42\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124moag\u001b[39m\u001b[38;5;124m\"\u001b[39m: \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124moffice.csv\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[0;32m 43\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mIWU Research and University Teaching\u001b[39m\u001b[38;5;124m\"\u001b[39m: \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mHörsaal, Auditorium.csv\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[1;32m (...)\u001b[0m\n\u001b[0;32m 54\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mIWU Generalized (2) Production buildings\u001b[39m\u001b[38;5;124m\"\u001b[39m: \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mLagerhalle.csv\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m 55\u001b[0m }\n\u001b[0;32m 57\u001b[0m \u001b[38;5;66;03m#schedule_name = type_assignment.get(building_type)\u001b[39;00m\n\u001b[1;32m---> 58\u001b[0m schedule_name \u001b[38;5;241m=\u001b[39m \u001b[43mget_building_type\u001b[49m\u001b[43m(\u001b[49m\u001b[43mterm\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mSIA\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mkind\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mbuilding_type\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 59\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m schedule_name \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m 60\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mNo schedule for building type \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mbuilding_type\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m)\n", - "File \u001b[1;32mc:\\Users\\felix\\Programmieren\\tecdm\\src\\districtgenerator\\functions\\schedule_reader.py:18\u001b[0m, in \u001b[0;36mget_building_type\u001b[1;34m(term, kind)\u001b[0m\n\u001b[0;32m 16\u001b[0m \u001b[38;5;66;03m# Check if the kind column exists\u001b[39;00m\n\u001b[0;32m 17\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m kind \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;129;01min\u001b[39;00m df\u001b[38;5;241m.\u001b[39mcolumns:\n\u001b[1;32m---> 18\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mColumn \u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mkind\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m does not exist in the table.\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m 20\u001b[0m \u001b[38;5;66;03m# Find the row that matches the term in 'districtgenerator'\u001b[39;00m\n\u001b[0;32m 21\u001b[0m match \u001b[38;5;241m=\u001b[39m df[df[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mdistrictgenerator\u001b[39m\u001b[38;5;124m'\u001b[39m] \u001b[38;5;241m==\u001b[39m term]\n", - "\u001b[1;31mValueError\u001b[0m: Column 'oag' does not exist in the table." - ] - } - ], - "source": [ - "import functions.schedule_reader as schedule_reader\n", - "schedule_reader.get_schedule(building_type='oag')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import json " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "ename": "TypeError", - "evalue": "the JSON object must be str, bytes or bytearray, not TextIOWrapper", - "output_type": "error", - "traceback": [ - "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[1;31mTypeError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[1;32mIn[2], line 2\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m \u001b[38;5;28mopen\u001b[39m(\u001b[38;5;124mr\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mC:\u001b[39m\u001b[38;5;124m\\\u001b[39m\u001b[38;5;124mUsers\u001b[39m\u001b[38;5;124m\\\u001b[39m\u001b[38;5;124mfelix\u001b[39m\u001b[38;5;124m\\\u001b[39m\u001b[38;5;124mProgrammieren\u001b[39m\u001b[38;5;124m\\\u001b[39m\u001b[38;5;124mtecdm\u001b[39m\u001b[38;5;124m\\\u001b[39m\u001b[38;5;124msrc\u001b[39m\u001b[38;5;124m\\\u001b[39m\u001b[38;5;124mdistrictgenerator\u001b[39m\u001b[38;5;124m\\\u001b[39m\u001b[38;5;124mdata\u001b[39m\u001b[38;5;124m\\\u001b[39m\u001b[38;5;124mnon_residential_envelope\u001b[39m\u001b[38;5;124m\\\u001b[39m\u001b[38;5;124mnon_residential_envelope.json\u001b[39m\u001b[38;5;124m'\u001b[39m) \u001b[38;5;28;01mas\u001b[39;00m f:\n\u001b[1;32m----> 2\u001b[0m data \u001b[38;5;241m=\u001b[39m \u001b[43mjson\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mloads\u001b[49m\u001b[43m(\u001b[49m\u001b[43mf\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[1;32mc:\\Users\\felix\\.conda\\envs\\districtgenerator\\Lib\\json\\__init__.py:339\u001b[0m, in \u001b[0;36mloads\u001b[1;34m(s, cls, object_hook, parse_float, parse_int, parse_constant, object_pairs_hook, **kw)\u001b[0m\n\u001b[0;32m 337\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m 338\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(s, (\u001b[38;5;28mbytes\u001b[39m, \u001b[38;5;28mbytearray\u001b[39m)):\n\u001b[1;32m--> 339\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mTypeError\u001b[39;00m(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mthe JSON object must be str, bytes or bytearray, \u001b[39m\u001b[38;5;124m'\u001b[39m\n\u001b[0;32m 340\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mnot \u001b[39m\u001b[38;5;132;01m{\u001b[39;00ms\u001b[38;5;241m.\u001b[39m\u001b[38;5;18m__class__\u001b[39m\u001b[38;5;241m.\u001b[39m\u001b[38;5;18m__name__\u001b[39m\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m'\u001b[39m)\n\u001b[0;32m 341\u001b[0m s \u001b[38;5;241m=\u001b[39m s\u001b[38;5;241m.\u001b[39mdecode(detect_encoding(s), \u001b[38;5;124m'\u001b[39m\u001b[38;5;124msurrogatepass\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[0;32m 343\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m (\u001b[38;5;28mcls\u001b[39m \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mand\u001b[39;00m object_hook \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mand\u001b[39;00m\n\u001b[0;32m 344\u001b[0m parse_int \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mand\u001b[39;00m parse_float \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mand\u001b[39;00m\n\u001b[0;32m 345\u001b[0m parse_constant \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mand\u001b[39;00m object_pairs_hook \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m kw):\n", - "\u001b[1;31mTypeError\u001b[0m: the JSON object must be str, bytes or bytearray, not TextIOWrapper" - ] - } - ], - "source": [ - "with open(r'C:\\Users\\felix\\Programmieren\\tecdm\\src\\districtgenerator\\data\\non_residential_envelope\\non_residential_envelope.json') as f:\n", - " data = json.loads(f)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "ename": "JSONDecodeError", - "evalue": "Expecting value: line 1 column 1 (char 0)", - "output_type": "error", - "traceback": [ - "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[1;31mJSONDecodeError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[1;32mIn[3], line 1\u001b[0m\n\u001b[1;32m----> 1\u001b[0m data \u001b[38;5;241m=\u001b[39m \u001b[43mjson\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mloads\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43mr\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mC:\u001b[39;49m\u001b[38;5;124;43m\\\u001b[39;49m\u001b[38;5;124;43mUsers\u001b[39;49m\u001b[38;5;124;43m\\\u001b[39;49m\u001b[38;5;124;43mfelix\u001b[39;49m\u001b[38;5;124;43m\\\u001b[39;49m\u001b[38;5;124;43mProgrammieren\u001b[39;49m\u001b[38;5;124;43m\\\u001b[39;49m\u001b[38;5;124;43mtecdm\u001b[39;49m\u001b[38;5;124;43m\\\u001b[39;49m\u001b[38;5;124;43msrc\u001b[39;49m\u001b[38;5;124;43m\\\u001b[39;49m\u001b[38;5;124;43mdistrictgenerator\u001b[39;49m\u001b[38;5;124;43m\\\u001b[39;49m\u001b[38;5;124;43mdata\u001b[39;49m\u001b[38;5;124;43m\\\u001b[39;49m\u001b[38;5;124;43mnon_residential_envelope\u001b[39;49m\u001b[38;5;124;43m\\\u001b[39;49m\u001b[38;5;124;43mnon_residential_envelope.json\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m)\u001b[49m\n", - "File \u001b[1;32mc:\\Users\\felix\\.conda\\envs\\districtgenerator\\Lib\\json\\__init__.py:346\u001b[0m, in \u001b[0;36mloads\u001b[1;34m(s, cls, object_hook, parse_float, parse_int, parse_constant, object_pairs_hook, **kw)\u001b[0m\n\u001b[0;32m 341\u001b[0m s \u001b[38;5;241m=\u001b[39m s\u001b[38;5;241m.\u001b[39mdecode(detect_encoding(s), \u001b[38;5;124m'\u001b[39m\u001b[38;5;124msurrogatepass\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[0;32m 343\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m (\u001b[38;5;28mcls\u001b[39m \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mand\u001b[39;00m object_hook \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mand\u001b[39;00m\n\u001b[0;32m 344\u001b[0m parse_int \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mand\u001b[39;00m parse_float \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mand\u001b[39;00m\n\u001b[0;32m 345\u001b[0m parse_constant \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mand\u001b[39;00m object_pairs_hook \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m kw):\n\u001b[1;32m--> 346\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43m_default_decoder\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdecode\u001b[49m\u001b[43m(\u001b[49m\u001b[43ms\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 347\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mcls\u001b[39m \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m 348\u001b[0m \u001b[38;5;28mcls\u001b[39m \u001b[38;5;241m=\u001b[39m JSONDecoder\n", - "File \u001b[1;32mc:\\Users\\felix\\.conda\\envs\\districtgenerator\\Lib\\json\\decoder.py:337\u001b[0m, in \u001b[0;36mJSONDecoder.decode\u001b[1;34m(self, s, _w)\u001b[0m\n\u001b[0;32m 332\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mdecode\u001b[39m(\u001b[38;5;28mself\u001b[39m, s, _w\u001b[38;5;241m=\u001b[39mWHITESPACE\u001b[38;5;241m.\u001b[39mmatch):\n\u001b[0;32m 333\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"Return the Python representation of ``s`` (a ``str`` instance\u001b[39;00m\n\u001b[0;32m 334\u001b[0m \u001b[38;5;124;03m containing a JSON document).\u001b[39;00m\n\u001b[0;32m 335\u001b[0m \n\u001b[0;32m 336\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[1;32m--> 337\u001b[0m obj, end \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mraw_decode\u001b[49m\u001b[43m(\u001b[49m\u001b[43ms\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43midx\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m_w\u001b[49m\u001b[43m(\u001b[49m\u001b[43ms\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mend\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 338\u001b[0m end \u001b[38;5;241m=\u001b[39m _w(s, end)\u001b[38;5;241m.\u001b[39mend()\n\u001b[0;32m 339\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m end \u001b[38;5;241m!=\u001b[39m \u001b[38;5;28mlen\u001b[39m(s):\n", - "File \u001b[1;32mc:\\Users\\felix\\.conda\\envs\\districtgenerator\\Lib\\json\\decoder.py:355\u001b[0m, in \u001b[0;36mJSONDecoder.raw_decode\u001b[1;34m(self, s, idx)\u001b[0m\n\u001b[0;32m 353\u001b[0m obj, end \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mscan_once(s, idx)\n\u001b[0;32m 354\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mStopIteration\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m err:\n\u001b[1;32m--> 355\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m JSONDecodeError(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mExpecting value\u001b[39m\u001b[38;5;124m\"\u001b[39m, s, err\u001b[38;5;241m.\u001b[39mvalue) \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[0;32m 356\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m obj, end\n", - "\u001b[1;31mJSONDecodeError\u001b[0m: Expecting value: line 1 column 1 (char 0)" - ] - } - ], - "source": [ - "data = json.loads(r'C:\\Users\\felix\\Programmieren\\tecdm\\src\\districtgenerator\\data\\non_residential_envelope\\non_residential_envelope.json')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "with open(r'C:\\Users\\felix\\Programmieren\\tecdm\\src\\districtgenerator\\data\\non_residential_envelope\\non_residential_envelope.json', 'r', encoding='utf-8') as file:\n", - " data = json.load(file)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'oag': {'building_age_group': {'1860 - 1978': {'u_aw': 1.29,\n", - " 'u_fen': 2.68,\n", - " 'u_d_opak': 0.44,\n", - " 'u_d_transp': 1.53,\n", - " 'u_ug': 1.07,\n", - " 'u_geb': 1.16,\n", - " 'wwr_north': 0.3,\n", - " 'wwr_south': 0.3,\n", - " 'wwr_east': 0.3,\n", - " 'wwr_west': 0.3},\n", - " '1979 - 2009': {'u_aw': 0.48,\n", - " 'u_fen': 1.89,\n", - " 'u_d_opak': 0.24,\n", - " 'u_d_transp': 2.14,\n", - " 'u_ug': 0.27,\n", - " 'u_geb': 0.6,\n", - " 'wwr_north': 0.39,\n", - " 'wwr_south': 0.39,\n", - " 'wwr_east': 0.39,\n", - " 'wwr_west': 0.39},\n", - " '2010 - 2030': {'u_aw': 0.19,\n", - " 'u_fen': 1.08,\n", - " 'u_d_opak': 0.14,\n", - " 'u_d_transp': 1.3,\n", - " 'u_ug': 0.21,\n", - " 'u_geb': 0.3,\n", - " 'wwr_north': 0.37,\n", - " 'wwr_south': 0.37,\n", - " 'wwr_east': 0.37,\n", - " 'wwr_west': 0.37}}},\n", - " 'IWU Research and University Teaching': {'building_age_group': {'1860 - 1978': {'u_aw': 1.28,\n", - " 'u_fen': 3.1,\n", - " 'u_d_opak': 0.4,\n", - " 'u_d_transp': 2.19,\n", - " 'u_ug': 0.82,\n", - " 'u_geb': 1.44,\n", - " 'wwr_north': 0.37,\n", - " 'wwr_south': 0.37,\n", - " 'wwr_east': 0.37,\n", - " 'wwr_west': 0.37},\n", - " '1979 - 2009': {'u_aw': 0.29,\n", - " 'u_fen': 1.74,\n", - " 'u_d_opak': 0.13,\n", - " 'u_d_transp': 0.62,\n", - " 'u_ug': 0.53,\n", - " 'u_geb': 0.58,\n", - " 'wwr_north': 0.4,\n", - " 'wwr_south': 0.4,\n", - " 'wwr_east': 0.4,\n", - " 'wwr_west': 0.4},\n", - " '2010 - 2030': {'u_aw': 0.2,\n", - " 'u_fen': 1.24,\n", - " 'u_d_opak': 0.14,\n", - " 'u_d_transp': 0.0,\n", - " 'u_ug': 0.23,\n", - " 'u_geb': 0.25,\n", - " 'wwr_north': 0.46,\n", - " 'wwr_south': 0.46,\n", - " 'wwr_east': 0.46,\n", - " 'wwr_west': 0.46}}},\n", - " 'IWU Health and Care': {'building_age_group': {'1860 - 1978': {'u_aw': 0.95,\n", - " 'u_fen': 2.72,\n", - " 'u_d_opak': 0.31,\n", - " 'u_d_transp': 0.76,\n", - " 'u_ug': 0.7,\n", - " 'u_geb': 1.31,\n", - " 'wwr_north': 0.27,\n", - " 'wwr_south': 0.27,\n", - " 'wwr_east': 0.27,\n", - " 'wwr_west': 0.27},\n", - " '1979 - 2009': {'u_aw': 0.44,\n", - " 'u_fen': 2.24,\n", - " 'u_d_opak': 0.23,\n", - " 'u_d_transp': 2.07,\n", - " 'u_ug': 0.25,\n", - " 'u_geb': 0.59,\n", - " 'wwr_north': 0.34,\n", - " 'wwr_south': 0.34,\n", - " 'wwr_east': 0.34,\n", - " 'wwr_west': 0.34},\n", - " '2010 - 2030': {'u_aw': 0.21,\n", - " 'u_fen': 1.25,\n", - " 'u_d_opak': 0.09,\n", - " 'u_d_transp': 0.0,\n", - " 'u_ug': 0.14,\n", - " 'u_geb': 0.31,\n", - " 'wwr_north': 0.47,\n", - " 'wwr_south': 0.47,\n", - " 'wwr_east': 0.47,\n", - " 'wwr_west': 0.47}}},\n", - " 'IWU School, Day Nursery and other Care': {'building_age_group': {'1860 - 1978': {'u_aw': 1.09,\n", - " 'u_fen': 2.22,\n", - " 'u_d_opak': 0.44,\n", - " 'u_d_transp': 3.17,\n", - " 'u_ug': 0.79,\n", - " 'u_geb': 1.12,\n", - " 'wwr_north': 0.4,\n", - " 'wwr_south': 0.4,\n", - " 'wwr_east': 0.4,\n", - " 'wwr_west': 0.4},\n", - " '1979 - 2009': {'u_aw': 0.51,\n", - " 'u_fen': 2.05,\n", - " 'u_d_opak': 0.25,\n", - " 'u_d_transp': 1.64,\n", - " 'u_ug': 0.44,\n", - " 'u_geb': 0.7,\n", - " 'wwr_north': 0.43,\n", - " 'wwr_south': 0.43,\n", - " 'wwr_east': 0.43,\n", - " 'wwr_west': 0.43},\n", - " '2010 - 2030': {'u_aw': 0.23,\n", - " 'u_fen': 1.17,\n", - " 'u_d_opak': 0.14,\n", - " 'u_d_transp': 1.27,\n", - " 'u_ug': 0.18,\n", - " 'u_geb': 0.33,\n", - " 'wwr_north': 0.36,\n", - " 'wwr_south': 0.36,\n", - " 'wwr_east': 0.36,\n", - " 'wwr_west': 0.36}}},\n", - " 'IWU Culture and Leisure': {'building_age_group': {'1860 - 1978': {'u_aw': 1.39,\n", - " 'u_fen': 2.56,\n", - " 'u_d_opak': 0.75,\n", - " 'u_d_transp': 2.68,\n", - " 'u_ug': 0.99,\n", - " 'u_geb': 1.16,\n", - " 'wwr_north': 0.3,\n", - " 'wwr_south': 0.3,\n", - " 'wwr_east': 0.3,\n", - " 'wwr_west': 0.3},\n", - " '1979 - 2009': {'u_aw': 0.53,\n", - " 'u_fen': 2.04,\n", - " 'u_d_opak': 0.33,\n", - " 'u_d_transp': 1.94,\n", - " 'u_ug': 0.44,\n", - " 'u_geb': 0.52,\n", - " 'wwr_north': 0.29,\n", - " 'wwr_south': 0.29,\n", - " 'wwr_east': 0.29,\n", - " 'wwr_west': 0.29},\n", - " '2010 - 2030': {'u_aw': 0.51,\n", - " 'u_fen': 0.96,\n", - " 'u_d_opak': 0.33,\n", - " 'u_d_transp': 0.9,\n", - " 'u_ug': 0.54,\n", - " 'u_geb': 0.3,\n", - " 'wwr_north': 0.51,\n", - " 'wwr_south': 0.51,\n", - " 'wwr_east': 0.51,\n", - " 'wwr_west': 0.51}}},\n", - " 'IWU Sports Facilities': {'building_age_group': {'1860 - 1978': {'u_aw': 1.35,\n", - " 'u_fen': 3.09,\n", - " 'u_d_opak': 0.4,\n", - " 'u_d_transp': 1.3,\n", - " 'u_ug': 0.57,\n", - " 'u_geb': 1.06,\n", - " 'wwr_north': 0.59,\n", - " 'wwr_south': 0.59,\n", - " 'wwr_east': 0.59,\n", - " 'wwr_west': 0.59},\n", - " '1979 - 2009': {'u_aw': 0.55,\n", - " 'u_fen': 2.56,\n", - " 'u_d_opak': 0.34,\n", - " 'u_d_transp': 1.05,\n", - " 'u_ug': 0.57,\n", - " 'u_geb': 0.66,\n", - " 'wwr_north': 0.27,\n", - " 'wwr_south': 0.27,\n", - " 'wwr_east': 0.27,\n", - " 'wwr_west': 0.27},\n", - " '2010 - 2030': {'u_aw': 0.27,\n", - " 'u_fen': 1.07,\n", - " 'u_d_opak': 0.15,\n", - " 'u_d_transp': 1.3,\n", - " 'u_ug': 0.99,\n", - " 'u_geb': 0.39,\n", - " 'wwr_north': 0.13,\n", - " 'wwr_south': 0.13,\n", - " 'wwr_east': 0.13,\n", - " 'wwr_west': 0.13}}},\n", - " 'IWU Hotels, Boarding, Restaurants or Catering': {'building_age_group': {'1860 - 1978': {'u_aw': 1.2,\n", - " 'u_fen': 2.76,\n", - " 'u_d_opak': 0.8,\n", - " 'u_d_transp': 2.3,\n", - " 'u_ug': 0.83,\n", - " 'u_geb': 1.24,\n", - " 'wwr_north': 0.3,\n", - " 'wwr_south': 0.3,\n", - " 'wwr_east': 0.3,\n", - " 'wwr_west': 0.3},\n", - " '1979 - 2009': {'u_aw': 0.47,\n", - " 'u_fen': 2.07,\n", - " 'u_d_opak': 0.29,\n", - " 'u_d_transp': 2.78,\n", - " 'u_ug': 0.37,\n", - " 'u_geb': 0.79,\n", - " 'wwr_north': 0.33,\n", - " 'wwr_south': 0.33,\n", - " 'wwr_east': 0.33,\n", - " 'wwr_west': 0.33},\n", - " '2010 - 2030': {'u_aw': 0.32,\n", - " 'u_fen': 1.24,\n", - " 'u_d_opak': 0.18,\n", - " 'u_d_transp': 0.0,\n", - " 'u_ug': 0.26,\n", - " 'u_geb': 0.38,\n", - " 'wwr_north': 0.32,\n", - " 'wwr_south': 0.32,\n", - " 'wwr_east': 0.32,\n", - " 'wwr_west': 0.32}}},\n", - " 'IWU Production, Workshop, Warehouse or Operations': {'building_age_group': {'1860 - 1978': {'u_aw': 1.03,\n", - " 'u_fen': 2.99,\n", - " 'u_d_opak': 0.53,\n", - " 'u_d_transp': 3.84,\n", - " 'u_ug': 1.01,\n", - " 'u_geb': 1.12,\n", - " 'wwr_north': 0.26,\n", - " 'wwr_south': 0.26,\n", - " 'wwr_east': 0.26,\n", - " 'wwr_west': 0.26},\n", - " '1979 - 2009': {'u_aw': 0.51,\n", - " 'u_fen': 2.17,\n", - " 'u_d_opak': 0.24,\n", - " 'u_d_transp': 2.05,\n", - " 'u_ug': 0.41,\n", - " 'u_geb': 0.54,\n", - " 'wwr_north': 0.21,\n", - " 'wwr_south': 0.21,\n", - " 'wwr_east': 0.21,\n", - " 'wwr_west': 0.21},\n", - " '2010 - 2030': {'u_aw': 0.24,\n", - " 'u_fen': 1.2,\n", - " 'u_d_opak': 0.11,\n", - " 'u_d_transp': 1.07,\n", - " 'u_ug': 0.22,\n", - " 'u_geb': 0.28,\n", - " 'wwr_north': 0.19,\n", - " 'wwr_south': 0.19,\n", - " 'wwr_east': 0.19,\n", - " 'wwr_west': 0.19}}},\n", - " 'IWU Trade Buildings': {'building_age_group': {'1860 - 1978': {'u_aw': 0.55,\n", - " 'u_fen': 3.03,\n", - " 'u_d_opak': 0.22,\n", - " 'u_d_transp': 0.07,\n", - " 'u_ug': 0.37,\n", - " 'u_geb': 1.32,\n", - " 'wwr_north': 0.2,\n", - " 'wwr_south': 0.2,\n", - " 'wwr_east': 0.2,\n", - " 'wwr_west': 0.2},\n", - " '1979 - 2009': {'u_aw': 0.4,\n", - " 'u_fen': 2.1,\n", - " 'u_d_opak': 0.31,\n", - " 'u_d_transp': 2.35,\n", - " 'u_ug': 0.5,\n", - " 'u_geb': 0.5,\n", - " 'wwr_north': 0.23,\n", - " 'wwr_south': 0.23,\n", - " 'wwr_east': 0.23,\n", - " 'wwr_west': 0.23},\n", - " '2010 - 2030': {'u_aw': 0.25,\n", - " 'u_fen': 1.05,\n", - " 'u_d_opak': 0.16,\n", - " 'u_d_transp': 0.9,\n", - " 'u_ug': 0.12,\n", - " 'u_geb': 0.33,\n", - " 'wwr_north': 0.4,\n", - " 'wwr_south': 0.4,\n", - " 'wwr_east': 0.4,\n", - " 'wwr_west': 0.4}}},\n", - " 'IWU Technical and Utility (supply and disposal)': {'building_age_group': {'1860 - 1978': {'u_aw': 1.98,\n", - " 'u_fen': 4.2,\n", - " 'u_d_opak': 0.99,\n", - " 'u_d_transp': 0.0,\n", - " 'u_ug': 1.51,\n", - " 'u_geb': 1.3,\n", - " 'wwr_north': 0.23,\n", - " 'wwr_south': 0.23,\n", - " 'wwr_east': 0.23,\n", - " 'wwr_west': 0.23},\n", - " '1979 - 2009': {'u_aw': 0.47,\n", - " 'u_fen': 2.02,\n", - " 'u_d_opak': 0.22,\n", - " 'u_d_transp': 0.0,\n", - " 'u_ug': 0.37,\n", - " 'u_geb': 0.55,\n", - " 'wwr_north': 0.12,\n", - " 'wwr_south': 0.12,\n", - " 'wwr_east': 0.12,\n", - " 'wwr_west': 0.12},\n", - " '2010 - 2030': {'u_aw': 0.16,\n", - " 'u_fen': 1.3,\n", - " 'u_d_opak': 0.15,\n", - " 'u_d_transp': 0.0,\n", - " 'u_ug': 0.24,\n", - " 'u_geb': 0.24,\n", - " 'wwr_north': 0.0,\n", - " 'wwr_south': 0.0,\n", - " 'wwr_east': 0.0,\n", - " 'wwr_west': 0.0}}},\n", - " 'IWU Transport': {'building_age_group': {'1860 - 1978': {'u_aw': 1.78,\n", - " 'u_fen': 5.0,\n", - " 'u_d_opak': 1.41,\n", - " 'u_d_transp': 5.0,\n", - " 'u_ug': 0.98,\n", - " 'u_geb': 1.43,\n", - " 'wwr_north': 0.42,\n", - " 'wwr_south': 0.42,\n", - " 'wwr_east': 0.42,\n", - " 'wwr_west': 0.42},\n", - " '1979 - 2009': {'u_aw': 0.63,\n", - " 'u_fen': 0.41,\n", - " 'u_d_opak': 0.41,\n", - " 'u_d_transp': 0.0,\n", - " 'u_ug': 0.61,\n", - " 'u_geb': 0.68,\n", - " 'wwr_north': 0.06,\n", - " 'wwr_south': 0.06,\n", - " 'wwr_east': 0.06,\n", - " 'wwr_west': 0.06},\n", - " '2010 - 2030': {'u_aw': 0.16,\n", - " 'u_fen': 1.3,\n", - " 'u_d_opak': 0.15,\n", - " 'u_d_transp': 0.0,\n", - " 'u_ug': 0.24,\n", - " 'u_geb': 0.22,\n", - " 'wwr_north': 0.0,\n", - " 'wwr_south': 0.0,\n", - " 'wwr_east': 0.0,\n", - " 'wwr_west': 0.0}}},\n", - " 'IWU Generalized (1) Services building, Includes categories (1) to (7) and (9)': {'building_age_group': {'1860 - 1978': {'u_aw': 1.11,\n", - " 'u_fen': 2.8,\n", - " 'u_d_opak': 0.45,\n", - " 'u_d_transp': 0.66,\n", - " 'u_ug': 0.64,\n", - " 'u_geb': 1.2,\n", - " 'wwr_north': 0.34,\n", - " 'wwr_south': 0.34,\n", - " 'wwr_east': 0.34,\n", - " 'wwr_west': 0.34},\n", - " '1979 - 2009': {'u_aw': 0.48,\n", - " 'u_fen': 2.1,\n", - " 'u_d_opak': 0.27,\n", - " 'u_d_transp': 2.03,\n", - " 'u_ug': 0.41,\n", - " 'u_geb': 0.62,\n", - " 'wwr_north': 0.34,\n", - " 'wwr_south': 0.34,\n", - " 'wwr_east': 0.34,\n", - " 'wwr_west': 0.34},\n", - " '2010 - 2030': {'u_aw': 0.25,\n", - " 'u_fen': 1.12,\n", - " 'u_d_opak': 0.13,\n", - " 'u_d_transp': 1.13,\n", - " 'u_ug': 0.2,\n", - " 'u_geb': 0.31,\n", - " 'wwr_north': 0.38,\n", - " 'wwr_south': 0.38,\n", - " 'wwr_east': 0.38,\n", - " 'wwr_west': 0.38}}},\n", - " 'IWU Generalized (2) Production buildings and similar, Includes cat. (8), (10), (11)': {'building_age_group': {'1860 - 1978': {'u_aw': 1.78,\n", - " 'u_fen': 5.0,\n", - " 'u_d_opak': 1.41,\n", - " 'u_d_transp': 5.0,\n", - " 'u_ug': 0.98,\n", - " 'u_geb': 1.43,\n", - " 'wwr_north': 0.26,\n", - " 'wwr_south': 0.26,\n", - " 'wwr_east': 0.26,\n", - " 'wwr_west': 0.26},\n", - " '1979 - 2009': {'u_aw': 0.63,\n", - " 'u_fen': 0.41,\n", - " 'u_d_opak': 0.41,\n", - " 'u_d_transp': 0.0,\n", - " 'u_ug': 0.61,\n", - " 'u_geb': 0.68,\n", - " 'wwr_north': 0.2,\n", - " 'wwr_south': 0.2,\n", - " 'wwr_east': 0.2,\n", - " 'wwr_west': 0.2},\n", - " '2010 - 2030': {'u_aw': 0.24,\n", - " 'u_fen': 1.2,\n", - " 'u_d_opak': 0.11,\n", - " 'u_d_transp': 1.07,\n", - " 'u_ug': 0.22,\n", - " 'u_geb': 0.28,\n", - " 'wwr_north': 0.19,\n", - " 'wwr_south': 0.19,\n", - " 'wwr_east': 0.19,\n", - " 'wwr_west': 0.19}}}}" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "data" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Values to add based on year range\n", - "values_to_add = {\n", - " '1860 - 1978': 0.78,\n", - " '1979 - 2009': 0.78, # Placeholder value\n", - " '2010 - 2030': 0.67 # Placeholder value\n", - "}\n", - "\n", - "# Loop through each key in the dictionary\n", - "for key in data:\n", - " # Check if 'building_age_group' is present\n", - " if 'building_age_group' in data[key]:\n", - " # Loop through the building_age_group and add the appropriate new value\n", - " for year_range, properties in data[key]['building_age_group'].items():\n", - " properties['g_gl_fen'] = values_to_add.get(year_range, 0.0) # Default value if year_range not found\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "ename": "TypeError", - "evalue": "JSONEncoder.__init__() got an unexpected keyword argument 'fp'", - "output_type": "error", - "traceback": [ - "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[1;31mTypeError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[1;32mIn[9], line 1\u001b[0m\n\u001b[1;32m----> 1\u001b[0m \u001b[43mjson\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdumps\u001b[49m\u001b[43m(\u001b[49m\u001b[43m \u001b[49m\u001b[43mdata\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mfp\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43mr\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mC:\u001b[39;49m\u001b[38;5;124;43m\\\u001b[39;49m\u001b[38;5;124;43mUsers\u001b[39;49m\u001b[38;5;124;43m\\\u001b[39;49m\u001b[38;5;124;43mfelix\u001b[39;49m\u001b[38;5;124;43m\\\u001b[39;49m\u001b[38;5;124;43mProgrammieren\u001b[39;49m\u001b[38;5;124;43m\\\u001b[39;49m\u001b[38;5;124;43mtecdm\u001b[39;49m\u001b[38;5;124;43m\\\u001b[39;49m\u001b[38;5;124;43msrc\u001b[39;49m\u001b[38;5;124;43m\\\u001b[39;49m\u001b[38;5;124;43mdistrictgenerator\u001b[39;49m\u001b[38;5;124;43m\\\u001b[39;49m\u001b[38;5;124;43mdata\u001b[39;49m\u001b[38;5;124;43m\\\u001b[39;49m\u001b[38;5;124;43mnon_residential_envelope\u001b[39;49m\u001b[38;5;124;43m\\\u001b[39;49m\u001b[38;5;124;43mnon_residential_envelope.json\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m)\u001b[49m\n", - "File \u001b[1;32mc:\\Users\\felix\\.conda\\envs\\districtgenerator\\Lib\\json\\__init__.py:234\u001b[0m, in \u001b[0;36mdumps\u001b[1;34m(obj, skipkeys, ensure_ascii, check_circular, allow_nan, cls, indent, separators, default, sort_keys, **kw)\u001b[0m\n\u001b[0;32m 232\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mcls\u001b[39m \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m 233\u001b[0m \u001b[38;5;28mcls\u001b[39m \u001b[38;5;241m=\u001b[39m JSONEncoder\n\u001b[1;32m--> 234\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mcls\u001b[39;49m\u001b[43m(\u001b[49m\n\u001b[0;32m 235\u001b[0m \u001b[43m \u001b[49m\u001b[43mskipkeys\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mskipkeys\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mensure_ascii\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mensure_ascii\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 236\u001b[0m \u001b[43m \u001b[49m\u001b[43mcheck_circular\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mcheck_circular\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mallow_nan\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mallow_nan\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mindent\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mindent\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 237\u001b[0m \u001b[43m \u001b[49m\u001b[43mseparators\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mseparators\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdefault\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdefault\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43msort_keys\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43msort_keys\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 238\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkw\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241m.\u001b[39mencode(obj)\n", - "\u001b[1;31mTypeError\u001b[0m: JSONEncoder.__init__() got an unexpected keyword argument 'fp'" - ] - } - ], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "with open(r'C:\\Users\\felix\\Programmieren\\tecdm\\src\\districtgenerator\\data\\non_residential_envelope\\non_residential_envelope.json', 'w', encoding='utf-8') as file:\n", - " json.dump(data, file, indent=2)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import pandas as pd\n", - "\n", - "df = pd.read_csv(r'C:\\Users\\felix\\Programmieren\\CityEnergyAnalyst\\cea\\databases\\DE\\archetypes\\use_types\\OFFICE_1P.csv', skiprows=2)\n", - "# Filter out weekdays, Saturday, and Sunday\n", - "weekday_data = df[df['DAY'] == 'WEEKDAY']\n", - "saturday_data = df[df['DAY'] == 'SATURDAY']\n", - "sunday_data = df[df['DAY'] == 'SUNDAY']\n", - "\n", - "# Ensure each type of day has only 24 hours worth of data if there are duplicates\n", - "weekday_data = weekday_data.head(24)\n", - "saturday_data = saturday_data.head(24)\n", - "sunday_data = sunday_data.head(24)\n", - "\n", - "# Repeat the weekday data five times\n", - "repeated_weekdays = pd.concat([weekday_data] * 5, ignore_index=True)\n", - "\n", - "# Modify the 'DAY' column for repeated weekdays\n", - "day_mappings = {i: f\"weekday_{(i//24)+1}\" for i in range(120)} # Generate weekday labels\n", - "repeated_weekdays['DAY'] = [day_mappings[i] for i in range(120)] # Apply labels\n", - "\n", - "# Concatenate all data: five weekdays, one Saturday, one Sunday\n", - "final_df = pd.concat([repeated_weekdays, saturday_data, sunday_data], ignore_index=True)\n", - "\n", - "# Adjust the 'DAY' column to reflect the new day numbering (optional)\n", - "day_numbering = {**{f\"weekday_{i+1}\": i for i in range(5)}, 'SATURDAY': 5, 'SUNDAY': 6}\n", - "final_df['DAY'] = final_df['DAY'].map(day_numbering)\n", - "final_df = final_df.drop(columns=['Unnamed: 11', 'Unnamed: 12'])\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "final_df.to_csv(r'C:\\Users\\felix\\Programmieren\\tecdm\\src\\districtgenerator\\data\\occupancy_schedules\\OFFICE_1P.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "df = pd.read_csv(r'C:\\Users\\felix\\Programmieren\\CityEnergyAnalyst\\cea\\databases\\DE\\archetypes\\use_types\\OFFICE_1P.csv', skiprows=2)\n", - "# Filter out weekdays, Saturday, and Sunday\n", - "weekday_data = df[df['DAY'] == 'WEEKDAY']\n", - "saturday_data = df[df['DAY'] == 'SATURDAY']\n", - "sunday_data = df[df['DAY'] == 'SUNDAY']\n", - "\n", - "# Ensure each type of day has only 24 hours worth of data if there are duplicates\n", - "weekday_data = weekday_data.head(24)\n", - "saturday_data = saturday_data.head(24)\n", - "sunday_data = sunday_data.head(24)\n", - "\n", - "# Repeat the weekday data five times\n", - "repeated_weekdays = pd.concat([weekday_data] * 5, ignore_index=True)\n", - "\n", - "# Modify the 'DAY' column for repeated weekdays\n", - "day_mappings = {i: f\"weekday_{(i//24)+1}\" for i in range(120)} # Generate weekday labels\n", - "repeated_weekdays['DAY'] = [day_mappings[i] for i in range(120)] # Apply labels\n", - "\n", - "# Concatenate all data: five weekdays, one Saturday, one Sunday\n", - "final_df = pd.concat([repeated_weekdays, saturday_data, sunday_data], ignore_index=True)\n", - "\n", - "# Adjust the 'DAY' column to reflect the new day numbering (optional)\n", - "day_numbering = {**{f\"weekday_{i+1}\": i for i in range(5)}, 'SATURDAY': 5, 'SUNDAY': 6}\n", - "final_df['DAY'] = final_df['DAY'].map(day_numbering)\n", - "final_df = final_df.drop(columns=['Unnamed: 11', 'Unnamed: 12'])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Processing file: C:\\Users\\felix\\Programmieren\\CityEnergyAnalyst\\cea\\databases\\DE\\archetypes\\use_types\\COOLROOM.csv\n" - ] - }, - { - "ename": "KeyError", - "evalue": "\"['Unnamed: 11', 'Unnamed: 12'] not found in axis\"", - "output_type": "error", - "traceback": [ - "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[1;31mKeyError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[1;32mIn[45], line 34\u001b[0m\n\u001b[0;32m 31\u001b[0m df \u001b[38;5;241m=\u001b[39m pd\u001b[38;5;241m.\u001b[39mread_csv(file_path, skiprows\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m2\u001b[39m)\n\u001b[0;32m 33\u001b[0m \u001b[38;5;66;03m# Process the DataFrame\u001b[39;00m\n\u001b[1;32m---> 34\u001b[0m processed_df \u001b[38;5;241m=\u001b[39m \u001b[43mprocess_dataframe\u001b[49m\u001b[43m(\u001b[49m\u001b[43mdf\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 35\u001b[0m \u001b[38;5;28mprint\u001b[39m(df\u001b[38;5;241m.\u001b[39mhead())\n\u001b[0;32m 37\u001b[0m \u001b[38;5;66;03m# Save the processed DataFrame\u001b[39;00m\n", - "Cell \u001b[1;32mIn[45], line 15\u001b[0m, in \u001b[0;36mprocess_dataframe\u001b[1;34m(df)\u001b[0m\n\u001b[0;32m 13\u001b[0m final_df[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mDAY\u001b[39m\u001b[38;5;124m'\u001b[39m] \u001b[38;5;241m=\u001b[39m final_df\u001b[38;5;241m.\u001b[39mindex \u001b[38;5;241m/\u001b[39m\u001b[38;5;241m/\u001b[39m \u001b[38;5;241m24\u001b[39m \u001b[38;5;241m%\u001b[39m \u001b[38;5;241m7\u001b[39m\n\u001b[0;32m 14\u001b[0m final_df[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mDAY\u001b[39m\u001b[38;5;124m'\u001b[39m] \u001b[38;5;241m=\u001b[39m final_df[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mDAY\u001b[39m\u001b[38;5;124m'\u001b[39m]\u001b[38;5;241m.\u001b[39mmap({i: i \u001b[38;5;28;01mif\u001b[39;00m i \u001b[38;5;241m<\u001b[39m \u001b[38;5;241m5\u001b[39m \u001b[38;5;28;01melse\u001b[39;00m \u001b[38;5;241m5\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m i \u001b[38;5;241m==\u001b[39m \u001b[38;5;241m5\u001b[39m \u001b[38;5;28;01melse\u001b[39;00m \u001b[38;5;241m6\u001b[39m \u001b[38;5;28;01mfor\u001b[39;00m i \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mrange\u001b[39m(\u001b[38;5;241m7\u001b[39m)})\n\u001b[1;32m---> 15\u001b[0m final_df \u001b[38;5;241m=\u001b[39m \u001b[43mfinal_df\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdrop\u001b[49m\u001b[43m(\u001b[49m\u001b[43mcolumns\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mUnnamed: 11\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mUnnamed: 12\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 17\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m final_df\n", - "File \u001b[1;32mc:\\Users\\felix\\.conda\\envs\\districtgenerator\\Lib\\site-packages\\pandas-2.2.2-py3.11-win-amd64.egg\\pandas\\core\\frame.py:5581\u001b[0m, in \u001b[0;36mDataFrame.drop\u001b[1;34m(self, labels, axis, index, columns, level, inplace, errors)\u001b[0m\n\u001b[0;32m 5433\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mdrop\u001b[39m(\n\u001b[0;32m 5434\u001b[0m \u001b[38;5;28mself\u001b[39m,\n\u001b[0;32m 5435\u001b[0m labels: IndexLabel \u001b[38;5;241m|\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[1;32m (...)\u001b[0m\n\u001b[0;32m 5442\u001b[0m errors: IgnoreRaise \u001b[38;5;241m=\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mraise\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[0;32m 5443\u001b[0m ) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m DataFrame \u001b[38;5;241m|\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m 5444\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[0;32m 5445\u001b[0m \u001b[38;5;124;03m Drop specified labels from rows or columns.\u001b[39;00m\n\u001b[0;32m 5446\u001b[0m \n\u001b[1;32m (...)\u001b[0m\n\u001b[0;32m 5579\u001b[0m \u001b[38;5;124;03m weight 1.0 0.8\u001b[39;00m\n\u001b[0;32m 5580\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[1;32m-> 5581\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43msuper\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdrop\u001b[49m\u001b[43m(\u001b[49m\n\u001b[0;32m 5582\u001b[0m \u001b[43m \u001b[49m\u001b[43mlabels\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mlabels\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 5583\u001b[0m \u001b[43m \u001b[49m\u001b[43maxis\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43maxis\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 5584\u001b[0m \u001b[43m \u001b[49m\u001b[43mindex\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mindex\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 5585\u001b[0m \u001b[43m \u001b[49m\u001b[43mcolumns\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mcolumns\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 5586\u001b[0m \u001b[43m \u001b[49m\u001b[43mlevel\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mlevel\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 5587\u001b[0m \u001b[43m \u001b[49m\u001b[43minplace\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43minplace\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 5588\u001b[0m \u001b[43m \u001b[49m\u001b[43merrors\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43merrors\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 5589\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[1;32mc:\\Users\\felix\\.conda\\envs\\districtgenerator\\Lib\\site-packages\\pandas-2.2.2-py3.11-win-amd64.egg\\pandas\\core\\generic.py:4788\u001b[0m, in \u001b[0;36mNDFrame.drop\u001b[1;34m(self, labels, axis, index, columns, level, inplace, errors)\u001b[0m\n\u001b[0;32m 4786\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m axis, labels \u001b[38;5;129;01min\u001b[39;00m axes\u001b[38;5;241m.\u001b[39mitems():\n\u001b[0;32m 4787\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m labels \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m-> 4788\u001b[0m obj \u001b[38;5;241m=\u001b[39m \u001b[43mobj\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_drop_axis\u001b[49m\u001b[43m(\u001b[49m\u001b[43mlabels\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43maxis\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mlevel\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mlevel\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43merrors\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43merrors\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 4790\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m inplace:\n\u001b[0;32m 4791\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_update_inplace(obj)\n", - "File \u001b[1;32mc:\\Users\\felix\\.conda\\envs\\districtgenerator\\Lib\\site-packages\\pandas-2.2.2-py3.11-win-amd64.egg\\pandas\\core\\generic.py:4830\u001b[0m, in \u001b[0;36mNDFrame._drop_axis\u001b[1;34m(self, labels, axis, level, errors, only_slice)\u001b[0m\n\u001b[0;32m 4828\u001b[0m new_axis \u001b[38;5;241m=\u001b[39m axis\u001b[38;5;241m.\u001b[39mdrop(labels, level\u001b[38;5;241m=\u001b[39mlevel, errors\u001b[38;5;241m=\u001b[39merrors)\n\u001b[0;32m 4829\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m-> 4830\u001b[0m new_axis \u001b[38;5;241m=\u001b[39m \u001b[43maxis\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdrop\u001b[49m\u001b[43m(\u001b[49m\u001b[43mlabels\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43merrors\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43merrors\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 4831\u001b[0m indexer \u001b[38;5;241m=\u001b[39m axis\u001b[38;5;241m.\u001b[39mget_indexer(new_axis)\n\u001b[0;32m 4833\u001b[0m \u001b[38;5;66;03m# Case for non-unique axis\u001b[39;00m\n\u001b[0;32m 4834\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n", - "File \u001b[1;32mc:\\Users\\felix\\.conda\\envs\\districtgenerator\\Lib\\site-packages\\pandas-2.2.2-py3.11-win-amd64.egg\\pandas\\core\\indexes\\base.py:7070\u001b[0m, in \u001b[0;36mIndex.drop\u001b[1;34m(self, labels, errors)\u001b[0m\n\u001b[0;32m 7068\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m mask\u001b[38;5;241m.\u001b[39many():\n\u001b[0;32m 7069\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m errors \u001b[38;5;241m!=\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mignore\u001b[39m\u001b[38;5;124m\"\u001b[39m:\n\u001b[1;32m-> 7070\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mKeyError\u001b[39;00m(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mlabels[mask]\u001b[38;5;241m.\u001b[39mtolist()\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m not found in axis\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m 7071\u001b[0m indexer \u001b[38;5;241m=\u001b[39m indexer[\u001b[38;5;241m~\u001b[39mmask]\n\u001b[0;32m 7072\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mdelete(indexer)\n", - "\u001b[1;31mKeyError\u001b[0m: \"['Unnamed: 11', 'Unnamed: 12'] not found in axis\"" - ] - } - ], - "source": [ - "import os \n", - "def process_dataframe(df):\n", - " # Assuming df is the loaded DataFrame from each CSV\n", - " weekday_data = df[df['DAY'] == 'WEEKDAY'].head(24)\n", - " saturday_data = df[df['DAY'] == 'SATURDAY'].head(24)\n", - " sunday_data = df[df['DAY'] == 'SUNDAY'].head(24)\n", - "\n", - " # Repeat the weekday data five times and append Saturday and Sunday data\n", - " repeated_weekdays = pd.concat([weekday_data] * 5, ignore_index=True)\n", - " final_df = pd.concat([repeated_weekdays, saturday_data, sunday_data], ignore_index=True)\n", - " \n", - " # Re-assigning 'DAY' values to ensure continuity in the data (optional)\n", - " final_df['DAY'] = final_df.index // 24 % 7\n", - " final_df['DAY'] = final_df['DAY'].map({i: i if i < 5 else 5 if i == 5 else 6 for i in range(7)})\n", - " final_df = final_df.drop(columns=['Unnamed: 11', 'Unnamed: 12'])\n", - " \n", - " return final_df\n", - "\n", - "# List all files in the directory\n", - "dir_path = r'C:\\Users\\felix\\Programmieren\\CityEnergyAnalyst\\cea\\databases\\DE\\archetypes\\use_types'\n", - "files = os.listdir(dir_path)\n", - "save_folder= r'C:\\Users\\felix\\Programmieren\\tecdm\\src\\districtgenerator\\data\\occupancy_schedules'\n", - "\n", - "# Process each file\n", - "for file in files:\n", - " if file.endswith('.csv'): # Check if the file is a CSV\n", - " file_path = os.path.join(dir_path, file)\n", - " print(f\"Processing file: {file_path}\")\n", - " \n", - " # Load the DataFrame from CSV\n", - " df = pd.read_csv(file_path, skiprows=2)\n", - " \n", - " # Process the DataFrame\n", - " processed_df = process_dataframe(df)\n", - " print(df.head())\n", - " \n", - " # Save the processed DataFrame\n", - " save_path = os.path.join(save_folder, f\"{file}\")\n", - " processed_df.to_csv(save_path, index=False)\n", - " \n", - " \"\"\" \n", - " try: \n", - " processed_df.to_csv(save_path, index=False)\n", - " print(f\"Saved processed file to: {save_path}\")\n", - " except OSError:\n", - " print(f\"Could not save {file} in {file_path}\")\n", - " \"\"\"" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "base", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.9" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -}