code: def process(self, raw_obs):
      obs = raw_obs.to_dict()
  
      loads = []
      for key in ["q", "v"]:
          loads.append(obs["loads"][key])
      loads = np.concatenate(loads)
  
      prods = []
      for key in ["q", "v"]:
          prods.append(obs["prods"][key])
      prods = np.concatenate(prods)
  
      features = np.concatenate([loads, prods])
      features = np.array(
          [
              features[i]
              for i in range(len(features))
              if i not in self.zero_std
          ]
      )
      norm_features = (features - self.mean) / self.std
  
      rho = obs["rho"]
      time_info = np.array([raw_obs.month - 1, raw_obs.hour_of_day])
  
      return np.concatenate([norm_features, rho, time_info]).tolist()
  
file_path: PARL/benchmark/torch/NeurIPS2020-Learning-to-Run-a-Power-Network-Challenge/track1/utils.py
imports: import numpy
label_desc: Use image node_id 2 for calling the UnitaryFeatureProcessor obj's underlying member method code with example usage: obj.process(raw_obs) and returns: np