如何从OHLCV股票数据创建兼容GluonTS与HuggingFace的DatasetDict
把OHLCV股票CSV转成适配HuggingFace时序Transformer的DatasetDict
直接上可落地的步骤和代码,满足你“每个交易日对应一个数据集条目”的要求:
步骤1:预处理原始数据
先把CSV里的日期列转成标准时间格式,同时给股票加静态类别标记(单只股票固定值即可,多只股票需做类别编码):
import pandas as pd from datasets import Dataset, DatasetDict # 加载你的股票数据CSV df = pd.read_csv("你的股票数据文件.csv") # 转换日期列为datetime格式,确保时序模型能识别 df["timestamp"] = pd.to_datetime(df["Date"]) # 静态特征:单只股票固定为0,多只股票可改用 df["股票代码"].astype("category").cat.codes 做编码 df["stock_id"] = 0
步骤2:生成单交易日样本的数据集
把每个交易日的OHLCV数据映射成时序模型要求的标准字段:
# 构建数据集:target设为你要预测的列(比如收盘价),feat_dynamic_real放其他动态特征 dataset = Dataset.from_pandas( df[["timestamp", "Close", "Open", "High", "Low", "Volume", "stock_id"]], features={ "timestamp": "timestamp", # 时间戳字段 "target": "Close", # 预测目标(可改成多列,比如["Open","High","Low","Close"]) "feat_dynamic_real": ["Open", "High", "Low", "Volume"], # 当日动态特征 "feat_static_cat": "stock_id" # 静态类别特征 } )
步骤3:拆分并封装成DatasetDict
按时间顺序拆分训练/验证/测试集(绝对不能打乱,防止数据泄露):
# 先拆训练集和测试集(8:2比例) train_test = dataset.train_test_split(test_size=0.2, shuffle=False) # 再把测试集拆成验证集和测试集(1:1比例) valid_test = train_test["test"].train_test_split(test_size=0.5, shuffle=False) # 组合成要求的DatasetDict结构 final_dataset = DatasetDict({ "train": train_test["train"], "validation": valid_test["train"], "test": valid_test["test"] }) # 查看结果,和你目标格式一致 print(final_dataset)
额外说明
- 如果要做多变量预测(同时预测OHLCV全部字段),把
target改成["Open", "High", "Low", "Close", "Volume"]即可 - 静态特征
feat_static_cat用于区分不同股票,单只股票固定一个整数就好,多只股票记得做类别编码 - 拆分时必须设置
shuffle=False,严格按时间顺序切分,否则模型会接触到未来数据,导致结果无效
内容的提问来源于stack exchange,提问作者Harrison H
相关产品推荐
相关产品推荐

