From 6f2409d751b37de6906002353c7e120fb6bad174 Mon Sep 17 00:00:00 2001
From: jkriwet <jonathan.kriwet@eonerc.rwth-aachen.de>
Date: Tue, 5 Nov 2024 11:21:33 +0100
Subject: [PATCH] finalized sensitivity analysis

---
 README.md                                     |   95 +-
 energyplus_calibrator/calibration_class.py    |   55 +-
 energyplus_calibrator/energy_plus_api.py      |  131 +-
 .../calibration_config.cpython-310.pyc        |  Bin 1168 -> 0 bytes
 examples/data/calibration_config.py           |    5 +-
 examples/e1_run_energyplus_simulation.py      |   42 +-
 .../e3_run_energyplus_sensitivity_analysis.py |  184 +++
 pyproject.toml                                |    3 +
 requirements.txt                              |    8 +
 setup.py                                      |    1 +
 workbench.ipynb                               | 1050 -----------------
 11 files changed, 344 insertions(+), 1230 deletions(-)
 delete mode 100644 examples/data/__pycache__/calibration_config.cpython-310.pyc
 create mode 100644 examples/e3_run_energyplus_sensitivity_analysis.py
 create mode 100644 pyproject.toml
 create mode 100644 requirements.txt
 delete mode 100644 workbench.ipynb

diff --git a/README.md b/README.md
index d85ab94..9bc91cb 100644
--- a/README.md
+++ b/README.md
@@ -3,91 +3,18 @@
 
 
 ## Getting started
