denmark-price-forecast数据处理全流程:从天气数据到电价特征工程实战
【免费下载链接】denmark-price-forecast项目地址: https://ai.gitcode.com/hf_mirrors/Elpriser/denmark-price-forecast
denmark-price-forecast是一个专注于丹麦电价预测的开源项目,通过从天气数据采集到特征工程构建的完整流程,为电价预测模型提供高质量训练数据。本文将详细解析该项目的数据处理全流程,帮助新手理解如何将原始数据转化为可用的预测特征。
一、数据采集:多源数据汇聚
项目通过多个Python脚本实现数据的自动化采集,确保预测模型能够获取全面的输入特征。
1.1 天气数据采集
fetch_weather_v3.py是天气数据采集的核心脚本,通过def fetch(kind)函数实现不同类型天气数据的获取。该脚本针对丹麦不同区域(DK1、DK2)及周边国家(德国、挪威、瑞典、荷兰)的多个点位进行数据采集,为后续空间特征构建奠定基础。
1.2 NTC容量数据采集
fetch_ntc.py负责采集输电容量数据,通过def fetch(a, b, s, e)函数获取不同时间段的输电容量信息。这些数据用于构建电力 congestion 特征,反映区域间电力传输的物理限制。
1.3 网络数据获取工具
train_daily.py中的def fetch_json(url, tries=5, timeout=180)函数提供了通用的网络数据获取能力,支持自动重试和超时控制,确保不稳定网络环境下的数据获取可靠性。
二、数据加载与预处理
数据采集完成后,dataset.py作为核心模块,负责数据的加载、清洗和初步处理,为特征工程做准备。
2.1 电价数据加载
load_prices(area)函数处理电价数据,整合新旧两个来源的价格数据:
def load_prices(area): old = pd.read_parquet(f"{BACKUP}/eds_elspotprices_{area.lower()}.parquet") # 数据处理逻辑... new = pd.read_parquet(f"{BACKUP}/eds_dayaheadprices_{area.lower()}.parquet") # 数据处理逻辑... df = pd.concat([old[old.t < "2025-10-01"], new[new.t >= "2025-10-01"]]) return df.drop_duplicates("t").sort_values("t").set_index("t")["p"]2.2 电力生产数据加载
load_production(area)函数整合不同类型的可再生能源生产数据:
def load_production(area): df = pd.read_parquet(f"{BACKUP}/eds_productionconsumptionsettlement_{area.lower()}.parquet") # 数据处理逻辑... wind = ["OffshoreWindLt100MW_MWh", "OffshoreWindGe100MW_MWh", "OnshoreWindLt50kW_MWh", "OnshoreWindGe50kW_MWh"] sol = ["SolarPowerLt10kW_MWh", "SolarPowerGe10Lt40kW_MWh", "SolarPowerGe40kW_MWh", "SolarPowerSelfConMWh"] # 数据处理逻辑... df["prod"] = df[wind + sol].fillna(0).sum(axis=1) return df.drop_duplicates("t").set_index("t")["prod"]三、特征工程:从原始数据到预测特征
特征工程是denmark-price-forecast项目的核心,dataset.py中的build(area)函数实现了完整的特征构建流程。
3.1 时间特征提取
项目提取了丰富的时间特征,捕捉电价的周期性模式:
df["hour"] = df.index.hour df["weekday"] = df.index.weekday df["month"] = df.index.month df["doy_sin"] = np.sin(2 * np.pi * df.index.dayofyear / 365.25) df["doy_cos"] = np.cos(2 * np.pi * df.index.dayofyear / 365.25) df["is_weekend"] = (df.weekday >= 5).astype(int)3.2 价格滞后特征
为捕捉历史价格对未来的影响,项目构建了多尺度滞后特征:
for k in [1, 2, 3, 7, 14, 21, 28]: col = prices.reindex(target_hours - pd.Timedelta(days=k)).values df[f"lag{k}"] = col if k >= h - 1 else np.nan df["seasonal4w"] = df[[f"lag{k}" for k in (7, 14, 21, 28)]].mean(axis=1)3.3 空间天气特征
项目创新性地引入了空间维度的天气特征,不仅使用单一点位数据,还计算了区域内的聚合特征:
# 区域内多点特征聚合 W = np.vstack(winds); R = np.vstack(rads) df["wind"] = W.mean(axis=0) df["rad"] = R.mean(axis=0) df["wind_spread"] = W.max(axis=0) - W.min(axis=0)3.4 邻域天气特征
为捕捉区域间电力流动的影响,项目还纳入了周边国家的天气数据:
for n in NEIGHBOURS: df[f"wind_{n}"] = prev[n][f"wind_speed_100m_previous_day{lead}"].reindex(target_hours).values df[f"rad_{n}"] = prev[n][f"direct_radiation_previous_day{lead}"].reindex(target_hours).values3.5 生产估计特征
通过机器学习模型将天气数据转化为电力生产估计:
df["est_prod"] = est.predict(pd.DataFrame({ "wind_speed_100m": df.wind, "direct_radiation": df.rad, "month": df.month})) df["est_prod_de"] = est_de.predict(pd.DataFrame({ "wind_speed_100m": df.wind_de, "direct_radiation": df.rad_de, "month": df.month}))3.6 输电容量特征
整合输电容量数据,构建反映网络 congestion 状况的特征:
df["ntc_exp_mean"] = df[exp].mean(axis=1) df["ntc_imp_mean"] = df[imp].mean(axis=1) df["ntc_min"] = df[exp + imp].min(axis=1) # tightest border — congestion bites here first四、数据集构建与输出
完成特征工程后,build(area)函数将所有特征整合并输出为Parquet格式的数据集:
out = pd.concat(rows, ignore_index=True).dropna(subset=["y"]) out.to_parquet(f"{P}/dataset_v3_{area.lower()}.parquet", index=False)最终生成的数据集包含了超过200个特征,涵盖时间、价格、天气、生产估计和输电容量等多个维度,为后续的电价预测模型训练提供了全面的输入。
五、快速上手:如何使用denmark-price-forecast处理数据
5.1 环境准备
首先克隆项目仓库:
git clone https://gitcode.com/hf_mirrors/Elpriser/denmark-price-forecast cd denmark-price-forecast5.2 数据采集
运行数据采集脚本获取最新数据:
python fetch_weather_v3.py python fetch_ntc.py5.3 构建数据集
执行数据集构建脚本:
python dataset.py运行成功后,将在当前目录生成dataset_v3_dk1.parquet和dataset_v3_dk2.parquet文件,分别对应丹麦两个区域的特征数据集。
六、总结
denmark-price-forecast项目提供了一个从原始数据到预测特征的完整处理流程,通过多源数据融合和精心设计的特征工程,为丹麦电价预测奠定了坚实的数据基础。项目的设计思路体现了对电力市场特性的深刻理解,特别是空间特征和邻域影响的创新性引入,为提高预测准确性提供了关键支持。
无论是对于电价预测领域的新手还是专业人士,该项目都提供了一个值得学习和借鉴的数据处理框架,展示了如何将领域知识转化为实用的特征工程实践。
【免费下载链接】denmark-price-forecast项目地址: https://ai.gitcode.com/hf_mirrors/Elpriser/denmark-price-forecast
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考