
背景重要性突出:电力工业是国民经济发展中的重要基础性能源产业,是保证国民经济和社会持续、稳定、健康的发展的关键。电力工业的发展建设对国家各行业起到至关重要的作用。随着改革开放后中国经济的高速发展,各领域的用电需求在不断激增,推动着电力系统向数字化、智能化转型发展。任务复杂艰巨:随着全球对可再生能源的日益重视以及电力系统结构的转型,传统的负荷预测和电力平衡技术面临着新的挑战和机遇。全球范围内,人们对电力系统的可靠性、经济性和环境友好性的要求日益增加,而这些要求往往受到可再生能源波动性和不确定性的影响。因此,急需解决的关键问题之一是如何准确预测负荷需求,实现电力供需的平衡,并有效整合可再生能源,满足日益增长的电力需求,同时降低碳排放并确保电网稳定运行。需求分析业务需求:根据南方电网中的历史负荷数据,预测下一小时的电力负荷功能需求:基于历史的电力负荷数据,尽可能充分的挖掘特征,对未来下一个时间步(1小时)的电力负荷进行预测数据源:包含时间、电力负荷两个字段的历史电力负荷数据技术栈:pandas、matplotlib、sklearn、xgboost实现方法:将时序数据特征以及时间特征整合成特征数据,要预测的指标作为目标数据,处理成二维的结构化数据集,训练机器学习模型进行预测。项目说明1. 模型基础架构搭建该项目基于历史的电力负荷数据,训练XGBoost模型,实现多变量单步的电力负荷预测。文件说明:data: 数据log: 日志 .logmodel: 保存的模型文件 .pklsrc: 项目主要的业务逻辑,包括机器学习建模相关的代码 .pyutils: 项目中自定义的工具包 .py2. 开发日志工具类(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(