关于EDA(探索性数据分析)
EDA是通过统计图表和数据可视化技术来总结数据特征、发现模式和识别异常值的过程。
定义:掩码(mask)在数据处理和分析中是一种用于筛选和选择数据的布尔数组。它通过标记数据集中的某些元素为
True 或 False,来指示哪些数据应该被选中或排除。
掩码只需计算一次,并可以在多个地方重复使用。这比Task1中每次都使用 .isna() 更高效
# 创建测试集掩码,标记出所有价格为 NaN 的数据行
test_mask = electricity_price["price"].isna()
# 创建训练集掩码,标记出所有价格不为 NaN 的数据行,其中~代表布尔取反,即True和False互换。 `[True,False]`和 `~[False,True]`一致
train_mask = ~test_mask
仔细观察给出的数据,发现出清价格在一小时内不变,而非15分钟变更一次。用如下代码检查,果然每次出清价格重复4次。但是总负荷是会变的,因此出清价格过了一小时以后会变动。
def check_repeated(data, repeat_count=4):
"""
检查给定数据序列中是否存在元素不断重复的情况。
参数:
data (list): 要检查的序列数据。
repeat_count (int): 每个元素应重复的次数。默认值为4。
返回:
None
"""
# 以步长 repeat_count 遍历 data 的索引
for i in range(0, len(data), repeat_count):
# 从索引 i 开始,取长度为 repeat_count 的子序列
subsequence = data[i:i + repeat_count]
# 如果子序列的独特元素数量不等于 1,则表示不是同一元素重复
if len(set(subsequence)) != 1:
print(f"序列数据不是元素不断重复 {repeat_count} 次")
return # 发现不满足条件的情况后,直接返回
# 如果遍历完所有子序列,未发现不满足条件的情况,则输出满足条件的信息
print(f"序列数据是元素不断重复 {repeat_count} 次")
# 调用函数并传入特定的电价数据
check_repeated(electricity_price[train_mask]["price"])
总负荷数值分布基本满足正态分布
出清价格有几个特点:
- 有很多是负价格
- 1-100之间的低价格较多
- 有一定的异常高价(800以上)
因此,弄清楚高价负价的形成原理,有利于提升预测准确性
在此之前,由于电力公司在不同时间段的总电力需求和电价不同,有必要采用分时统计
# 从 DataFrame 的索引中提取时间信息,并添加为新的列
# 假设索引为 DatetimeIndex 类型
# 提取小时信息,并创建一个新列 "hour"
electricity_price["hour"] = electricity_price.index.hour
# 提取月份信息,并创建一个新列 "month"
electricity_price["month"] = electricity_price.index.month
# 提取日期信息,并创建一个新列 "day"
electricity_price["day"] = electricity_price.index.day
# 提取星期几的信息(0 = 周一, 6 = 周日),并创建一个新列 "weekday"
electricity_price["weekday"] = electricity_price.index.weekday
# 提取年份信息,并创建一个新列 "year"
electricity_price["year"] = electricity_price.index.year
早高峰一般在6-9点,晚高峰一般在16-21点,中间的10-15点为低谷期。低谷期形成的原因是火电和光伏发电存在相互替代的关系,这里引用Task2原文对“鸭子曲线”的解释:“当一天太阳出来后,太阳能逐渐开始替代火电,并在14点达到最大,进而导致火电受光伏发电竞争而降价。而在傍晚时太阳落山,光伏机组迅速减小发电,此时火电开始集中发电,价格迅速上升,形成了一天中典型的“两高峰,一低谷”的态势。”
进一步用透视表和热力图来分析不同月份下的电价变化趋势,可以根据地理知识做出猜测:
- 从冬至到夏至,日出时间不断提早,光伏发电更早抢占火电市场空间,导致火电更早在早高峰期间跌价。同时1-5月是大风期,风电也进一步驱使火电降价。
- 6-8月为小风期,风电减弱。同时雨带迁移到北方,光伏受天气影响发电量大幅减少,火电迎来高价区(尤其是8月降水最多,火电价格最高)
- 9-12月为大风期,风电加强。日出开始推迟,火电在低谷期的价格逐渐回升。
用上面的研究思路来研究高电价和负电价的形成原理,首先来看负电价:
负电价之所以会形成,是因为市场竞争导致电价中标失败,且生产出的电力不易储存。若通过停机来消耗多余生成的电力,造成的损失比亏本售出还大,因此只能亏本售出。观察小时分布,12点时负电量出现频数最高,或许是因为依靠人力的火电的工人多在此时间吃饭午休,人为监控不力使得火电电价下降,火电竞标优势更大导致。同理,月分布中,5月份的五一假期会导致同样的问题。综上所述,节假日是判断负电价的重要特征
其次来看高电价:
日落后高电价的现象主要是因为光伏发电停止,导致电力供应减少,在供需紧张的情况下,火电厂可以以更高的价格出售电力,从而推高市场整体价格。如图,17点正是大多数月份太阳落山的时间,而8月晴天多,太阳落山造成的光伏电价和火电电价的对比更明显。综上所述,高电价受到了外部因素的影响