-
-To make it easy for you to get started with GitLab, here's a list of recommended next steps.
-
-Already a pro? Just edit this README.md and make it your own. Want to make it easy? [Use the template at the bottom](#editing-this-readme)!
-
-## Add your files
-
-- [ ] [Create](https://docs.gitlab.com/ee/user/project/repository/web_editor.html#create-a-file) or [upload](https://docs.gitlab.com/ee/user/project/repository/web_editor.html#upload-a-file) files
-- [ ] [Add files using the command line](https://docs.gitlab.com/ee/gitlab-basics/add-file.html#add-a-file-using-the-command-line) or push an existing Git repository with the following command:
-
+Install the requirements first
 ```
-cd existing_repo
-git remote add origin https://git-ce.rwth-aachen.de/jonathan.kriwet/energyplus_calibrator.git
-git branch -M main
-git push -uf origin main
+pip install -r requirements.txt
+```
+Then install the package as editable from the package directory
+```
+pip install -e .
 ```
 
-## Integrate with your tools
-
-- [ ] [Set up project integrations](https://git-ce.rwth-aachen.de/jonathan.kriwet/energyplus_calibrator/-/settings/integrations)
-
-## Collaborate with your team
-
-- [ ] [Invite team members and collaborators](https://docs.gitlab.com/ee/user/project/members/)
-- [ ] [Create a new merge request](https://docs.gitlab.com/ee/user/project/merge_requests/creating_merge_requests.html)
-- [ ] [Automatically close issues from merge requests](https://docs.gitlab.com/ee/user/project/issues/managing_issues.html#closing-issues-automatically)
-- [ ] [Enable merge request approvals](https://docs.gitlab.com/ee/user/project/merge_requests/approvals/)
-- [ ] [Set auto-merge](https://docs.gitlab.com/ee/user/project/merge_requests/merge_when_pipeline_succeeds.html)
-
-## Test and Deploy
-
-Use the built-in continuous integration in GitLab.
-
-- [ ] [Get started with GitLab CI/CD](https://docs.gitlab.com/ee/ci/quick_start/index.html)
-- [ ] [Analyze your code for known vulnerabilities with Static Application Security Testing (SAST)](https://docs.gitlab.com/ee/user/application_security/sast/)
-- [ ] [Deploy to Kubernetes, Amazon EC2, or Amazon ECS using Auto Deploy](https://docs.gitlab.com/ee/topics/autodevops/requirements.html)
-- [ ] [Use pull-based deployments for improved Kubernetes management](https://docs.gitlab.com/ee/user/clusters/agent/)
-- [ ] [Set up protected environments](https://docs.gitlab.com/ee/ci/environments/protected_environments.html)
-
-***
-
-# Editing this README
-
-When you're ready to make this README your own, just edit this file and use the handy template below (or feel free to structure it however you want - this is just a starting point!). Thanks to [makeareadme.com](https://www.makeareadme.com/) for this template.
-
-## Suggestions for a good README
-
-Every project is different, so consider which of these sections apply to yours. The sections used in the template are suggestions for most open source projects. Also keep in mind that while a README can be too long and detailed, too long is better than too short. If you think your README is too long, consider utilizing another form of documentation rather than cutting out information.
-
-## Name
-Choose a self-explaining name for your project.
-
-## Description
-Let people know what your project can do specifically. Provide context and add a link to any reference visitors might be unfamiliar with. A list of Features or a Background subsection can also be added here. If there are alternatives to your project, this is a good place to list differentiating factors.
-
-## Badges
-On some READMEs, you may see small images that convey metadata, such as whether or not all the tests are passing for the project. You can use Shields to add some to your README. Many services also have instructions for adding a badge.
-
-## Visuals
-Depending on what you are making, it can be a good idea to include screenshots or even a video (you'll frequently see GIFs rather than actual videos). Tools like ttygif can help, but check out Asciinema for a more sophisticated method.
-
-## Installation
-Within a particular ecosystem, there may be a common way of installing things, such as using Yarn, NuGet, or Homebrew. However, consider the possibility that whoever is reading your README is a novice and would like more guidance. Listing specific steps helps remove ambiguity and gets people to using your project as quickly as possible. If it only runs in a specific context like a particular programming language version or operating system or has dependencies that have to be installed manually, also add a Requirements subsection.
-
-## Usage
-Use examples liberally, and show the expected output if you can. It's helpful to have inline the smallest example of usage that you can demonstrate, while providing links to more sophisticated examples if they are too long to reasonably include in the README.
-
-## Support
-Tell people where they can go to for help. It can be any combination of an issue tracker, a chat room, an email address, etc.
-
-## Roadmap
-If you have ideas for releases in the future, it is a good idea to list them in the README.
-
-## Contributing
-State if you are open to contributions and what your requirements are for accepting them.
-
-For people who want to make changes to your project, it's helpful to have some documentation on how to get started. Perhaps there is a script that they should run or some environment variables that they need to set. Make these steps explicit. These instructions could also be useful to your future self.
-
-You can also document commands to lint the code or run tests. These steps help to ensure high code quality and reduce the likelihood that the changes inadvertently break something. Having instructions for running tests is especially helpful if it requires external setup, such as starting a Selenium server for testing in a browser.
-
-## Authors and acknowledgment
-Show your appreciation to those who have contributed to the project.
-
-## License
-For open source projects, say how it is licensed.
+The following examples are provided:
+1. `e1_run_energyplus_simulation.py` for a simple simulation of the provided EnergyPlus model
+2. `e2_run_energyplus_calibration.py` for a calibration of the provided EnergyPlus Model. The measurement data here is not real measurement data, but simulated data which has been changed a bit, just to see the effect of calibration.
+3. `e3_run_energyplus_sensitivity_analysis` to do a sensitivity analysis.
 
-## Project status
-If you have run out of energy or time for your project, put a note at the top of the README saying that development has slowed down or stopped completely. Someone may choose to fork your project or volunteer to step in as a maintainer or owner, allowing your project to keep going. You can also make an explicit request for maintainers.
+The provided model is only for demonstration purposes. Both the calibration and sensitivity analysis dont really have a purpose except showing how the tool work. To use your own EnergyPlus model, just change the different paths in either the example files or the config file.
\ No newline at end of file
diff --git a/energyplus_calibrator/calibration_class.py b/energyplus_calibrator/calibration_class.py
index 309d343..033020a 100644
--- a/energyplus_calibrator/calibration_class.py
+++ b/energyplus_calibrator/calibration_class.py
@@ -130,12 +130,12 @@ class EnergyPlusCalibrator:
             sim_df=self._temp_dfs,
             real_df=self.real_data
         )
-
         self.calibration_class = self._create_aixcalibuha_calibration_class()
         self._simulation_setup_dict = simulation_setup
         self.res_name_add = res_name_add if res_name_add is not None else ''
-        # To silence warnings        
+        # To silence warnings
         self.energy_plus_api.outputs = {i: None for i in self._goals}
+        self.energy_plus_api.use_for_calibration = True
 
     def _check_tuner_paras(self) -> None:
         """
@@ -207,7 +207,7 @@ class EnergyPlusCalibrator:
         Note:
             Bounds are set to ±50% of initial value
         """
-        
+
         new_tuner_paras = {}
         for param in self.tuner_params:
             keys = param.split('/')
@@ -295,7 +295,7 @@ class EnergyPlusCalibrator:
             _intervals.append((start, stop))
 
         _df_reals = []
-        
+
         for start, stop in _intervals:
             stop = stop + pd.Timedelta(days=1)
             _df_sim = sim_df.loc[(sim_df.index > start) &
@@ -362,11 +362,14 @@ class EnergyPlusCalibrator:
                 'sim': goal
             }
 
-        meas_target_data = TimeSeriesData(self.real_data.reset_index())
+        meas_target_data = TimeSeriesData(self.real_data).reset_index()
+        meas_target_data.drop(columns=[('Date/Time', '')], inplace=True)
+        meas_target_data.index *= self.energy_plus_api.sim_setup.output_interval
+
         start_time = meas_target_data.index[0]
         stop_time = meas_target_data.index[-1]
         goals = Goals(
-            meas_target_data=TimeSeriesData(self.real_data.reset_index()),
+            meas_target_data=meas_target_data,
             variable_names=variable_names,
             statistical_measure=self.error_metric
         )
@@ -390,7 +393,7 @@ class EnergyPlusCalibrator:
         Returns:
             List of created file names
         """
-        
+
         to_copy = []
 
         df_sim_opt = self.energy_plus_api.simulate(parameters=parameters_opt)
@@ -440,8 +443,10 @@ class EnergyPlusCalibrator:
             plt.xlabel('Date at 01:00')
             plt.xticks(_ix, _x_ticks, rotation=45)
             plt.legend()
-            _save_name = col.replace(' ', '_').replace('/', '_').replace(':', '_').replace('[', '_').replace(']', '_').replace('(', '_').replace(')', '_')
-            save_name = self.energy_plus_api.working_directory / f'{_save_name}.png'
+            _save_name = col.replace(' ', '_').replace('/', '_').replace(':', '_').replace(
+                '[', '_').replace(']', '_').replace('(', '_').replace(')', '_')
+            save_name = self.energy_plus_api.working_directory / \
+                f'{_save_name}.png'
             to_copy.append(f'{_save_name}.png')
 
             plt.savefig(save_name, bbox_inches='tight')
@@ -461,11 +466,11 @@ class EnergyPlusCalibrator:
     def convert_model(self) -> None:
         """
         Convert calibrated model from JSON to IDF format.
-        
+
         Updates the EnergyPlus version identifier and converts the model
         using the EnergyPlus converter.
         """
-        
+
         calibrated_model_path = self.energy_plus_api.working_directory / 'calibrated_model.json'
 
         with open(calibrated_model_path, 'r') as f:
@@ -480,16 +485,16 @@ class EnergyPlusCalibrator:
     def create_final_files(self) -> None:
         """
         Create and organize final calibration results.
-        
+
         Creates:
         1. Calibrated parameter file
         2. Calibrated model files (JSON and IDF)
         3. Visualization plots
         4. Copies all files to results directory
         """
-        
-        with open(Path(self.energy_plus_api.working_directory) /\
-            'calibrated_parameters.json', 'r') as f:
+
+        with open(Path(self.energy_plus_api.working_directory) /
+                  'calibrated_parameters.json', 'r') as f:
             parameters = json.load(f)
 
         calibrated_model = self.energy_plus_api.ep_json.copy()
@@ -515,8 +520,8 @@ class EnergyPlusCalibrator:
                     time_string = f"{hours:02d}:{minutes:02d}"
                     parameters[param] = time_string
 
-        with open(Path(self.energy_plus_api.working_directory) /\
-            'calibrated_parameters.json', 'w') as f:
+        with open(Path(self.energy_plus_api.working_directory) /
+                  'calibrated_parameters.json', 'w') as f:
             json.dump(parameters, f)
 
         calibrated_model_path = Path(
@@ -532,7 +537,9 @@ class EnergyPlusCalibrator:
 
         if self.res_name_add is None:
             self.res_name_add = ''
-        folder_name = formatted_date + f"_{self.res_name_add}" if len(self.res_name_add) > 0 else formatted_date
+        folder_name = formatted_date + \
+            f"_{self.res_name_add}" if len(
+                self.res_name_add) > 0 else formatted_date
 
         results_folder = Path(
             __file__).parents[1] / 'calibration_results' / folder_name
@@ -563,17 +570,15 @@ class EnergyPlusCalibrator:
                   max_time: int = 120) -> None:
         """
         Run the calibration process.
-        
+
         Args:
             framework: Optimization framework to use
             method: Optimization method within the framework
             max_time: Maximum runtime in seconds
-            
+
         Note:
             Saves calibration results and creates final files
         """
-        
-        self.energy_plus_api.use_for_calibration = True
         kwargs_optimization, kwargs_calibrator = self._get_kwargs_optimization(framework=framework,
                                                                                max_time=max_time)
 
@@ -611,14 +616,14 @@ class EnergyPlusCalibrator:
                                  max_time: int) -> Tuple[Dict[str, Any], Dict[str, Any]]:
         """
         Get optimization configuration based on framework.
-        
+
         Args:
             framework: Optimization framework to use
             max_time: Maximum runtime in seconds
-            
+
         Returns:
             Tuple of (optimization_kwargs, calibrator_kwargs)
-            
+
         Raises:
             TypeError: If framework doesn't support multiprocessing when needed
         """
diff --git a/energyplus_calibrator/energy_plus_api.py b/energyplus_calibrator/energy_plus_api.py
index bc08172..4fc3efa 100644
--- a/energyplus_calibrator/energy_plus_api.py
+++ b/energyplus_calibrator/energy_plus_api.py
@@ -58,14 +58,34 @@ class EPlusSimulationSetup(SimulationSetup):
         title='n_steps_per_hour'
     )
 
+    output_interval: float = Field(
+        default=None,  # Set to None as default
+        description="The step size of the simulation (automatically set from n_steps_per_hour and/or dateframe_interval)",
+        title="output_interval"
+    )
+
+    def model_post_init(self, *args, **kwargs):
+        """
+        Post initialization hook to set output_interval based on n_steps_per_hour.
+        This runs after all validators.
+        """
+        super().model_post_init(*args, **kwargs)
+        if self.dataframe_interval == 'Hourly':
+            self.output_interval = 3600
+        elif self.dataframe_interval == 'Timestep':
+            self.output_interval = 3600 / self.n_steps_per_hour
+
+    class Config:
+        validate_assignment = True  # Ensures validation happens on attribute assignment
+
     _default_solver: str = "EPlus"
     _allowed_solvers: List[str] = ["EPlus"]
 
     @field_validator('sim_intervals', 'evaluation_intervals')
     @classmethod
     def check_intervals(
-        cls, 
-        intervals: List[Union[str, Tuple[datetime, datetime]]]) -> List[Tuple[datetime, datetime]]:
+            cls,
+            intervals: List[Union[str, Tuple[datetime, datetime]]]) -> List[Tuple[datetime, datetime]]:
         """
         Validate and convert interval strings or datetime tuples.
 
@@ -80,28 +100,30 @@ class EPlusSimulationSetup(SimulationSetup):
         Raises:
             ValueError: If intervals are invalid or not chronologically ordered
         """
-        
+
         if intervals is None:
             return intervals
-            
+
         _intervals = []
         for interval in intervals:
             # If already a datetime tuple, validate and add directly
             if isinstance(interval, tuple):
                 start, stop = interval
                 if not (isinstance(start, datetime) and isinstance(stop, datetime)):
-                    raise ValueError('Tuple intervals must contain datetime objects')
+                    raise ValueError(
+                        'Tuple intervals must contain datetime objects')
             # If string, parse to datetime tuple
             elif isinstance(interval, str):
                 start, stop = interval.split(' to ')
                 start = datetime.strptime(start, "%Y-%m-%d")
                 stop = datetime.strptime(stop, "%Y-%m-%d")
             else:
-                raise ValueError('Intervals must be either strings or datetime tuples')
+                raise ValueError(
+                    'Intervals must be either strings or datetime tuples')
 
             if stop <= start:
                 raise ValueError('Start must be before stop in intervals')
-                
+
             _intervals.append((start, stop))
 
         # Check chronological order
@@ -295,7 +317,7 @@ class EnergyPlusAPI(SimulationAPI):
         time_index = pd.date_range(start=start_date,
                                    end=pd.Timestamp(
                                        stop_date) + timedelta(days=1),
-                                   freq=f'{timedeltas[0]}S')[1:]
+                                   freq=f'{timedeltas[0]}s')[1:]
 
         assert df.shape[0] >= len(time_index)
 
@@ -311,6 +333,16 @@ class EnergyPlusAPI(SimulationAPI):
 
         _dfs = []
 
+        result_file_name = kwargs.pop("result_file_name", "resultFile")
+        result_file_suffix = kwargs.pop("result_file_suffix", "csv")
+        parquet_engine = kwargs.pop('parquet_engine', 'pyarrow')
+        savepath = kwargs.pop("savepath", None)
+
+        return_option = kwargs.pop("return_option", "time_series")
+        if return_option not in ['time_series', 'savepath']:
+            raise TypeError(
+                f'Return option {return_option} not yet implemented')
+
         for start, stop in self.sim_setup.sim_intervals:
             self._start_date = start
             self._stop_date = stop
@@ -331,10 +363,28 @@ class EnergyPlusAPI(SimulationAPI):
 
         if self.use_for_calibration:
             df = df.reset_index()
+            df.index *= self.sim_setup.output_interval
         if queue is not None:
             queue.put(df)
-        return df
 
+        if return_option == "time_series":
+            return df
+
+        if return_option == "savepath":
+            if savepath is None:
+                savepath = self.working_directory
+
+            os.makedirs(savepath, exist_ok=True)
+            filepath = os.path.join(
+                savepath, f"{result_file_name}.{result_file_suffix}")
+            TimeSeriesData(df).droplevel(1, axis=1).drop(columns=['Date/Time']).save(
+                filepath=filepath,
+                key="simulation",
+                engine=parquet_engine
+            )
+
+            return filepath
+        return None
 
     def change_model_dict_with_parameters(
             self,
@@ -343,19 +393,19 @@ class EnergyPlusAPI(SimulationAPI):
             schedule_vars: Optional[Dict[str, Any]] = None) -> Dict[str, Any]:
         """
         Update model dictionary with new parameter values.
-        
+
         Args:
             model_dict: Original model dictionary
             parameters: Dictionary of parameters to update
             schedule_vars: Dictionary of schedule variables
-            
+
         Returns:
             Updated model dictionary
-            
+
         Raises:
             KeyError: If parameter path not found in model dictionary
         """
-        
+
         if schedule_vars is None:
             schedule_vars = {}
 
@@ -391,11 +441,13 @@ class EnergyPlusAPI(SimulationAPI):
                     # If the years are not specified in the energyplus model, the simulation will still run normally. I have no idea what happens when you simulate over multiple years.
                     if key == "begin_year":
                         if not self.use_for_calibration:
-                            print("BEGIN YEAR NOT INCLUDED IN THE MODEL DESCRIPTION. STILL SIMULATING")
+                            print(
+                                "BEGIN YEAR NOT INCLUDED IN THE MODEL DESCRIPTION. STILL SIMULATING")
                         continue
                     elif key == "end_year":
                         if not self.use_for_calibration:
-                            print("END YEAR NOT INCLUDED IN THE MODEL DESCRIPTION. STILL SIMULATING")
+                            print(
+                                "END YEAR NOT INCLUDED IN THE MODEL DESCRIPTION. STILL SIMULATING")
                         continue
                     raise KeyError(f'{param} is not part of the model_dict')
                 if schedule_var_flag:
@@ -409,24 +461,25 @@ class EnergyPlusAPI(SimulationAPI):
 
         return model_dict
 
-    def _single_simulation_solo(self, 
+    def _single_simulation_solo(self,
                                 kwargs: Dict[str, Any]) -> Optional[TimeSeriesData]:
         """
         Run a single simulation in solo mode.
-        
+
         Args:
             kwargs: Dictionary containing simulation parameters and options
-            
+
         Returns:
             TimeSeriesData object containing simulation results or None if simulation fails and not fail_on_error
-            
+
         Raises:
             TypeError: If unsupported return option specified
             ValueError: If inputs provided (not supported)
             Exception: If simulation fails and fail_on_error is True
         """
-        
+
         parameters = kwargs.pop("parameters", None)
+
         if parameters is None or len(parameters) == 0:
             dont_force_same = True
         else:
@@ -443,11 +496,6 @@ class EnergyPlusAPI(SimulationAPI):
             self._set_output_timestep[key] = self.sim_setup.dataframe_interval
         parameters.update(self._set_output_timestep)
 
-        return_option = kwargs.pop("return_option", "time_series")
-        if return_option != 'time_series':
-            raise TypeError(
-                f'Return option {return_option} not yet implemented')
-
         inputs = kwargs.get("inputs", None)
         if inputs is not None:
             raise ValueError("Inputs not supported")
@@ -501,7 +549,7 @@ class EnergyPlusAPI(SimulationAPI):
 
         return TimeSeriesData(df)
 
-    def _single_simulation_solo_mp(self, 
+    def _single_simulation_solo_mp(self,
                                    kwargs: Dict[str, Any]) -> Optional[TimeSeriesData]:
         """
         This looks stupid, but the way the multi processing is implemented,
@@ -517,18 +565,18 @@ class EnergyPlusAPI(SimulationAPI):
         except:
             return None
 
-    def _adjust_for_evaluation(self, 
+    def _adjust_for_evaluation(self,
                                df: pd.DataFrame) -> pd.DataFrame:
         """
         Adjust DataFrame to only include specified evaluation intervals.
-        
+
         Args:
             df: Input DataFrame
-            
+
         Returns:
             DataFrame filtered to evaluation intervals
         """
-        
+
         _df_list = []
         for start, stop in self.sim_setup.evaluation_intervals:
             _df = df.loc[(df.index > start) &
@@ -545,20 +593,21 @@ class EnergyPlusAPI(SimulationAPI):
             "Close functionality does nothing yet. To be implemented...")
 
     def simulate(self,
-                 parameters: Optional[Union[Dict[str, Any], List[Dict[str, Any]]]] = None,
+                 parameters: Optional[Union[Dict[str, Any],
+                                            List[Dict[str, Any]]]] = None,
                  return_option: str = "time_series",
                  **kwargs) -> Union[TimeSeriesData, List[TimeSeriesData], None]:
         """
         Simulate the EnergyPlus model with given parameters.
-        
+
         Args:
             parameters: Dictionary or list of dictionaries containing simulation parameters
             return_option: How to handle simulation results ("time_series", "last_point", "savepath")
             **kwargs: Additional simulation options
-            
+
         Returns:
             Simulation results as TimeSeriesData object(s) or None
-            
+
         Raises:
             TypeError: If saving multiple parameter sets to same path
             ValueError: If multiprocessing parameter lengths mismatch
@@ -663,17 +712,17 @@ class EnergyPlusAPI(SimulationAPI):
     def _update_model(self) -> None:
         """
         Update the model by converting IDF to epJSON format and extracting model information.
-        
+
         This method:
         1. Creates a temporary directory for conversion
         2. Runs EnergyPlus in convert-only mode to create epJSON
         3. Loads the epJSON file and stores it in self.ep_json
         4. Saves the model description
         5. Updates output variable settings
-        
+
         Raises:
             Exception: If the EnergyPlus conversion fails
-            
+
         Note:
             Currently, the extraction of model variables (outputs, parameters, etc.) 
             is not implemented.
@@ -721,22 +770,22 @@ class EnergyPlusAPI(SimulationAPI):
                             json_model_path: Union[str, Path]) -> None:
         """
         Convert an epJSON model file back to IDF format.
-    
+
         This method:
         1. Creates a temporary directory for the conversion
         2. Loads and saves the JSON model
         3. Uses EnergyPlus to convert it to IDF format
         4. Moves the resulting IDF file to the working directory
         5. Cleans up temporary files
-        
+
         Args:
             json_model_path: Path to the epJSON model file to convert
-            
+
         Note:
             The converted IDF file will be named 'calibrated_model.idf' and placed
             in the working directory.
         """
-        
+
         output_directory = Path(self.cd) / 'converted_model'
         output_directory.mkdir()
 
diff --git a/examples/data/__pycache__/calibration_config.cpython-310.pyc b/examples/data/__pycache__/calibration_config.cpython-310.pyc
deleted file mode 100644
index 9ab5a938c1cfc429ba6afe237a16d5b0241802df..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 1168
zcmd1j<>g{vU|@L9shR$tg@NHQh=Yt-85kHG7#J9eXE87^q%fo~<}l<kMlmunq%x*3
zH8Vyrr7%Y^r!uCpG&5$grm#pdq_9deq_9adM6tm|86+7}*rgew*il3{q#2?(K)O>n
zQ@B#N(;2~-XAVmgX9_PE^37q6;!5F9XN=-b;ZG6BWQ^iT5sczZ5sKnV5su<d5s4B=
z5seZ|5esI}6n_bFwI<^&mVm^Pj4E*#tC)bI{Pd#4+}zX{*SyrC^vZyo(&8!>BV#?o
zmrM){3{mVwsl}x^CB;#EsYdb1i8+}`MTsSu`FT~!t`&*71v#l6{=V@}uED<fDe*3;
zdBvF}mGNOl#)bxZnJH;i!U6du#VLuo@gYHxMh1qadZ`8FnGsA33{h+z`K3iUl~ocT
zVO;}5T?0dfl6(aS&q&w6P?IH!Kfko3ptK}DGp{7Is4OujN+>0<Br&ZhF*g+<##@}3
z3+EL_iKLb#=9Ge+h!E9eN}n|o1Www+nLF*%jltluy(V*&cT|2}s%KtWW=;vje^xH3
z#hK}OZaMkoL5U@)`cCd)0X})oCjOzRg=uMJ&SfEHAt8bKiJ3+5$r*`x>8Zu>1*t{x
z8Tq9}gbi~wiSR1Otu!#s4mU1LOG(QLD+=&&B-1d@G;go8qLdI5gVc;9UpGhp03&}7
z94=GxNKGus%uBa|M0Q9~VqS4tYLP;;SF8pkLNud<Gazc>b5j$GON&x-Q}arqSb}_m
zU87hFDs%JmqnOeYUotW<Fub&3U|{gm6uQM;kXVudN*bUfb4$$C&o#(BGQcM^INsAQ
zIK<J%C*H*~=#~(Yc$jNYu&2M@Esps3w9K5;_;`>RMX7lu#kZK8U2bvt`n$OL#0NNr
zc--O%cXbT$a1Da+1cE(%Lwy`WJpKLRgIz;H18(tzg!+MHgB*Q>Z?U@jJNg9Q5(QE5
zVU9uZ&i;O3u0bL3E}qUIQ9Q0eLH<GUzOErbp3b*8-GUr_UBmr@yl=7jx`uf8yWC>+
zi+2tPy~W|{7!e=h>Fc_Zp-7B@0Ydz8O0kLwN-fAQj!6aQm4ckoVtAg&FN#Tp<cQ)J
zP%@1{$}I88`FUxX>3Ri~w>WHa^HWN5QtdziSZu_=z`(=6!NkHS#w5fj#K^+P#KZ)`
f|Cv~r{<HmN;$mWAVq*Kn#>v6R!pOn|!W@hMfly~S

diff --git a/examples/data/calibration_config.py b/examples/data/calibration_config.py
index f5594d4..3efc5c3 100644
--- a/examples/data/calibration_config.py
+++ b/examples/data/calibration_config.py
@@ -8,8 +8,7 @@ MODEL_PATH = Path(__file__).parents[0] / 'ExampleHOM_BESMod_Density_V2310.idf'
 WEATHER_PATH = Path(__file__).parents[0] / 'Potsdam_TRY2015.epw'
 ENERGYPLUS_VERSION = "23.1"
 
-SIMULATION_SETUP = {"output_interval": 600,
-                    "dataframe_interval": "Hourly",
+SIMULATION_SETUP = {"dataframe_interval": "Hourly",
                     "sim_intervals": [
                         '2015-01-01 to 2015-02-01'
                     ],
@@ -32,5 +31,5 @@ ERROR_METRIC = 'RMSE'
 FRAMEWORK = 'pymoo'
 METHOD = 'ga'
 
-N_CPU = 1
+N_CPU = 2
 MAX_TIME = (60)
\ No newline at end of file
diff --git a/examples/e1_run_energyplus_simulation.py b/examples/e1_run_energyplus_simulation.py
index d696ab7..7b5604f 100644
--- a/examples/e1_run_energyplus_simulation.py
+++ b/examples/e1_run_energyplus_simulation.py
@@ -5,28 +5,19 @@ import json
 
 def main():
     CD = Path(__file__).parents[1] / 'results' / 'e1_result'
-    MODEL_PATH = Path(__file__).parents[0] / 'data' / 'ExampleHOM_BESMod_Density_V2310.idf'
+    MODEL_PATH = Path(__file__).parents[0] / \
+        'data' / 'ExampleHOM_BESMod_Density_V2310.idf'
     WEATHER_PATH = Path(__file__).parents[0] / 'data' / 'Potsdam_TRY2015.epw'
     ENERGYPLUS_VERSION = "23.1"
 
-    simulation_setup = {"output_interval": 600,
-                        "dataframe_interval": "Hourly",
-                        "sim_intervals": [
-                            '2015-01-01 to 2015-02-01'
-                        ],
-                        "evaluation_intervals": [
-                            '2015-01-01 to 2015-02-01'
-                        ]}
-    
-    simulation_setup = {"output_interval": 600,
-                        "sim_intervals": [
-                            '2015-01-01 to 2015-02-01'
-                        ],
-                        "evaluation_intervals": [
-                            '2015-01-01 to 2015-02-01'
-                        ],
-                        "dataframe_interval": "Hourly"}
-    
+    simulation_setup = {"sim_intervals": [
+        '2015-01-01 to 2015-02-01'
+    ],
+        "evaluation_intervals": [
+        '2015-01-01 to 2015-02-01'
+    ],
+        "dataframe_interval": "Hourly"}
+
     parameters = None
 
     EP_API = EnergyPlusAPI(
@@ -38,22 +29,19 @@ def main():
         energyplus_version=ENERGYPLUS_VERSION,
         n_cpu=1
     )
-    
-    EP_API.set_sim_setup(sim_setup=simulation_setup) 
+
+    EP_API.set_sim_setup(sim_setup=simulation_setup)
 
     dfs = EP_API.simulate(
         parameters=parameters,
         return_option="time_series"
     )
-    
+
     dfs.to_csv(EP_API.cd / 'output.csv')
 
-    
     with open(EP_API.cd / 'cols.json', 'w') as f:
         json.dump(list(dfs), f)
-    
-    
-if __name__ == "__main__":
-    main()
 
 
+if __name__ == "__main__":
+    main()
diff --git a/examples/e3_run_energyplus_sensitivity_analysis.py b/examples/e3_run_energyplus_sensitivity_analysis.py
new file mode 100644
index 0000000..1873f46
--- /dev/null
+++ b/examples/e3_run_energyplus_sensitivity_analysis.py
@@ -0,0 +1,184 @@
+from pathlib import Path
+from typing import List
+
+import pandas as pd
+from aixcalibuha import CalibrationClass, SobolAnalyzer, plotting
+from data.calibration_config import (ENERGYPLUS_INSTALL_DIR,
+                                     ENERGYPLUS_VERSION, GOAL_VAR_CONVERT_DICT,
+                                     GOALS, MODEL_PATH, N_CPU,
+                                     SIMULATION_SETUP, TUNER_PARAMS,
+                                     WEATHER_PATH)
+
+from energyplus_calibrator.calibration_class import EnergyPlusCalibrator
+from energyplus_calibrator.energy_plus_api import EnergyPlusAPI
+
+
+def main():
+    measurement_data = pd.read_csv(
+        Path(__file__).parents[0] / 'data' / 'measurement_data.csv')
+    measurement_data.set_index('Date/Time', inplace=True)
+    measurement_data.index = pd.to_datetime(measurement_data.index)
+
+    CD = Path(__file__).parents[1] / 'results' / 'e3_result'
+
+    calibrator = EnergyPlusCalibrator(cd=CD,
+                                      model_path=MODEL_PATH,
+                                      epw_file_path=WEATHER_PATH,
+                                      energyplus_install_dir=ENERGYPLUS_INSTALL_DIR,
+                                      energyplus_version=ENERGYPLUS_VERSION,
+                                      simulation_setup=SIMULATION_SETUP,
+                                      tuner_paras=TUNER_PARAMS,
+                                      goals=GOALS,
+                                      real_data_dataframe=measurement_data,
+                                      goal_var_convert_dict=GOAL_VAR_CONVERT_DICT,
+                                      n_cpu=N_CPU)
+
+    run_aixcalibuha_example(working_directory=CD,
+                            sim_api=calibrator.energy_plus_api,
+                            calibration_class=calibrator.calibration_class,
+                            n_cpu=N_CPU)
+
+
+def run_aixcalibuha_example(working_directory: Path,
+                            sim_api: EnergyPlusAPI,
+                            calibration_class: List[CalibrationClass],
+                            n_cpu: int = 1):
+    # This is a copy paste from here: https://github.com/RWTH-EBC/AixCaliBuHA/blob/master/examples/e3_1_verbose_sensitivity_analysis_example.py adjusted to work with the energyplus implementation
+    # ## Example of Sobol method
+    # First, we instantiate the Analyzer with the `sim_api` and the number of samples.
+    # For this example we will use a small sample size to reduce the time needed,
+    # which will lead to inaccurate results.
+    # In the comparison of the different methods, we will discuss the required sample size.
+    # We will also define a working directory were all results of the analysis will be stored.
+    # Additionally, we can choose if the samples and corresponding simulation files will be saved.
+    # These files can later be loaded and used for analysis of different calibration classes
+    # without performing new simulations. The simulations during the sensitivity analysis are the
+    # main computational time factor.
+    sen_analyzer = SobolAnalyzer(
+        sim_api=sim_api,
+        num_samples=8,
+        calc_second_order=True,
+        working_directory=working_directory,
+        save_files=True,
+        savepath_sim=working_directory.joinpath('files'),
+        suffix_files='csv'
+    )
+
+    # Now, we run the sensitivity analysis with the verbose option.
+    # With that, we not only get the results for combined target values,
+    # but we also get the results for every target value alone.
+    # Because we defined the first calibration class global
+    # and every calibration class has the same
+    # tuner-parameters, we can use the option `use_first_sim`,
+    # where only the first class will be simulated and the simulation files saved.
+    # These simulations will be used for all other classes.
+
+    # For that the simulations are loaded for each class
+    # and the statistical measure is then evaluated for the
+    # relevant time intervals of each class.
+
+    # When we load simulation files we can use multiprocessing for loading the simulation
+    # and evaluating the statistical measure for each class in their time intervals.
+    # This multiprocessing option is especially
+    # useful for large models and large simulation data,
+    # because only one simulation at a time is stored
+    # in memory for each process.
+    # This can prevent possible memory errors.
+
+    # We disable the automatic plot option here,
+    # but we save all results. Later we can use the plot function
+    # of the plotting module to plot the results.
+
+    #!! Set load_sim_files to True, if you already did the simulation and only want to load
+    # the results and analyse from there
+    result, classes = sen_analyzer.run(calibration_classes=calibration_class,
+                                       verbose=True,
+                                       use_first_sim=True,
+                                       plot_result=False,
+                                       save_results=True,
+                                       n_cpu=N_CPU,
+                                       scale=False,
+                                       load_sim_files=False)
+
+    # After running the sensitivity analysis you can see
+    # that the working directory was created and the result
+    # files were saved here. First, the folder "files" was
+    # created as the result of `save_files=True`. In there, the
+    # simulation files are stored in an own folder which
+    # name contains the name of the used calibration class.
+    # Additionally, the corresponding samples are stored.
+    # The simulations are coupled with their samples.
+    # As one results of the analysis, the statistical
+    # measure and corresponding sample are saved for each class.
+    # This information could be used for surrogate-based
+    # calibration, which is currently not implemented in `AixCaliBuHA`.
+    # The main results of the sensitivity analysis are the sensitivity
+    # measures stored in "SobolAnalyzer_results.csv"
+    # and "SobolAnalyzer_results_second_order.csv".
+    # These are also returned from the `run()` function as a tuple of two
+    # dataframes. This is specific to the sobol method, all other
+    # methods only return one dataframe, which is similar to the first return value
+    # of the sobol method with possibly other analysis variables.
+    # Let´s take a look at these results.
+
+    # The first result has as columns the tuner-parameters
+    # and a multi level index with three levels.
+    # The first level defines the calibration class.
+    # The second level defines the Goals (target values). The index `all`
+    # is for the result of the combined target values in the goals.
+    # The last level defines the result of the
+    # sensitivity measure for each class and goal.
+    # These analysis variables are specific for each method.
+    # For their exact meaning I refer to the documentation of the SALib or the literature.
+    # In this example you get a short overview in the comparison later.
+    print("Result of the sensitivity analysis")
+    print('First and total order results of sobol method')
+    print(result[0].to_string())
+    # The second result of the sobol method is for second order sensitive measures.
+    # These describe the interaction between two parameters,
+    # so this dataframe has a fourth index level "Interaction".
+    # In this level, the tuner-parameters are listed again.
+    print('Second order results of sobol method')
+    print(result[1].to_string())
+    # For a better understanding of the results we will now plot them.
+
+    # ## Plotting Sensitivity results
+    # We start with the result which were calculated with the small sample size.
+    # Let's plot the first and total order results. These results
+    # are specific for each single parameter
+    # For each calibration class, a figure is created
+    # which shows for each goal the first order sensitivity `S1`
+    # and the total order sensitivity `ST` combined. For the small
+    # sample size the results have large confidence
+    # intervals, which show that these results are inaccurate as we
+    # noted earlier due to the small sample size.
+    plotting.plot_single(result[0])
+
+    # The plotting of second order results is only useful
+    # and working for more than 2 parameters.
+    # So we only can take a look at them in example A.
+    # If you run example B we will skip the plot of the second order results
+    # and load some sensitivity results of example A.
+
+    # Let's take a look at the second order results `S2` of example A we just created.
+    # This analysis variable shows the interaction of two
+    # parameters, so we can plot them as a heatmap.
+    # We can see that the parameters have no interaction with
+    # themselves what is obvious. Also, we see that the
+    # values for p1,p2 and p2,p1 are the same.
+    # In the heatmap we can't visualize the confidence intervals,
+    # so we will also take a look at the interaction of
+    # one specific parameter.
+    # For that the `plotting` module has also a function
+    # which looks simular to the `S1` and `ST` plots.
+    # Here we see again large confidence intervals,
+    # so now we will load results which were calculated with
+    # a much higher sample number.
+
+    plotting.heatmaps(result[1])
+    plotting.plot_single_second_order(
+        result[1], 'ZoneInfiltration:DesignFlowRate/IfKJfrdT40ehbMFAOP2OHQ/air_changes_per_hour')
+
+
+if __name__ == '__main__':
+    main()
diff --git a/pyproject.toml b/pyproject.toml
new file mode 100644
index 0000000..737e278
--- /dev/null
+++ b/pyproject.toml
@@ -0,0 +1,3 @@
+[build-system]
+requires = ["setuptools>=64", "wheel"]
+build-backend = "setuptools.build_meta"
\ No newline at end of file
diff --git a/requirements.txt b/requirements.txt
new file mode 100644
index 0000000..ab45417
--- /dev/null
+++ b/requirements.txt
@@ -0,0 +1,8 @@
+ebcpy~=0.5.0
+matplotlib~=3.8.1
+numpy>=1.26
+pandas~=2.2.3
+pydantic~=2.9.2
+pymoo==0.5.0
+bayesian-optimization==1.4.3
+git+https://github.com/RWTH-EBC/AixCaliBuHA.git@master
diff --git a/setup.py b/setup.py
index 87bd57a..f10d7ae 100644
--- a/setup.py
+++ b/setup.py
@@ -1,4 +1,5 @@
 from setuptools import setup, find_packages
+
 setup(
     name="energyplus_calibrator",
     version="0.1.0",
diff --git a/workbench.ipynb b/workbench.ipynb
deleted file mode 100644
index aac55bc..0000000
--- a/workbench.ipynb
+++ /dev/null
@@ -1,1050 +0,0 @@
-{
- "cells": [
-  {
-   "cell_type": "code",
-   "execution_count": 20,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "import pandas as pd\n",
-    "from pathlib import Path\n",
-    "from ebcpy import TimeSeriesData"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 21,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "df = TimeSeriesData(Path.cwd() / 'results' / 'e1_result' / 'output.csv')"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 22,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/html": [
-       "<div>\n",
-       "<style scoped>\n",
-       "    .dataframe tbody tr th:only-of-type {\n",
-       "        vertical-align: middle;\n",
-       "    }\n",
-       "\n",
-       "    .dataframe tbody tr th {\n",
-       "        vertical-align: top;\n",
-       "    }\n",
-       "\n",
-       "    .dataframe thead tr th {\n",
-       "        text-align: left;\n",
-       "    }\n",
-       "\n",
-       "    .dataframe thead tr:last-of-type th {\n",
-       "        text-align: right;\n",
-       "    }\n",
-       "</style>\n",
-       "<table border=\"1\" class=\"dataframe\">\n",
-       "  <thead>\n",
-       "    <tr>\n",
-       "      <th>Variables</th>\n",
-       "      <th>Environment:Site Outdoor Air Drybulb Temperature [C](Hourly)</th>\n",
-       "      <th>Environment:Site Outdoor Air Humidity Ratio [kgWater/kgDryAir](Hourly)</th>\n",
-       "      <th>Environment:Site Outdoor Air Relative Humidity [%](Hourly)</th>\n",
-       "      <th>Environment:Site Outdoor Air Barometric Pressure [Pa](Hourly)</th>\n",
-       "      <th>Environment:Site Wind Speed [m/s](Hourly)</th>\n",
-       "      <th>Environment:Site Wind Direction [deg](Hourly)</th>\n",
-       "      <th>Environment:Site Diffuse Solar Radiation Rate per Area [W/m2](Hourly)</th>\n",
-       "      <th>Environment:Site Direct Solar Radiation Rate per Area [W/m2](Hourly)</th>\n",
-       "      <th>Environment:Site Ground Temperature [C](Hourly)</th>\n",
-       "      <th>8VVLYRMVH0C1HUD3CNVPWG:Zone Total Internal Total Heating Energy [J](Hourly)</th>\n",
-       "      <th>...</th>\n",
-       "      <th>VXCVWQDXJ0CRSBXJGBDN2A IDEAL LOADS AIR SYSTEM:Zone Ideal Loads Zone Sensible Heating Rate [W](Hourly)</th>\n",
-       "      <th>VXCVWQDXJ0CRSBXJGBDN2A IDEAL LOADS AIR SYSTEM:Zone Ideal Loads Zone Sensible Cooling Rate [W](Hourly)</th>\n",
-       "      <th>AMIO3KHG402UMEU7FS9XAA IDEAL LOADS AIR SYSTEM:Zone Ideal Loads Zone Sensible Heating Rate [W](Hourly)</th>\n",
-       "      <th>AMIO3KHG402UMEU7FS9XAA IDEAL LOADS AIR SYSTEM:Zone Ideal Loads Zone Sensible Cooling Rate [W](Hourly)</th>\n",
-       "      <th>EWAWLYZUK0GDV9RQVVRDSW IDEAL LOADS AIR SYSTEM:Zone Ideal Loads Zone Sensible Heating Rate [W](Hourly)</th>\n",
-       "      <th>EWAWLYZUK0GDV9RQVVRDSW IDEAL LOADS AIR SYSTEM:Zone Ideal Loads Zone Sensible Cooling Rate [W](Hourly)</th>\n",
-       "      <th>UFB0FBIBNUCA0AXLT56UFA IDEAL LOADS AIR SYSTEM:Zone Ideal Loads Zone Sensible Heating Rate [W](Hourly)</th>\n",
-       "      <th>UFB0FBIBNUCA0AXLT56UFA IDEAL LOADS AIR SYSTEM:Zone Ideal Loads Zone Sensible Cooling Rate [W](Hourly)</th>\n",
-       "      <th>Heating:EnergyTransfer [J](Hourly)</th>\n",
-       "      <th>Cooling:EnergyTransfer [J](Hourly)</th>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>Tags</th>\n",
-       "      <th>raw</th>\n",
-       "      <th>raw</th>\n",
-       "      <th>raw</th>\n",
-       "      <th>raw</th>\n",
-       "      <th>raw</th>\n",
-       "      <th>raw</th>\n",
-       "      <th>raw</th>\n",
-       "      <th>raw</th>\n",
-       "      <th>raw</th>\n",
-       "      <th>raw</th>\n",
-       "      <th>...</th>\n",
-       "      <th>raw</th>\n",
-       "      <th>raw</th>\n",
-       "      <th>raw</th>\n",
-       "      <th>raw</th>\n",
-       "      <th>raw</th>\n",
-       "      <th>raw</th>\n",
-       "      <th>raw</th>\n",
-       "      <th>raw</th>\n",
-       "      <th>raw</th>\n",
-       "      <th>raw</th>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>Date/Time</th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "    </tr>\n",
-       "  </thead>\n",
-       "  <tbody>\n",
-       "    <tr>\n",
-       "      <th>2015-01-01 01:00:00</th>\n",
-       "      <td>0.366667</td>\n",
-       "      <td>0.003707</td>\n",
-       "      <td>96.500000</td>\n",
-       "      <td>102241.666667</td>\n",
-       "      <td>2.908333</td>\n",
-       "      <td>200.166667</td>\n",
-       "      <td>0.0</td>\n",
-       "      <td>0.0</td>\n",
-       "      <td>13.0</td>\n",
-       "      <td>363242.88</td>\n",
-       "      <td>...</td>\n",
-       "      <td>144.381566</td>\n",
-       "      <td>0.0</td>\n",
-       "      <td>106.560861</td>\n",
-       "      <td>0.0</td>\n",
-       "      <td>245.710967</td>\n",
-       "      <td>0.0</td>\n",
-       "      <td>203.834547</td>\n",
-       "      <td>0.0</td>\n",
-       "      <td>1.057110e+07</td>\n",
-       "      <td>0.0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>2015-01-01 02:00:00</th>\n",
-       "      <td>0.466667</td>\n",
-       "      <td>0.003769</td>\n",
-       "      <td>97.375000</td>\n",
-       "      <td>102200.000000</td>\n",
-       "      <td>3.083333</td>\n",
-       "      <td>272.416667</td>\n",
-       "      <td>0.0</td>\n",
-       "      <td>0.0</td>\n",
-       "      <td>13.0</td>\n",
-       "      <td>363242.88</td>\n",
-       "      <td>...</td>\n",
-       "      <td>144.805737</td>\n",
-       "      <td>0.0</td>\n",
-       "      <td>106.780580</td>\n",
-       "      <td>0.0</td>\n",
-       "      <td>246.418155</td>\n",
-       "      <td>0.0</td>\n",
-       "      <td>204.357600</td>\n",
-       "      <td>0.0</td>\n",
-       "      <td>1.080233e+07</td>\n",
-       "      <td>0.0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>2015-01-01 03:00:00</th>\n",
-       "      <td>0.358333</td>\n",
-       "      <td>0.003764</td>\n",
-       "      <td>98.000000</td>\n",
-       "      <td>102200.000000</td>\n",
-       "      <td>2.941667</td>\n",
-       "      <td>279.333333</td>\n",
-       "      <td>0.0</td>\n",
-       "      <td>0.0</td>\n",
-       "      <td>13.0</td>\n",
-       "      <td>363242.88</td>\n",
-       "      <td>...</td>\n",
-       "      <td>146.454909</td>\n",
-       "      <td>0.0</td>\n",
-       "      <td>108.304676</td>\n",
-       "      <td>0.0</td>\n",
-       "      <td>248.825114</td>\n",
-       "      <td>0.0</td>\n",
-       "      <td>206.511613</td>\n",
-       "      <td>0.0</td>\n",
-       "      <td>1.091081e+07</td>\n",
-       "      <td>0.0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>2015-01-01 04:00:00</th>\n",
-       "      <td>0.400000</td>\n",
-       "      <td>0.003778</td>\n",
-       "      <td>98.000000</td>\n",
-       "      <td>102141.666667</td>\n",
-       "      <td>2.783333</td>\n",
-       "      <td>283.916667</td>\n",
-       "      <td>0.0</td>\n",
-       "      <td>0.0</td>\n",
-       "      <td>13.0</td>\n",
-       "      <td>363242.88</td>\n",
-       "      <td>...</td>\n",
-       "      <td>147.056525</td>\n",
-       "      <td>0.0</td>\n",
-       "      <td>108.773500</td>\n",
-       "      <td>0.0</td>\n",
-       "      <td>249.641430</td>\n",
-       "      <td>0.0</td>\n",
-       "      <td>207.297145</td>\n",
-       "      <td>0.0</td>\n",
-       "      <td>1.094939e+07</td>\n",
-       "      <td>0.0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>2015-01-01 05:00:00</th>\n",
-       "      <td>0.458333</td>\n",
-       "      <td>0.003784</td>\n",
-       "      <td>97.708333</td>\n",
-       "      <td>102100.000000</td>\n",
-       "      <td>2.758333</td>\n",
-       "      <td>289.500000</td>\n",
-       "      <td>0.0</td>\n",
-       "      <td>0.0</td>\n",
-       "      <td>13.0</td>\n",
-       "      <td>363242.88</td>\n",
-       "      <td>...</td>\n",
-       "      <td>147.473698</td>\n",
-       "      <td>0.0</td>\n",
-       "      <td>109.115286</td>\n",
-       "      <td>0.0</td>\n",
-       "      <td>250.078532</td>\n",
-       "      <td>0.0</td>\n",
-       "      <td>207.854896</td>\n",
-       "      <td>0.0</td>\n",
-       "      <td>1.097407e+07</td>\n",
-       "      <td>0.0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>...</th>\n",
-       "      <td>...</td>\n",
-       "      <td>...</td>\n",
-       "      <td>...</td>\n",
-       "      <td>...</td>\n",
-       "      <td>...</td>\n",
-       "      <td>...</td>\n",
-       "      <td>...</td>\n",
-       "      <td>...</td>\n",
-       "      <td>...</td>\n",
-       "      <td>...</td>\n",
-       "      <td>...</td>\n",
-       "      <td>...</td>\n",
-       "      <td>...</td>\n",
-       "      <td>...</td>\n",
-       "      <td>...</td>\n",
-       "      <td>...</td>\n",
-       "      <td>...</td>\n",
-       "      <td>...</td>\n",
-       "      <td>...</td>\n",
-       "      <td>...</td>\n",
-       "      <td>...</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>2015-02-01 20:00:00</th>\n",
-       "      <td>2.458333</td>\n",
-       "      <td>0.004319</td>\n",
-       "      <td>97.000000</td>\n",
-       "      <td>102600.000000</td>\n",
-       "      <td>2.308333</td>\n",
-       "      <td>255.416667</td>\n",
-       "      <td>0.0</td>\n",
-       "      <td>0.0</td>\n",
-       "      <td>13.0</td>\n",
-       "      <td>475009.92</td>\n",
-       "      <td>...</td>\n",
-       "      <td>90.328328</td>\n",
-       "      <td>0.0</td>\n",
-       "      <td>56.195287</td>\n",
-       "      <td>0.0</td>\n",
-       "      <td>143.578751</td>\n",
-       "      <td>0.0</td>\n",
-       "      <td>114.540692</td>\n",
-       "      <td>0.0</td>\n",
-       "      <td>6.750108e+06</td>\n",
-       "      <td>0.0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>2015-02-01 21:00:00</th>\n",
-       "      <td>2.500000</td>\n",
-       "      <td>0.004332</td>\n",
-       "      <td>97.000000</td>\n",
-       "      <td>102600.000000</td>\n",
-       "      <td>1.783333</td>\n",
-       "      <td>265.833333</td>\n",
-       "      <td>0.0</td>\n",
-       "      <td>0.0</td>\n",
-       "      <td>13.0</td>\n",
-       "      <td>437754.24</td>\n",
-       "      <td>...</td>\n",
-       "      <td>103.465631</td>\n",
-       "      <td>0.0</td>\n",
-       "      <td>69.106986</td>\n",
-       "      <td>0.0</td>\n",
-       "      <td>160.026714</td>\n",
-       "      <td>0.0</td>\n",
-       "      <td>130.719103</td>\n",
-       "      <td>0.0</td>\n",
-       "      <td>7.532990e+06</td>\n",
-       "      <td>0.0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>2015-02-01 22:00:00</th>\n",
-       "      <td>2.500000</td>\n",
-       "      <td>0.004334</td>\n",
-       "      <td>97.000000</td>\n",
-       "      <td>102541.666667</td>\n",
-       "      <td>1.666667</td>\n",
-       "      <td>270.000000</td>\n",
-       "      <td>0.0</td>\n",
-       "      <td>0.0</td>\n",
-       "      <td>13.0</td>\n",
-       "      <td>400498.56</td>\n",
-       "      <td>...</td>\n",
-       "      <td>116.420356</td>\n",
-       "      <td>0.0</td>\n",
-       "      <td>81.927673</td>\n",
-       "      <td>0.0</td>\n",
-       "      <td>176.316772</td>\n",
-       "      <td>0.0</td>\n",
-       "      <td>146.761146</td>\n",
-       "      <td>0.0</td>\n",
-       "      <td>8.304144e+06</td>\n",
-       "      <td>0.0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>2015-02-01 23:00:00</th>\n",
-       "      <td>2.500000</td>\n",
-       "      <td>0.004334</td>\n",
-       "      <td>97.000000</td>\n",
-       "      <td>102558.333333</td>\n",
-       "      <td>2.000000</td>\n",
-       "      <td>269.416667</td>\n",
-       "      <td>0.0</td>\n",
-       "      <td>0.0</td>\n",
-       "      <td>13.0</td>\n",
-       "      <td>363242.88</td>\n",
-       "      <td>...</td>\n",
-       "      <td>129.166772</td>\n",
-       "      <td>0.0</td>\n",
-       "      <td>94.683359</td>\n",
-       "      <td>0.0</td>\n",
-       "      <td>192.946373</td>\n",
-       "      <td>0.0</td>\n",
-       "      <td>162.855747</td>\n",
-       "      <td>0.0</td>\n",
-       "      <td>9.075538e+06</td>\n",
-       "      <td>0.0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>2015-02-02 00:00:00</th>\n",
-       "      <td>2.500000</td>\n",
-       "      <td>0.004319</td>\n",
-       "      <td>96.708333</td>\n",
-       "      <td>102600.000000</td>\n",
-       "      <td>2.466667</td>\n",
-       "      <td>280.666667</td>\n",
-       "      <td>0.0</td>\n",
-       "      <td>0.0</td>\n",
-       "      <td>13.0</td>\n",
-       "      <td>363242.88</td>\n",
-       "      <td>...</td>\n",
-       "      <td>129.574921</td>\n",
-       "      <td>0.0</td>\n",
-       "      <td>95.102356</td>\n",
-       "      <td>0.0</td>\n",
-       "      <td>194.751860</td>\n",
-       "      <td>0.0</td>\n",
-       "      <td>163.970964</td>\n",
-       "      <td>0.0</td>\n",
-       "      <td>9.126048e+06</td>\n",
-       "      <td>0.0</td>\n",
-       "    </tr>\n",
-       "  </tbody>\n",
-       "</table>\n",
-       "<p>768 rows × 198 columns</p>\n",
-       "</div>"
-      ],
-      "text/plain": [
-       "Variables           Environment:Site Outdoor Air Drybulb Temperature [C](Hourly)  \\\n",
-       "Tags                                                                         raw   \n",
-       "Date/Time                                                                          \n",
-       "2015-01-01 01:00:00                                           0.366667             \n",
-       "2015-01-01 02:00:00                                           0.466667             \n",
-       "2015-01-01 03:00:00                                           0.358333             \n",
-       "2015-01-01 04:00:00                                           0.400000             \n",
-       "2015-01-01 05:00:00                                           0.458333             \n",
-       "...                                                                ...             \n",
-       "2015-02-01 20:00:00                                           2.458333             \n",
-       "2015-02-01 21:00:00                                           2.500000             \n",
-       "2015-02-01 22:00:00                                           2.500000             \n",
-       "2015-02-01 23:00:00                                           2.500000             \n",
-       "2015-02-02 00:00:00                                           2.500000             \n",
-       "\n",
-       "Variables           Environment:Site Outdoor Air Humidity Ratio [kgWater/kgDryAir](Hourly)  \\\n",
-       "Tags                                                                                   raw   \n",
-       "Date/Time                                                                                    \n",
-       "2015-01-01 01:00:00                                           0.003707                       \n",
-       "2015-01-01 02:00:00                                           0.003769                       \n",
-       "2015-01-01 03:00:00                                           0.003764                       \n",
-       "2015-01-01 04:00:00                                           0.003778                       \n",
-       "2015-01-01 05:00:00                                           0.003784                       \n",
-       "...                                                                ...                       \n",
-       "2015-02-01 20:00:00                                           0.004319                       \n",
-       "2015-02-01 21:00:00                                           0.004332                       \n",
-       "2015-02-01 22:00:00                                           0.004334                       \n",
-       "2015-02-01 23:00:00                                           0.004334                       \n",
-       "2015-02-02 00:00:00                                           0.004319                       \n",
-       "\n",
-       "Variables           Environment:Site Outdoor Air Relative Humidity [%](Hourly)  \\\n",
-       "Tags                                                                       raw   \n",
-       "Date/Time                                                                        \n",
-       "2015-01-01 01:00:00                                          96.500000           \n",
-       "2015-01-01 02:00:00                                          97.375000           \n",
-       "2015-01-01 03:00:00                                          98.000000           \n",
-       "2015-01-01 04:00:00                                          98.000000           \n",
-       "2015-01-01 05:00:00                                          97.708333           \n",
-       "...                                                                ...           \n",
-       "2015-02-01 20:00:00                                          97.000000           \n",
-       "2015-02-01 21:00:00                                          97.000000           \n",
-       "2015-02-01 22:00:00                                          97.000000           \n",
-       "2015-02-01 23:00:00                                          97.000000           \n",
-       "2015-02-02 00:00:00                                          96.708333           \n",
-       "\n",
-       "Variables           Environment:Site Outdoor Air Barometric Pressure [Pa](Hourly)  \\\n",
-       "Tags                                                                          raw   \n",
-       "Date/Time                                                                           \n",
-       "2015-01-01 01:00:00                                      102241.666667              \n",
-       "2015-01-01 02:00:00                                      102200.000000              \n",
-       "2015-01-01 03:00:00                                      102200.000000              \n",
-       "2015-01-01 04:00:00                                      102141.666667              \n",
-       "2015-01-01 05:00:00                                      102100.000000              \n",
-       "...                                                                ...              \n",
-       "2015-02-01 20:00:00                                      102600.000000              \n",
-       "2015-02-01 21:00:00                                      102600.000000              \n",
-       "2015-02-01 22:00:00                                      102541.666667              \n",
-       "2015-02-01 23:00:00                                      102558.333333              \n",
-       "2015-02-02 00:00:00                                      102600.000000              \n",
-       "\n",
-       "Variables           Environment:Site Wind Speed [m/s](Hourly)  \\\n",
-       "Tags                                                      raw   \n",
-       "Date/Time                                                       \n",
-       "2015-01-01 01:00:00                                  2.908333   \n",
-       "2015-01-01 02:00:00                                  3.083333   \n",
-       "2015-01-01 03:00:00                                  2.941667   \n",
-       "2015-01-01 04:00:00                                  2.783333   \n",
-       "2015-01-01 05:00:00                                  2.758333   \n",
-       "...                                                       ...   \n",
-       "2015-02-01 20:00:00                                  2.308333   \n",
-       "2015-02-01 21:00:00                                  1.783333   \n",
-       "2015-02-01 22:00:00                                  1.666667   \n",
-       "2015-02-01 23:00:00                                  2.000000   \n",
-       "2015-02-02 00:00:00                                  2.466667   \n",
-       "\n",
-       "Variables           Environment:Site Wind Direction [deg](Hourly)  \\\n",
-       "Tags                                                          raw   \n",
-       "Date/Time                                                           \n",
-       "2015-01-01 01:00:00                                    200.166667   \n",
-       "2015-01-01 02:00:00                                    272.416667   \n",
-       "2015-01-01 03:00:00                                    279.333333   \n",
-       "2015-01-01 04:00:00                                    283.916667   \n",
-       "2015-01-01 05:00:00                                    289.500000   \n",
-       "...                                                           ...   \n",
-       "2015-02-01 20:00:00                                    255.416667   \n",
-       "2015-02-01 21:00:00                                    265.833333   \n",
-       "2015-02-01 22:00:00                                    270.000000   \n",
-       "2015-02-01 23:00:00                                    269.416667   \n",
-       "2015-02-02 00:00:00                                    280.666667   \n",
-       "\n",
-       "Variables           Environment:Site Diffuse Solar Radiation Rate per Area [W/m2](Hourly)  \\\n",
-       "Tags                                                                                  raw   \n",
-       "Date/Time                                                                                   \n",
-       "2015-01-01 01:00:00                                                0.0                      \n",
-       "2015-01-01 02:00:00                                                0.0                      \n",
-       "2015-01-01 03:00:00                                                0.0                      \n",
-       "2015-01-01 04:00:00                                                0.0                      \n",
-       "2015-01-01 05:00:00                                                0.0                      \n",
-       "...                                                                ...                      \n",
-       "2015-02-01 20:00:00                                                0.0                      \n",
-       "2015-02-01 21:00:00                                                0.0                      \n",
-       "2015-02-01 22:00:00                                                0.0                      \n",
-       "2015-02-01 23:00:00                                                0.0                      \n",
-       "2015-02-02 00:00:00                                                0.0                      \n",
-       "\n",
-       "Variables           Environment:Site Direct Solar Radiation Rate per Area [W/m2](Hourly)  \\\n",
-       "Tags                                                                                 raw   \n",
-       "Date/Time                                                                                  \n",
-       "2015-01-01 01:00:00                                                0.0                     \n",
-       "2015-01-01 02:00:00                                                0.0                     \n",
-       "2015-01-01 03:00:00                                                0.0                     \n",
-       "2015-01-01 04:00:00                                                0.0                     \n",
-       "2015-01-01 05:00:00                                                0.0                     \n",
-       "...                                                                ...                     \n",
-       "2015-02-01 20:00:00                                                0.0                     \n",
-       "2015-02-01 21:00:00                                                0.0                     \n",
-       "2015-02-01 22:00:00                                                0.0                     \n",
-       "2015-02-01 23:00:00                                                0.0                     \n",
-       "2015-02-02 00:00:00                                                0.0                     \n",
-       "\n",
-       "Variables           Environment:Site Ground Temperature [C](Hourly)  \\\n",
-       "Tags                                                            raw   \n",
-       "Date/Time                                                             \n",
-       "2015-01-01 01:00:00                                            13.0   \n",
-       "2015-01-01 02:00:00                                            13.0   \n",
-       "2015-01-01 03:00:00                                            13.0   \n",
-       "2015-01-01 04:00:00                                            13.0   \n",
-       "2015-01-01 05:00:00                                            13.0   \n",
-       "...                                                             ...   \n",
-       "2015-02-01 20:00:00                                            13.0   \n",
-       "2015-02-01 21:00:00                                            13.0   \n",
-       "2015-02-01 22:00:00                                            13.0   \n",
-       "2015-02-01 23:00:00                                            13.0   \n",
-       "2015-02-02 00:00:00                                            13.0   \n",
-       "\n",
-       "Variables           8VVLYRMVH0C1HUD3CNVPWG:Zone Total Internal Total Heating Energy [J](Hourly)  \\\n",
-       "Tags                                                                                        raw   \n",
-       "Date/Time                                                                                         \n",
-       "2015-01-01 01:00:00                                          363242.88                            \n",
-       "2015-01-01 02:00:00                                          363242.88                            \n",
-       "2015-01-01 03:00:00                                          363242.88                            \n",
-       "2015-01-01 04:00:00                                          363242.88                            \n",
-       "2015-01-01 05:00:00                                          363242.88                            \n",
-       "...                                                                ...                            \n",
-       "2015-02-01 20:00:00                                          475009.92                            \n",
-       "2015-02-01 21:00:00                                          437754.24                            \n",
-       "2015-02-01 22:00:00                                          400498.56                            \n",
-       "2015-02-01 23:00:00                                          363242.88                            \n",
-       "2015-02-02 00:00:00                                          363242.88                            \n",
-       "\n",
-       "Variables            ...  \\\n",
-       "Tags                 ...   \n",
-       "Date/Time            ...   \n",
-       "2015-01-01 01:00:00  ...   \n",
-       "2015-01-01 02:00:00  ...   \n",
-       "2015-01-01 03:00:00  ...   \n",
-       "2015-01-01 04:00:00  ...   \n",
-       "2015-01-01 05:00:00  ...   \n",
-       "...                  ...   \n",
-       "2015-02-01 20:00:00  ...   \n",
-       "2015-02-01 21:00:00  ...   \n",
-       "2015-02-01 22:00:00  ...   \n",
-       "2015-02-01 23:00:00  ...   \n",
-       "2015-02-02 00:00:00  ...   \n",
-       "\n",
-       "Variables           VXCVWQDXJ0CRSBXJGBDN2A IDEAL LOADS AIR SYSTEM:Zone Ideal Loads Zone Sensible Heating Rate [W](Hourly)  \\\n",
-       "Tags                                                                                                                  raw   \n",
-       "Date/Time                                                                                                                   \n",
-       "2015-01-01 01:00:00                                         144.381566                                                      \n",
-       "2015-01-01 02:00:00                                         144.805737                                                      \n",
-       "2015-01-01 03:00:00                                         146.454909                                                      \n",
-       "2015-01-01 04:00:00                                         147.056525                                                      \n",
-       "2015-01-01 05:00:00                                         147.473698                                                      \n",
-       "...                                                                ...                                                      \n",
-       "2015-02-01 20:00:00                                          90.328328                                                      \n",
-       "2015-02-01 21:00:00                                         103.465631                                                      \n",
-       "2015-02-01 22:00:00                                         116.420356                                                      \n",
-       "2015-02-01 23:00:00                                         129.166772                                                      \n",
-       "2015-02-02 00:00:00                                         129.574921                                                      \n",
-       "\n",
-       "Variables           VXCVWQDXJ0CRSBXJGBDN2A IDEAL LOADS AIR SYSTEM:Zone Ideal Loads Zone Sensible Cooling Rate [W](Hourly)  \\\n",
-       "Tags                                                                                                                  raw   \n",
-       "Date/Time                                                                                                                   \n",
-       "2015-01-01 01:00:00                                                0.0                                                      \n",
-       "2015-01-01 02:00:00                                                0.0                                                      \n",
-       "2015-01-01 03:00:00                                                0.0                                                      \n",
-       "2015-01-01 04:00:00                                                0.0                                                      \n",
-       "2015-01-01 05:00:00                                                0.0                                                      \n",
-       "...                                                                ...                                                      \n",
-       "2015-02-01 20:00:00                                                0.0                                                      \n",
-       "2015-02-01 21:00:00                                                0.0                                                      \n",
-       "2015-02-01 22:00:00                                                0.0                                                      \n",
-       "2015-02-01 23:00:00                                                0.0                                                      \n",
-       "2015-02-02 00:00:00                                                0.0                                                      \n",
-       "\n",
-       "Variables           AMIO3KHG402UMEU7FS9XAA IDEAL LOADS AIR SYSTEM:Zone Ideal Loads Zone Sensible Heating Rate [W](Hourly)  \\\n",
-       "Tags                                                                                                                  raw   \n",
-       "Date/Time                                                                                                                   \n",
-       "2015-01-01 01:00:00                                         106.560861                                                      \n",
-       "2015-01-01 02:00:00                                         106.780580                                                      \n",
-       "2015-01-01 03:00:00                                         108.304676                                                      \n",
-       "2015-01-01 04:00:00                                         108.773500                                                      \n",
-       "2015-01-01 05:00:00                                         109.115286                                                      \n",
-       "...                                                                ...                                                      \n",
-       "2015-02-01 20:00:00                                          56.195287                                                      \n",
-       "2015-02-01 21:00:00                                          69.106986                                                      \n",
-       "2015-02-01 22:00:00                                          81.927673                                                      \n",
-       "2015-02-01 23:00:00                                          94.683359                                                      \n",
-       "2015-02-02 00:00:00                                          95.102356                                                      \n",
-       "\n",
-       "Variables           AMIO3KHG402UMEU7FS9XAA IDEAL LOADS AIR SYSTEM:Zone Ideal Loads Zone Sensible Cooling Rate [W](Hourly)  \\\n",
-       "Tags                                                                                                                  raw   \n",
-       "Date/Time                                                                                                                   \n",
-       "2015-01-01 01:00:00                                                0.0                                                      \n",
-       "2015-01-01 02:00:00                                                0.0                                                      \n",
-       "2015-01-01 03:00:00                                                0.0                                                      \n",
-       "2015-01-01 04:00:00                                                0.0                                                      \n",
-       "2015-01-01 05:00:00                                                0.0                                                      \n",
-       "...                                                                ...                                                      \n",
-       "2015-02-01 20:00:00                                                0.0                                                      \n",
-       "2015-02-01 21:00:00                                                0.0                                                      \n",
-       "2015-02-01 22:00:00                                                0.0                                                      \n",
-       "2015-02-01 23:00:00                                                0.0                                                      \n",
-       "2015-02-02 00:00:00                                                0.0                                                      \n",
-       "\n",
-       "Variables           EWAWLYZUK0GDV9RQVVRDSW IDEAL LOADS AIR SYSTEM:Zone Ideal Loads Zone Sensible Heating Rate [W](Hourly)  \\\n",
-       "Tags                                                                                                                  raw   \n",
-       "Date/Time                                                                                                                   \n",
-       "2015-01-01 01:00:00                                         245.710967                                                      \n",
-       "2015-01-01 02:00:00                                         246.418155                                                      \n",
-       "2015-01-01 03:00:00                                         248.825114                                                      \n",
-       "2015-01-01 04:00:00                                         249.641430                                                      \n",
-       "2015-01-01 05:00:00                                         250.078532                                                      \n",
-       "...                                                                ...                                                      \n",
-       "2015-02-01 20:00:00                                         143.578751                                                      \n",
-       "2015-02-01 21:00:00                                         160.026714                                                      \n",
-       "2015-02-01 22:00:00                                         176.316772                                                      \n",
-       "2015-02-01 23:00:00                                         192.946373                                                      \n",
-       "2015-02-02 00:00:00                                         194.751860                                                      \n",
-       "\n",
-       "Variables           EWAWLYZUK0GDV9RQVVRDSW IDEAL LOADS AIR SYSTEM:Zone Ideal Loads Zone Sensible Cooling Rate [W](Hourly)  \\\n",
-       "Tags                                                                                                                  raw   \n",
-       "Date/Time                                                                                                                   \n",
-       "2015-01-01 01:00:00                                                0.0                                                      \n",
-       "2015-01-01 02:00:00                                                0.0                                                      \n",
-       "2015-01-01 03:00:00                                                0.0                                                      \n",
-       "2015-01-01 04:00:00                                                0.0                                                      \n",
-       "2015-01-01 05:00:00                                                0.0                                                      \n",
-       "...                                                                ...                                                      \n",
-       "2015-02-01 20:00:00                                                0.0                                                      \n",
-       "2015-02-01 21:00:00                                                0.0                                                      \n",
-       "2015-02-01 22:00:00                                                0.0                                                      \n",
-       "2015-02-01 23:00:00                                                0.0                                                      \n",
-       "2015-02-02 00:00:00                                                0.0                                                      \n",
-       "\n",
-       "Variables           UFB0FBIBNUCA0AXLT56UFA IDEAL LOADS AIR SYSTEM:Zone Ideal Loads Zone Sensible Heating Rate [W](Hourly)  \\\n",
-       "Tags                                                                                                                  raw   \n",
-       "Date/Time                                                                                                                   \n",
-       "2015-01-01 01:00:00                                         203.834547                                                      \n",
-       "2015-01-01 02:00:00                                         204.357600                                                      \n",
-       "2015-01-01 03:00:00                                         206.511613                                                      \n",
-       "2015-01-01 04:00:00                                         207.297145                                                      \n",
-       "2015-01-01 05:00:00                                         207.854896                                                      \n",
-       "...                                                                ...                                                      \n",
-       "2015-02-01 20:00:00                                         114.540692                                                      \n",
-       "2015-02-01 21:00:00                                         130.719103                                                      \n",
-       "2015-02-01 22:00:00                                         146.761146                                                      \n",
-       "2015-02-01 23:00:00                                         162.855747                                                      \n",
-       "2015-02-02 00:00:00                                         163.970964                                                      \n",
-       "\n",
-       "Variables           UFB0FBIBNUCA0AXLT56UFA IDEAL LOADS AIR SYSTEM:Zone Ideal Loads Zone Sensible Cooling Rate [W](Hourly)  \\\n",
-       "Tags                                                                                                                  raw   \n",
-       "Date/Time                                                                                                                   \n",
-       "2015-01-01 01:00:00                                                0.0                                                      \n",
-       "2015-01-01 02:00:00                                                0.0                                                      \n",
-       "2015-01-01 03:00:00                                                0.0                                                      \n",
-       "2015-01-01 04:00:00                                                0.0                                                      \n",
-       "2015-01-01 05:00:00                                                0.0                                                      \n",
-       "...                                                                ...                                                      \n",
-       "2015-02-01 20:00:00                                                0.0                                                      \n",
-       "2015-02-01 21:00:00                                                0.0                                                      \n",
-       "2015-02-01 22:00:00                                                0.0                                                      \n",
-       "2015-02-01 23:00:00                                                0.0                                                      \n",
-       "2015-02-02 00:00:00                                                0.0                                                      \n",
-       "\n",
-       "Variables           Heating:EnergyTransfer [J](Hourly)  \\\n",
-       "Tags                                               raw   \n",
-       "Date/Time                                                \n",
-       "2015-01-01 01:00:00                       1.057110e+07   \n",
-       "2015-01-01 02:00:00                       1.080233e+07   \n",
-       "2015-01-01 03:00:00                       1.091081e+07   \n",
-       "2015-01-01 04:00:00                       1.094939e+07   \n",
-       "2015-01-01 05:00:00                       1.097407e+07   \n",
-       "...                                                ...   \n",
-       "2015-02-01 20:00:00                       6.750108e+06   \n",
-       "2015-02-01 21:00:00                       7.532990e+06   \n",
-       "2015-02-01 22:00:00                       8.304144e+06   \n",
-       "2015-02-01 23:00:00                       9.075538e+06   \n",
-       "2015-02-02 00:00:00                       9.126048e+06   \n",
-       "\n",
-       "Variables           Cooling:EnergyTransfer [J](Hourly)   \n",
-       "Tags                                                raw  \n",
-       "Date/Time                                                \n",
-       "2015-01-01 01:00:00                                 0.0  \n",
-       "2015-01-01 02:00:00                                 0.0  \n",
-       "2015-01-01 03:00:00                                 0.0  \n",
-       "2015-01-01 04:00:00                                 0.0  \n",
-       "2015-01-01 05:00:00                                 0.0  \n",
-       "...                                                 ...  \n",
-       "2015-02-01 20:00:00                                 0.0  \n",
-       "2015-02-01 21:00:00                                 0.0  \n",
-       "2015-02-01 22:00:00                                 0.0  \n",
-       "2015-02-01 23:00:00                                 0.0  \n",
-       "2015-02-02 00:00:00                                 0.0  \n",
-       "\n",
-       "[768 rows x 198 columns]"
-      ]
-     },
-     "execution_count": 22,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "df"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 23,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "[<matplotlib.lines.Line2D at 0x1e4adee3160>]"
-      ]
-     },
-     "execution_count": 23,
-     "metadata": {},
-     "output_type": "execute_result"
-    },
-    {
-     "data": {
-      "image/png": "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OeYYrFq1yuFtAMJxfgCQSCTQ0tKCd7/73di1a5fnfjNnzsSUKVNw9NFHQ9d1dHZ24vzzz8d3v/tdaJoWynPkv8Mg3HXXXRgcHMTzzz+Pz33uc2hqanJsE4bzA6zvMOg8c++992JwcBDnn38+fvazn0m3CcM5un2Huq7jAx/4AFauXImTTz65qGOE4fwA+XfIvLRXX3217fzq6upwyCGHmJqRY445Bm+99RZWr16NSMT5DF7Kc3zwwQcxOjqKO++8U+kc7777btxwww0AgHnz5pneZcZLL71kfodnnXWW+frBBx+MSCSC22+/HWeeeSZmzpyJd7/73fjtb3+LvffeG5qmFfVdMO3gwoULceWVV5qvH3DAAXjnnXcAAMcffzz+7//+L9D7jpeKGifLly/HX/7yFzz22GOYPXu2+fqMGTOQTqfR19dne6rp6ekZn6AGwOLFi/Hggw8CAI444gisXbvW/BtTrEejUYeKOuixb7nlFvzXf/0X/vGPf+Duu+/G7NmzMWPGDDz11FO282OurxkzZkza85s1axaef/750J3f6OgorrrqKqxatQoPP/wwbrvtNrzyyivm+aTTaaxbt878HQB27NiBL3/5y1i+fDl6enrQ1dWFm266CYlEwtM9Wq1zFL9DxowZM5DL5ZDL5VyPMWfOHADAwoULcffdd+OPf/wjcrmcw9tSzfMTv0P+HJuamqDruuc8c8stt+D00093PB36EYbvcGxsDJlMBueddx4uv/zyoo8hIwzf4SuvvILrrrsOQGEt8TvOUUcdhd/+9reYOnVq2c5x+fLlWLduHY4//njH/cSHWvhxXnDBBTj33HMBwOFdeeWVV/Ce97wHn/3sZ23fIVAI4dx666045JBD8O1vfxsbN27ET37yE9x333149tlnEYlEAn8Xg4ODOOWUU9Dc3Ix7773XNp7777/fPIf6+nrzvGTvy/5WSioS1tF1HcuXL8e9996Lhx56CHvssYft74cffjji8ThWrVplvsbSOJcsWTKuY69du9Z0P9fX12Pvvfc2/7HsksMPP9x27Hw+j1WrVikfW9d1XHvttXjooYfw2GOP4bjjjgMALFmyBC+++CLmzp1rnt+DDz5oxvUm6/m5uTyrdX5AwQNy/fXX46GHHsKjjz6KPfbYwzy/7du3m9foz372M7S0tGDhwoW2azQej2P27NmIRqO48847sWDBAuVjV/M7ZBx++OGIRCIYHBw0X/O6B3Vdh67ryOfzoTg/QP4d8nR1dUHTNNd5Zv369Xj44Yd9MxaqdY5e3+HLL7+Mr371q4hEIjjmmGOk5zceqv0dvvzyyzjppJNw3nnnKa8Va9eutWmoSnmO/JrW3Nxs03cAhftJfDhh4zzllFPM9+V1TWNjYzjppJNw/vnn49vf/rbrOF988UXMmjUL0WgU99xzD97//vdjwYIFgb8LlnmTSCRw3333oa6uznacefPmmeOcNWsWgMKc/9hjj9kMrwcffBD77rsv2tvbVT9qNYqS0QbkC1/4gt7a2qo/8sgjend3t/lvZGTE3Obzn/+8PnfuXP2hhx7Sn3nmGX3JkiX6kiVLbO+zbt06/bnnntM/97nP6QsWLNCfe+45/bnnnjOVw7fffrv+m9/8Rn/11Vf1V199Vf/2t7+tRyIR/dZbb/Uc35133qknk0n99ttv11955RX9s5/9rN7W1qZv27bN3Ka7u1t/7rnn9JtvvlkHoD/22GP6c889p+/atcv1/AYHB/UDDzxQP/nkk/WzzjpLnz59ut7a2qp/8pOftJ0fO48DDjhAP/XUU/UPf/jD+vz58yfE+f3oRz/S//jHP+rr1q3T//rXv+rnnHOODkCfPXt2aM5P1+XX6ObNm/WFCxfqJ598sr527Vr9tNNO0yORiH7OOeeY1+ihhx6q/+///q/+xhtv6E8++aT+vve9T29padHPOeecmrhGR0ZGzPtq4cKFeiwW02+66Sb917/+tX700UfrS5Ys0X/1q1/pd911l/7KK6/oq1at0r/zne/oDQ0NenNzc2jOz+077O7u1l988UVz3mhtbdVnzJih33TTTfrq1att9+Hll1+uz5w5U3/ttddqap55+umn9WnTpunnnnuuft555+mzZs3Sf//73+sPPvhgTc0zbt/hww8/rE+dOlU/99xz9e7ubvMc77nnHvM+nD9/vjnPvPjii/r555+va5qmn3766WX5Dt/97nfrzc3N+umnn663tLToL7zwgnk/sXM84YQTdAD69ddfr//617/WjzzySNc17ayzztKj0aj+vve9T3/wwQf1d955R+/u7tb/+7//2xzn/fffr5911ll6JBLRL7/8cv3ss8/WOzo69PXr1wf+Lvr7+/XFixfrBx10kP7mm2/arqdsNut6/n19fXpnZ6f+iU98Qn/ppZf0O++8U29oaNB//vOfm9ukUinz8+7q6tIvvfRS/bnnntPXrVvn+dmKVMQ4gZHmJf677bbbzG1GR0f1iy66SG9vb9cbGhr0D37wg3p3d7ftfdiXLf5jX87tt9+u77///npDQ4Pe0tKiH3XUUba0QS/+53/+R587d66eSCT0o446Sv/3v/9t+/vKlStdz8Hr/DZs2KCfeuqpel1dnflPPD+3/SfC+X3nO9/R99prL72urs5MrQvb+Xl9B9/73vf0U089Va+vr9enTJmiL1q0yHaNPvroo/ohhxyi19fX6y0tLfqUKVNCeY5e36HbfbVs2TK9u7tbv/POO/XDDjtMb2pq0iORSCjPz+s73HfffaWv19fXm9dpLpfTZ8+erX/ta1+ruXnmAx/4gPR1TdNqap5RGSP/LxKJmPfh5Zdfbs4zHR0demtra1nP0et+cjvHww47THlNY/+mTJlijrOpqUlvaGjQE4mE3tLSon/gAx/QX3vttaK+C5bK7fUZufH888/rxx13nJ5MJvVZs2bp1113ne3vLE1b/HfCCScofb4MTdc98h0JgiAIgiAqDPXWIQiCIAgiVJBxQhAEQRBEqCDjhCAIgiCIUEHGCUEQBEEQoYKME4IgCIIgQgUZJwRBEARBhAoyTgiCIAiCCBVknBAEQRAEESrIOCEIgiAIIlSQcUIQBEEQRKgg44QgCIIgiFBBxglBEARBEKHi/wePuYNxnr8R7QAAAABJRU5ErkJggg==",
-      "text/plain": [
-       "<Figure size 640x480 with 1 Axes>"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    }
-   ],
-   "source": [
-    "import matplotlib.pyplot as plt\n",
-    "\n",
-    "plt.plot(df['Heating:EnergyTransfer [J](Hourly)'])"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 24,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "tsd = df[['Heating:EnergyTransfer [J](Hourly)']]\n",
-    "df = tsd.to_df()"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 25,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "df.rename(columns={'Heating:EnergyTransfer [J](Hourly)': 'heating_measurement'}, inplace=True)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 26,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "df['heating_measurement'] -= 0.2e07"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 27,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/html": [
-       "<div>\n",
-       "<style scoped>\n",
-       "    .dataframe tbody tr th:only-of-type {\n",
-       "        vertical-align: middle;\n",
-       "    }\n",
-       "\n",
-       "    .dataframe tbody tr th {\n",
-       "        vertical-align: top;\n",
-       "    }\n",
-       "\n",
-       "    .dataframe thead th {\n",
-       "        text-align: right;\n",
-       "    }\n",
-       "</style>\n",
-       "<table border=\"1\" class=\"dataframe\">\n",
-       "  <thead>\n",
-       "    <tr style=\"text-align: right;\">\n",
-       "      <th>Variables</th>\n",
-       "      <th>heating_measurement</th>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>Date/Time</th>\n",
-       "      <th></th>\n",
-       "    </tr>\n",
-       "  </thead>\n",
-       "  <tbody>\n",
-       "    <tr>\n",
-       "      <th>2015-01-01 01:00:00</th>\n",
-       "      <td>8.571095e+06</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>2015-01-01 02:00:00</th>\n",
-       "      <td>8.802334e+06</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>2015-01-01 03:00:00</th>\n",
-       "      <td>8.910805e+06</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>2015-01-01 04:00:00</th>\n",
-       "      <td>8.949388e+06</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>2015-01-01 05:00:00</th>\n",
-       "      <td>8.974069e+06</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>...</th>\n",
-       "      <td>...</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>2015-02-01 20:00:00</th>\n",
-       "      <td>4.750108e+06</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>2015-02-01 21:00:00</th>\n",
-       "      <td>5.532990e+06</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>2015-02-01 22:00:00</th>\n",
-       "      <td>6.304144e+06</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>2015-02-01 23:00:00</th>\n",
-       "      <td>7.075538e+06</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>2015-02-02 00:00:00</th>\n",
-       "      <td>7.126048e+06</td>\n",
-       "    </tr>\n",
-       "  </tbody>\n",
-       "</table>\n",
-       "<p>768 rows × 1 columns</p>\n",
-       "</div>"
-      ],
-      "text/plain": [
-       "Variables            heating_measurement\n",
-       "Date/Time                               \n",
-       "2015-01-01 01:00:00         8.571095e+06\n",
-       "2015-01-01 02:00:00         8.802334e+06\n",
-       "2015-01-01 03:00:00         8.910805e+06\n",
-       "2015-01-01 04:00:00         8.949388e+06\n",
-       "2015-01-01 05:00:00         8.974069e+06\n",
-       "...                                  ...\n",
-       "2015-02-01 20:00:00         4.750108e+06\n",
-       "2015-02-01 21:00:00         5.532990e+06\n",
-       "2015-02-01 22:00:00         6.304144e+06\n",
-       "2015-02-01 23:00:00         7.075538e+06\n",
-       "2015-02-02 00:00:00         7.126048e+06\n",
-       "\n",
-       "[768 rows x 1 columns]"
-      ]
-     },
-     "execution_count": 27,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "df"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 17,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "# make the datetime index all one hour earlier\n",
-    "df.index = df.index - pd.DateOffset(hours=1)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 28,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/html": [
-       "<div>\n",
-       "<style scoped>\n",
-       "    .dataframe tbody tr th:only-of-type {\n",
-       "        vertical-align: middle;\n",
-       "    }\n",
-       "\n",
-       "    .dataframe tbody tr th {\n",
-       "        vertical-align: top;\n",
-       "    }\n",
-       "\n",
-       "    .dataframe thead th {\n",
-       "        text-align: right;\n",
-       "    }\n",
-       "</style>\n",
-       "<table border=\"1\" class=\"dataframe\">\n",
-       "  <thead>\n",
-       "    <tr style=\"text-align: right;\">\n",
-       "      <th>Variables</th>\n",
-       "      <th>heating_measurement</th>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>Date/Time</th>\n",
-       "      <th></th>\n",
-       "    </tr>\n",
-       "  </thead>\n",
-       "  <tbody>\n",
-       "    <tr>\n",
-       "      <th>2015-01-01 01:00:00</th>\n",
-       "      <td>8.571095e+06</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>2015-01-01 02:00:00</th>\n",
-       "      <td>8.802334e+06</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>2015-01-01 03:00:00</th>\n",
-       "      <td>8.910805e+06</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>2015-01-01 04:00:00</th>\n",
-       "      <td>8.949388e+06</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>2015-01-01 05:00:00</th>\n",
-       "      <td>8.974069e+06</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>...</th>\n",
-       "      <td>...</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>2015-02-01 20:00:00</th>\n",
-       "      <td>4.750108e+06</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>2015-02-01 21:00:00</th>\n",
-       "      <td>5.532990e+06</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>2015-02-01 22:00:00</th>\n",
-       "      <td>6.304144e+06</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>2015-02-01 23:00:00</th>\n",
-       "      <td>7.075538e+06</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>2015-02-02 00:00:00</th>\n",
-       "      <td>7.126048e+06</td>\n",
-       "    </tr>\n",
-       "  </tbody>\n",
-       "</table>\n",
-       "<p>768 rows × 1 columns</p>\n",
-       "</div>"
-      ],
-      "text/plain": [
-       "Variables            heating_measurement\n",
-       "Date/Time                               \n",
-       "2015-01-01 01:00:00         8.571095e+06\n",
-       "2015-01-01 02:00:00         8.802334e+06\n",
-       "2015-01-01 03:00:00         8.910805e+06\n",
-       "2015-01-01 04:00:00         8.949388e+06\n",
-       "2015-01-01 05:00:00         8.974069e+06\n",
-       "...                                  ...\n",
-       "2015-02-01 20:00:00         4.750108e+06\n",
-       "2015-02-01 21:00:00         5.532990e+06\n",
-       "2015-02-01 22:00:00         6.304144e+06\n",
-       "2015-02-01 23:00:00         7.075538e+06\n",
-       "2015-02-02 00:00:00         7.126048e+06\n",
-       "\n",
-       "[768 rows x 1 columns]"
-      ]
-     },
-     "execution_count": 28,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "df"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 29,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "df.to_csv(Path.cwd() / 'examples' / 'data' / 'measurement_data.csv')"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": []
-  }
- ],
- "metadata": {
-  "kernelspec": {
-   "display_name": "merce_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.10.13"
-  }
- },
- "nbformat": 4,
- "nbformat_minor": 2
-}
-- 
GitLab