Exemplo n.º 1
0
def test_normalize_with_expected_power_energy_option(pv_15, expected_15, irradiance_15):
    norm, insol = normalize_with_expected_power(
        pv_15, expected_15, irradiance_15, pv_input='energy')
    expected_norm = pd.Series(
        {Timestamp('2020-01-01 12:00:00', freq='15T'): np.nan,
         Timestamp('2020-01-01 12:15:00', freq='15T'): 5.714285714285714,
         Timestamp('2020-01-01 12:30:00', freq='15T'): 4.705882352941177,
         Timestamp('2020-01-01 12:45:00', freq='15T'): 3.5918367346938775,
         Timestamp('2020-01-01 13:00:00', freq='15T'): 4.097560975609756}
    )

    expected_norm.name = 'energy_Wh'
    expected_norm.index.freq = '15T'

    expected_insol = pd.Series(
        {Timestamp('2020-01-01 12:00:00', freq='15T'): np.nan,
         Timestamp('2020-01-01 12:15:00', freq='15T'): 231.25,
         Timestamp('2020-01-01 12:30:00', freq='15T'): 225.0,
         Timestamp('2020-01-01 12:45:00', freq='15T'): 240.625,
         Timestamp('2020-01-01 13:00:00', freq='15T'): 233.125}
    )

    expected_insol.name = 'energy_Wh'
    expected_insol.index.freq = '15T'

    pd.testing.assert_series_equal(norm, expected_norm)
    pd.testing.assert_series_equal(insol, expected_insol)
Exemplo n.º 2
0
def test_normalized_with_expected_power_low_freq_expected(pv_15, expected_30, irradiance_30):
    norm, insol = normalize_with_expected_power(
        pv_15, expected_30, irradiance_30)

    expected_norm = pd.Series(
        {Timestamp('2020-01-01 12:15:00', freq='15T'): 1.09375,
         Timestamp('2020-01-01 12:30:00', freq='15T'): 1.1458333333333335,
         Timestamp('2020-01-01 12:45:00', freq='15T'): 1.0000000000000002,
         Timestamp('2020-01-01 13:00:00', freq='15T'): 0.9772727272727274}
    )

    expected_norm.name = 'energy_Wh'
    expected_norm.index.freq = '15T'

    expected_insol = pd.Series(
        {Timestamp('2020-01-01 12:15:00', freq='15T'): 246.875,
         Timestamp('2020-01-01 12:30:00', freq='15T'): 240.625,
         Timestamp('2020-01-01 12:45:00', freq='15T'): 233.75,
         Timestamp('2020-01-01 13:00:00', freq='15T'): 226.25}
    )

    expected_insol.name = 'energy_Wh'
    expected_insol.index.freq = '15T'

    pd.testing.assert_series_equal(norm, expected_norm)
    pd.testing.assert_series_equal(insol, expected_insol)
Exemplo n.º 3
0
 def _clearsky_preprocess(self):
     '''
     Perform clear-sky-based normalization, filtering, and aggregation.
     If optional parameter self.power_expected is passed in,
     normalize_with_expected_power will be used instead of pvwatts.
     '''
     try:
         if self.poa_global_clearsky is None:
             self._calc_clearsky_poa(model='isotropic')
     except AttributeError:
         raise AttributeError(
             "No poa_global_clearsky. 'set_clearsky' must be run " +
             "prior to 'clearsky_analysis'")
     if self.temperature_cell_clearsky is None:
         if self.temperature_ambient_clearsky is None:
             self._calc_clearsky_tamb()
         self.temperature_cell_clearsky = self._calc_cell_temperature(
             self.poa_global_clearsky, self.temperature_ambient_clearsky, 0)
         # Note example notebook uses windspeed=0 in the clearskybranch
     if self.power_expected is None:
         cs_normalized, cs_insolation = self._pvwatts_norm(
             self.poa_global_clearsky, self.temperature_cell_clearsky)
     else:  # self.power_expected passed in by user
         cs_normalized, cs_insolation = normalization.normalize_with_expected_power(
             self.pv_energy,
             self.power_expected,
             self.poa_global_clearsky,
             pv_input='energy')
     self._filter(cs_normalized, 'clearsky')
     cs_aggregated, cs_aggregated_insolation = self._aggregate(
         cs_normalized[self.clearsky_filter],
         cs_insolation[self.clearsky_filter])
     self.clearsky_aggregated_performance = cs_aggregated
     self.clearsky_aggregated_insolation = cs_aggregated_insolation
Exemplo n.º 4
0
    def _sensor_preprocess(self):
        '''
        Perform sensor-based normalization, filtering, and aggregation.
        If optional parameter self.power_expected is passed in,
        normalize_with_expected_power will be used instead of pvwatts.
        '''
        if self.poa_global is None:
            raise ValueError(
                'poa_global must be available to perform _sensor_preprocess')

        if self.power_expected is None:
            # Thermal details required if power_expected is not manually set.
            if self.temperature_cell is None and self.temperature_ambient is None:
                raise ValueError(
                    'either cell or ambient temperature must be available '
                    'to perform _sensor_preprocess')
            if self.temperature_cell is None:
                self.temperature_cell = self._calc_cell_temperature(
                    self.poa_global, self.temperature_ambient, self.windspeed)
            energy_normalized, insolation = self._pvwatts_norm(
                self.poa_global, self.temperature_cell)
        else:  # self.power_expected passed in by user
            energy_normalized, insolation = normalization.normalize_with_expected_power(
                self.pv_energy,
                self.power_expected,
                self.poa_global,
                pv_input='energy')
        self._filter(energy_normalized, 'sensor')
        aggregated, aggregated_insolation = self._aggregate(
            energy_normalized[self.sensor_filter],
            insolation[self.sensor_filter])
        self.sensor_aggregated_performance = aggregated
        self.sensor_aggregated_insolation = aggregated_insolation
