Seasonal Handling for Hydrological Flow Prediction

Data loading

data = pd.read_csv(
    DATA_PATH/'hydro_example.csv', 
    usecols=['time', OBS_COL], 
    index_col='time',
    converters={"time": pd.to_datetime}
    )
data = data['2012-01-01':]

Seassonal model

We create a class that is able to: - Compute seasonal patterns based on week of year - Remove seasonality from data - Add seasonality back to data


source

SeasonalityHandler

 SeasonalityHandler ()

*Class to handle seasonality operations in time series data.

This class provides methods to: - Compute seasonal patterns based on week of year - Remove seasonality from data - Add seasonality back to data

Attributes: seasonal_pattern: pd.DataFrame The computed seasonal pattern, indexed by week of year*

First we create an instance:

seasonality_handler = SeasonalityHandler()

source

SeasonalityHandler.compute_seasonal_pattern

 SeasonalityHandler.compute_seasonal_pattern
                                              (data:pandas.core.frame.Data
                                              Frame)

Compute mean values for each week of the year to capture seasonal patterns.

Now we compute the seasonality of the data as follows:

season = seasonality_handler.compute_seasonal_pattern(data)

source

SeasonalityHandler.remove_seasonality

 SeasonalityHandler.remove_seasonality (data:pandas.core.frame.DataFrame)

Remove seasonality from the data.

Its also possible to remove the seasonality to our data as follows

deseasonalized_data = seasonality_handler.remove_seasonality(data)
deseasonalized_data.plot()


source

SeasonalityHandler.add_seasonality

 SeasonalityHandler.add_seasonality (data:pandas.core.frame.DataFrame)

Add seasonality back to the data.

We can also add the seasonality back

seasonality_handler.add_seasonality(deseasonalized_data).head(3)
Q_obs
time
2012-01-01 68.839996
2012-01-02 67.500000
2012-01-03 67.349998

source

SeasonalityHandler.append_season

 SeasonalityHandler.append_season (data:pandas.core.frame.DataFrame)

Append the seasonality to the data.

Or we can append the seasonal data as a new column as follows

seasonality_handler.append_season(data).head(3)
Q_obs season
time
2012-01-01 68.839996 90.025156
2012-01-02 67.500000 79.543198
2012-01-03 67.349998 79.543198