Python时间序列分析苹果股票数据:分解、平稳性检验、滤波器、滑动窗口平滑、移动平均、可视化(上)

简介: Python时间序列分析苹果股票数据:分解、平稳性检验、滤波器、滑动窗口平滑、移动平均、可视化

全文链接:https://tecdat.cn/?p=33550


时间序列是一系列按时间顺序排列的观测数据。数据序列可以是等间隔的,具有特定频率,也可以是不规则间隔的,比如电话通话记录点击文末“阅读原文”获取完整代码数据


什么是时间序列?

在进行投资和交易研究时,对于时间序列数据及其操作要有专业的理解。本文将重点介绍如何使用Python和Pandas帮助客户进行时间序列分析来分析股票数据。

理解日期时间和时间差

在我们完全理解Python中的时间序列分析之前,了解瞬时、持续时间和时间段的差异非常重要。

类型 描述 例子
日期(瞬时) 一年中的某一天 2019年9月30日,2019年9月30日
时间(瞬时) 时间上的单个点 6小时,6.5分钟,6.09秒,6毫秒
日期时间(瞬时) 日期和时间的组合 2019年9月30日06:00:00,2019年9月30日上午6:00
持续时间 两个瞬时之间的差异 2天,4小时,10秒
时间段 时间的分组 2019第3季度,一月


Python的Datetime模块

datetime模块提供了在简单和复杂方式下进行日期和时间操作的类。

创建瞬时

日期、日期时间和时间都是单独的类,我们可以通过多种方式创建它们,包括直接创建和通过字符串解析。

now = datetime.datetime.today()
today = datetime.date.today()
print(now)
print(today)

创建持续时间

timedeltas 表示时间的持续时间。它们可以与时间点相加或相减。

past = now - alldelta
print(type(future))
print(future)
print(type(past))
print(past)

访问日期时间属性

类和对象属性可以帮助我们分离出我们想要看到的信息。我列出了最常见的属性,但你可以在datetime模块的文档上找到详尽的列表。

类/对象 属性 描述
共享类属性 class.min 可表示的最早日期、datetime、time

class.max 可表示的最晚日期、datetime、time

class.resolution 两个日期、datetimes 或 times 之间的最小差值
日期/日期时间 object.year 返回年份

object.month 返回月份(1 - 12)

object.day 返回日期(1-32)
时间/日期时间 object.hour 返回小时(0-23)

object.minute 返回分钟(0-59)

object.second 返回秒数(0-59)


print(datetime.datetime.min)
print(datetime.datetime.max)
print(datetime1.microsecond)

在Pandas中创建时间序列

让我们获取由Intrinio开发者沙盒提供的苹果股票历史数据。

apple_price_history = pd.read_csv(f)
apple_price_history[['open', 'high', 'low', 'close', 'volume']].head()

image.png

让我们查看数据框的数据类型或 dtypes,看看是否有任何日期时间信息。

让我们将数据框的 RangeIndex 更改为 DatetimeIndex。为了好看,我们将展示如何使用 read_csv 用 DatetimeIndex 读取数据。

apptime64)
apple_price_history.dtypes

image.png

print(apple_price_history[['open', 'high', 'low', 'close']].head())
apple_price_history.index[0:10]

image.png

import numpy as np
import urllib.request
                                    index_col='date',
                                    usecols=['date',
                                             'adj_open',
                                             'adj_high',
                                             'adj_low',
                                             'adj_close',
                                             'adj_volume'])
apple_price_history.columns = names
print(apple_price_history.head())

image.png

添加日期时间字符串

通常,日期的格式可能是无法解析的。我们可以使用dt.strftime将字符串转换为日期。在创建 sp500数据集 时,我们使用了strptime

sp500.loc[:,'date'].apply(lambda x: datetime.strptime(x,'%Y-%m-%d'))

时间序列选择

按日、月或年选择日期时间

现在我们可以使用索引和loc轻松选择和切片日期。

apple_price_history.loc['2018-6-1']

image.png

使用日期时间访问器

dt访问器具有多个日期时间属性和方法,可以应用于系列的日期时间元素上,这些元素在Series API文档中可以找到。

属性 描述
Series.dt.date 返回包含Python datetime.date对象的numpy数组(即,没有时区信息的时间戳的日期部分)。
Series.dt.time 返回datetime.time的numpy数组。
Series.dt.timetz 返回还包含时区信息的datetime.time的numpy数组。
Series.dt.year 日期的年份。
Series.dt.month 月份,其中一月为1,十二月为12。
Series.dt.day 日期的天数。
Series.dt.hour 时间的小时。
Series.dt.minute 时间的分钟。
Series.dt.second 时间的秒数。
Series.dt.microsecond 时间的微秒数。
Series.dt.nanosecond 时间的纳秒数。
Series.dt.week 年的星期序数。
Series.dt.weekofyear 年的星期序数。
Series.dt.dayofweek 星期几,星期一为0,星期日为6。
Series.dt.weekday 星期几,星期一为0,星期日为6。
Series.dt.dayofyear 年的第几天的序数。
Series.dt.quarter 季度。
Series.dt.is_month_start 表示日期是否为月的第一天。
Series.dt.is_month_end 表示日期是否为月的最后一天。
Series.dt.is_quarter_start 表示日期是否为季度的第一天。
Series.dt.is_quarter_end 表示日期是否为季度的最后一天。
Series.dt.is_year_start 表示日期是否为年的第一天。
Series.dt.is_year_end 表示日期是否为年的最后一天。
Series.dt.is_leap_year 表示日期是否为闰年。
Series.dt.daysinmonth 月份中的天数。
Series.dt.days_in_month 月份中的天数。
Series.dt.tz 返回时区(如果有)。
Series.dt.freq

 

方法 描述
Series.dt.to_period(self, *args, **kwargs) 将数据转换为特定频率的PeriodArray/Index。
Series.dt.to_pydatetime(self) 将数据返回为本机Python datetime对象的数组。
Series.dt.tz_localize(self, *args, **kwargs) 将时区非感知的Datetime Array/Index本地化为时区感知的Datetime Array/Index。
Series.dt.tz_convert(self, *args, **kwargs) 将时区感知的Datetime Array/Index从一个时区转换为另一个时区。
Series.dt.normalize(self, *args, **kwargs) 将时间转换为午夜。
Series.dt.strftime(self, *args, **kwargs) 使用指定的日期格式转换为索引。
Series.dt.round(self, *args, **kwargs) 对数据执行舍入操作,将其舍入到指定的频率。
Series.dt.floor(self, *args, **kwargs) 对数据执行floor操作,将其舍入到指定的频率。
Series.dt.ceil(self, *args, **kwargs) 对数据执行ceil操作,将其舍入到指定的频率。
Series.dt.month_name(self, *args, **kwargs) 返回具有指定区域设置的DateTimeIndex的月份名称。
Series.dt.day_name(self, *args, **kwargs) 返回具有指定区域设置的DateTimeIndex的星期几名称。


周期

print(df.dt.quarter)
print(df.dt.day_name())

image.png

DatetimeIndex包括与dt访问器大部分相同的属性和方法。

apple_price_history.index.day_name()

image.png

频率选择


当时间序列是均匀间隔的时,可以在Pandas中与频率关联起来。

pandas.date_range 是一个函数,我们可以创建一系列均匀间隔的日期。

dates = pd.date_range('2019-01-01', '2019-12-31', freq='D')
dates

image.png

除了指定开始或结束日期外,我们可以用一个周期来替代,并调整频率。

hours = pd.date_range('2019-01-01', periods=24, freq='H')
print(hours)

image.png

pandas.DataFrame.asfreq 返回具有新频率的数据帧或序列。对于数据中缺失的时刻,将添加新行并用NaN填充,或者使用我们指定的方法填充。通常需要提供偏移别名以获得所需的时间频率。

别名


别名 描述
B 工作日频率
C 定制的工作日频率
D 日历日频率
W 周频率
M 月底频率
SM 半月末频率(每月15日和月末)
BM 工作日月末频率
CBM 定制的工作日月末频率
MS 月初频率
SMS 半月初频率(每月1日和15日)
BMS 工作日月初频率
CBMS 定制的工作日月初频率
Q 季末频率
BQ 工作日季末频率
QS 季初频率
BQS 工作日季初频率
A, Y 年末频率
BA, BY 工作日年末频率
AS, YS 年初频率
BAS, BYS 工作日年初频率
BH 工作小时频率
H 小时频率
T, min 分钟频率
S 秒频率
L, ms 毫秒
U, us 微秒
N 纳秒


print(apple_quarterly_history.head())

image.png

填充数据


pandas.Series.asfreq 为我们提供一个填充方法来替换NaN值。

print(apple_price_history['close'].asfreq('H', method='ffill').head())

image.png

重新采样:上采样和下采样


pandas.Dataframe.resample 返回一个重新取样对象,与groupby对象非常相似,可以在其上运行各种计算。

我们经常需要降低(下采样)或增加(上采样)时间序列数据的频率。如果我们有每日或每月的销售数据,将其降采样为季度数据可能是有用的。或者,我们可能希望上采样我们的数据以匹配另一个用于进行预测的系列的频率。上采样较少见,并且需要插值。

print(apple_quarterly_history.agg({'high':'max', 'low':'min'})[:5])

image.png

现在我们可以使用我们上面发现的所有属性和方法。

print(apple_price_history.index.day_name())
Index(['Friday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday',
       'Monday', 'Tuesday', 'Wednesday', 'Friday',
       ...
       'Wednesday', 'Thursday', 'Friday', 'Monday', 'Tuesday', 'Wednesday',
       'Thursday', 'Friday', 'Monday', 'Tuesday'],
      dtype='object', name='date', length=9789)
print(datetime.to_period('Q'))
datetime.to_period('Q').end_time

image.png


Python时间序列分析苹果股票数据:分解、平稳性检验、滤波器、滑动窗口平滑、移动平均、可视化(下):https://developer.aliyun.com/article/1498627

相关文章
|
9月前
|
运维 监控 算法
时间序列异常检测:MSET-SPRT组合方法的原理和Python代码实现
MSET-SPRT是一种结合多元状态估计技术(MSET)与序贯概率比检验(SPRT)的混合框架,专为高维度、强关联数据流的异常检测设计。MSET通过历史数据建模估计系统预期状态,SPRT基于统计推断判定偏差显著性,二者协同实现精准高效的异常识别。本文以Python为例,展示其在模拟数据中的应用,证明其在工业监控、设备健康管理及网络安全等领域的可靠性与有效性。
1017 13
时间序列异常检测:MSET-SPRT组合方法的原理和Python代码实现
|
10月前
|
JavaScript 前端开发 Android开发
【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
356 13
【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
|
11月前
|
机器学习/深度学习 数据可视化 数据挖掘
使用Python实现基于矩阵分解的长期事件(MFLEs)时间序列分析
在现代数据分析中,高维时间序列数据的处理和预测极具挑战性。基于矩阵分解的长期事件(MFLEs)分析技术应运而生,通过降维和时间序列特性结合,有效应对大规模数据。MFLE利用矩阵分解提取潜在特征,降低计算复杂度,过滤噪声,并发现主要模式。相比传统方法如ARIMA和深度学习模型如LSTM,MFLE在多变量处理、计算效率和可解释性上更具优势。通过合理应用MFLE,可在物联网、金融等领域获得良好分析效果。
357 0
使用Python实现基于矩阵分解的长期事件(MFLEs)时间序列分析
|
7月前
|
数据可视化 数据挖掘 数据安全/隐私保护
Python实现时间序列动量策略:波动率标准化让量化交易收益更平稳
时间序列动量策略(TSMOM)是一种基于资产价格趋势的量化交易方法,通过建立多头或空头头寸捕捉市场惯性。然而,传统TSMOM策略因风险敞口不稳定而面临收益波动问题。波动率调整技术通过动态调节头寸规模,维持恒定风险水平,优化了策略表现。本文系统分析了波动率调整TSMOM的原理、实施步骤及优势,强调其在现代量化投资中的重要地位,并探讨关键参数设定与实际应用考量,为投资者提供更平稳的风险管理体验。
320 4
Python实现时间序列动量策略:波动率标准化让量化交易收益更平稳
|
11月前
|
数据可视化 算法 数据挖掘
Python时间序列分析工具Aeon使用指南
**Aeon** 是一个遵循 scikit-learn API 风格的开源 Python 库,专注于时间序列处理。它提供了分类、回归、聚类、预测建模和数据预处理等功能模块,支持多种算法和自定义距离度量。Aeon 活跃开发并持续更新至2024年,与 pandas 1.4.0 版本兼容,内置可视化工具,适合数据探索和基础分析任务。尽管在高级功能和性能优化方面有提升空间,但其简洁的 API 和完整的基础功能使其成为时间序列分析的有效工具。
347 37
Python时间序列分析工具Aeon使用指南
|
7月前
|
存储 数据采集 大数据
Python推导式进阶指南:优雅初始化序列的科学与艺术
本文系统讲解Python推导式的用法与技巧,涵盖列表、字典、集合推导式及生成器表达式。通过代码示例和性能对比,展示推导式在数据结构初始化中的优势:简洁高效、执行速度快30%-50%。文章分析基础语法、核心应用场景(如序列构造、键值对转换、去重运算)及嵌套使用,并探讨使用边界与最佳实践,强调可读性优先原则。最后指出,合理运用推导式能显著提升代码质量和处理效率,同时避免过度复杂化的陷阱。
217 0
|
10月前
|
JavaScript 搜索推荐 Android开发
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
402 8
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
|
10月前
|
数据采集 JavaScript Android开发
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
451 7
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
|
10月前
|
存储 索引 Python
Python入门:6.深入解析Python中的序列
在 Python 中,**序列**是一种有序的数据结构,广泛应用于数据存储、操作和处理。序列的一个显著特点是支持通过**索引**访问数据。常见的序列类型包括字符串(`str`)、列表(`list`)和元组(`tuple`)。这些序列各有特点,既可以存储简单的字符,也可以存储复杂的对象。 为了帮助初学者掌握 Python 中的序列操作,本文将围绕**字符串**、**列表**和**元组**这三种序列类型,详细介绍其定义、常用方法和具体示例。
Python入门:6.深入解析Python中的序列
|
11月前
|
机器学习/深度学习 运维 数据可视化
Python时间序列分析:使用TSFresh进行自动化特征提取
TSFresh 是一个专门用于时间序列数据特征自动提取的框架,支持分类、回归和异常检测等机器学习任务。它通过自动化特征工程流程,处理数百个统计特征(如均值、方差、自相关性等),并通过假设检验筛选显著特征,提升分析效率。TSFresh 支持单变量和多变量时间序列数据,能够与 scikit-learn 等库无缝集成,适用于大规模时间序列数据的特征提取与模型训练。其工作流程包括数据格式转换、特征提取和选择,并提供可视化工具帮助理解特征分布及与目标变量的关系。
791 16
Python时间序列分析:使用TSFresh进行自动化特征提取

推荐镜像

更多