作者:Peter 编辑:Peter
大家好,我是Peter~
Kats(Kits to Analyze Time Series)是一款轻量级、易于使用、可扩展和通用的框架,用于在Python中进行时序分析,由Facebook开源。
TimeSeriesData是Kats中表示单变量和多变量时间序列的基本数据结构,有两种初始化的方法:
<!--MORE-->
Mac中安装是非常简单的,直接pip install;如果是Windows系统,请百度解决各种依赖问题:
pip install --upgrade pip
pip install kats
GitHub学习地址:https://github.com/facebookresearch/Kats
API地址:https://facebookresearch.github.io/Kats/api/
In 1:
# 导入库
import numpy as np
import pandas as pd
from datetime import datetime, timedelta
import matplotlib.pyplot as plt
%matplotlib inline
import warnings
warnings.filterwarnings('ignore')
from kats.consts import TimeSeriesData
使用自带的air_passengers.csv的数据集。
In 2:
# ./ 表示的当前目录下
air = pd.read_csv("./Kats/kats/data/air_passengers.csv")
air.head()
一定要有time字段:
In 7:
type(air) # 转换前
Out7:
pandas.core.frame.DataFrame
In 8:
air_ts = TimeSeriesData(air) # 实施转换
In 9:
type(air_ts) # 转换后
Out9:
kats.consts.TimeSeriesData
In 10:
print(type(air_ts.time))
print(type(air_ts.value))
<class 'pandas.core.series.Series'>
<class 'pandas.core.series.Series'>
In 11:
air_ts_from_series = TimeSeriesData(time=air.time, value=air.value)
air_ts_from_series
TimeSeriesData对象支持很多类似pd.DataFrame的操作:
当两个TimeSeries对象进行相加的时候,time列的取值必须相同:
In 16:
air_ts[2:8] + air_ts_from_series[2:8]
如果time列的值不同,则会报错:
In 18:
air_ts == air_ts_from_series
Out18:
True
In 19:
len(air_ts)
Out19:
144
In 20:
air_ts.max
Out20:
622
In 21:
air_ts.min
Out21:
104
In 22:
# 是否是单变量:is_univariate
air_ts.is_univariate()
Out22:
True
In 23:
# 是否为空
air_ts.is_empty()
Out23:
False
In 24:
# 是否有数据缺失
air_ts.is_data_missing()
Out24:
False
In 25:
air_to_df = air_ts.to_dataframe()
air_to_df.head()
对两个不同的TimeSeries对象在axis=0方向上的扩充
In 26:
k1 = air_ts[2:5] # 3行记录
k2 = air_ts[5:8] # 3行记录
k1.extend(k2)
需要注意的是,扩充的时候两个对象的日期的头尾必须是能连接的上:
直接使用plot方法对Kats中的TimeSeriesData对象进行绘图
In 29:
air_ts.plot()
plt.show()
Kats目前是支持多种预测的算法,常见的有:
在使用的时候通过fit和predict函数就可以完成基本的预测功能。
建模拟合 + 预测的过程:
In 30:
下面的预测结果中:fcst是预测的均值,fcst_lower是预测的下限,fcst_upper是预测的上限
绘制预测结果的可视化图形:
In 31:
model.plot()
plt.show()
加上历史数据我们再预测一次:
from kats.models.prophet import ProphetModel, ProphetParams
params = ProphetParams(seasonality_mode="multiplicative", interval_width=0.8)
model = ProphetModel(data=air_ts, params=params)
model.fit()
# 加上历史数据 include_history=True
forecast = model.predict(steps=24, freq="MS",include_history=True)
model.plot()
黑线是原始的数据,蓝线是预测的结果
使用LSTM模型再预测一次:
In 33:
对比Prophet和LSTM模型,我们发现:Prophet的趋势更好
In 4:
multi_ts = TimeSeriesData(df)
In 5:
type(multi_ts.time)
Out5:
pandas.core.series.Series
In 6:
type(multi_ts.value)
Out6:
pandas.core.frame.DataFrame
In 7:
multi_ts_two = TimeSeriesData(time=df.time,value=df[["v1","v2"]])
multi_ts_two
In 10:
multi_ts.plot(cols=["v1","v2"])
plt.show()
预测结果如下:
手动整理上海最近30天的数据:
读取数据:
1、每日新增的预测结果:
具体数值为:
2、7日均值的预测趋势图
具体的数值为:
后续会来验证下这个结果!
将来需要学习的主要内容:
1、模型框架:Prophet + Kats + ARIMA
2、书籍:FPP《预测:方法与实践》(第2版左,第三版右),第二版中文在线地址:https://otexts.com/fppcn/
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。