pandas:时间序列数据的周期转换
时间序列数据是数据分析中经常遇到的类型,为了更多的挖掘出数据内部的信息,
我们常常依据原始数据中的时间周期,将其转换成不同跨度的周期,
然后再看数据是否会在新的周期上产生新的特性。
下面以模拟的K线数据为例,演示如何使用pandas来进行周期转换。
1. 创建测试数据
首先创建测试数据,下面创建一天的K线数据,数据的间隔为1分钟(1min)。
import pandas as pd
import numpy as np
# 创建时间序列的列,时间间隔1分钟
date_col = pd.date_range("2024-01-01", "2024-01-02", freq="1min")
data_len = len(date_col)
# 模拟的K线数据
df = pd.DataFrame(
np.random.randint(1, 10, size=(data_len, 5)),
columns=["open", "close", "high", "low", "volumn"],
)
df.insert(0, "begin_time", date_col)
df

其中各个字段的含义:open(开盘价),close(收盘价),high(最高价),low(最低价),volumn(成交量)。
2. 周期转换和数据聚合
如果有股票或者类似交易的朋友都知道,K线的时间间隔是不固定的,不一定像上面的测试数据那样间隔1分钟,
一般根据自己的买卖频率会查看不同时间间隔的K线。
但是采集数据时,一般不会去采集各种时间间隔的K线,我们可以根据1分钟的K线,去转换其他不同时间间隔的K线。
转换的方法,就是使用pandas的resample函数。
通过resample周期转换其实就是以一定的周期对数据进行groupby,所以,resample也像groupby一样,需要对新周期中的数据进行聚合。
比如,下面的数据我们将1分钟的K线转换为5分钟的K线。
df.resample("5min", on="begin_time").agg({
"open": "first",
"close": "last",
"high": "max",
"low": "min",
"volumn": "sum",
})

比如,原始数据每5个聚合成一个。
以前5个数据(2024-01-01 00:00:00~2024-01-01 00:04:00)为例。
open取第一个值,close取最后一个值,high取最大值,low取最小值,volumn取合计值。
除了上面的5分钟的数据,通过resample还可以聚合15分钟的K线,1小时,4小时等等各种时间间隔的K线。
方法类似,这里不再一一赘述。
3. 周期中的缺失值
对于完整的数据,就像上面那样转换即可,然而实际情况下的数据,部分缺失的情况是很常见的,
特别是上面的1分钟K线数据,极有可能1分钟没有交易,出现缺失的情况,有可能连续5分钟都没有数据。
下面看看数据缺失时,resample转换的情况。
先从上面的测试数据中取20个再进行一些删减,构造数据缺失的情况:
df_ = df.copy()
df_ = df_.iloc[:20]
df_ = df_.drop([3, 5, 6, 7, 8, 9, 10, 15, 16])
df_ = df_.reset_index(drop=True)
df_

每组都有一些缺失,其中(2024-01-01 00:06:00~2024-01-01 00:10:00)整个5分钟的数据都缺失了。
此时,再按照5分钟间隔来resample,得到:
df_.resample("5min", on="begin_time").agg({
"open": "first",
"close": "last",
"high": "max",
"low": "min",
"volumn": "sum",
})

