energySys 是一个用于能源数据处理和分析的系统,旨在从多个数据源抓取、存储和分析电力市场的数据。该项目包括数据抓取、数据库管理、模型训练和推理等功能。
download_data.py: 从https://aemo.com.au/Energy-systems/Electricity/National-Electricity-Market-NEM/Data-NEM/Data-Dashboard-NEM抓取每隔5分钟的实时数据,并保存为指定格式。db_manager.py: 创建和管理数据库,将抓取的数据插入数据库中;数据库分为两个表格,一个存储实际数据(actual),一个存储预测数据(forecast)。index_page.py: 网页主页展示,使用streamlit run index_page.py启动程序,提供用户友好的界面。llm/prepare_for_training.py: 生成用于 LLM 训练的 CSV 数据,准备模型训练所需的数据集。支持指定日期范围或增量数据获取。query_data_offline.py: 离线查询数据库的信息,计算每日价格极差,支持数据分析和报告生成。现在支持计算实际数据和预测数据的每日利润。download_history_data.py: 下载历史 csv 数据,便于后续分析和模型训练。insert_hist_data.py: 将历史数据插入实际数据表格中,确保数据的完整性和可用性。simulate_profit.py: 模拟充放电收益,找到最佳的充放电区间,并计算收益,为决策提供支持。
- 执行
crontab -e,设置定时任务,每隔 5 分钟执行一次数据抓取与数据库插入,日志重定向输出便于后续查看;每隔 5 分钟执行一次our_pred更新;写好后执行crontab -l确保任务已经写入。# 根据需要自行修改路径 */5 * * * * /home/ecs-user/miniconda3/bin/python3 /home/ecs-user/gitclone/energySys/db_manager.py >> /home/ecs-user/gitclone/energySys/db_manager_output.log 2>&1 */5 * * * * /home/ecs-user/miniconda3/bin/python3 /home/ecs-user/gitclone/energySys/update_pred_db.py >> /home/ecs-user/gitclone/energySys/update_pred_db_output.log 2>&1
- 执行
systemctl status cron确认定时任务已经开启,确保系统正常运行。
由于 GPU 服务器成本较高,暂时使用实验带 GPU 的机器yq6进行模型训练和未来价格预测,然后把未来价格预测的结果传回网站部署的服务器 cwjaliyun前端进行展示;以下是具体流程:
1. 登录 cwjaliyun 机器,从官网获取最新历史数据作为模型的训练数据
ssh cwjaliyun
conda activate energysys
python3 llm/prepare_for_training.py --incremental2. 最新的模型训练数据(包含历史数据)传输到带 GPU 的服务器 yq6 进行模型训练
scp -r cwjaliyun:/home/ecs-user/gitclone/energySys/data/data_for_llm .
scp -r data_for_llm/* yq6:/home/weijian/gitclone/iTransformer/dataset/energy/3. 登录 yq6 机器,进行训练和推理
ssh yq6
conda activate energy
cd /home/weijian/gitclone/iTransformer/
./scripts/multivariate_forecasting/energy/iTransformer_energy.sh # 等待大约 1 小时4. 将推理结果传回 cwjaliyun 机器
scp -r yq6:/home/weijian/gitclone/iTransformer/results/full_pred .
scp full_pred/* cwjaliyun:/home/ecs-user/gitclone/energySys/data/data_from_llm/- 计算每日价格极差:
python3 query_data_offline.py --query - 计算实际数据的每日利润:
python3 query_data_offline.py --actual-profit(结果保存在 ./query_results/actual_daily_profits 目录) - 计算预测数据的每日利润:
python3 query_data_offline.py --predicted-profit --input-folder /path/to/predicted/data(结果保存在 ./query_results/predicted_daily_profits 目录) - 准备训练数据:
- 获取所有数据:
python3 llm/prepare_for_training.py - 获取增量数据:
python3 llm/prepare_for_training.py --incremental - 指定日期范围:
python3 llm/prepare_for_training.py --start_date YYYY-MM-DD --end_date YYYY-MM-DD - 指定输出目录:
python3 llm/prepare_for_training.py --output_dir /path/to/custom/output
- 获取所有数据:
- 更新预测和实际的利润柱状图:
执行以下步骤:
- cwjaliyun 机器运行
llm/prepare_for_training.py获取最新的全部数据。 - 将数据传输到 yq6 服务器,并调用预测脚本:
注意:这个脚本会从
python3 ./scripts/multivariate_forecasting/energy/iTransformer_do_predict.py --start_date "2023-01-01 00:05:00" --end_date "2024-06-01 00:00:00" (start_date 其实可以随便设置,已失效)
end_date开始,每次预测 256 个 5 分钟间隔的价格和需求,直到昨天零点。 - 将预测结果传回本机的
data/data_from_llm_continous_pred目录下。 - 根据最新预测的电价,计算预测收益:
python3 query_data_offline.py --predicted-profit --input-folder data/data_from_llm_continous_pred
- 重新运行
index_page.py以刷新前端显示的收益数据。
- cwjaliyun 机器运行
- 确保在运行脚本之前,所有依赖库和环境均已正确配置。
- 定期检查日志文件,确保数据抓取和任务执行正常。
- 在进行数据传输时,确保网络连接稳定,以避免数据丢失。
- 使用
prepare_for_training.py时,根据需要选择适当的参数来获取所需的数据范围。 - 使用
query_data_offline.py时,请根据需要选择适当的参数来计算实际数据或预测数据的利润。
本项目为私有项目,不对外开源,所有权利保留。
- 预测的精度更好一点
- 增加预测准确性的指标(以预测的收益和真实的收益来衡量)
- 区分用户和管理员能看到的数据(预测精度、充放日志)
- 添加过去每日的收益柱状图
- 优化模拟交易的算法:
- 充放电不限制天数,不过一天<=3;
- 充放电不需要完全充满或者完全放空,而是根据预测的收益最大化为目标;
- 并不一定是最低和最高价进行充放电;
- 根据未来预测电价,实现自动买卖
- 给出建议的服务器配置