docs: def preprocess_data(self, data,
                          hdh_cpoint=65, cdh_cpoint=65, col_hdh_cdh=None,
                          col_degree=None, degree=None,
                          standardize=False, normalize=False,
                          year=False, month=False, week=False, tod=False, dow=False,
                          save_file=True):
          """ Preprocesses dataframe according to user specifications and stores result in self.preprocessed_data.
  
          Parameters
          ----------
          data            : pd.DataFrame()
              Dataframe to be preprocessed.
          hdh_cpoint      : int
              Heating degree hours. Defaults to 65.
          cdh_cpoint      : int
              Cooling degree hours. Defaults to 65.
          col_hdh_cdh     : str
              Column name which contains the outdoor air temperature.
          col_degree      : list(str)
              Column to exponentiate.
          degree          : list(str)
              Exponentiation degree.
          standardize     : bool
              Standardize data.
          normalize       : bool
              Normalize data.
          year            : bool
              Year.
          month           : bool
              Month.
          week            : bool
              Week.
          tod             : bool
              Time of Day.
          dow             : bool
              Day of Week.
          save_file       : bool
              Specifies whether to save file or not. Defaults to True.
  
          Returns
          -------
          pd.DataFrame()
              Dataframe containing preprocessed data.
  
          """
  
          # Check to ensure data is a pandas dataframe
          if not isinstance(data, pd.DataFrame):
              raise SystemError('data has to be a pandas dataframe.')
          
          # Create instance
          preprocess_data_obj = Preprocess_Data(data)
          if col_hdh_cdh:
              preprocess_data_obj.add_degree_days(col=col_hdh_cdh, hdh_cpoint=hdh_cpoint, cdh_cpoint=cdh_cpoint)
          preprocess_data_obj.add_col_features(col=col_degree, degree=degree)
  
          if standardize:
              preprocess_data_obj.standardize()
          if normalize:
              preprocess_data_obj.normalize()
  
          preprocess_data_obj.add_time_features(year=year, month=month, week=week, tod=tod, dow=dow)
          
          # Store preprocessed data in wrapper class
          self.preprocessed_data = preprocess_data_obj.preprocessed_data
  
          # Logging
          self.result['Preprocess'] = {
              'HDH CPoint': hdh_cpoint,
              'CDH CPoint': cdh_cpoint,
              'HDH CDH Calc Col': col_hdh_cdh,
              'Col Degree': col_degree,
              'Degree': degree,
              'Standardize': standardize,
              'Normalize': normalize,
              'Year': year,
              'Month': month,
              'Week': week,
              'Time of Day': tod,
              'Day of Week': dow,
              'Save File': save_file
          }
  
          if save_file:
              f = self.results_folder_name + '/preprocessed_data-' + str(self.get_global_count()) + '.csv'
              self.preprocessed_data.to_csv(f)
              self.result['Preprocess']['Saved File'] = f
          else:
              self.result['Preprocess']['Saved File'] = ''
  
          return self.preprocessed_data