iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python时间序列如何实现
  • 233
分享到

Python时间序列如何实现

2023-07-05 07:07:35 233人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

这篇文章主要介绍“python时间序列如何实现”,在日常操作中,相信很多人在Python时间序列如何实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python时间序列如何实现”的疑惑有所帮助!接下来,请跟

这篇文章主要介绍“python时间序列如何实现”,在日常操作中,相信很多人在Python时间序列如何实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python时间序列如何实现”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

时间序列(Time Series)是一种重要的结构化数据形式。时间序列的数据意义取决于具体的应用场景,主要有以下几种:

  • 时间戳(timestamp):特定的时刻

  • 固定时期(period):2007年1月或2010年全年

  • 时间间隔(interval):由起始和结束时间戳表示。时期(period)可以被看作间隔的特例。

1. datetime模块

1.1 datetime对象

datetime.datetime对象(以下简称datetime对象)以毫秒形式存储日期和时间。datetime.timedelta表示datetime对象之间的时间差。

import pandas as pdimport numpy as npfrom datetime import datetime,timedelta%matplotlib inlinenow = datetime.now() #now为datetime.datetime对象
now

输出:

datetime.datetime(2019, 10, 11, 15, 33, 5, 701305)

now.year,now.month,now.day

输出:

(2019, 10, 11)

delta = datetime.now()-datetime(2019,1,1) #delta为datetime.timedelta对象
datetime.now() + timedelta(12)

输出:

datetime.datetime(2023, 3, 10, 22, 13, 25, 3470)

1.2 字符串和datatime的相互转换

(1) 利用strdatetime.strftime方法(传入一个格式化字符串),datetime对象和pandas的Timestamp对象可以被格式化为字符串;datetime.strptime可以将字符串转换为日期。

stamp = datetime(2011,1,3)stamp.strftime('%Y-%m-%d') #或str(stamp)

输出:

‘2011-01-03’

datetime.strptime('2019-10-01','%Y-%m-%d')

输出:

datetime.datetime(2019, 10, 1, 0, 0)

(2) 对于一些常见的日期格式,可以使用datautil中的parser.parse方法(不支持中文)

from dateutil.parser import parseparse('2019-10-01') #形成datetime.datetime对象

输出:

datetime.datetime(2019, 10, 1, 0, 0)

(3) pandas的to_datetime方法可以解析多种不同的日期表示形式

import pandas as pddatestrs = ['7/6/2019','8/6/2019']dates = pd.to_datetime(datestrs) #将字符串列表转换为Timestamp对象
type(dates)

输出:

pandas.core.indexes.datetimes.DatetimeIndex

dates[0]

输出:

Timestamp(‘2019-07-06 00:00:00’)

2. 时间序列基础

pandas最基本的时间序列类型就是以时间戳(通常以Python字符串或datetime对象表示)为索引的Series。
时期(period)表示的是时间时区,比如数日、数月、数季、数年等。

from datetime import datetimedates = [datetime(2019,1,1),datetime(2019,1,2),datetime(2019,1,5),datetime(2019,1,10),datetime(2019,2,10),datetime(2019,10,1)]ts = pd.Series(np.random.randn(6),index = dates) #ts就成为一个时间序列,datetime对象实际上是被存放在一个DatetimeIndex中
ts

输出:

2019-01-01 1.175755
2019-01-02 -0.520842
2019-01-05 -0.678080
2019-01-10 0.195213
2019-02-10 2.201572
2019-10-01 0.115911
dtype: float64

dates = pd.DatetimeIndex(['2019/01/01','2019/01/02','2019/01/02','2019/5/01','3/15/2019']) #同一时间点上多个观测数据dup_ts = pd.Series(np.arange(5),index = dates)
dup_ts

输出:

2019-01-01 0
2019-01-02 1
2019-01-02 2
2019-05-01 3
2019-03-15 4
dtype: int32

dup_ts.groupby(level = 0).count()

输出:

2019-01-01 1
2019-01-02 2
2019-03-15 1
2019-05-01 1
dtype: int64

pd.date_range可用于生成指定长度的DatetimeIndex

pd.date_range('2019/01/01','2019/2/1') #默认情况下产生按天计算的时间点。

输出:

DatetimeIndex([‘2019-01-01’, ‘2019-01-02’, ‘2019-01-03’, ‘2019-01-04’,
‘2019-01-05’, ‘2019-01-06’, ‘2019-01-07’, ‘2019-01-08’,
‘2019-01-09’, ‘2019-01-10’, ‘2019-01-11’, ‘2019-01-12’,
‘2019-01-13’, ‘2019-01-14’, ‘2019-01-15’, ‘2019-01-16’,
‘2019-01-17’, ‘2019-01-18’, ‘2019-01-19’, ‘2019-01-20’,
‘2019-01-21’, ‘2019-01-22’, ‘2019-01-23’, ‘2019-01-24’,
‘2019-01-25’, ‘2019-01-26’, ‘2019-01-27’, ‘2019-01-28’,
‘2019-01-29’, ‘2019-01-30’, ‘2019-01-31’, ‘2019-02-01’],
dtype=‘datetime64[ns]’, freq=‘D’)

