点击名片
关注并星标
#TSer#
时间序列数据是按时间顺序按固定时间间隔排列的观测值的集合。每个观察对应于一个特定的时间点,并且可以以各种频率(例如,每天、每月、每年)记录数据。此类数据在许多领域都非常重要,包括金融、经济、气候科学等,因为它有助于通过分析时间序列数据来掌握潜在模式、发现趋势和发现季节性波动。
评估时间序列数据以确定相关统计数据和其他数据属性的技术称为时间序列分析。任何具有重复模式的时间序列,包括金融市场、天气和社交媒体统计数据,都可能受到影响。时间序列分析的主要目标是研究有关市场趋势和经济周期的关键思想。
可视化在从时间序列数据中获取有洞察力的信息的过程中至关重要,使我们能够理解复杂的关系并做出明智的决策。
本文介绍了几种类型的绘图,可帮助您使用 Python 进行时间序列分析,并提供使用可免费访问的数据集的详细示例。
太阳黑子数据集
太阳黑子是太阳表面的区域,称为光球层,此处磁场集中,导致表面温度低于周围环境。太阳复杂的磁活动是产生这些黑色区域的原因。
太阳黑子的观测和记录已有多年,其中一些最早的记录来自古代文明。他们的研究极大地有助于了解太阳行为、太空天气及其对地球气候和通信系统可能产生的影响。科学家仍在研究太阳黑子,以更多地了解太阳磁场的动态及其如何影响我们的太阳系。
数据集地址:https://github.com/jbrownlee/Datasets/blob/master/monthly-sunspots.csv
数据集变量:数据集由 2 列组成 - 从 1749 年到 1983 年的“月份”和“太阳黑子”。它基本上描述了该数据集中记录的每个月在太阳上看到的太阳黑子的数量。
现在让我们开始编码吧!
依赖导入
导入必要的库
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from statsmodels.graphics.tsaplots import plot_acf
from statsmodels.graphics.tsaplots import plot_pacf
导入数据集
# 加载每月太阳黑子数据集
url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/monthly-sunspots.csv"
data = pd.read_csv(url, parse_dates=['Month'], index_col='Month')
print(data)
输出:
Sunspots
Month
1749-01-01 58.0
1749-02-01 62.6
1749-03-01 70.0
1749-04-01 55.7
1749-05-01 85.0
... ...
1983-08-01 71.8
1983-09-01 50.3
1983-10-01 55.8
1983-11-01 33.3
1983-12-01 33.4
[2820 rows x 1 columns]
现在,我们可以开始了解各种类型的绘图及其在 Python 中的实现。
时间图
时间序列数据最基本的表示形式之一是时间图,有时称为时间序列图。x 轴是时间,y 轴是相关变量,按时间顺序显示数据点。
本研究中使用时间图来显示 1749 年至 1983 年整个数据集期间太阳黑子数量的每月波动。我们可以通过查看太阳黑子数据中的总体趋势、季节趋势以及任何潜在的异常值来了解更多信息在时间地图上。
这是时间图的代码示例
# 时间图
plt.figure(figsize=(7, 5))
plt.plot(data.index, data['Sunspots'], marker='o', linestyle='-', markersize=5)
plt.xlabel('Date')
plt.ylabel('Number of Sunspots')
plt.title('Monthly Sunspots Time Plot')
plt.grid(True)
plt.show()
输出:
在整个数据集期间,时间图显示太阳黑子数量的每月变化。这里,太阳黑子数量最多出现在 1960 年左右,最少出现在 1800 年左右。
线图
用直线连接数据点的简单可视化称为线图。提供时间序列数据的连续视图,强调变量随时间的趋势和变化。它主要用于跟踪数据中的长期模式。
我们的研究中使用线图来显示太阳上可见的黑子数量的长期趋势。这使我们能够确定太阳黑子活动的总体趋势以及太阳黑子的数量随着时间的推移是增加、减少还是保持不变。
现在让我们用 python 来绘制它
# 折线图
import matplotlib.pyplot as plt
plt.figure(figsize=(7, 5))
plt.plot(data)
plt.xlabel('Date')
plt.ylabel('Number of Sunspots')
plt.title('Monthly Sunspots Line Plot')
plt.grid(True)
plt.show()
输出:
现在,时间图和线图看起来几乎相同,但需要注意的是,线图是显示两个连续变量之间关系的图的通用术语,没有特别强调时间。
另一方面,时间图是线图的一种特殊形式,专注于可视化变量如何随时间变化,其中时间是 x 轴变量。时间图在处理时间序列数据时特别有用,其中观察值按时间顺序排序并以规则的时间间隔记录。
依季节情节
季节性图将时间序列数据分解为季节性分量,以说明在预定时间间隔(例如年度或每月周期)内重复出现的模式。它使我们能够识别太阳黑子活动的反复趋势,例如全年活动的变化。
这是季节性图的代码示例
# 季节性图
plt.figure(figsize=(7, 5))
sns.lineplot(x=data.index.month, y=data['Sunspots'], ci=None)
plt.xlabel('Month')
plt.ylabel('Number of Sunspots')
plt.title('Seasonal Plot')
plt.xticks(range(1, 13), labels=[
'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'])
plt.grid(True)
plt.show()
输出:
从这个季节性图中,我们可以更多地了解太阳活动的季节性,它揭示了太阳黑子活动往往较高或较低的月份。
直方图和密度图
密度图定义为一种图形表示形式,用于可视化数据分布并估计连续随机变量的概率密度函数 (PDF)。它基本上是直方图的平滑版本,提供代表基础数据分布的连续曲线。当处理大型数据集或需要平滑、连续的数据表示以阐明值在整个时间序列中的分布情况时,这些图非常适合。
这是直方图和密度图的代码示例
# 直方图和密度图
plt.figure(figsize=(7, 5))
sns.histplot(data['Sunspots'], kde=True)
plt.xlabel('Number of Sunspots')
plt.ylabel('Frequency')
plt.title('Histogram and Density Plot')
plt.grid(True)
plt.show()
输出:
密度图和直方图显示了太阳黑子数量的频率分布,有助于我们理解太阳黑子分布的形式及其集中趋势。
自相关图
自相关图,也称为相关图,被定义为一种时间序列分析工具,用于显示时间序列在各种滞后情况下与其自身的自相关性。数据点与其在不同时间滞后的先前观测值之间的联系是通过自相关来测量的。它基本上表示时间序列与其自身滞后值之间的相关性。这些图主要用于识别数据中的季节性滞后
现在让我们使用 python 绘制自相关图
# 自相关图
plt.figure(figsize=(7,5))
plot_acf(data['Sunspots'], lags=50)
plt.xlabel('Lags')
plt.ylabel('Autocorrelation')
plt.title('Autocorrelation Plot')
plt.grid(True)
plt.show()
输出:
自相关图显示不同滞后的相关性,这对于了解太阳黑子活动的季节性模式很有用。特定延迟的显着自相关表明太阳黑子活动可能遵循每年的模式。
偏自相关图
偏自相关函数 (PACF)图是时间序列分析中使用的图形工具,用于确定时间序列的自回归 (AR) 阶数。在考虑所有中间延迟的影响的同时,它显示了每个延迟对时间序列当前值的直接影响。基本上,它检查数据点与其先前观察值之间的相关性,而不考虑干预时间步长的影响。
以下是偏自相关函数 (PACF) 图的代码示例
# PACF图
plt.figure(figsize=(7, 5))
plot_pacf(data['Sunspots'], lags=50)
plt.xlabel('Lags')
plt.ylabel('Partial Autocorrelation')
plt.title('Partial Autocorrelation Function (PACF) Plot')
plt.grid(True)
plt.show()
输出:
在我们的方法中,使用 PACF 图确定对当前太阳黑子计数有重大影响的滞后观测数量。PACF 帮助选择 AR 模型对太阳黑子活动的预测顺序。
极坐标图
极坐标图是一种数据可视化图,其中数据点以圆形图案排列。围绕圆的角度和距中心的径向距离用于表示各种变量或数据属性。这些主要用于可视化数据集中的季节性模式。
这是极坐标图的代码示例
# 从上述数据集“Monthly Sunspots”的索引中提取月份和年份
data['Month_Num'] = data.index.month
# 按月份对数据进行分组,计算每个月的平均太阳黑子数
monthly_average = data.groupby('Month_Num')['Sunspots'].mean()
# 极坐标图θ(角度)和半径(长度)设置
theta = np.linspace(0, 2 * np.pi, len(monthly_average))
radii = monthly_average.values
# 极坐标图
plt.figure(figsize=(7, 5))
plt.polar(theta, radii)
plt.title('Polar Plot of Monthly Average Sunspots')
plt.xticks(theta, ['Jan', 'Feb', 'Mar', 'Apr', 'May',
'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'])
# 设置y轴限制以适应数据
plt.ylim(0, radii.max() + 10)
plt.show()
输出:
本例中的极坐标图显示每月的平均太阳黑子数量。距中心的径向距离反映了每个月的平均太阳黑子数量,而圆内的角位置则代表月份(例如,一月、二月、三月等)。它揭示了数据中存在的任何季节性趋势,并使我们能够看到太阳黑子活动年度周期的循环模式。
极地图中迷人地显示了每月平均的太阳黑子视图,这也揭示了全年的周期性趋势。
移动平均图
在时间序列分析中,移动平均图是一种流行的数据可视化方法,用于发现数据中的趋势和模式。其主要目标是通过确定连续数据点的指定窗口的平均值来消除短期波动并揭示数据的长期趋势。
对窗口内的数据点进行平均,并将结果值显示在图表上以生成移动平均图。当移动平均线位于原始数据图上时,可以更轻松地发现和比较趋势和季节性模式。
这是移动平均图的代码示例
# 移动平均线图
plt.figure(figsize=(7, 5))
values = data['Sunspots']
# 7天移动平均线
rolling_mean = values.rolling(window=7).mean()
plt.plot(values, label='Original')
plt.plot(rolling_mean, label='7-day Moving Average', color='red')
plt.xlabel('Date')
plt.ylabel('Value')
plt.title('Moving Average Plot')
plt.legend()
plt.grid(True)
plt.show()
输出:
我们在这里绘制 7 天移动平均线。我们知道,移动平均是一种通过确定后续数据点的预定窗口的平均值来平滑数据的技术。用于平均的数据点的数量取决于窗口大小,通常称为移动平均周期。此方法涉及对 7 天内的初始太阳黑子数据进行平均。
总结
通过利用这些不同的绘图和数据可视化技术,我们可以全面了解“每月太阳黑子”数据集,识别模式并提取有关几个世纪以来太阳活动的宝贵见解。
通过这项研究,您现在掌握了将这些技术应用于各个部门和行业的时间序列数据集所需的知识。时间序列分析为在任何需要序列数据的领域(包括经济、金融、气候研究和其他领域)获取深刻见解和做出数据驱动决策提供了重要工具。通过采用这些方法,我们能够利用与时间相关的数据并挖掘其预测潜力来解决现实世界的问题。
点击下方名片关注时序人
欢迎投稿
转载请联系作者
时间序列学术前沿系列持续更新中 ⛳️
后台回复"讨论",加入讨论组一起交流学习吧 🏃
往期推荐阅读
动手实践 | 用 TSLearn 进行时间序列的聚类与可视化
iTransformer:让 transformer 重回时序预测主流地位?
KDD 2023 | TSMixer: 效果比肩 Transformer 的轻量级多元时序预测模型
觉得不错,那就点个赞吧