docs: def clean_data(self, data, rename_col=None, drop_col=None,
                      resample=True, freq='h', resampler='mean',
                      interpolate=True, limit=1, method='linear',
                      remove_na=True, remove_na_how='any',
                      remove_outliers=True, sd_val=3,
                      remove_out_of_bounds=True, low_bound=0, high_bound=float('inf'),
                      save_file=True):
          """ Cleans dataframe according to user specifications and stores result in self.cleaned_data.
  
          Parameters
          ----------
          data                    : pd.DataFrame()
              Dataframe to be cleaned.
          rename_col              : list(str)
              List of new column names.
          drop_col                : list(str)
              Columns to be dropped.
          resample                : bool
              Indicates whether to resample data or not.
          freq                    : str
              Resampling frequency i.e. d, h, 15T... 
          resampler               : str
              Resampling type i.e. mean, max.
          interpolate             : bool
              Indicates whether to interpolate data or not.
          limit                   : int
              Interpolation limit.
          method                  : str
              Interpolation method.
          remove_na               : bool
              Indicates whether to remove NAs or not.
          remove_na_how           : str
              Specificies how to remove NA i.e. all, any...
          remove_outliers         : bool
              Indicates whether to remove outliers or not.
          sd_val                  : int
              Standard Deviation Value (specifices how many SDs away is a point considered an outlier)
          remove_out_of_bounds    : bool
              Indicates whether to remove out of bounds datapoints or not.
          low_bound               : int
              Low bound of the data.
          high_bound              : int
              High bound of the data.
          save_file       : bool
              Specifies whether to save file or not. Defaults to True.
  
          Returns
          -------
          pd.DataFrame()
              Dataframe containing cleaned data.
  
          """
  
          # Check to ensure data is a pandas dataframe
          if not isinstance(data, pd.DataFrame):
              raise TypeError('data has to be a pandas dataframe.')
          
          # Create instance and clean the data
          clean_data_obj = Clean_Data(data)
          clean_data_obj.clean_data(resample=resample, freq=freq, resampler=resampler,
                                  interpolate=interpolate, limit=limit, method=method,
                                  remove_na=remove_na, remove_na_how=remove_na_how,
                                  remove_outliers=remove_outliers, sd_val=sd_val,
                                  remove_out_of_bounds=remove_out_of_bounds, low_bound=low_bound, high_bound=high_bound)
  
          # Correlation plot
          # fig = self.plot_data_obj.correlation_plot(clean_data_obj.cleaned_data)
          # fig.savefig(self.results_folder_name + '/correlation_plot-' + str(Wrapper.global_count) + '.png')
  
          if rename_col:  # Rename columns of dataframe
              clean_data_obj.rename_columns(rename_col)
          if drop_col:    # Drop columns of dataframe
              clean_data_obj.drop_columns(drop_col)
  
          # Store cleaned data in wrapper class
          self.cleaned_data = clean_data_obj.cleaned_data
  
          # Logging
          self.result['Clean'] = {
              'Rename Col': rename_col,
              'Drop Col': drop_col,
              'Resample': resample,
              'Frequency': freq,
              'Resampler': resampler,
              'Interpolate': interpolate,
              'Limit': limit,
              'Method': method,
              'Remove NA': remove_na,
              'Remove NA How': remove_na_how,
              'Remove Outliers': remove_outliers,
              'SD Val': sd_val,
              'Remove Out of Bounds': remove_out_of_bounds,
              'Low Bound': low_bound,
              'High Bound': str(high_bound) if high_bound == float('inf') else high_bound,
              'Save File': save_file
          }
  
          if save_file:
              f = self.results_folder_name + '/cleaned_data-' + str(self.get_global_count()) + '.csv'
              self.cleaned_data.to_csv(f)
              self.result['Clean']['Saved File'] = f
          else:
              self.result['Clean']['Saved File'] = ''
  
          return self.cleaned_data