pd.date_range('2010/01/01',periods = 30) # 传入起始或结束日期及一个表示时间段的数字。

输出:

DatetimeIndex([‘2010-01-01’, ‘2010-01-02’, ‘2010-01-03’, ‘2010-01-04’,
‘2010-01-05’, ‘2010-01-06’, ‘2010-01-07’, ‘2010-01-08’,
‘2010-01-09’, ‘2010-01-10’, ‘2010-01-11’, ‘2010-01-12’,
‘2010-01-13’, ‘2010-01-14’, ‘2010-01-15’, ‘2010-01-16’,
‘2010-01-17’, ‘2010-01-18’, ‘2010-01-19’, ‘2010-01-20’,
‘2010-01-21’, ‘2010-01-22’, ‘2010-01-23’, ‘2010-01-24’,
‘2010-01-25’, ‘2010-01-26’, ‘2010-01-27’, ‘2010-01-28’,
‘2010-01-29’, ‘2010-01-30’],
dtype=‘datetime64[ns]’, freq=‘D’)

pd.date_range('2010/01/01','2010/12/1',freq = 'BM') #传入BM(business end of month),生成每个月最后一个工作日组成的日期索引

输出:

DatetimeIndex([‘2010-01-29’, ‘2010-02-26’, ‘2010-03-31’, ‘2010-04-30’,
‘2010-05-31’, ‘2010-06-30’, ‘2010-07-30’, ‘2010-08-31’,
‘2010-09-30’, ‘2010-10-29’, ‘2010-11-30’],
dtype=‘datetime64[ns]’, freq=‘BM’)

pd.Series(np.arange(13),index = pd.date_range('2010/01/01','2010/1/3',freq = '4h'))

输出:

2010-01-01 00:00:00 0
2010-01-01 04:00:00 1
2010-01-01 08:00:00 2
2010-01-01 12:00:00 3
2010-01-01 16:00:00 4
2010-01-01 20:00:00 5
2010-01-02 00:00:00 6
2010-01-02 04:00:00 7
2010-01-02 08:00:00 8
2010-01-02 12:00:00 9
2010-01-02 16:00:00 10
2010-01-02 20:00:00 11
2010-01-03 00:00:00 12
Freq: 4H, dtype: int32

period_range可用于创建规则的时期范围

pd.Series(np.arange(10),index = pd.period_range('2019/1/1','2019/10/01',freq='M'))

输出:

2019-01 0
2019-02 1
2019-03 2
2019-04 3
2019-05 4
2019-06 5
2019-07 6
2019-08 7
2019-09 8
2019-10 9
Freq: M, dtype: int32

3. 重采样及频率转换

重采样(resampling)指的是将时间序列从一个频率转换到另一个频率的处理过程。

  • 降采样(downsampling):将高频率数据聚合到低频率数据

  • 升采样(upsampling):将低频率数据转换到高频率

rng = pd.date_range('2019/01/01',periods = 100,freq='D')ts = pd.Series(np.random.randn(len(rng)),index=rng)
ts.resample('M').mean()

输出:

2019-01-31 0.011565
2019-02-28 -0.185584
2019-03-31 -0.323621
2019-04-30 0.043687
Freq: M, dtype: float64

ts.resample('M',kind='period').mean()

输出:

2019-01 0.011565
2019-02 -0.185584
2019-03 -0.323621
2019-04 0.043687
Freq: M, dtype: float64

rng = pd.date_range('2019/01/01',periods = 12,freq='T')ts = pd.Series(np.random.randn(len(rng)),index=rng)ts.resample('5min').sum()

输出:

2019-01-01 00:00:00 1.625143
2019-01-01 00:05:00 2.588045
2019-01-01 00:10:00 2.447725
Freq: 5T, dtype: float64

金融领域中有种时间序列聚合方式,称为OHLC重采样,即计算各面元的四个值:

  • Open:开盘

  • High:最高值

  • Low:最小值

  • Close:收盘

输出:


openhighlowclose
2019-01-01 00:00:00-0.3459521.120258-0.3459521.120258
2019-01-01 00:05:00-0.1061972.448439-1.014186-1.014186
2019-01-01 00:10:001.4450361.4450361.0026881.002688

另一种降采样的办法是实用pandas的groupby方法。

rng = pd.date_range('2019/1/1',periods = 100,freq='D')ts = pd.Series(np.arange(len(rng)), index = rng)
ts.resample('m').mean()

输出:

2019-01-31 15.0
2019-02-28 44.5
2019-03-31 74.0
2019-04-30 94.5
Freq: M, dtype: float64

ts.groupby(lambda x:x.month).mean()

输出:

1 15.0
2 44.5
3 74.0
4 94.5
dtype: float64

4. 时间序列可视化

需要加载stock.csv文件,该文件格式如下:


AAAAPLGEIBMJNJMSFTPEPSPXXOM
1990/2/1 0:004.987.862.8716.794.270.516.04328.796.12
1990/2/2 0:005.0482.8716.894.370.516.09330.926.24
1990/2/5 0:005.078.182.8717.324.340.516.05331.856.25
1990/2/6 0:005.018.122.8817.564.320.516.15329.666.23
1990/2/7 0:005.047.772.9117.934.380.516.17333.756.33
close_px_all = pd.read_csv('datasets/stock.csv',parse_dates = True, index_col=0)close_px = close_px_all[['AAPL','MSFT','XOM']]close_px.plot()  #'AAPL','MSFT','XOM'股价变化

Python时间序列如何实现

close_px.resample('B').ffill().plot()  #填充工作日后,股价变化

Python时间序列如何实现

close_px.AAPL.loc['2011-01':'2011-03'].plot() #苹果公司2011年1月到3月每日股价

Python时间序列如何实现

close_px.AAPL.loc['2011-01':'2011-03'].plot() #苹果公司2011年1月到3月每日股价

Python时间序列如何实现

5. 窗口函数

5.1 移动窗口函数

移动窗口函数(moving window function)指在移动窗口(可带指数衰减权数)上计算的各种统计函数,也包括窗口不定长的函数(如指数加权移动平均)。 与其他统计函数一样,移动窗口函数会自动排除缺失值。

close_px.AAPL.plot()close_px.AAPL.rolling(250).mean().plot()   #250日均线

Python时间序列如何实现

close_px.rolling(250).mean().plot(logy=True)   #250日均线 对数坐标

Python时间序列如何实现

close_px.AAPL.rolling(250,min_periods=10).std().plot()  #标准差

Python时间序列如何实现

5.2 指数加权函数

指数加权函数:定义一个衰减因子(decay factor),以赋予近期的观测值拥有更大的权重。衰减因子常用时间间隔(span),可以使结果兼容于窗口大小等于时间间隔的简单移动窗口(simple moving window)函数。

appl_px = close_px.AAPL['2005':'2009']ma60 = appl_px.rolling(60,min_periods=50).mean()  #60日移动平均 ewma60 = appl_px.ewm(span = 60).mean()           #60日指数加权移动平均
appl_px.plot()ma60.plot(c='g',style='k--')ewma60.plot(c='r',style='k--')  #相对于普通移动平均,能“适应”更快的变化

Python时间序列如何实现

5.3 二元移动窗口函数

相关系数和协方差等统计运算需要在两个时间序列上执行,如某只股票对某个参考指数(如标普500)的相关系数。

aapl_rets = close_px_all.AAPL['1992':].pct_change()spx_rets = close_px_all.SPX.pct_change()corr = aapl_rets.rolling(125,min_periods=100).corr(spx_rets) #APPL6个月回报与标准普尔500指数的相关系数corr.plot()

Python时间序列如何实现

all_rets = close_px_all[['AAPL','MSFT','XOM']]['2003':].pct_change()corr = all_rets.rolling(125,min_periods=100).corr(spx_rets) #3支股票月回报与标准普尔500指数的相关系数corr.plot()

Python时间序列如何实现

到此,关于“Python时间序列如何实现”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: Python时间序列如何实现

