快速实现时间序列数据归一化

快速实现时间序列数据归一化

背景描述

50M的时间序列数据,做归一化,做了一天一夜,我的笔记本CPU还可以,8G内存。网上找了一些,基本方法和我的一致,要么是for循环,要么,写个函数,大致也要用for循环。有比较高明一点的,只是事先把最大最小值先算出来。提升了一小丢丢速度,本质上没啥子变化。

Numpy库的特点

就是并行,为啥pandas读取完的数据还要使用for循环来做呢?至少自己怀疑Python没学好。不认头,于是琢磨出下面方法,5分钟搞定数据归一化。闲话少说,直接上代码。

借助Pandas快速实现归一化

首先导入数据
数据下载链接:
https://download.csdn.net/download/weixin_45341568/12736595

导入数据包

import numpy as np
import pandas as pd
import datetime

读取数据,并对数据做处理,将日期和时间作为多重索引

ts_x = pd.read_csv('./data/original_data/1min.csv',parse_dates=[0,1],usecols=[0,1,3])
ts_x.time = ts_x.time.apply(lambda x: datetime.datetime.strftime(x, '%H:%M:%S'))
ts_x.set_index(['date', 'time'], inplace=True)

快速实现时间序列数据归一化_第1张图片

对数据进行堆叠操作,并删除多余列索引。
多余的列索引是由于堆叠操作产生

ts_x = ts_x.unstack()
ts_x.columns = ts_x.columns.droplevel()

快速实现时间序列数据归一化_第2张图片
然后用下面一行代码就可以做归一化操作了,这里做个提示,pandas中的df.min()这个函数默认是对每列求最小值,通过设置参数,可以变更为对每行求最小值。

df_norm = ts_x.apply(lambda x: (x-ts_x.min(1))/(ts_x.max(1)-ts_x.min(1)))

快速实现时间序列数据归一化_第3张图片
就这么简单,就完成了数据的归一化操作。总共用时不超过5分钟。

你可能感兴趣的:(Python编程,量化交易,时间序列,python,机器学习)