You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中实现时间序列的年度堆叠(Annual Stack)?

Python实现年度堆叠(Annual Stack)方法

核心思路

年度堆叠的关键是将不同年份的时间序列按月-日维度对齐,先对单年度数据做归一化,再将各年份数据堆叠展示,对比年度间的时序模式差异。以下是基于pandas和matplotlib的完整实现方案:

完整代码示例

import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.dates import DateFormatter

# ---------------------- 1. 读取并预处理数据 ----------------------
# 读取数据(替换为你的实际数据路径或直接传入数据列表)
data = pd.read_csv('your_data.txt', sep=' ', header=None, names=['date', 'value'])
# 解析日期为datetime格式
data['date'] = pd.to_datetime(data['date'])
# 设置日期为索引
data = data.set_index('date')

# ---------------------- 2. 按年份分组并归一化 ----------------------
# 定义min-max归一化函数(可按需替换为z-score等其他方式)
def normalize_series(s):
    return (s - s.min()) / (s.max() - s.min())

# 按年份分组,对每组数据执行归一化
grouped = data.groupby(data.index.year)['value'].apply(normalize_series)
# 重置索引,拆分日期维度信息
grouped = grouped.reset_index()
grouped['month_day'] = grouped['date'].dt.strftime('%m-%d')
# 将月-日转换回datetime格式,方便绘图时的轴处理
grouped['month_day'] = pd.to_datetime(grouped['month_day'], format='%m-%d')

# ---------------------- 3. 绘制年度堆叠图 ----------------------
plt.figure(figsize=(12, 6))
# 按年份遍历绘制每条曲线
for year in grouped['date'].dt.year.unique():
    year_data = grouped[grouped['date'].dt.year == year]
    plt.plot(year_data['month_day'], year_data['value'], label=str(year))

# 设置x轴日期格式为月-日
date_form = DateFormatter("%m-%d")
plt.gca().xaxis.set_major_formatter(date_form)
# 添加图例、标签与标题
plt.legend(title='Year')
plt.xlabel('Date (Month-Day)')
plt.ylabel('Normalized Value')
plt.title('Annual Stack of Normalized Time Series')
plt.grid(alpha=0.3)
plt.tight_layout()
plt.show()

代码说明

  • 数据读取:支持从文本文件读取,也可直接传入内存中的数据列表,需确保日期格式被正确解析。
  • 归一化:默认使用min-max归一化将数据缩至[0,1]区间,若论文采用z-score归一化,可替换函数为return (s - s.mean()) / s.std()。
  • 堆叠对齐:通过提取month_day字段实现跨年份的日期对齐,确保不同年份的同日期数据在x轴上对应同一位置。
  • 可视化:每条曲线对应一个年份,图例区分不同年度,网格线提升图表可读性。

内容的提问来源于stack exchange,提问作者Lover Coffee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 05:54:23