pandas:时间序列数据的周期转换

pandas · 浏览次数 : 5

小编点评

## 探索时间序列数据的周期转换方法 本文以模拟的K线数据为例,说明如何使用pandas来进行周期转换。 **1. 创建测试数据** ```python import pandas as pdimport numpy as np # 创建时间序列的列,时间间隔1分钟 date_col = pd.date_range("2024-01-01", "2024-01-02", freq="1min") # 模拟的K线数据 df = pd.DataFrame(np.random.randint(1, 10, size=(len(date_col), 5)), columns=["open", "close", "high", "low", "volumn"]) df.insert(0, "begin_time", date_col) ``` **2. 周期转换和数据聚合** ```python # 周期转换 df.resample("5min", on="begin_time").agg({ "open": "first", "close": "last", "high": "max", "low": "min", "volumn": "sum", }) # 数据聚合 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) ``` **3. 周期中的缺失值** 由于部分缺失的情况,直接使用resample进行聚合可能会导致错误。我们可以采取不同的方法来处理缺失值: * **填充:**使用基准数据或其他插值方法填充缺失值。 * **默认值:**使用默认值填充缺失值。 * **平均值:**使用平均值填充缺失值。 * **中位数:**使用中位数填充缺失值。 **总结** 时间序列数据的分析过程中,周期转换是一个很常用的操作,但需要根据具体的分析场景和使用的分析算法来进一步讨论插值方法。

正文

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

下面以模拟的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

image.png
其中各个字段的含义:
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",
})

image.png

比如,原始数据每5个聚合成一个。
以前5个数据(2024-01-01 00:00:00~2024-01-01 00:04:00)为例。
image.png
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_

image.png
每组都有一些缺失,其中(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",
})

image.png

从中可以得出两个结论:

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

4. 总结

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

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

与pandas:时间序列数据的周期转换相似的内容:

pandas:时间序列数据的周期转换

时间序列数据是数据分析中经常遇到的类型,为了更多的挖掘出数据内部的信息,我们常常依据原始数据中的时间周期,将其转换成不同跨度的周期,然后再看数据是否会在新的周期上产生新的特性。 下面以模拟的K线数据为例,演示如何使用pandas来进行周期转换。 1. 创建测试数据 首先创建测试数据,下面创建一天的K

【pandas基础】--日期处理

时间序列数据是数据分析中一类常见且重要的数据。 它们按照时间顺序记录,通常是从某些现象的观察中收集的,比如经济指标、气象数据、股票价格、销售数据等等。 时间序列数据的特点是有规律地随着时间变化而变化,它们的变化趋势可以被分析和预测。时间序列分析是一种用于预测未来值或评估过去值的统计方法,常常被用于预

pandas模块

为什么要学习pandas? numpy已经可以帮助我们进行数据的处理了,那么学习pandas的目的是什么呢? numpy能够帮助我们处理的是数值型的数据,当然在数据分析中除了数值型的数据还有好多其他类型的数据(字符串,时间序列),那么pandas就可以帮我们很好的处理除了数值型的其他数据! 什么是p

数据分析缺失值处理(Missing Values)——删除法、填充法、插值法

缺失值指数据集中某些变量的值有缺少的情况,缺失值也被称为NA(not available)值。在pandas里使用浮点值NaN(Not a Number)表示浮点数和非浮点数中的缺失值,用NaT表示时间序列中的缺失值,此外python内置的None值也会被当作是缺失值。需要注意的是,有些缺失值也会以

【pandas小技巧】--拆分列

拆分列是`pandas`中常用的一种数据操作,它可以将一个包含多个值的列按照指定的规则拆分成多个新列,方便进行后续的分析和处理。拆分列的使用场景比较广泛,以下是一些常见的应用场景: 1. 处理日期数据:在日期数据中,经常会将年、月、日等信息合并成一列,通过拆分列可以将其拆分成多个新列,方便进行时间序

【pandas小技巧】--创建测试数据

学习`pandas`的过程中,为了尝试`pandas`提供的各类功能强大的函数,常常需要花费很多时间去创造测试数据。 在`pandas`中,快速创建测试数据可以更快的评估 `pandas` 函数。通过生成一组测试数据,可以评估例如 `read_csv`、`read_excel`、`groupby`等

【pandas基础】--数据统计

在进行统计分析时,`pandas`提供了多种工具来帮助我们理解数据。 `pandas`提供了多个聚合函数,其中包括均值、标准差、最大值、最小值等等。 此外,`pandas`还可以进行基于列的统计分析,例如通过`groupby()`函数对数据进行聚合,并计算每组的统计分析结果。 除了基本的统计分析之外

【pandas小技巧】--目录(完结)

`pandas`小技巧系列是介绍的是使用`pandas`分析数据时,最常用的一些操作技巧。 具体包括: 1. [创建测试数据](https://www.cnblogs.com/wang_yb/p/17552748.html) 学习pandas的过程中,为了尝试pandas提供的各类功能强大的函数,常

【pandas基础】--数据类型

数据类型是计算机编程中将不同类型的数据值分类和定义的方式。 通过数据类型,可以确定数据的存储方式和内存占用量,了解不同类型的数据进行各种运算的能力。 使用`pandas`进行数据分析时,最常用到的几种类型是: 1. 字符串类型,各类文本内容都是字符串类型 2. 数值类型,包括整数和浮点数,可用于计算

【pandas小技巧】--读取多个文件

日常分析数据时,只有单一数据文件的情况其实很少见,更多的情况是,我们从同一个数据来源定期或不定期的采集了很多数据文件;或者从不同的数据源采集多种不同格式的数据文件。 在这样的情况下,分析数据之前,需要将不同的数据集合并起来。合并数据一般有两个维度,一是同构的数据集合并后行数增加;一是异构的数据集合并