Skip to content

Repository files navigation

energySys

项目简介

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: 模拟充放电收益,找到最佳的充放电区间,并计算收益,为决策提供支持。

开启自动执行任务

  1. 执行 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
  2. 执行 systemctl status cron 确认定时任务已经开启,确保系统正常运行。

运行原理

由于 GPU 服务器成本较高,暂时使用实验带 GPU 的机器yq6进行模型训练和未来价格预测,然后把未来价格预测的结果传回网站部署的服务器 cwjaliyun前端进行展示;以下是具体流程:

1. 登录 cwjaliyun 机器,从官网获取最新历史数据作为模型的训练数据

ssh cwjaliyun
conda activate energysys
python3 llm/prepare_for_training.py --incremental

2. 最新的模型训练数据(包含历史数据)传输到带 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
  • 更新预测和实际的利润柱状图: 执行以下步骤:
    1. cwjaliyun 机器运行 llm/prepare_for_training.py 获取最新的全部数据。
    2. 将数据传输到 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 分钟间隔的价格和需求,直到昨天零点。
    3. 将预测结果传回本机的 data/data_from_llm_continous_pred 目录下。
    4. 根据最新预测的电价,计算预测收益:
      python3 query_data_offline.py --predicted-profit --input-folder data/data_from_llm_continous_pred
    5. 重新运行 index_page.py 以刷新前端显示的收益数据。

注意事项

  • 确保在运行脚本之前,所有依赖库和环境均已正确配置。
  • 定期检查日志文件,确保数据抓取和任务执行正常。
  • 在进行数据传输时,确保网络连接稳定,以避免数据丢失。
  • 使用 prepare_for_training.py 时,根据需要选择适当的参数来获取所需的数据范围。
  • 使用 query_data_offline.py 时,请根据需要选择适当的参数来计算实际数据或预测数据的利润。

许可证

本项目为私有项目,不对外开源,所有权利保留。

TODO

  • 预测的精度更好一点
  • 增加预测准确性的指标(以预测的收益和真实的收益来衡量)
  • 区分用户和管理员能看到的数据(预测精度、充放日志)
  • 添加过去每日的收益柱状图
  • 优化模拟交易的算法:
    1. 充放电不限制天数,不过一天<=3;
    2. 充放电不需要完全充满或者完全放空,而是根据预测的收益最大化为目标;
    3. 并不一定是最低和最高价进行充放电;
  • 根据未来预测电价,实现自动买卖
  • 给出建议的服务器配置

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages