一、学习内容
1. 时间序列数据的定义与特点
定义:
- 时间序列数据是一组按时间顺序排列的观测值。时间序列的每个观测值都与特定时间点相关联。例如,气温每天的记录、股票每日的收盘价等。
特点:
- 时间依赖性:时间序列数据的一个基本特点是当前数据点可能依赖于之前的一个或多个数据点。这种依赖性可以用来进行预测。
- 趋势:数据可能表现出随时间的长期上升或下降趋势。例如,随着经济发展,GDP 一般会显示上升趋势。
- 季节性:数据在特定时间周期内反复出现的模式。季节性常见于许多现实世界的数据中,如每年的某些月份销售额上升。
- 周期性:周期性波动与季节性相似,但周期更长且可能不固定,如经济周期。
- 随机性:数据中难以解释的波动,可以被视为噪声,可能由随机因素引起。
2. 时间序列的类型
平稳时间序列:
- 平稳性是时间序列分析中的一个重要概念。一个时间序列被称为平稳的,如果它的统计性质(如均值、方差、自相关)随着时间保持恒定。平稳时间序列没有趋势和季节性,其波动性是恒定的。
- 判断方法:
- 自相关函数 (ACF) 和偏自相关函数 (PACF) 的图可以帮助判断时间序列的平稳性。
- 平稳性检验:如 ADF(Augmented Dickey-Fuller)检验。
非平稳时间序列:
- 非平稳时间序列的统计性质随着时间变化,例如,序列中存在明显的趋势、季节性或周期性。对于非平稳时间序列,常常需要通过差分、去趋势、去季节性等方法将其转化为平稳序列。
3. 基本术语
- 趋势:数据在较长时间范围内的总体变化方向。例如,社会总消费水平随时间上升。
- 季节性:在特定周期内数据表现出的反复波动模式,通常与自然或人为的季节性因素有关。例如,零售业的销售额在节假日期间会显著增加。
- 周期性:类似于季节性,但周期性波动的周期较长,且可能不固定。例如,经济周期的波动通常不定期发生。
- 随机性:难以解释的波动,通常来源于不可预测的外部因素。
4. 时间序列的可视化与初步分析
可视化的重要性:
- 可视化是时间序列分析的第一步,通过图表,我们可以直观地观察到数据的趋势、季节性、周期性和随机性。
如何进行可视化:
- 使用
pandas
和matplotlib
进行可视化,可以帮助我们识别时间序列中的模式并初步分析其结构。
二、实战案例
1. 数据加载与初步查看
import pandas as pd
import matplotlib.pyplot as plt
# 加载时间序列数据集
url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/airline-passengers.csv"
data = pd.read_csv(url, parse_dates=['Month'], index_col='Month')
# 查看数据前几行
print("数据集的前几行:")
print(data.head())
运行结果:
数据集的前几行:
Passengers
Month
1949-01-01 112
1949-02-01 118
1949-03-01 132
1949-04-01 129
1949-05-01 121
程序解释:
- 使用
pandas.read_csv
方法加载航空乘客数据集,并将Month
列解析为日期格式并设为索引。然后使用data.head()
查看前几行数据,以确认数据加载成功。 - 该数据集记录了 1949 年 1 月至 1960 年 12 月的航空公司乘客数量。
2. 时间序列的初步可视化
# 绘制时间序列图
plt.figure(figsize=(12, 6))
plt.plot(data['Passengers'], color='blue', linewidth=2)
plt.title('Monthly Number of Airline Passengers (1949-1960)')
plt.xlabel('Date')
plt.ylabel('Number of Passengers')
plt.grid(True)
plt.show()
运行结果:
程序解释:
- 通过
matplotlib
的plot
函数绘制时间序列图,观察乘客数量随时间的变化。 - 这一步帮助我们初步观察数据的趋势、季节性和随机波动。
3. 数据的描述性统计
# 检查数据的描述统计
print("\n数据的描述统计:")
print(data.describe())
运行结果:
数据的描述统计:
Passengers
count 144.000000
mean 280.298611
std 119.966317
min 104.000000
25% 180.000000
50% 265.500000
75% 360.500000
max 622.000000
程序解释:
- 使用
describe()
函数查看数据的描述性统计信息,如均值、标准差、最小值、最大值等,帮助我们了解数据的分布情况。
4. 年度趋势的可视化
# 可视化各个年份的数据趋势
data['Year'] = data.index.year
plt.figure(figsize=(12, 6))
for year in data['Year'].unique():
yearly_data = data[data['Year'] == year]
plt.plot(yearly_data.index.month, yearly_data['Passengers'], label=str(year))
plt.title('Yearly Trends in Airline Passengers')
plt.xlabel('Month')
plt.ylabel('Number of Passengers')
plt.legend()
plt.grid(True)
plt.show()
运行结果:
程序解释:
- 将数据按年份进行分割,并绘制每年的月度乘客数量趋势。这样可以直观地比较每一年之间的季节性变化和年度增长趋势。
三、结果分析
1. 趋势
- 从时间序列图可以看出,航空乘客数量呈现出明显的上升趋势。这意味着随着时间的推移,航空旅行变得越来越普及。
2. 季节性
- 在每年的乘客数量中,可以清晰地观察到季节性波动。例如,乘客数量在年中某些月份(如夏季)达到峰值,而在冬季通常会有下降。这表明航空旅行具有明显的季节性。
3. 随机性
- 尽管存在趋势和季节性,但数据中也包含了一些随机波动,这可能是由于外部因素或数据本身的随机性导致的。
4. 年度分析
- 年度趋势图显示,不同年份的乘客数量趋势基本一致,但随着时间推移,各年份的乘客数量逐渐增加。这种逐年增长的趋势反映了航空行业的扩展和经济的发展。
通过这些详细的分析和可视化,我们能够更好地理解时间序列数据的基本特征。这为后续更深入的时间序列分析和建模奠定了坚实的基础。