Python中时间序列数据的分析
立即解锁
发布时间: 2025-09-03 00:34:19 阅读量: 3 订阅数: 17 AIGC 


Python探索性数据分析精粹
### Python 中时间序列数据的分析
#### 1. 时间序列数据概述
时间序列数据是随时间变化的数据,是按固定时间间隔(如每小时、每天、每周等)记录的数据点序列。分析时间序列数据通常可以发现随时间重复出现的模式或趋势。时间序列数据包含以下几个组成部分:
- **趋势(Trend)**:显示时间序列数据随时间的总体方向,可能是上升、下降或持平。
- **季节性变化(Seasonal variations)**:在固定时间框架内重复出现的周期性波动。当模式受季节因素(如一年中的季度或月份)影响时,就存在季节性。季节性模式通常有固定的周期。
- **周期性变化(Cyclical variations)**:随时间发生但没有固定周期的波动。例如,经济或企业的繁荣与衰退就是周期性模式的例子,这些波动不能与固定周期相关联,周期长度不固定,且通常比季节性模式的周期长,每个周期模式的幅度也不同。
- **不规则变化/噪声(Irregular variation/noise)**:不可预测或意外的变化或波动。
这些组成部分可以用以下公式表示:
- **加法模型(Additive Model)**:$Y = T + S + R$
- **乘法模型(Multiplicative Model)**:$Y = T \times S \times R$
其中,$Y$ 是时间序列,$T$ 是趋势,$S$ 是季节性,$R$ 是残差分量。加法模型适用于季节性变化随时间相对恒定的情况,而乘法模型适用于季节性变化随时间增加的情况。
#### 2. 技术要求
在 Python 中分析时间序列数据,我们将使用 `pandas`、`matplotlib`、`seaborn` 和 `statsmodels` 库。相关代码和笔记本可在 GitHub 上获取:[https://github.com/PacktPublishing/Exploratory-Data-Analysis-with-Python-Cookbook](https://github.com/PacktPublishing/Exploratory-Data-Analysis-with-Python-Cookbook)。
#### 3. 使用折线图和箱线图可视化时间序列数据
##### 3.1 折线图和箱线图介绍
- **折线图**:通过直线连接时间序列数据点,显示数据中的峰值(高点)和谷值(低点)。折线图的 $x$ 轴通常表示时间间隔,$y$ 轴表示我们要跟踪的与时间相关的感兴趣变量。使用折线图可以很容易地发现随时间的趋势或变化。
- **箱线图**:通过五个关键指标(最小值、第一四分位数、中位数、第三四分位数和最大值)让我们了解数据集的底层分布。当用于时间序列数据时,$x$ 轴通常表示时间间隔,$y$ 轴表示感兴趣的变量。$x$ 轴上的时间间隔通常是汇总后的时间间隔,例如将每小时汇总为每天,每天汇总为每月或每年。箱线图显示了 $y$ 轴上变量的均值随时间的变化,以及数据点在一个时间间隔内的分散程度。为避免产生误导性结果,箱线图的坐标轴需要正确缩放,$y$ 轴的错误缩放可能导致比预期更多的异常值。
##### 3.2 操作步骤
我们将使用 `matplotlib` 和 `seaborn` 库创建折线图和箱线图,以下是具体步骤:
1. 导入所需的库:
```python
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
```
2. 使用 `read_csv` 方法将 `.csv` 文件加载到数据框中:
```python
air_traffic_data = pd.read_csv("data/SF_Air_Traffic_Passenger_Statistics_Transformed.csv")
```
3. 使用 `head` 方法检查数据集的前五行,使用 `shape` 方法检查行数和列数,使用 `dtypes` 方法检查数据类型:
```python
print(air_traffic_data.head())
print(air_traffic_data.shape)
print(air_traffic_data.dtypes)
```
输出结果如下:
```
Date Total Passenger Count
0 200601 2448889
1 200602 2223024
2 200603 2708778
3 200604 2773293
4 200605 2829000
(132, 2)
Date int64
Total Passenger Count int64
dtype: object
```
4. 使用 `pandas` 的 `to_datetime` 方法将 `Date` 列从整数数据类型转换为日期数据类型:
```python
air_traffic_data['Date'] = pd.to_datetime(air_traffic_data['Date'], format="%Y%m")
print(air_traffic_data.dtypes)
```
输出结果如下:
```
Date datetime64[ns]
Total Passenger Count int64
dtype: object
```
5. 使用 `set_index` 方法将 `Date` 列设置为数据框的索引:
```python
air_traffic_data.set_index('Date', inplace=True)
print(air_traffic_data.shape)
```
输出结果如下:
```
(132, 1)
```
6. 使用 `matplotlib` 的 `plot` 方法在折线图上绘制时间序列数据:
```python
plt.figure(figsize=(18, 10))
plt.plot(air_traffic_data.index, air_traffic_data['Total Passenger Count'], color='tab:red')
plt.title("Time series analysis of San Franscisco Air Traffic", fontsize=20)
plt.ticklabel_format(style='plain', axis='y')
plt.show()
```
7. 使用 `seaborn` 的 `boxplot` 方法在箱线图上绘制时间序列数据:
```python
plt.figure(figsize=(18, 10))
data_subset = air_traffic_data[air_traffic_data.index < '2010-01-01']
ax = sns.boxplot(data=data_subset, x=pd.PeriodIndex(data_subset.index, freq='Q'),
y=data_subset['Total Passenger Count'])
ax.set_title("Time series analysis of San Franscisco Air Traffic", fontsize=20)
plt.ticklabel_format(style='plain', axis='y')
plt.show()
```
#### 4. 识别时间序列中的模式
在分析时间序列数据时,通常需要关注四种类型的模式:趋势、季节性变化、周期性变化和不规则变化。折线图对于分析这些模式非常有帮助,通过折线图可以很容易地在数据集中发现这些模式。
- **趋势分析**:尝试发现时间序列中值的长期增加或减少。
- **季节性变化分析**:尝试识别受日历(季度、月份、星期几等)影响的周期性模式。
- **周期性变化分析**:尝试发现数据点上升和下降的部分,这些部分的幅度不同,且周期较长且不固定。
操作步骤与使用折线图和箱线图可视化时间序列数据的步骤相同,通过绘制折线图和箱线图,我们可以进行模式识别。从折线图中可以发现乘客数量呈上升趋势,并且每年有一致的
0
0
复制全文
相关推荐








