前段时间我们用回归的方法预测了天猫的2019年销售额:《Python 多项式预测2019年天猫销售额》以及《人口出生率预测》 。今天我们将使用Facebook的“先知”模型来预测12月的猪价。
Python实用宝典其实已经用过“先知”模型,大家可以阅读这篇文章:《Python使用”先知”预测公众号未来的粉丝量》,当时预测公众号的粉丝在一个月后最多增长到547人,实际增长到了542人,预测地相当准确,而且是在我的宣传模式做了一些改变的情况下的效果,可见这个模型能够很好地处理一些异常变化。
今天我们将使用先知模型预测2019年12月广东省的猪肉价格,源代码和数据你都能通过关注文章最下方的公众号,后台回复:猪价预测 获得。本实验仅供参考。
1.准备数据
在猪价系统网站上利用开发者工具获得过去一年广东省的猪肉价格保存为json格式:
https://zhujia.zhuwang.cc/areapriceinfo-440000.shtml
部分数据如下:
实际上我认为,就猪价这样的对象,拿一年的数据是远远不够的,但是实在找不到前几年的数据。作为一次实验,我暂时以过去一年的数据作为训练集,如果你想要更精准地预测价格,建议至少找3年的数据。
2.数据预测
以下教程默认你已经安装好了Python并可以在CMD或Terminal中使用pip,如果没有请看这篇文章:安装python
2.1 安装 “先知” prophet
Prophet这个包真是一言难尽,如果你按照官方的教程来进行安装, 你会发现啥也安装不上(我吐了)。这里给大家介绍我的安装方法,避免你们走弯路:
第一步,我们需要安装fbprophet的依赖PyStan:
pip install pystan
第二步,使用conda命令安装(需要安装anaconda, 搜anaconda官网安装即可):
conda install -c conda-forge fbprophet
2.2 编写预测代码
首先,利用开发者工具弄下来的数据缺少日期,我们需要获得过去365天的日期,并与原数据对应上:
# 获得2019-11-20过去365天的数据 days = [] today = datetime.date.today() for i in range(0,366,1): daybeforetoday = today + datetime.timedelta(days=-i) days.append(daybeforetoday.strftime('%Y-%m-%d')) days = list(reversed(days)) print(days)
然后我们将猪价提取出来,并将日期和猪价转换为pandas的DataFrame格式:
f = open('./data_20191120.json', 'r', encoding='utf-8') json_data = json.load(f) f.close() # 提取猪价 list_number = json_data['pigprice'] print(len(list_number), len(days)) # prophet模型预测前需要将日期列设为ds,预测的值设为y df = pd.DataFrame({'y':list_number, 'ds':days}) print(len(df), len(days))
最后,调用先知模型进行预测,这里我们只预测30天,所以periods设为了30:
from fbprophet import Prophet # 调用"先知"生成对象 m = Prophet() # 使用"先知对象"进行预测 m.fit(df) # 获得未来30天的数据 future = m.make_future_dataframe(periods=30) forecast = m.predict(future) print(forecast[['ds', 'yhat', 'yhat_lower', 'yhat_upper']].tail())
结果如下:
根据过去一年(可能不够)的猪肉价格数据,预测到在下个月的今天,猪肉将会上涨到49元/公斤左右的价格。由于数据量实在是太少了,检测不出每一年的猪肉波动性,因此这个预测得到的数据我估计误差比较大,但是大家只需要知道先知模型的使用方法,本文就值了。
我们的文章到此就结束啦,如果你希望我们今天的Python 教程,请持续关注我们,如果对你有帮助,麻烦在下面点一个赞/在看哦
Python实用宝典 (pythondict.com)
不只是一个宝典
欢迎关注公众号:Python实用宝典