如何将时间序列图表X轴日期标准化为参考日期的相对值
时间序列日期相对参考日期标准化方案
需求说明
处理时间序列数据时,将所有日期转换为相对于指定参考日期的相对标识(如t-2表示比参考日期早2天,t2表示晚2天),便于突出前后对比效果。
解决步骤及代码实现
基于你提供的随机时间序列数据,可通过以下步骤实现日期标准化:
- 定义参考日期并统一格式
确保参考日期与数据中的日期类型一致,避免计算误差; - 计算日期差值
用每个日期减去参考日期,提取天数维度的差值; - 生成相对日期标识
根据天数差值生成tX格式的字符串,负数直接保留负号。
完整代码如下:
import numpy as np import pandas as pd from datetime import date, timedelta import matplotlib.pyplot as plt # 生成原始时间序列数据 np.random.seed(0); randnums = np.random.randint(1,101,31) sdate = date(2023,3,1) # 起始日期 edate = date(2023,4,1) # 结束日期 datelist = list(pd.date_range(sdate,edate-timedelta(days=1),freq='d')) df = pd.DataFrame(zip(datelist,randnums),columns=['date','data']) # 日期标准化核心逻辑 ref_date = pd.to_datetime('2023-03-15') # 指定参考日期 # 计算每个日期与参考日期的天数差 df['days_diff'] = (df['date'] - ref_date).dt.days # 生成相对日期标识 df['relative_date'] = df['days_diff'].apply(lambda x: f't{x}') # 绘制带相对日期的对比图表 plt.subplots(figsize=(12, 6)) plt.plot(df['relative_date'], df['data']) plt.xticks(rotation=45) # 旋转x轴标签避免重叠 plt.xlabel('相对参考日期') plt.ylabel('数据值') plt.title('时间序列数据(以2023-03-15为参考点)') plt.tight_layout() plt.show()
关键代码解释
(df['date'] - ref_date).dt.days:利用pandas的datetime运算特性,直接计算两个日期的天数差,正数表示日期晚于参考点,负数表示早于参考点;lambda x: f't{x}':通过字符串格式化将天数差转为目标格式,例如天数差为2时生成t2,差为-2时生成t-2。
如果需要将参考日期当天明确标识为t0,可以微调lambda表达式:
df['relative_date'] = df['days_diff'].apply(lambda x: 't0' if x == 0 else f't{x}')
内容的提问来源于stack exchange,提问作者user2679611
相关产品推荐
相关产品推荐

