news 2026/8/6 21:38:52

denmark-price-forecast数据处理全流程:从天气数据到电价特征工程实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
denmark-price-forecast数据处理全流程:从天气数据到电价特征工程实战

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).values

3.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-forecast

5.2 数据采集

运行数据采集脚本获取最新数据:

python fetch_weather_v3.py python fetch_ntc.py

5.3 构建数据集

执行数据集构建脚本:

python dataset.py

运行成功后,将在当前目录生成dataset_v3_dk1.parquetdataset_v3_dk2.parquet文件,分别对应丹麦两个区域的特征数据集。

六、总结

denmark-price-forecast项目提供了一个从原始数据到预测特征的完整处理流程,通过多源数据融合和精心设计的特征工程,为丹麦电价预测奠定了坚实的数据基础。项目的设计思路体现了对电力市场特性的深刻理解,特别是空间特征和邻域影响的创新性引入,为提高预测准确性提供了关键支持。

无论是对于电价预测领域的新手还是专业人士,该项目都提供了一个值得学习和借鉴的数据处理框架,展示了如何将领域知识转化为实用的特征工程实践。

【免费下载链接】denmark-price-forecast项目地址: https://ai.gitcode.com/hf_mirrors/Elpriser/denmark-price-forecast

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/6 21:38:13

商标设计注册续展和重新申请哪个更划算?

商标有效期满10年&#xff0c;摆在持有人面前的路有两条&#xff1a;花一笔钱办续展&#xff0c;或者重新提交注册申请。表面看&#xff0c;重新申请的官费只有续展的一半左右&#xff0c;似乎更省钱。但“划算”从来不只是看表面的数字。本文将帮你把这笔账从头算到尾&#xf…

作者头像 李华
网站建设 2026/8/6 21:36:57

数据中台成败关键:ETL的核心价值与实战经验

1. 数据中台的困境与ETL的核心价值数据中台概念在国内已经火了五六年&#xff0c;但真正能落地的项目不到三成。去年我参与审计了七家企业的数据中台项目&#xff0c;发现一个惊人共性——90%的"烂尾"案例都栽在了ETL环节上。那些号称"跳过传统ETL直接上实时计算…

作者头像 李华
网站建设 2026/8/6 21:34:04

Godot 4.2 数组(Array)深度解析:从原理到高性能实战

1. 项目概述&#xff1a;为什么Godot的Array值得你花时间研究&#xff1f;如果你正在用Godot做项目&#xff0c;无论是2D像素风还是3D大作&#xff0c;几乎都绕不开一个东西&#xff1a;数组。在GDScript里&#xff0c;这个最基础的数据结构就是Array。乍一看&#xff0c;它不就…

作者头像 李华
网站建设 2026/8/6 21:33:41

强力开源PS4游戏存档管理工具:为玩家打造的终极解决方案

强力开源PS4游戏存档管理工具&#xff1a;为玩家打造的终极解决方案 【免费下载链接】apollo-ps4 Apollo Save Tool (PS4) 项目地址: https://gitcode.com/gh_mirrors/ap/apollo-ps4 还在为PS4游戏存档备份、迁移和修改而烦恼吗&#xff1f;每次游戏更新都担心存档丢失&…

作者头像 李华
网站建设 2026/8/6 21:33:30

UE4插件自动化测试实战:基于UnrealAutomator的集成测试与CI/CD集成

1. 项目概述与核心价值最近在折腾一个UE4的编辑器插件&#xff0c;功能越做越复杂&#xff0c;每次手动点点点测试&#xff0c;不仅效率低下&#xff0c;还容易遗漏边缘情况。相信很多UE4插件开发者都遇到过类似的困境&#xff1a;插件逻辑复杂了&#xff0c;改一行代码&#x…

作者头像 李华
网站建设 2026/8/6 21:33:02

Godot 3D碰撞性能优化:静态与动态碰撞体原理及实战指南

1. 项目概述&#xff1a;为什么我们需要关注3D碰撞性能&#xff1f;在Godot Engine里做3D项目&#xff0c;尤其是稍微复杂点的场景&#xff0c;性能问题往往最先从物理碰撞这块冒出来。你可能会发现&#xff0c;明明场景看着不复杂&#xff0c;但游戏跑起来就是卡顿&#xff0c…

作者头像 李华