时间序列数据是数据分析中经常遇到的类型,为了更多的挖掘出数据内部的信息,
我们常常依据原始数据中的时间周期,将其转换成不同跨度的周期,
然后再看数据是否会在新的周期上产生新的特性。

下面以模拟的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线
转换的方法,就是使用pandasresample函数。
通过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",
})

从中可以得出两个结论:

  1. 部分缺失,就用剩余的数据来聚合计算(比如5分钟的数据就剩3条,那就用这3条来聚合)
  2. 整个缺失,那么就用聚合函数的默认值来填充,比如上面2024-01-01 00:05:00这条

4. 总结

时间序列数据的分析过程中,周期转换是一个很常用的操作。

不过,不是简单的用resample来转换就完事了,
周期转换之后也会带来新的问题,比如上面示例中由于转换形成的空值,
这些空值是要直接丢弃?还是要插值?
如果要插值的话,是用基准数据来填充?还是用平均值?用移动平均值?用中位数?等等来插值,
这些都需要根据具体的分析场景和使用的分析算法来进一步讨论。
本文主要介绍使用resample来转换数据,而关于插值方法的详细讨论将另文阐述。

pandas:时间序列数据的周期转换的更多相关文章

  1. Pandas 时间序列数据绘制X轴主要刻度和次要刻度

    先上效果图吧(图中Tue表示周二): Pandas和matplotlib.dates都是使用matplotlib.units来定位刻度. matplotlib.dates可以方便的手动设置刻度,同时p ...

  2. Pandas 时间序列处理

    目录 Pandas 时间序列处理 1 Python 的日期和时间处理 1.1 常用模块 1.2 字符串和 datetime 转换 2 Pandas 的时间处理及操作 2.1 创建与基础操作 2.2 时 ...

  3. Pandas时间序列

    Pandas时间序列 pandas 提供了一组标准的时间序列处理工具和数据算法 数据类型及操作 Python 标准库的 datetime datetime 模块中的 datetime. time. c ...

  4. pandas时间序列常用操作

    目录 一.时间序列是什么 二.时间序列的选取 三.时间序列的生成 四.时间序列的偏移量 五.时间前移或后移 五.时区处理 六.时期及算术运算 七.频率转换 一.时间序列是什么 时间序列在多个时间点观察 ...

  5. Python——Pandas 时间序列数据处理

    介绍 Pandas 是非常著名的开源数据处理库,我们可以通过它完成对数据集进行快速读取.转换.过滤.分析等一系列操作.同样,Pandas 已经被证明为是非常强大的用于处理时间序列数据的工具.本节将介绍 ...

  6. 利用Python进行数据分析(12) pandas基础: 数据合并

    pandas 提供了三种主要方法可以对数据进行合并: pandas.merge()方法:数据库风格的合并: pandas.concat()方法:轴向连接,即沿着一条轴将多个对象堆叠到一起: 实例方法c ...

  7. 时间序列挖掘-预测算法-三次指数平滑法(Holt-Winters)——三次指数平滑算法可以很好的保存时间序列数据的趋势和季节性信息

    from:http://www.cnblogs.com/kemaswill/archive/2013/04/01/2993583.html 在时间序列中,我们需要基于该时间序列当前已有的数据来预测其在 ...

  8. PIE SDK打开长时间序列数据

    1. 功能简介 时间序列数据(time series data)是在不同时间上收集到的数据,这类数据是按时间顺序收集到的,用于所描述现象随时间变化的情况.当前随着遥感卫星技术日新月异的发展,遥感卫星的 ...

  9. pandas时间序列滑窗

    时间序列数据统计-滑动窗口 窗口函数 import pandas as pd import numpy as np ser_obj = pd.Series(np.random.randn(1000), ...

  10. python数据结构:pandas(2)数据操作

    一.Pandas的数据操作 0.DataFrame的数据结构 1.Series索引操作 (0)Series class Series(base.IndexOpsMixin, generic.NDFra ...

随机推荐

  1. linux 检查是否安装过某软件包

    1.rpm包安装的,可以用 rpm -qa 看到,如果要查找某软件包是否安装,用 rpm -qa | grep "软件或者包的名字" 2.以deb包安装的,可以用 dpkg -l ...

  2. how to install local jar to maven repository

    如何把maven不能引入的依赖安装到本地Repository: 1.比如fastdfs-client-java. <dependency> <groupId>org.csour ...

  3. C++中std::function常见用法

    C++标准库中的std::function是一个通用的函数封装,可以用来存储.复制.调用任何可调用对象(函数.函数指针.成员函数指针.lambda表达式等).以下是std::function的一些常见 ...

  4. 无监督学习-K-means算法

    无监督学习-K-means算法 1. 什么是无监督学习 一家广告平台需要根据相似的人口学特征和购买习惯将美国人口分成不同的小组,以便广告客户可以通过有关联的广告接触到他们的目标客户. Airbnb 需 ...

  5. MySQL登录退出与导入导出

    登录退出MySQL 登录命令 mysql -u 用户名 -p 密码 -h IP -P 端口 mysql -u root -p password -h 127.0.0.1 -P 3306 一般登录命令 ...

  6. 数据解析之Beautifulsoup

    一.BeautifulSoup的简单使用 简单来说,Beautiful Soup是python的一个库,最主要的功能是从网页抓取数据.官方解释如下: Beautiful Soup提供一些简单的.pyt ...

  7. 在Centos 8 服务器用tmux多开窗口

    在 CentOS 服务器上使用 tmux 来多开窗口是一个高效的方式.tmux 是一个终端复用器,它允许你在一个终端窗口中打开多个终端会话,还可以在会话之间轻松切换,非常适合长时间运行程序或多任务操作 ...

  8. 深入了解图片Base64编码

    title: 深入了解图片Base64编码 date: 2024/4/8 10:03:22 updated: 2024/4/8 10:03:22 tags: Base64编码 图片转换 HTTP请求 ...

  9. 代码覆盖率检查工具 -- Coverage,简单使用

    Coverage 一个专门用来检查代码覆盖率的工具,他的使用非常简单,有两种使用方法:[命令行运行,配合测试套件使用] 安装: pip install coverage 一.准备素材 main.py ...

  10. 如何用 Prometheus Operator 监控 K8s 集群外服务?

    前言 前面系列文章中: Prometheus Operator 与 kube-prometheus 之一 - 简介 - 东风微鸣技术博客 (ewhisper.cn) 监控 Kubernetes 集群证 ...