22-时序预测-电力负荷预测
📅 2026/7/26 7:43:33
👁️ 阅读次数
📝 编程学习
背景
重要性突出:电力工业是国民经济发展中的重要基础性能源产业,是保证国民经济和社会持续、稳定、健康的发展的关键。电力工业的发展建设对国家各行业起到至关重要的作用。随着改革开放后中国经济的高速发展,各领域的用电需求在不断激增,推动着电力系统向数字化、智能化转型发展。
任务复杂艰巨:随着全球对可再生能源的日益重视以及电力系统结构的转型,传统的负荷预测和电力平衡技术面临着新的挑战和机遇。全球范围内,人们对电力系统的可靠性、经济性和环境友好性的要求日益增加,而这些要求往往受到可再生能源波动性和不确定性的影响。因此,急需解决的关键问题之一是如何准确预测负荷需求,实现电力供需的平衡,并有效整合可再生能源,满足日益增长的电力需求,同时降低碳排放并确保电网稳定运行。
需求分析
- 业务需求:根据南方电网中的历史负荷数据,预测下一小时的电力负荷
- 功能需求:基于历史的电力负荷数据,尽可能充分的挖掘特征,对未来下一个时间步(1小时)的电力负荷进行预测
- 数据源:包含时间、电力负荷两个字段的历史电力负荷数据
- 技术栈:pandas、matplotlib、sklearn、xgboost
- 实现方法:将时序数据特征以及时间特征整合成特征数据,要预测的指标作为目标数据,处理成二维的结构化数据集,训练机器学习模型进行预测。
项目说明
1. 模型基础架构搭建
该项目基于历史的电力负荷数据,训练XGBoost模型,实现多变量单步的电力负荷预测。
文件说明:
- data: 数据
- log: 日志 .log
- model: 保存的模型文件 .pkl
- src: 项目主要的业务逻辑,包括机器学习建模相关的代码 .py
- utils: 项目中自定义的工具包 .py
2. 开发日志工具类(utils/log.py)
- 导包 logging
- 定义日志工具类
- 指定日志级别关系映射
- 定义__init__方法,配置日志保存路径、logger名称、初始格式、声明logger对象、设置日志级别
- 定义get_logger方法,指定生成的日志文件名、在logger对象中添加FileHandler
# -*- coding: utf-8 -*- import logging import os class Logger(object): # 日志级别关系映射 level_relations = { 'debug': logging.DEBUG, # 解释:显示所有信息,这个级别最低 'info': logging.INFO, # 显示所有信息,这个级别比较常用 'warning': logging.WARNING, # 显示所有警告信息,这个级别一般用于表示一个错误,但是它不会导致程序退出 'error': logging.ERROR, # 显示所有错误信息,这个级别一般用于表示一个错误,它可能会导致程序退出 'crit': logging.CRITICAL # 显示所有致命错误信息,这个级别一般用于表示一个致命错误,它可能会导致程序退出 } # 解释: # %(asctime)s: 代表时间;默认格式 YYYY-MM-DD HH:MM:SS,毫秒 # %(levelname)s: 代表日志级别;默认格式 YYYY-MM-DD HH:MM:SS,毫秒 # %(message)s: 代表日志信息;你传入的日志文本 def __init__(self, root_path, log_name, level='info', fmt='%(asctime)s - %(levelname)s: %(message)s'): # 指定日志保存的路径 self.root_path = root_path # 初始logger名称和格式 self.log_name = log_name # 初始格式 self.fmt = fmt # 先声明一个 Logger 对象 self.logger = logging.getLogger(log_name) # 设置日志级别 # 解释: # self.level_relations.get(level) 获取对应级别 # self.logger.setLevel() # 设置日志级别 self.logger.setLevel(self.level_relations.get(level)) def get_logger(self): # 指定对应的 Handler 为 FileHandler 对象, 这个可适用于多线程情况 path = os.path.join(self.root_path, 'log') os.makedirs(path, exist_ok=True) # 创建目录 file_name = os.path.join(path, self.log_name + '.log') # 创建文件 rotate_handler = logging.FileHandler(file_name, encoding="utf-8", mode="a") # 创建文件对象 # Handler 对象 rotate_handler 的输出格式 formatter = logging.Formatter(self.fmt) # 创建格式对象 rotate_handler.setFormatter(formatter) # 设置格式 # 将rotate_handler添加到Logger self.logger.addHandler(rotate_handler) # 添加处理器 return self.logger # 测试代码 if __name__ == '__main__': logger = Logger(root_path='../', log_name='test').get_logger() logger.info('hello world')3. 开发通用工具包(utils/common.py)
- 导包 pandas、numpy
- 定义数据预处理方法(data_preprocessing)
- 加载数据源
- 时间格式化,转化为”%Y-%m-%d %H:%M:%S”格式
- 按照时间升序排序
- 去重
# -*- coding: utf-8 -*- import pandas as pd import numpy as np def data_preprocessing(path): """ 1.获取数据源 2.时间格式化,转为2024-12-20 09:00:00这种格式 3.按时间升序排序 4.去重 :param path: :return: """ # 1.获取数据源 data = pd.read_csv(path) # 2.时间格式化 data['time'] = pd.to_datetime(
编程学习
技术分享
实战经验