时间序列分析|时序等间隔处理
目录
- 背景及需求分析
- 插值
- 平移
背景及需求分析
现实生活中很多事件是隔三岔五的进行抽样采集,从而导致时间序列的不等间隔情况,时序的等间隔或不等间隔对时间序列分析至关重要,如何将不等间隔的时序通过某种变换转为等间隔的时序,通常会有插值和平移两种办法,我们以下面一个实例来解释插值和平移两种等间隔处理方法
origin TSflight_date passenger_num
1201 2021-03-28 90
1202 2021-03-29 80
1203 2021-03-31 108
1204 2021-04-02 80
1205 2021-04-04 91
... ... ...
1265 2021-08-02 103
1266 2021-08-04 122
1267 2021-08-06 86
1268 2021-08-08 72
1269 2021-08-09 70
我们仔细看上面的时间序列数据,可以看到3月28日,3月29日两天连续采集,3月30日是没有采集的,同时4月1号也是没采集的,还有后面的8月7号也没有采集,这种既有时候连续每天,又有间隔的采集的就是非常典型的非等间隔时间序列。针对这种情况,我们先介绍插值法
插值
插值是指在间隔的时间点上通过插值技术手段将采集结果虚拟出来,如周五的观察值是100,周日的观察值是110,现在如果要给周六插上一个值的话,100-110都是可行的,比如这里取100和110的平均值进行插值,具体可以看下面过程
插值前
周五 100
周六 NaN
周日 110
插值后
周五 100
周六 105
周日 110
示例代码,主要用到了interpolate函数
def data_preprocess(data): #乘客人数时序数据预处理airline_data = data[["flight_date", "passenger_num"]].sort_values(by="flight_date") #按日期排序airline_data.drop_duplicates(subset= "flight_date", keep = "first", inplace =True) #按日期列去重print("origin TS\n", airline_data)plt.scatter(x=airline_data["flight_date"], y=airline_data["passenger_num"], color = 'r', label = "origin TS")plt.xticks(fontsize=7,rotation=30)plt.legend()plt.show()airline_data.set_index("flight_date", inplace = True) #重置索引,将flight_date设置为索引indexairline_data = airline_data.asfreq("D").interpolate(method="time") #设置频率和填充方法plt.scatter(x=airline_data.index, y=airline_data["passenger_num"], color = 'b',label = "new TS")plt.xticks(fontsize=7, rotation=30)plt.legend()plt.show()print("new TS\n", airline_data)ts = airline_data["passenger_num"] #乘客人数序列return ts
插值效果可以看到flight_date是一天一天紧密的了没有跳跃天数
new TSpassenger_num
flight_date
2021-03-28 90.0
2021-03-29 80.0
2021-03-30 94.0
2021-03-31 108.0
2021-04-01 94.0
... ...
2021-08-05 104.0
2021-08-06 86.0
2021-08-07 79.0
2021-08-08 72.0
2021-08-09 70.0
插值的好处,各实际观测的绝对位置没有发生变化,插值后100这个观察值还是在周五,110观察值在周日,插值出来的周六的观察值是一个虚拟值,起到了连接和调和的作用,如果前后两个实际观察值相差很大的话,这个虚拟值可供选择的范围就很大,不好确定,同时可以看到被插值的位置出现了非常密集的小范围趋势,这种往往会打破整体性的分布趋势,然后再来介绍平移法。
平移
平移是指在间隔的时间点上通过压缩和拉伸手段将采集结果偏置化出来到等间隔的,现实中往往是往后平移,如周五的观察值是100,周日的观察值是110,现在将周五的观察值偏置一个单位到周六,那么周六的观察值为100,周日的观察值为110,具体可以看下面过程
平移前
周五 100
周六 NaN
周日 110
平移后
周六 100
周日 110
代码中主要用到了pd.date_range来生成一段时间范围,此范围起始时间和结束时间已经频率都可以按照自己实际业务场景进行设定
def data_preprocess(data): #乘客人数数据预处理airline_data = data[["flight_date", "passenger_num"]].sort_values(by="flight_date") #按日期排序airline_data.drop_duplicates(subset= "flight_date", keep = "first", inplace =True) #按日期列去重print("origin TS\n", airline_data)plt.scatter(x=airline_data["flight_date"], y=airline_data["passenger_num"], color = 'r', label = "origin TS")plt.xticks(fontsize=7,rotation=30)plt.legend()plt.show()airline_data["flight_date_"] = pd.date_range(start= str(list(airline_data["flight_date"])[-1]+datetime.timedelta(-len(airline_data)+1)), end = str(list(airline_data["flight_date"])[-1]), freq="D")airline_data.set_index("flight_date_", inplace = True) #重置索引,将flight_date设置为索引indexairline_data = airline_data.asfreq("D") #设置频率plt.scatter(x=airline_data.index, y=airline_data["passenger_num"], color = 'b',label = "new TS")plt.xticks(fontsize=7, rotation=30)plt.legend()plt.show()print("new TS\n", airline_data)ts = airline_data["passenger_num"] #乘客人数序列return ts
平移后的效果
new TSflight_date passenger_num
flight_date_
2021-06-02 2021-03-28 90
2021-06-03 2021-03-29 80
2021-06-04 2021-03-31 108
2021-06-05 2021-04-02 80
2021-06-06 2021-04-04 91
... ... ...
2021-08-05 2021-08-02 103
2021-08-06 2021-08-04 122
2021-08-07 2021-08-06 86
2021-08-08 2021-08-08 72
2021-08-09 2021-08-09 70
平移的好处,各实际观测的相对位置没有发生变化,平移后100这个观察值还是在110观察值的前一位,但是会丢掉其他信息,如本来在周五得到的观测值现在变成了周六的观察值,会丢掉时序差的特性,同时,星期这个特征可能后续就用不上了。
时间序列分析|时序等间隔处理相关推荐
- 终于把时间序列分析的关键点全讲清楚了!
来源:深度学习爱好者 本文约3200字,建议阅读10分钟本文与你分享时间序列分析的基础知识. 时间序列的定义 一个时间序列过程(time series process)定义为一个随机过程,这是一个按时 ...
- python时间序列小波分析_python时间序列分析
什么是时间序列 时间序列简单的说就是各时间点上形成的数值序列,时间序列分析就是通过观察历史数据预测未来的值.在这里需要强调一点的是,时间序列分析并不是关于时间的回归,它主要是研究自身的变化规律的(这里 ...
- python时间序列分析航空旅人_python时间序列分析
一.什么是时间序列 时间序列简单的说就是各时间点上形成的数值序列,时间序列分析就是通过观察历史数据预测未来的值. 在这里需要强调一点的是,时间序列分析并不是关于时间的回归,它主要是研究自身的变化规律的 ...
- python方差分析模型的预测结果中endog表示_python时间序列分析
题记:毕业一年多天天coding,好久没写paper了.在这动荡的日子里,也希望写点东西让自己静一静.恰好前段时间用python做了一点时间序列方面的东西,有一丁点心得体会想和大家分享下.在此也要特别 ...
- python 单位根检验代码_python时间序列分析
什么是时间序列 时间序列简单的说就是各时间点上形成的数值序列,时间序列分析就是通过观察历史数据预测未来的值.在这里需要强调一点的是,时间序列分析并不是关于时间的回归,它主要是研究自身的变化规律的(这里 ...
- 【Python数据分析】时间序列分析——AR/MA/ARMA/ARIMA
目录 一.时间序列的平稳性与差分法 1.时间序列的平稳性: 2.平稳性检验 3.纯随机性检验 4.差分法 二.平稳时间序列模型 1.AR模型 2.MR模型 3.ARMA模型 4.平稳时间序列建模步骤 ...
- 时间序列分析python课程论文_python时间序列分析
一.什么是时间序列 时间序列简单的说就是各时间点上形成的数值序列,时间序列分析就是通过观察历史数据预测未来的值. 在这里需要强调一点的是,时间序列分析并不是关于时间的回归,它主要是研究自身的变化规律的 ...
- python实践——时间序列分析建模理论及代码实现
python进阶教程 机器学习 深度学习 长按二维码关注 进入正文 声明:本文所讲的时间序列分析并不是指pandas的时间序列处理方法,pandas时间序列处理更缺确切地说时间序列的可视化.窗口移动操 ...
- 时间序列分析建模及相关算法的python实现
纯随机性检验 原理: 纯随机序列:平稳序列值之间没有任何相关性的序称为纯随机序列,这意味着该序列过去的行为对将来的发展没有丝毫影响. 从统计分析的角度而言, 纯随机序列没有任何分析价值.纯随机序列也称 ...
最新文章
- 3.网络通信协议分类
- FoxPro 常用内部函数
- 简单枚举(算法竞赛入门经典)
- OpenGL raytracer光线追踪的实例
- 超越95%面试者的秘籍 part 1
- 如何验证python的下载安装_如何下载python并正确安装
- 一起学习C语言:C语言基本语法(二)
- 阿里云云计算 43 CDN的使用
- webpack在内存生成html,Vue学习之Webpack基本使用小结(十三)
- 数控机床的十大数控系统,学了这么多年终于全了!
- wedo2.0编程模块介绍_wedo2.0课程包
- DDR123信号完整性测试分析技术探析
- Windows XP几个版本的区分
- 蓝牙连接不上车要hfp_hfp是什么意思车上
- T32 load elf
- 致远oa系统unix 服务器,致远oa手机客户端服务器
- 【每日最爱一句】2013.07.24
- 白巧脆皮奶香雪糕,一次成功
- 论文阅读——R树:一种用于空间查找的动态索引结构(算是节译)
- 2021-05-12 MongoDB面试题 什么情况下需要用到MongoDB的分片