如何创建包含季节性和趋势的合成时间序列数据集
虚拟时间序列数据集生成实现方案
用Python的pandas和numpy库即可快速实现需求,无需额外复杂工具。
前置依赖安装
先安装需要的依赖库,执行以下命令:
pip install pandas numpy openpyxl
其中openpyxl用于支持DataFrame直接导出为Excel文件。
完整实现代码
import pandas as pd import numpy as np # -------------------------- 自定义参数配置 -------------------------- start_date = "2023-01-01" # 序列起始日期 end_date = "2023-03-31" # 序列结束日期 ts_count = 5 # 需要生成的时间序列组数 trend_coef_range = (0.1, 0.9) # 每组序列趋势系数的随机取值范围,系数越大趋势斜率越高 daily_seasonality_amp = 6 # 日度季节性波动幅度 weekly_seasonality_amp = 4 # 周度季节性波动幅度 noise_std = 1.5 # 高斯噪声标准差,数值越大随机波动越强 # ------------------------------------------------------------------- # 生成15分钟间隔的时间索引 datetime_series = pd.date_range(start=start_date, end=end_date, freq="15T") n_samples = len(datetime_series) x = np.arange(n_samples) # 整数序号X值,可按需加入数据集 # 初始化结果容器 result_dict = { "X": x, # 整数序号X,不需要可以删除该行 "datetime": datetime_series # 时间维度X } # 循环生成多组Y序列 for i in range(ts_count): # 1. 生成线性趋势 trend_coef = np.random.uniform(*trend_coef_range) trend = trend_coef * x / 96 # 按天维度计算趋势,避免数值增长过快 # 2. 生成季节性(支持叠加多周期,可按需增删年度/月度等周期) daily_season = daily_seasonality_amp * np.sin(2 * np.pi * x / 96) # 日度周期:1天共96个15分钟采样点 weekly_season = weekly_seasonality_amp * np.sin(2 * np.pi * x / (96*7)) # 周度周期:1周共672个15分钟采样点 seasonality = daily_season + weekly_season # 3. 生成高斯噪声 noise = np.random.normal(0, noise_std, size=n_samples) # 合并得到最终Y值 result_dict[f"Y_{i+1}"] = trend + seasonality + noise # 转为DataFrame格式 df = pd.DataFrame(result_dict) # 导出到Excel,直接执行即可生成文件 df.to_excel("虚拟时间序列数据集.xlsx", index=False)
可调参数说明
- 若不需要整数序号
X,直接删除结果字典里对应的"X": x行即可 - 若需要新增其他周期的季节性,直接按照已有的日/周度季节性逻辑,新增对应周期的正弦项叠加即可
- 若需要非线性趋势,可把线性趋势的计算逻辑替换为多项式、指数等任意你需要的趋势公式
内容的提问来源于stack exchange,提问作者EnigmAI
相关产品推荐
相关产品推荐

