python - 如何使用 fbProphet 或其他模型在 Python 中执行包含多个组的时间序列分析?
问题描述
全部,
我的数据集如下所示。我正在尝试使用该fbProphet
模型或其他模型来预测未来 6 个月的“金额”。但我的问题是,我想根据每个组(即 A、B、C、D)预测未来 6 个月的数量。我不知道如何在python
使用fbProphet
或其他模型中做到这一点?我参考了 fbprophet 的官方页面,但我发现的唯一信息是“Prophet”只有两列,一个是“Date”,另一个是“amount”。
我是 python 新手,因此非常感谢任何有关代码解释的帮助!
import pandas as pd
data = {'Date':['2017-01-01', '2017-02-01', '2017-03-01', '2017-04-01','2017-05-01','2017-06-01','2017-07-01'],'Group':['A','B','C','D','C','A','B'],
'Amount':['12.1','13','15','10','12','9.0','5.6']}
df = pd.DataFrame(data)
print (df)
输出:
Date Group Amount
0 2017-01-01 A 12.1
1 2017-02-01 B 13
2 2017-03-01 C 15
3 2017-04-01 D 10
4 2017-05-01 C 12
5 2017-06-01 A 9.0
6 2017-07-01 B 5.6
解决方案
fbprophet
需要两列ds
和y
,因此您需要先重命名两列
df = df.rename(columns={'Date': 'ds', 'Amount':'y'})
假设您的组彼此独立并且您希望为每个组获得一个预测,您可以按“组”列对数据框进行分组并为每个组运行预测
from fbprophet import Prophet
grouped = df.groupby('Group')
for g in grouped.groups:
group = grouped.get_group(g)
m = Prophet()
m.fit(group)
future = m.make_future_dataframe(periods=365)
forecast = m.predict(future)
print(forecast.tail())
请注意,您在问题中提供的输入数据框对于模型来说是不够的,因为 D 组只有一个数据点。fbprophet
的预测至少需要 2 个非 Nan 行。
编辑:如果您想将所有预测合并到一个数据框中,想法是yhat
为每个观察值命名不同,pd.merge()
在循环中执行,然后在最后挑选您需要的列:
final = pd.DataFrame()
for g in grouped.groups:
group = grouped.get_group(g)
m = Prophet()
m.fit(group)
future = m.make_future_dataframe(periods=365)
forecast = m.predict(future)
forecast = forecast.rename(columns={'yhat': 'yhat_'+g})
final = pd.merge(final, forecast.set_index('ds'), how='outer', left_index=True, right_index=True)
final = final[['yhat_' + g for g in grouped.groups.keys()]]
推荐阅读
- ssl - 无法在 python2.6 中使用 PIP 更新/添加任何包
- dynamics-crm - 汇总字段十进制抛出错误
- pdf - 是否可以将fabricjs svg输出转换为pdf而不进行光栅化?
- python - PyCharm 在未选中检查时会出现代码兼容性错误
- swift - 设置语言环境时UIDatePicker错误的时间位置
- r - 根据共享值合并两个数据框
- ios - UIImagePickerController 显示带有灰色背景的专辑列表行
- json - 如何修复 json 中的换行错误:非法未引用字符 ... 必须使用反斜杠进行转义
- mongodb - 引用集合的归档而不是集合 mongodb
- php - 如何在此代码中的页面之间传递参数?