用fbprophet预测北京未来一个月的气温

简介: fbprophet是facebook开源的时序数据预测包,提供了简洁的python和R api,可以对时序数据做一些预测,也提供了有些简单的趋势分析。更多细节可以看下官方文档。官方doc中给了一个数据集作为prophet的入门,这里我也只是按照官方的入门文档编写了的代码,很简单,只是把数据集换成了北京这8年来的每日温度数据,温度数我从网上爬取的,爬虫源码和数据可以从我github上找到。

fbprophet是facebook开源的时序数据预测包,提供了简洁的python和R api,可以对时序数据做一些预测,也提供了有些简单的趋势分析。更多细节可以看下官方文档。官方doc中给了一个数据集作为prophet的入门,这里我也只是按照官方的入门文档编写了的代码,很简单,只是把数据集换成了北京这8年来的每日温度数据,温度数我从网上爬取的,爬虫源码和数据可以从我github上找到。


# -*- coding: utf-8 -*-
# 首先导入我们需要的包,fbprophet没多少包依赖,pandas是为了读入数据的,pyplot是用来绘图的,fbprophet也支持直接绘图
import pandas as pd
import matplotlib.pyplot as plt
from fbprophet import Prophet

因为爬虫爬到的数据是无序的,所以要重新排序,其实不排序也没关系,并不影响prophet的预测。倒是异常点对预测影响挺多的,异常点太多或者值太大对结果的准确率影响也非常大,如果数据中有异常数据点,可以直接删除掉,prophet有对缺失数据补齐的能力。

data = pd.read_csv('bjweather.csv')
data = data.sort_values(by=['date'])
data = data.reset_index()

# 对数据做格式转化,prophet所需要的只有两列,分别是ds和y,这里我分别预测未来一个月的最小值和最大值。

dfmin = pd.DataFrame()
dfmin['ds'] = data['date']
dfmin['y'] = data['minT']
dfmax = pd.DataFrame()
dfmax['ds'] = data['date']
dfmax['y'] = data['maxT']
dfmax.head(10)


ds y

0 2011-01-01 0

1 2011-01-02 -2

2 2011-01-03 1

3 2011-01-04 -1

4 2011-01-05 -1

5 2011-01-06 0

6 2011-01-07 1

7 2011-01-08 1

8 2011-01-09 -1

9 2011-01-10 -1

因为我需要分别预测未来一个月的最低温度和最高温度,所以需要分别训练两个模型,分别是minModel和maxModel。prophet的api也特别简单,只需要把历史数据传给fit函数即可。

minModel = Prophet()
minModel.fit(dfmin)
maxModel = Prophet()
maxModel.fit(dfmax)

预测的时候需要传入需要预测的日期,以及预测所用的历史数据日期,prophet提供了一个make_future_dataframe的方法,可以生成所需要的日期数据。periods默认是天,也可以加freq=‘H’,更改为其他时间粒度,我试了下,貌似最细时间粒度只能到小时。


futuremin = minModel.make_future_dataframe(periods=30)
futuremax = maxModel.make_future_dataframe(periods=30)
futuremin.tail()

ds

2948 2019-01-25

2949 2019-01-26

2950 2019-01-27

2951 2019-01-28

2952 2019-01-29

用predict方法就可以做出预测了,预测结果里包含’ds’, ‘trend’, ‘yhat_lower’, ‘yhat_upper’, ‘trend_lower’, ‘trend_upper’,

‘additive_terms’, ‘additive_terms_lower’, ‘additive_terms_upper’,‘weekly’, ‘weekly_lower’, ‘weekly_upper’, ‘yearly’, ‘yearly_lower’,‘yearly_upper’, ‘multiplicative_terms’, ‘multiplicative_terms_lower’,‘multiplicative_terms_upper’, ‘yhat’,这些数据,具体某个数据的含义大家可以参考下prophet的官方文档,我这里只简单提下部分数据。


fcmin = minModel.predict(futuremin)
fcmax = maxModel.predict(futuremax)
fcmin[['ds', 'yhat', 'yhat_lower', 'yhat_upper']].tail()
# 这几个数据分别是预测日期,预测结果值,预测结果上下界。


ds yhat yhat_lower yhat_upper

2948 2019-01-25 -7.446095 -10.686345 -4.430015

2949 2019-01-26 -7.410766 -10.581734 -4.291753

2950 2019-01-27 -7.505449 -10.612294 -4.659177

2951 2019-01-28 -7.434773 -10.413356 -4.334310

