facebook的python时间序列工具fbprophet

参考自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下载

趋势分解的结果,可根据结果对参数进行调整
这里写图片描述

猜你喜欢

转载自blog.csdn.net/k284213498/article/details/78029028