From 17dbb86ab023e451dc40da343def788c9cda745c Mon Sep 17 00:00:00 2001 From: Marco Edward Gorelli Date: Sat, 28 Aug 2021 03:19:40 +0100 Subject: [PATCH] Speed up make_holiday_features by up to 35% (#1962) --- python/prophet/forecaster.py | 10 +++++----- python/scripts/generate_holidays_file.py | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/python/prophet/forecaster.py b/python/prophet/forecaster.py index e9b826f..2bb9242 100644 --- a/python/prophet/forecaster.py +++ b/python/prophet/forecaster.py @@ -534,17 +534,17 @@ class Prophet(object): prior_scales = {} # Makes an index so we can perform `get_loc` below. # Strip to just dates. - row_index = pd.DatetimeIndex(dates.apply(lambda x: x.date())) + row_index = pd.DatetimeIndex(dates.dt.date) - for _ix, row in holidays.iterrows(): + for row in holidays.itertuples(): dt = row.ds.date() try: - lw = int(row.get('lower_window', 0)) - uw = int(row.get('upper_window', 0)) + lw = int(getattr(row, 'lower_window', 0)) + uw = int(getattr(row, 'upper_window', 0)) except ValueError: lw = 0 uw = 0 - ps = float(row.get('prior_scale', self.holidays_prior_scale)) + ps = float(getattr(row, 'prior_scale', self.holidays_prior_scale)) if np.isnan(ps): ps = float(self.holidays_prior_scale) if row.holiday in prior_scales and prior_scales[row.holiday] != ps: diff --git a/python/scripts/generate_holidays_file.py b/python/scripts/generate_holidays_file.py index 587d13c..ac37aaa 100644 --- a/python/scripts/generate_holidays_file.py +++ b/python/scripts/generate_holidays_file.py @@ -61,7 +61,7 @@ def generate_holidays_file(): all_holidays.append(df) generated_holidays = pd.concat(all_holidays, axis=0, ignore_index=True) - generated_holidays['year'] = generated_holidays.ds.apply(lambda x: x.year) + generated_holidays['year'] = generated_holidays.ds.dt.year generated_holidays.sort_values(['country', 'ds', 'holiday'], inplace=True) # Convert to ASCII, and drop holidays that fail to convert