def process_reanalysis_data(self): """ Process reanalysis data for use in PRUF plant analysis - calculate density-corrected wind speed - get monthly average wind speeds - append monthly averages to monthly energy data frame Args: (None) Returns: (None) """ # Define empty data frame that spans past our period of interest self._reanalysis_monthly = pd.DataFrame(index=pd.date_range(start='1997-01-01', end='2020-01-01', freq='MS')) # Now loop through the different reanalysis products, density-correct wind speeds, and take monthly averages for key, items in self._plant._reanalysis._product.items(): rean_df = self._plant._reanalysis._product[key].df rean_df['ws_dens_corr'] = mt.air_density_adjusted_wind_speed(rean_df, 'windspeed_ms', 'rho_kgm-3') # Density correct wind speeds self._reanalysis_monthly[key] = rean_df.resample('MS')[ 'ws_dens_corr'].mean() # .to_frame() # Get average wind speed by year-month self._monthly.df = self._monthly.df.join( self._reanalysis_monthly) # Merge monthly reanalysis data to monthly energy data frame
def test_air_density_adjusted_wind_speed(self): # Test dataframe with wind speed and density data wind_speed = np.arange(0, 10, 2) dens = np.arange(1.10, 1.20, 0.02) adjusted_ws = mt.air_density_adjusted_wind_speed(wind_speed, dens) # Test answer adjusted_ws_ans = np.array([0., 1.988235, 4., 6.034885, 8.092494]) # Expected answer nptest.assert_array_almost_equal(adjusted_ws, adjusted_ws_ans, decimal=5)
def test_air_density_adjusted_wind_speed(self): # Test dataframe with wind speed and density data df = pd.DataFrame(data={ 'wind_speed': np.arange(0, 10, 2), 'dens': np.arange(1.10, 1.20, 0.02) }) adjusted_ws = mt.air_density_adjusted_wind_speed( df, 'wind_speed', 'dens') # Test answer adjusted_ws_ans = np.array([0., 1.988235, 4., 6.034885, 8.092494]) # Expected answer nptest.assert_array_almost_equal(adjusted_ws, adjusted_ws_ans, decimal=5)
def process_reanalysis_data(self): """ Process reanalysis data for use in PRUF plant analysis: - calculate density-corrected wind speed and wind components - get monthly/daily average wind speeds and components - calculate monthly/daily average wind direction - calculate monthly/daily average temperature - append monthly/daily averages to monthly/daily energy data frame Args: (None) Returns: (None) """ # Define empty data frame that spans past our period of interest self._reanalysis_aggregate = pd.DataFrame(index=pd.date_range( start='1997-01-01', end='2019-12-31', freq=self._resample_freq), dtype=float) # Now loop through the different reanalysis products, density-correct wind speeds, and take monthly averages for key in self._reanal_products: rean_df = self._plant._reanalysis._product[key].df rean_df['ws_dens_corr'] = mt.air_density_adjusted_wind_speed( rean_df['windspeed_ms'], rean_df['rho_kgm-3']) # Density correct wind speeds self._reanalysis_aggregate[key] = rean_df.resample( self._resample_freq)['ws_dens_corr'].mean( ) # .to_frame() # Get average wind speed by year-month if self.reg_winddirection | self.reg_temperature: namescol = [key + '_' + var for var in self._rean_vars] self._reanalysis_aggregate[namescol] = rean_df[ self._rean_vars].resample(self._resample_freq).mean() if self.reg_winddirection: # if wind direction is considered as regression variable self._reanalysis_aggregate[key + '_wd'] = np.rad2deg( np.pi - (np.arctan2(-self._reanalysis_aggregate[key + '_u_ms'], self._reanalysis_aggregate[key + '_v_ms'])) ) # Calculate wind direction self._aggregate.df = self._aggregate.df.join( self._reanalysis_aggregate ) # Merge monthly reanalysis data to monthly energy data frame