def create_holiday_feature1(dataset): sg_holidays = holidays.Singapore() dataset['holiday'] = [ sg_holidays.get(str(i)) if i in sg_holidays else "None" for i in dataset['date_time'] ] return dataset
def create_holiday_feature(dataset, column, days=3): sg_holidays = holidays.Singapore(years=dataset.iloc[0][column].year) for i in range(days + 1): if (dataset.iloc[0][column] + timedelta(days=i)) in sg_holidays: dataset['before_holiday'] = 1 break else: dataset['before_holiday'] = 0 for i in range(days + 1): if (dataset.iloc[0][column] - timedelta(days=i)) in sg_holidays: dataset['after_holiday'] = 1 break else: dataset['after_holiday'] = 0 return dataset
def test_Singapore(self): # <= 1968 holidays self.assertIn(date(1968, 4, 13), self.holidays) self.assertIn(date(1968, 4, 15), self.holidays) self.assertIn(date(1968, 12, 26), self.holidays) # latest polling day self.assertIn(date(2015, 9, 11), self.holidays) # SG50 self.assertIn(date(2015, 8, 7), self.holidays) # Year with lunar leap month self.assertIn(date(2015, 8, 7), self.holidays) # Latest holidays # Source: https://www.mom.gov.sg/employment-practices/public-holidays # 2018 self.assertIn(date(2018, 1, 1), self.holidays) self.assertIn(date(2018, 2, 16), self.holidays) self.assertIn(date(2018, 2, 17), self.holidays) self.assertIn(date(2018, 3, 30), self.holidays) self.assertIn(date(2018, 5, 1), self.holidays) self.assertIn(date(2018, 5, 29), self.holidays) self.assertIn(date(2018, 6, 15), self.holidays) self.assertIn(date(2018, 8, 9), self.holidays) self.assertIn(date(2018, 8, 22), self.holidays) self.assertIn(date(2018, 11, 6), self.holidays) self.assertIn(date(2018, 12, 25), self.holidays) # total holidays (11 + 0 falling on a Sunday) self.assertEqual(len(holidays.Singapore(years=[2018])), 11 + 0) # 2019 self.assertIn(date(2019, 1, 1), self.holidays) self.assertIn(date(2019, 2, 5), self.holidays) self.assertIn(date(2019, 2, 6), self.holidays) self.assertIn(date(2019, 4, 19), self.holidays) self.assertIn(date(2019, 5, 1), self.holidays) self.assertIn(date(2019, 5, 19), self.holidays) self.assertIn(date(2019, 6, 5), self.holidays) self.assertIn(date(2019, 8, 9), self.holidays) self.assertIn(date(2019, 8, 11), self.holidays) self.assertIn(date(2019, 10, 27), self.holidays) self.assertIn(date(2019, 12, 25), self.holidays) # total holidays (11 + 3 falling on a Sunday) self.assertEqual(len(holidays.Singapore(years=[2019])), 11 + 3) # 2020 self.assertIn(date(2020, 1, 1), self.holidays) self.assertIn(date(2020, 1, 25), self.holidays) self.assertIn(date(2020, 1, 26), self.holidays) self.assertIn(date(2020, 4, 10), self.holidays) self.assertIn(date(2020, 5, 1), self.holidays) self.assertIn(date(2020, 5, 7), self.holidays) self.assertIn(date(2020, 5, 24), self.holidays) self.assertIn(date(2020, 7, 31), self.holidays) self.assertIn(date(2020, 8, 9), self.holidays) self.assertIn(date(2020, 11, 14), self.holidays) self.assertIn(date(2020, 12, 25), self.holidays) # total holidays (11 + 3 falling on a Sunday) self.assertEqual(len(holidays.Singapore(years=[2020])), 11 + 4) # holidays estimated using lunar calendar self.assertIn(date(2021, 5, 26), self.holidays) self.assertIn(date(2021, 11, 4), self.holidays) # holidays estimated using library hijri-converter if sys.version_info >= (3, 6): import importlib.util if importlib.util.find_spec("hijri_converter"): # <= 1968 holidays self.assertIn(date(1968, 1, 2), self.holidays) # 2021 self.assertIn(date(2021, 5, 13), self.holidays) self.assertIn(date(2021, 7, 20), self.holidays)
def setUp(self): self.holidays = holidays.Singapore()