本文链接: https://www.lsjlt.com/news/350318.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python时间序列如何实现
    这篇文章主要介绍“Python时间序列如何实现”,在日常操作中,相信很多人在Python时间序列如何实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python时间序列如何实现”的疑惑有所帮助!接下来,请跟...
    99+
    2023-07-05
  • Python时间序列的实现
    目录1. datetime模块1.1 datetime对象1.2 字符串和datatime的相互转换2. 时间序列基础3. 重采样及频率转换4. 时间序列可视化5. 窗口函数5.1 ...
    99+
    2023-02-28
    Python 时间序列
  • Pytorch 如何实现LSTM时间序列预测
    开发环境说明: Python 35 Pytorch 0.2 CPU/GPU均可 1、LSTM简介 人类在进行学习时,往往不总是零开始,学习物理你会有数学基础、学习英语你会有中文基础等...
    99+
    2024-04-02
  • Pandas.DataFrame时间序列数据处理如何实现
    本篇内容主要讲解“Pandas.DataFrame时间序列数据处理如何实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Pandas.DataFrame时间序列数据处理如何实现”吧!将panda...
    99+
    2023-07-05
  • python时间序列数据相减的实现
    目录1.将读取的时间序列数据转化为timestamp格式2.时间数据的相减在此记录自己学习python数据分析过程中学到的一些数据处理的小技巧。本节主要分享时间数据的相减。 1.将读...
    99+
    2023-05-18
    python时间序列相减 python时间相减
  • Python怎么实现LSTM时间序列预测
    本篇内容主要讲解“Python怎么实现LSTM时间序列预测”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python怎么实现LSTM时间序列预测”吧!参考数据:数据一共两列,左边是日期,右边是乘...
    99+
    2023-06-02
  • Python中怎么实现时间序列可视化
    Python中怎么实现时间序列可视化,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1.单个时间序列首先,我们从tushare.pro获取指数日线行情数据,并查看数据类型。imp...
    99+
    2023-06-16
  • python学习——时间序列
    目录 1 生成时间1.1 pd.Timestamp1.2 pd.to_datetime 最常用1.2.1 单个转换1.2.2 多个时间转换1.2.3 日期在前 dayfirst1.2.4 处理...
    99+
    2023-09-29
    python 学习 数学建模
  • 如何使用Python绘制时间序列图
    这篇文章跟大家分析一下“如何使用Python绘制时间序列图”。内容详细易懂,对“如何使用Python绘制时间序列图”感兴趣的朋友可以跟着小编的思路慢慢深入来阅读一下,希望阅读后能够对大家有所帮助。下面跟着小编一起深入学习“如何使用Pytho...
    99+
    2023-06-26
  • pandas时间序列之pd.to_datetime()的实现
    目录解析来自各种来源和格式的时间序列信息时间序列解析之小试牛刀时间序列解析之磨刀霍霍1. 指定识别的format2. 遇到DataFrame3. 遇到不能识别的处理方法4. orig...
    99+
    2024-04-02
  • Python ArcPy如何实现批量拼接长时间序列栅格图像
    本篇内容介绍了“Python ArcPy如何实现批量拼接长时间序列栅格图像”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!首先,我们...
    99+
    2023-07-05
  • SQL实现时间序列错位还原案列
    目录一、需求描述二、思路概述1 需求延展2 思路概述 三、SQL代码一、需求描述 1 原表T1某条记录(记做r1,相邻下一条为r2)的下一行记录的STARTDATE小于上一行END...
    99+
    2024-04-02
  • LSTM实现时间序列预测(PyTorch版)
    💥项目专栏:【深度学习时间序列预测案例】零基础入门经典深度学习时间序列预测项目实战(附代码+数据集+原理介绍) 文章目录 前言 一、基于PyTorch搭建LSTM模型实现风速时间...
    99+
    2023-09-21
    pytorch lstm 深度学习 人工智能 python
  • python如何实现序列解包
    这篇文章给大家分享的是有关python如何实现序列解包的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。序列解包我们定义一个变量,存储名字的名和姓,如果我们想要单独提取他们的姓和名,并存入不同变量,我们最简单的办法就...
    99+
    2023-06-27
  • python画时间序列散点图
    在运维管理中,经常遇到时间序列的数据,比如网卡流量、在线用户数、并发连接数,等等。用散点图可以直观的查看数据的分布情况。 matplotlib模块的pyplot有画散点图的函数,但是该函数要求x轴是数字类型。pandas的plot函数里,散...
    99+
    2023-01-31
    序列 时间 python
  • 如何使用python实现时间序列预测中的数据滑窗操作
    这篇文章主要为大家展示了“如何使用python实现时间序列预测中的数据滑窗操作”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何使用python实现时间序列预测中的数据滑窗操作”这篇文章吧。撰写...
    99+
    2023-06-29
  • Pytorch怎么实现LSTM时间序列预测
    小编给大家分享一下Pytorch怎么实现LSTM时间序列预测,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!开发环境说明:Python 35Pytorch 0.2CPU/GPU均可1、LSTM简介人类在进行学习时,往往不总是...
    99+
    2023-06-15
  • Pandas.DataFrame时间序列数据处理的实现
    目录如何将一列现有数据指定为DatetimeIndex读取CSV时如何指定DatetimeIndex关于pandas.Series将pandas.DataFrame,pandas.S...
    99+
    2023-02-23
    Pandas.DataFrame时间序列 Pandas时间序列处理
  • vue如何实现两列水平时间轴
    这篇文章给大家分享的是有关vue如何实现两列水平时间轴的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。具体如下:先上图,主要实现两列水平时间轴,查看了很多人实现的,水平只有一列,并且elementUI的时间轴只有竖...
    99+
    2023-06-25
  • 如何使用Redis序列化存储时间序列数据
    在Redis中存储时间序列数据可以采用以下两种方式进行序列化: 使用Redis的数据结构:可以将时间序列数据存储在Redis的有...
    99+
    2024-04-29
    Redis
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作