如何使用 Python 的 pandas 库来分析时间序列数据?让我们来一探究竟。

p时间重采样as 库经常用于导入、管理和分析各种格式的数据集。在本文中,我们将使用它来分析微软前几年的股价。我们还将了解如何使用 pandas and时间平移

什么是时间序列数据?

时间序列数据包含依赖于某种时间单位的值。以下都是时间序列数据的示例:

  • 24 小时内每小时售出的商品数量
  • 一个月内出行的乘客人数
  • 每日股票价格

在所有这些中,数据都依赖于时间单位;在图中,时间显示在 x 轴上,相应的数据值显示在 y 轴上。

获取数据

我们将使用包含 2013 年至 2018 年微软股价的数据集。该数据集可从 Yahoo Finance 。您可能需要输入时间跨度来下载数据,数据将以 CSV 格式呈现。

导入所需的库

在将数据集导入应用程序之前,您需要导入所需的库。执行以下脚本即可执行此操作。

import numpy as np
import pandas as pd

%matplotlib inline
import matplotlib.pyplot as plt

此脚本导入了 NumPy、pandas 和 matplotlib 库。这些是执行本文中的脚本所需的库。

注意: 数据集中的所有脚本均已使用 Jupyter Jupyter

导入和分析数据集

要导入数据集,我们将使用 read_csv() 方法。执行以下脚本:

stock_data = pd.read_csv('E:/Datasets/MSFT.csv')

要查看数据集的外观,可以使用 head() 方法。此方法返回数据集的前五行。

stock_data.head()

输出如下所示:

output table

您可以看到数据集包含 Microsoft 股票的日期和开盘价、最高价、最低价、收盘价和调整后的收盘价。目前,该 Date 列被视为简单字符串。我们希望将列中的值 Date 视为日期。为此,我们需要将 Date 列转换为 日期时间 类型。以下脚本执行此操作:

stock_data['Date'] = stock_data['Date'].apply(pd.to_datetime)

最后,我们需要将 Date 列用作索引列,因为所有其他列都依赖于此列中的值。为此,请执行以下脚本:

stock_data.set_index('Date',inplace=True)

如果再次使用 head() 方法,您将看到列中的值 Date 以粗体显示,如下图所示。这是因为该 Date 列现在被视为索引列:

output table

现在,让我们根据日期绘制“开盘”列的值。为此,请执行以下脚本:

plt.rcParams['figure.figsize'] = (10, 8)   # Increases the Plot Size
stock_data['Open'].plot(grid = True)

输出显示了 2013 年 1 月至 2017 年底的开盘股价:

stock prices

接下来,我们将使用 pandas 库进行时间重采样。如果您在继续之前需要复习一下 pandas、matplotlib 或 NumPy 技能,请查看 的“ 数据科学 Python 入门” 课程。

时间重采样

时间重采样是指汇总特定时间段的时间序列数据。默认情况下,您有每天的股票价格信息。如果您想获取每年的平均股票价格信息怎么办?您可以使用时间重采样来实现这一点。

pandas 库自带 resample() 函数,可用于时间重采样。您需要做的就是为 规则 属性以及聚合函数(例如最大值、最小值、平均值等)设置偏移量。

以下是一些可用作 规则 resample()

W       weekly frequency
M       month end frequency
Q       quarter end frequency
A       year end frequency

偏移值的完整列表可以在 pandas 文档 .

现在您已经拥有了时间重采样所需的所有信息。让我们来实现它。假设您想找到所有年份的平均股票价格。为此,请执行以下脚本:

stock_data.resample(rule='A').mean()

偏移值“A”指定您想要根据年份重新采样。mean () 函数指定您想要查找平均股票价值。

输出如下所示:

output table

您可以看到该列的值 Date 是该年的最后一天。所有其他值都是全年的平均值。

类似地,您可以使用以下脚本查找每周平均股票价格。(注意:周的偏移量为“W”。)

stock_data.resample(rule='W').mean()

输出:

output table

使用时间重采样绘制图表

您还可以使用时间重采样绘制特定列的图表。查看以下脚本:

plt.rcParams['figure.figsize'] = (8, 6) # change plot size
stock_data['Open'].resample('A').max().plot(kind='bar')
plt.title('Yearly Maximum Open Price for Microsoft')

上述脚本绘制了一个条形图,显示了股票的年度最高价格。您可以看到,重采样方法仅应用于 Open 列,而不是整个数据集。max () plot() 函数链接在一起,以 1) 首先找到每年的最高开盘价,然后 2) 绘制条形图。输出如下所示:

bar plot

类似地,为了绘制季度最高开盘价,我们只需将偏移值设置为“Q”:

plt.rcParams['figure.figsize'] = (8, 6) # change plot size
stock_data['Open'].resample('Q').max().plot(kind='bar')
plt.title('Quarterly Maximum Open Price for Microsoft')

现在您可以看到微软的季度最高开盘股价:

maximum opening stock price for Microsoft

时间转换

时间平移是指沿着时间索引向前或向后移动数据。让我们看看向前或向后移动数据是什么意思。

head() 查看数据集的前五行和后五行 tail() head() 函数显示数据集的前五行,而 tail() 函数显示后五行。

执行以下脚本:

stock_data.head()
output table
stock_data.tail()
output table

我们从数据集的头部和尾部打印了记录,因为当我们稍后移动数据时,我们会看到实际数据和移动后的数据之间的差异。

向前迈进

现在让我们进行实际的移动。要将数据向前移动,只需将要移动的索引数传递给 shift shift () 方法,如下所示:

stock_data.shift(1).head()

以前属于记录 Open , Close , Adjusted Close 的值 Volume 、 和 N 现在属于记录 N+1 。输出如下所示:

output table

从输出中可以看到,第一个索引 (2012-12-31) 现在没有数据。第二个索引包含以前属于第一个索引 (2013-01-02) 的记录。

类似地,在尾部,您将看到最后一个索引(2017-12-29)现在包含以前属于倒数第二个索引(2017-12-28)的记录。如下所示:

output table

此前,Open 列值 85.900002 属于索引 2017-12-28,但向前移动一个索引后,它现在属于 2017-12-29。

向后移动

要将数据向后移动,请传递索引数以及减号。向后移动一个索引意味着 Open , Close , Adjusted Close 之前属于记录 Volume 、 和 N 现在属于记录 N-1 .

要后退一步,请执行以下脚本:

stock_data.shift(-1).head()

输出如下所示:

output table

我们可以看到,向后移动一个指数后,开盘价 27.250000 属于指数 2012-12-31。之前,它属于指数 2013-01-02。

使用时间偏移移动数据

在时间重采样部分,我们使用了 p属性指定步长,而sas 偏移表中的偏移来指定重采样的时间段。我们也可以使用相同的偏移表进行时间移位。为此,我们需要传递 参数 and 属性指定步长的大小。例如,如果您想将数据向前移动两周,可以使用 。period period freq freq tshift() tshift() 如下所示:

stock_data.tshift(periods=2,freq='W').head()

在输出中,您将看到数据向前移动了两周:

output table

了解有关 Python 中时间序列数据的更多信息

时间序列分析是作为金融专家需要完成的主要任务之一,与投资组合分析和卖空一样。在本文中,您了解了如何使用 Python 的 pandas 库来可视化时间序列数据。您已经学习了如何执行时间采样和时间移位。但是,本文仅仅触及了 pandas 和 Python 进行时间序列分析的皮毛。Python 提供了更高级的时间序列分析功能,例如预测未来股票价格以及对时间序列数据执行滚动和扩展操作。

如果您有兴趣进一步了解用于时间序列分析和其他财务任务的 Python,我强烈建议您参加我们的 Python 数据科学 入门课程,以获得更多实践经验。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信小程序

微信扫一扫体验

立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部