参考自http://blog.csdn.net/wjskeepmaking/article/details/64905745
工具的安装需要直接pip install fbprophet
根据报错提示到官网安装Microsoft Visual Studio 14.0 2015,我的环境是win7,期间需要.net的某个补丁,按照流程即可
import pandas as pd
import numpy as np
from fbprophet import Prophet
from matplotlib import pyplot as plt
df=pd.read_csv('/example_wp_peyton_manning.csv')
df.head()
#
changepoints=['2014-01-01']
playoffs = pd.DataFrame({
'holiday': 'playoff',
'ds': pd.to_datetime(['2008-01-13', '2009-01-03', '2010-01-16',
'2010-01-24', '2010-02-07', '2011-01-08',
'2013-01-12', '2014-01-12', '2014-01-19',
'2014-02-02', '2015-01-11', '2016-01-17',
'2016-01-24', '2016-02-07']),
'lower_window': 0,
'upper_window': 1,
})
superbowls = pd.DataFrame({
'holiday': 'superbowl',
'ds': pd.to_datetime(['2010-02-07', '2014-02-02', '2016-02-07']),
'lower_window': 0,
'upper_window': 1,
})
holidays = pd.concat((playoffs, superbowls))
df.rename(columns={'date':'ds', 'y':'y'}, inplace = True)
'''
growth = 'linear':fbporphet有两种模式,线性增长模式和逻辑增长模式(growth='logistic')
changepoints:指定潜在改变点,如果不指定,将会自动选择潜在改变点例如:
n_changepoints:默认值为25,表示changepoints的数量大小,如果changepoints指定,该传入参数将不会被使用。如果changepoints不指定,将会从输入的历史数据前80%中选取25个(个数由n_changepoints传入参数决定)潜在改变点。
yearly_seasonality:指定是否分析数据的年季节性,True输出yearly_trend,yearly_upper,yearly_lower等数据。
weekly_seasonality:指定是否分析数据的周季节性,如果为True,最后会输出,
weekly_trend,weekly_upper,weekly_lower等数据。
daily_seasonality:自定义的参数,目前fbprophet不支持以小时为粒度的数据,
holidays:传入pd.dataframe格式的数据。这个数据包含有holiday列 (string)和ds(date类型)和可选列
lower_window和upper_window来指定该日期的lower_window或者upper_window范围内都被列为假期。
lower_window=-2将包括前2天的日期作为假期
seasonality_prior_scale:季节性模型的调节强度,较大的值允许模型以适应更大的季节性波动,较小的值抑制季节性。
holidays_prior_scale:假期组件模型的调节强度。
changepoint_prior_scale:自动的潜在改变点的灵活性调节参数,较大值将允许更多的潜在改变点,较小值将允许更少的潜在改变点。
mcmc_samples:整数,若大于0,将做mcmc样本的全贝叶斯推理,如果为0,将做最大后验估计。指定贝叶斯抽样,例如mcmc_samples=20
interval_width:浮点数,给预测提供不确定性区间宽度,如果mcmc_samples=0,这将是预测的唯一不确定性,如果mcmc_samples>0,这将会被集成在所有的模型参数中,其中包括季节性不确定性
uncertainty_samples:模拟绘制数,用于估计不确定的时间间隔
include_history:是否包含历史数据,保持默认就好。
'''
prophet=Prophet(yearly_seasonality=False,weekly_seasonality=True,changepoint_prior_scale=1,seasonality_prior_scale=1)#建模
prophet.fit(qf)#训练
future = prophet.make_future_dataframe(freq='m',periods=1)#freq='D'粒度为天,periods:指定要预测的时长,则指定要预测未来多少天的数据,
forecasts = prophet.predict(future)
prophet.plot(forecasts).show()
prophet.plot_components(forecasts).show()
以下生成图片所用数据非代码中的数据,代码所用数据可以到
https://github.com/facebookincubator/prophet/blob/master/examples/example_wp_peyton_manning.csv下载
趋势分解的结果,可根据结果对参数进行调整