在 Prophet 中处理不同国家的同等假期
Handle equivalent holidays for different countries in Prophet
我正在创建包含时间变量的数据集,更具体地说,是假期,在使用 pandas
进行一些测试后,我现在使用 FBProphet
.
由于我正在考虑一个地区(伊比利亚半岛),它将涉及两个国家的假期:葡萄牙和西班牙。这是当前的先知行为:
>>> m.add_country_holidays('PT')
>>> m.add_country_holidays('ES')
WARNING:fbprophet:Changing country holidays from PT to ES
因为我的目标是简单地知道是否是假期:
• 即使相同的假期可能在每个国家/地区的不同日期结束,但对于我所做的工作,知道假期之间的区别并不那么重要。
• 如果庆祝活动在同一天举行,例如“Ano Novo”和“Año Nuevo”,我只关心那一天是假期。
尽管了解我们在哪些国家(和地区)放假会有所帮助,但由于人口不同,这是影响我预测的一个因素,仅知道这是一个假期是我的预测已经有了很好的改进。
这就是我获取每个国家/地区假期的方式:
from fbprophet.make_holidays import make_holidays_df
year_list = [2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020]
PTBusinessCalendar = make_holidays_df(year_list=year_list, country='PT')
ESBusinessCalendar = make_holidays_df(year_list=year_list, country='ES')
为了获得 Iberian Holidays 日历,我可以 concat
他们,像这样:
iberian = [PTBusinessCalendar, ESBusinessCalendar]
iberian_2 = pd.concat(iberian).sort_values('ds').reset_index(drop=True)
结果如下:
从DataFrame可以看出,例如,索引0和1都有相同的日期(ds
),代表相同的假期。
我应该怎么做才能连接具有相同 ds
的行并在第一行中写上 holiday
名称,用逗号分隔?
以下解决了我的问题:
def join(h):
return ', '.join(h.holiday)
IberianBusinessCalendar = iberian_2.groupby("ds").apply(join).to_frame(name="holiday")
并输出以下内容:
我正在创建包含时间变量的数据集,更具体地说,是假期,在使用 pandas
进行一些测试后,我现在使用 FBProphet
.
由于我正在考虑一个地区(伊比利亚半岛),它将涉及两个国家的假期:葡萄牙和西班牙。这是当前的先知行为:
>>> m.add_country_holidays('PT')
>>> m.add_country_holidays('ES')
WARNING:fbprophet:Changing country holidays from PT to ES
因为我的目标是简单地知道是否是假期:
• 即使相同的假期可能在每个国家/地区的不同日期结束,但对于我所做的工作,知道假期之间的区别并不那么重要。
• 如果庆祝活动在同一天举行,例如“Ano Novo”和“Año Nuevo”,我只关心那一天是假期。
尽管了解我们在哪些国家(和地区)放假会有所帮助,但由于人口不同,这是影响我预测的一个因素,仅知道这是一个假期是我的预测已经有了很好的改进。
这就是我获取每个国家/地区假期的方式:
from fbprophet.make_holidays import make_holidays_df
year_list = [2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020]
PTBusinessCalendar = make_holidays_df(year_list=year_list, country='PT')
ESBusinessCalendar = make_holidays_df(year_list=year_list, country='ES')
为了获得 Iberian Holidays 日历,我可以 concat
他们,像这样:
iberian = [PTBusinessCalendar, ESBusinessCalendar]
iberian_2 = pd.concat(iberian).sort_values('ds').reset_index(drop=True)
结果如下:
从DataFrame可以看出,例如,索引0和1都有相同的日期(ds
),代表相同的假期。
我应该怎么做才能连接具有相同 ds
的行并在第一行中写上 holiday
名称,用逗号分隔?
以下解决了我的问题:
def join(h):
return ', '.join(h.holiday)
IberianBusinessCalendar = iberian_2.groupby("ds").apply(join).to_frame(name="holiday")
并输出以下内容: