介绍
数据的时间序列分析不仅仅是一堆数字,比如Netflix的股票。它是一张迷人的织锦,用Pandas编织着我们的世界的错综复杂的故事。就像一根神秘的线,它捕捉了事件的涨落、趋势的兴衰以及模式的出现。它揭示了隐藏的联系和相关性,塑造了我们过去的形象,并提供了对未来的一瞥。
时间序列分析不仅仅是一种工具。它是通往知识和远见的门户。您将有能力解锁隐藏在数据时间织物中的秘密,将原始信息转化为有价值的见解。此外,它还能帮助您做出明智的决策,减轻风险并利用新兴机会。
让我们一起踏上这个激动人心的冒险之旅,发现时间真正是理解我们的世界的关键。您准备好了吗?让我们一起潜入时间序列分析的迷人领域吧!
学习目标
- 我们的目标是介绍时间序列分析的概念,强调其在各个领域的重要性,并展示展示实际应用时间序列分析的真实世界示例。
- 我们将通过展示如何使用Python和yfinance库导入Netflix股票数据来提供实际演示。这样读者将学习获取时间序列数据并为分析做准备的必要步骤。
- 最后,我们将重点介绍时间序列分析中使用的重要Pandas函数,例如移位、滚动和重新采样,这些函数能够有效地操作和分析时间序列数据。
本文是数据科学博客马拉松的一部分。
什么是时间序列分析?
时间序列是在连续、等间隔的时间间隔内收集或记录的数据点序列。
- 时间序列分析是一种用于分析随时间收集的数据点的统计技术。
- 它涉及研究顺序数据中的模式、趋势和依赖关系,以提取见解并进行预测。
- 它涉及数据可视化、统计建模和预测方法等技术,以有效地分析和解释时间序列数据。
时间序列数据的例子
- 股票市场数据:分析历史股价以识别趋势和预测未来价格。
- 天气数据:研究温度、降水和其他变量随时间的变化,以了解气候模式。
- 经济指标:分析GDP、通货膨胀率和失业率等,以评估经济表现。
- 销售数据:检查销售数据随时间的变化,以确定模式并预测未来销售额。
- 网站流量:分析网站流量指标,以了解用户行为并优化网站性能。
时间序列的组成部分
时间序列有4个组成部分。它们是:
- 趋势组成部分:趋势代表数据中的长期模式,以相对可预测的方式向上或向下移动。
- 季节性组成部分:季节性是一种定期重复的模式,例如每日、每周、每月或每季度。
- 周期性组成部分:周期性组成部分对应于遵循商业或经济周期的模式,其特点是增长和衰退的交替时期。
- 随机组成部分:随机组成部分代表数据中不符合趋势、季节性或周期性模式的不可预测和残余波动。
下图是时间序列不同组成部分的视觉解释。
在Python中使用yfinance
现在让我们看一下yfinance的实际用途。首先,我们将使用以下命令下载yfinance库。
安装
!pip install yfinance
请注意,如果您在本地机器上运行此代码时出现任何错误,例如在Jupyter Notebook中,您有两个选择:要么更新Python环境,要么考虑使用云笔记本,例如Google Colab作为替代解决方案。
导入库
import pandas as pd
import matplotlib.pyplot as plt
import yfinance as yf
from datetime import datetime
使用Yahoo Finance下载Netflix财务数据集
在此演示中,我们将使用Netflix的股票数据(NFLX)

df = yf.download(tickers = "NFLX")
df
让我们详细检查列以进行进一步分析:
- “Open”和“Close”列显示某一天股票的开盘价和收盘价。
- “High”和“Low”列分别表示该股票在特定日期达到的最高和最低价格。
- “Volume”列提供有关特定日期交易的股票总成交量的信息。
- “Adj_Close”列表示调整后的收盘价,考虑到股息、股票拆分或其他公司行动等因素,反映了任何给定交易日的股票收盘价。
关于数据
# 打印数据集的元数据
df.info()
# 数据描述
df.describe()
可视化时间序列数据
df['Open'].plot(figsize=(12,6),c='g')
plt.title("Netlix's Stock Prices")
plt.show()
从2002年到2021年,Netflix的股价稳步上涨。我们将使用Pandas在接下来的几节中进一步研究它。
Pandas进行时间序列分析
由于其在金融建模中的根源,Pandas为处理日期、时间和时间索引数据提供了丰富的工具。现在,让我们探索专门设计用于有效处理时间序列数据的关键Pandas数据结构。
1. 时间转移
时间转移,也称为时间序列分析中的滞后或时间转移,指将时间序列的值向前或向后移动。它涉及将整个系列按特定的周期向前或向后移动。
下面是在进行任何时间调整或转移之前未经修改的数据集:

有两种常见的时间转移类型:
1.1 向前转移(正向滞后)
要将数据向前移动,周期数(或增量)必须为正数。
df.shift(1)

注意: 移位数据中的第一行包含NaN值,因为没有前一个值可以进行移位。
1.2 向后移位(负滞后)
要向后移动数据,周期数(或增量)必须为负数。
df.shift(-1)

注意: 移位数据中的最后一行包含NaN值,因为没有后续值可以进行移位。
2. 滚动窗口
滚动是一种强大的转换方法,用于平滑数据并减少噪音。它通过将数据分成窗口并应用聚合函数(例如
mean(), median(), sum()等)来操作每个窗口内的值。
df['Open:10 days rolling'] = df['Open'].rolling(10).mean()
df[['Open','Open:10 days rolling']].head(20)
df[['Open','Open:10 days rolling']].plot(figsize=(15,5))
plt.show()

注意: 前面九个值都变为空白,因为使用十天的窗口时没有足够的数据来填充它们。

df['Open:20'] = df['Open'].rolling(window=20,min_periods=1).mean()
df['Open:50'] = df['Open'].rolling(window=50,min_periods=1).mean()
df['Open:100'] = df['Open'].rolling(window=100,min_periods=1).mean()
#visualization
df[['Open','Open:10','Open:20','Open:50','Open:100']].plot(xlim=['2015-01-01','2024-01-01'])
plt.show()
它们通常用于在时间序列分析中平滑绘图。可以减少数据中的固有噪声和短期波动,从而使潜在趋势和模式的可视化更清晰。
3. 时间重采样
时间重采样涉及将数据聚合到预定时间间隔(例如每月、每季度或每年)中,以提供对潜在趋势的概述视图。重新采样将信息压缩到较大的时间单位中,使分析师能够专注于更广泛的模式和趋势,而不会陷入日常波动。
#year end frequency
df.resample(rule='A').max()

df['Adj Close'].resample(rule='3Y').mean().plot(kind='bar',figsize=(10,4))
plt.title('Netflix 3年平均调整收盘价')
plt.show()

这个柱状图展示了 Netflix 股票价格的每三年平均 Adj_Close 值,从 2002 年到 2023 年。
下面是偏移量的完整列表。该列表也可以在 pandas 文档中找到。
结论
Python 的 pandas 库是一个非常强大和多才多艺的工具集,提供了大量内置函数,有效地分析时间序列数据。在本文中,我们探索了 pandas 处理和可视化时间序列数据的巨大能力。
在整篇文章中,我们深入研究了使用 Netflix 股票数据进行时间采样、时间移位和滚动分析等基本任务。这些基本操作是任何时间序列分析工作流程中至关重要的初始步骤。通过掌握这些技术,分析师可以从数据中获得有价值的洞察和提取有意义的信息。我们还可以通过使用机器学习技术预测未来几天 Netflix 的股票价格。这对寻求洞察和分析的股东来说尤为重要。
代码和实现已上传至 Github 的 Netflix 时间序列分析。
希望您觉得本文有用。在 LinkedIn 上与我联系。
常见问题解答
本文中显示的媒体不归 Analytics Vidhya 所有,仅在作者自行决定下使用。