Exemplo n.º 5
0
def test_normalize_with_expected_power_uniform_frequency(
        pv_15, expected_15, irradiance_15):
    norm, insol = normalize_with_expected_power(pv_15, expected_15,
                                                irradiance_15)

    expected_norm = pv_15.iloc[1:] / expected_15.iloc[1:]
    expected_norm.name = 'energy_Wh'

    expected_insol = irradiance_15.iloc[1:] * 0.25
    expected_insol.name = 'energy_Wh'

    pd.testing.assert_series_equal(norm, expected_norm)
    pd.testing.assert_series_equal(insol, expected_insol)
Exemplo n.º 6
0
def test_normalize_with_expected_power_energy_option(pv_15, expected_15,
                                                     irradiance_15):
    norm, insol = normalize_with_expected_power(pv_15,
                                                expected_15,
                                                irradiance_15,
                                                pv_input='energy')

    expected_norm = pv_15 / (0.25 * expected_15.iloc[1:])
    expected_norm.name = 'energy_Wh'

    expected_insol = irradiance_15.iloc[1:] * 0.25
    expected_insol = expected_insol.reindex(expected_norm.index)
    expected_insol.name = 'energy_Wh'

    pd.testing.assert_series_equal(norm, expected_norm)
    pd.testing.assert_series_equal(insol, expected_insol)
Exemplo n.º 7
0
def test_normalized_with_expected_power_low_freq_expected(
        pv_15, expected_30, irradiance_30):
    norm, insol = normalize_with_expected_power(pv_15, expected_30,
                                                irradiance_30)

    expected_15 = expected_30.reindex(pv_15.index).interpolate()
    expected_energy = expected_15.iloc[1:] * 0.25
    expected_norm = pv_15.iloc[1:] * 0.25 / expected_energy
    expected_norm.name = 'energy_Wh'

    irradiance_15 = irradiance_30.reindex(pv_15.index).interpolate()
    expected_insol = irradiance_15.iloc[1:] * 0.25
    expected_insol.name = 'energy_Wh'

    pd.testing.assert_series_equal(norm, expected_norm)
    pd.testing.assert_series_equal(insol, expected_insol)
Exemplo n.º 8
0
def test_normalize_with_expected_power_low_freq_pv(pv_30, expected_15,
                                                   irradiance_15):
    norm, insol = normalize_with_expected_power(pv_30, expected_15,
                                                irradiance_15)

    pv_energy = pv_30.iloc[1:] * 0.5
    expected_energy = expected_15.iloc[1:] * 0.25
    # aggregate to 30 min level
    expected_energy = expected_energy.rolling(2).sum()
    expected_energy = expected_energy.reindex(pv_energy.index)
    expected_norm = pv_energy / expected_energy
    expected_norm.name = 'energy_Wh'

    expected_insol = irradiance_15.iloc[1:] * 0.25
    # aggregate to 30 min level
    expected_insol = expected_insol.rolling(2).sum()
    expected_insol = expected_insol.reindex(pv_energy.index)
    expected_insol.name = 'energy_Wh'

    pd.testing.assert_series_equal(norm, expected_norm)
    pd.testing.assert_series_equal(insol, expected_insol)
Exemplo n.º 9
0
def test_normalize_with_expected_power_low_freq_pv(pv_30, expected_15, irradiance_15):
    norm, insol = normalize_with_expected_power(
        pv_30, expected_15, irradiance_15)

    expected_norm = pd.Series(
        {Timestamp('2020-01-01 12:30:00', freq='30T'): 0.9302325581395349,
         Timestamp('2020-01-01 13:00:00', freq='30T'): 1.1333333333333333}
    )

    expected_norm.name = 'energy_Wh'
    expected_norm.index.freq = '30T'

    expected_insol = pd.Series(
        {Timestamp('2020-01-01 12:30:00', freq='30T'): 456.25,
         Timestamp('2020-01-01 13:00:00', freq='30T'): 473.75}
    )

    expected_insol.name = 'energy_Wh'
    expected_insol.index.freq = '30T'

    pd.testing.assert_series_equal(norm, expected_norm)
    pd.testing.assert_series_equal(insol, expected_insol)
Exemplo n.º 10
0
def test_normalize_with_expected_power_uniform_frequency(pv_15, expected_15, irradiance_15):
    norm, insol = normalize_with_expected_power(
        pv_15, expected_15, irradiance_15)
    expected_norm = pd.Series(
        {Timestamp('2020-01-01 12:15:00', freq='15T'): 1.0,
         Timestamp('2020-01-01 12:30:00', freq='15T'): 1.0784313725490198,
         Timestamp('2020-01-01 12:45:00', freq='15T'): 1.0612244897959184,
         Timestamp('2020-01-01 13:00:00', freq='15T'): 1.0487804878048783}
    )
    expected_norm.name = 'energy_Wh'
    expected_norm.index.freq = '15T'

    expected_insol = pd.Series(
        {Timestamp('2020-01-01 12:15:00', freq='15T'): 231.25,
         Timestamp('2020-01-01 12:30:00', freq='15T'): 225.0,
         Timestamp('2020-01-01 12:45:00', freq='15T'): 240.625,
         Timestamp('2020-01-01 13:00:00', freq='15T'): 233.125}
    )

    expected_insol.name = 'energy_Wh'
    expected_insol.index.freq = '15T'

    pd.testing.assert_series_equal(norm, expected_norm)
    pd.testing.assert_series_equal(insol, expected_insol)