2952 2019-01-29 -7.435442 -10.549608 -4.453615

fig0 = minModel.plot(fcmin)

9ecbefbec54cd7b3364bab39ed04f01e_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hpbmRvbw==,size_16,color_FFFFFF,t_70.png


除了预测结果和预测的上下界之外,prophet也可以提供一些趋势分析,包括年度趋势,月度趋势,和周趋势。从下面几张图里可以看出,北京在进8年里7-8月最热,1月最冷,大家肯定都知道。但8年里13年最冷,17年最暖和,周三平均温度最高,周一温差最大,周二最冷,这些估计没多少人知道了吧。


fig3 = minModel.plot_components(fcmin)


a377c6af17d0a493c66ee6705d641e6b_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hpbmRvbw==,size_16,color_FFFFFF,t_70.png

fig1 = maxModel.plot(fcmax)

d7fa402a82dbe9999b8ed7b81ea8ba1b_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hpbmRvbw==,size_16,color_FFFFFF,t_70.png

fig2 = maxModel.plot_components(fcmin)

c7e51dd394e0d75485191177bc18cf25_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hpbmRvbw==,size_16,color_FFFFFF,t_70.png

plt.plot(fcmin['ds'].tail(30), fcmin['yhat'].tail(30))
plt.plot(fcmax['ds'].tail(30), fcmax['yhat'].tail(30))

9e96c5c0d5205b85d022e797db4df6f2_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hpbmRvbw==,size_16,color_FFFFFF,t_70.png

 最后我把预测出的1月份最高温和最低温放在一个图里展示出来,大家看看就好,不必当真。

目录
相关文章
|
传感器 监控
基于STM32的智能农业环境监测系统设计与实现
基于STM32的智能农业环境监测系统设计与实现
940 0
|
4月前
|
监控 安全 网络协议
恶意软件无处逃!国内版“Manus”AiPy开发Windows沙箱工具,进程行为+网络传输层级监控! 头像 豪气的
NImplant.exe 是一款后渗透测试工具,可实现远程管理与持久化控制。其优点包括无文件技术、加密通信和插件扩展,但也存在被检测风险及配置复杂等问题。为深入分析其行为,我们基于 aipy 开发了 Windows 沙箱工具,针对桌面上的 NImplant.exe 进行多维度分析,涵盖进程行为、网络连接(如 TCP 请求、目标 IP/域名)、文件控制等,并生成传输层监控报告与沙箱截图。结果显示,aipy 工具响应迅速,报告清晰易读,满足分析需求。
|
2月前
|
人工智能 自然语言处理 Linux
如何获取 OpenAI API 密钥
本教程详细介绍如何注册 OpenAI 账户、获取 API 密钥并部署 GPT-4 模型。内容涵盖访问官网、登录注册、创建密钥、配置 Python 环境及调用 API 的完整流程,并提供示例代码帮助开发者快速上手。
|
存储 大数据 数据安全/隐私保护
Python中的长整型
Python中的长整型
300 0
|
12月前
|
人工智能
写歌词的技巧和方法:优化歌词结构的秘诀,妙笔生词AI智能写歌词软件
歌词是音乐的灵魂,优化其结构能让作品更加动人。掌握开头吸引人、主体结构清晰、情感递进自然及结尾余味悠长等技巧至关重要。同时,借助《妙笔生词智能写歌词软件》的多种AI功能,如智能写词、押韵优化等,可有效提升创作效率与质量,为你的歌词增添光彩。
|
12月前
|
数据采集 数据可视化 数据挖掘
使用Python进行数据处理与可视化——以气温数据分析为例
【10月更文挑战第12天】使用Python进行数据处理与可视化——以气温数据分析为例
892 0
|
存储 机器学习/深度学习 测试技术
mnn-llm: 大语言模型端侧CPU推理优化
mnn-llm: 大语言模型端侧CPU推理优化
1764 1
|
机器学习/深度学习 人工智能 计算机视觉
极智AI | 图像处理中对掩膜mask和ROI的理解
大家好,我是极智视界,本文介绍一下 图像处理中对掩膜 mask 和 ROI 的理解。
727 0
|
数据挖掘 C++
【SPSS】单样本K-S检验和两独立样本K-S检验详细操作教程(附案例实战)
【SPSS】单样本K-S检验和两独立样本K-S检验详细操作教程(附案例实战)
1646 0
|
机器学习/深度学习 数据采集 算法
Prophet模型的简介以及案例分析(上)
Prophet模型的简介以及案例分析