从中可以得出两个结论:
- 部分缺失,就用剩余的数据来聚合计算(比如5分钟的数据就剩3条,那就用这3条来聚合)
- 整个缺失,那么就用聚合函数的默认值来填充,比如上面
2024-01-01 00:05:00这条
4. 总结
时间序列数据的分析过程中,周期转换是一个很常用的操作。
不过,不是简单的用resample来转换就完事了,
周期转换之后也会带来新的问题,比如上面示例中由于转换形成的空值,
这些空值是要直接丢弃?还是要插值?
如果要插值的话,是用基准数据来填充?还是用平均值?用移动平均值?用中位数?等等来插值,
这些都需要根据具体的分析场景和使用的分析算法来进一步讨论。
本文主要介绍使用resample来转换数据,而关于插值方法的详细讨论将另文阐述。
pandas:时间序列数据的周期转换的更多相关文章
- Pandas 时间序列数据绘制X轴主要刻度和次要刻度
先上效果图吧(图中Tue表示周二): Pandas和matplotlib.dates都是使用matplotlib.units来定位刻度. matplotlib.dates可以方便的手动设置刻度,同时p ...
- Pandas 时间序列处理
目录 Pandas 时间序列处理 1 Python 的日期和时间处理 1.1 常用模块 1.2 字符串和 datetime 转换 2 Pandas 的时间处理及操作 2.1 创建与基础操作 2.2 时 ...
- Pandas时间序列
Pandas时间序列 pandas 提供了一组标准的时间序列处理工具和数据算法 数据类型及操作 Python 标准库的 datetime datetime 模块中的 datetime. time. c ...
- pandas时间序列常用操作
目录 一.时间序列是什么 二.时间序列的选取 三.时间序列的生成 四.时间序列的偏移量 五.时间前移或后移 五.时区处理 六.时期及算术运算 七.频率转换 一.时间序列是什么 时间序列在多个时间点观察 ...
- Python——Pandas 时间序列数据处理
介绍 Pandas 是非常著名的开源数据处理库,我们可以通过它完成对数据集进行快速读取.转换.过滤.分析等一系列操作.同样,Pandas 已经被证明为是非常强大的用于处理时间序列数据的工具.本节将介绍 ...
- 利用Python进行数据分析(12) pandas基础: 数据合并
pandas 提供了三种主要方法可以对数据进行合并: pandas.merge()方法:数据库风格的合并: pandas.concat()方法:轴向连接,即沿着一条轴将多个对象堆叠到一起: 实例方法c ...
- 时间序列挖掘-预测算法-三次指数平滑法(Holt-Winters)——三次指数平滑算法可以很好的保存时间序列数据的趋势和季节性信息
from:http://www.cnblogs.com/kemaswill/archive/2013/04/01/2993583.html 在时间序列中,我们需要基于该时间序列当前已有的数据来预测其在 ...
- PIE SDK打开长时间序列数据
1. 功能简介 时间序列数据(time series data)是在不同时间上收集到的数据,这类数据是按时间顺序收集到的,用于所描述现象随时间变化的情况.当前随着遥感卫星技术日新月异的发展,遥感卫星的 ...
- pandas时间序列滑窗
时间序列数据统计-滑动窗口 窗口函数 import pandas as pd import numpy as np ser_obj = pd.Series(np.random.randn(1000), ...
- python数据结构:pandas(2)数据操作
一.Pandas的数据操作 0.DataFrame的数据结构 1.Series索引操作 (0)Series class Series(base.IndexOpsMixin, generic.NDFra ...
随机推荐
- go语言漏桶算法思路简单实现
package main import ( "fmt" "time" ) // 桶 type LeakBucket struct { capacity int ...
- KingbaseES 原生XML系列三--XML数据查询函数
KingbaseES 原生XML系列三--XML数据查询函数(EXTRACT,EXTRACTVALUE,EXISTSNODE,XPATH,XPATH_EXISTS,XMLEXISTS) XML的简单使 ...
- KingbaseES V8R6 集群运维案例 -- 磁盘空间问题导致集群故障
某商业银行生产系统KingbaseES读写分离集群主库出现故障,导致集群主备发生切换.客户要求说明具体的原因. KingbaseES读写分离集群基本信息: KingbaseES集群信息 操作系统 ...
- 数据库知识 DDL/DML/DCL
DDL DDL的概述 DDL(Data Definition Language 数据定义语言)用于操作对象和对象的属性,这种对象包括数据库本身,以及数据库对象,像:表.视图等等,DDL对这些对象和属性 ...
- 在Keycloak中实现多租户并在ASP.NET Core下进行验证
Keycloak是一个功能强大的开源身份和访问管理系统,提供了一整套解决方案,包括用户认证.单点登录(SSO).身份联合.用户注册.用户管理.角色映射.多因素认证和访问控制等.它广泛应用于企业和云服务 ...
- JS从图片base64数据中获取图片的宽高
// js从base64数据中获取宽高 var image = new Image(); image.src = "data:image/png;base64," + base64 ...
- mybatis 查询一对多子表只能查出一条数据
mybatis 插叙一对多子表只能查出一条数据 环境 ssm 持久层 mybatis 关联查询一对多<collection> 原因 主表id 和子表id 一样 处理方式: select ...
- 开源相机管理库Aravis例程学习(二)——连续采集multiple-acquisition-main-thread
目录 简介 例程代码 函数说明 arv_camera_set_acquisition_mode arv_camera_create_stream arv_camera_get_payload arv_ ...
- python性能测试,请求QPS测试
QPS = (1000ms/平均响应时间ms)*服务并行数量 #!/user/bin/env python #coding=utf-8 import requests import datetime ...
- SURE:增强不确定性估计的组合拳,快加入到你的训练指南吧 | CVPR 2024
论文重新审视了深度神经网络中的不确定性估计技术,并整合了一套技术以增强其可靠性.论文的研究表明,多种技术(包括模型正则化.分类器改造和优化策略)的综合应用显着提高了图像分类任务中不确定性预测的准确性 ...