【第十届“泰迪杯”数据挖掘挑战赛】B题:电力系统负荷预测分析 问题二 时间突变分析 Python实现
目录
- 相关链接
- 完整代码下载链接
- 1 定义绘图函数
- 2 通过对原始测量应用阈值来查找异常值
- 3 手动设置阈值
- 4 使用分位数设置阈值
- 5 3Sigma原则(IQR)
- 6 设定分位数
- 6.1 导入数据
- 7 根据分位数找到时间突变
更新时间:2022年4月21日
相关链接
(1)【第十届“泰迪杯”数据挖掘挑战赛】B题:电力系统负荷预测分析 问题一Baseline方案
(2)【第十届“泰迪杯”数据挖掘挑战赛】B题:电力系统负荷预测分析 问题一ARIMA、AutoARIMA、LSTM、Prophet 多方案实现
(3)【第十届“泰迪杯”数据挖掘挑战赛】B题:电力系统负荷预测分析 问题二 时间突变分析 Python实现
(4)【第十届“泰迪杯”数据挖掘挑战赛】B题:电力系统负荷预测分析 31页省一等奖论文及代码
完整代码下载链接
https://www.betterbench.top/#/35/detail
思路是设定一个阈值,大于或者小于这个阈值就判定为突变。阈值的设定有自定义或者使用统计方法进行设置。分析过程如下
1 定义绘图函数
import pandas as pd
from pathlib import Path
import matplotlib.pyplot as plt
import plotly
import plotly.graph_objects as go
import plotly.io as pio
from plotly.offline import download_plotlyjs, init_notebook_mode, plot, iplot
from chart_studio import plotly as py
import matplotlib.pyplot as plt
import plotly.graph_objs as go
init_notebook_mode(connected=True)
import warnings
warnings.filterwarnings('ignore')
from pylab import mpl
mpl.rcParams['font.sans-serif'] = ['FangSong'] # 指定默认字体
mpl.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题
def plot_anomaly(ts,anomaly_pred = None,anomaly_true=None,file_name = 'file'):fig = go.Figure()yhat = go.Scatter(x = ts.index,y = ts,mode = 'lines', name = ts.name)fig.add_trace(yhat)if anomaly_pred is not None:status = go.Scatter(。。。略if anomaly_true is not None:status = go.Scatter(x = anomaly_true.index,y = ts.loc[anomaly_true.index],。。。略fig.show()def plot_anomaly_window(ts,anomaly_pred = None,file_name = 'file',window='1h'):fig = go.Figure()yhat = go.Scatter(x = ts.index,y = ts,。。。略fig.show()
2 通过对原始测量应用阈值来查找异常值
df = pd.read_csv('./data/附件1-区域15分钟负荷数据.csv')
df = df.rename(columns={'数据时间':'Time'})
df['Time']= pd.to_datetime(df['Time'])
df.set_index('Time',inplace=True)
col = df.columns[0]
df.plot()
df
3 手动设置阈值
min_t = 203505
max_t = 300392.7345
df[col+'threshold_alarm'] = (df[col].clip(lower = min_t,upper=max_t) != df[col])
plot_anomaly(df[col],anomaly_pred = df[df[col+'threshold_alarm']==True][col+'threshold_alarm'],anomaly_true=None,file_name = 'file')
4 使用分位数设置阈值
min_t = df[col].quantile(0.03)
max_t = df[col].quantile(0.97)
df[col+'threshold_alarm'] = (df[col].clip(lower = min_t,upper=max_t) != df[col])
plot_anomaly(df[col],anomaly_pred = df[df[col+'threshold_alarm']==True][col+'threshold_alarm'],anomaly_true=None,file_name = 'file')
5 3Sigma原则(IQR)
[Q1−c×IQR,Q3+c×IQR]
Q1 = df[col].quantile(0.25)
Q3 = df[col].quantile(0.75)
IQR = Q3- Q1
。。。略df[col+'threshold_alarm'] = (df[col].clip(lower = min_t,upper=max_t) != df[col])
plot_anomaly(df[col],anomaly_pred = df[df[col+'threshold_alarm']==True][col+'threshold_alarm'],anomaly_true=None,file_name = 'file')
6 设定分位数
window = 1
df[col+'_diff'] = df[col].diff(periods= window).fillna(0)Q1 = df[col+'_diff'].quantile(0.25)
Q3 = df[col+'_diff'].quantile(0.75)
IQR = Q3- Q1
c = 2
min_t = Q1 - c*IQR
max_t = Q3 + c*IQR
df[col+'diff_alarm'] = (df[col+'_diff'].clip(lower = min_t,upper=max_t)!= df[col+'_diff'])
plot_anomaly_window(df[col],anomaly_pred = df[df[col+'diff_alarm']==True][col+'diff_alarm'],file_name = 'file',window=f'{window}h')
6.1 导入数据
import pandas as pd
df = pd.read_csv('附件2-行业日负荷数据.csv')
metrics_df=pd.pivot_table(df,values='有功功率最大值(kw)',index='数据时间',columns='行业类型')
metrics_df.head()
metrics_df.reset_index(inplace=True)
metrics_df.fillna(0,inplace=True)
metrics_df.head()
metrics_df = metrics_df.rename(columns={'数据时间':'Time'})
df = metrics_df
df['Time']= pd.to_datetime(df['Time'])
df.set_index('Time',inplace=True)
col = df.columns[0]
df.plot()
col = df.columns[1]
Q1 = df[col].quantile(0.25)
Q3 = df[col].quantile(0.75)
IQR = Q3- Q1
。。。略df[col+'threshold_alarm'] = (df[col].clip(lower = min_t,upper=max_t) != df[col])
plot_anomaly_window(df[col],anomaly_pred = df[df[col+'threshold_alarm']==True][col+'threshold_alarm'],window='1h',file_name = 'file')
7 根据分位数找到时间突变
window = 5
df[col+'ma'] = df[col].rolling(window=window,closed='left').mean()
kpi_col = col+'ma'+'diff'
df[kpi_col] = (df[col]-df[col+'ma']).fillna(0)Q1 = df[kpi_col].quantile(0.25)
Q3 = df[kpi_col].quantile(0.75)
IQR = Q3- Q1
c = 2
min_t = Q1 - c*IQR
max_t = Q3 + c*IQR
df[kpi_col+'threshold_alarm'] = (df[kpi_col].clip(lower = min_t,upper=max_t) != df[kpi_col])
plot_anomaly_window(df[col],anomaly_pred = df[df[kpi_col+'threshold_alarm']==True][kpi_col+'threshold_alarm'],file_name = 'file',window=f'{window}h')
【第十届“泰迪杯”数据挖掘挑战赛】B题:电力系统负荷预测分析 问题二 时间突变分析 Python实现相关推荐
- 【第十届“泰迪杯”数据挖掘挑战赛】B题:电力系统负荷预测分析 31页省一等奖论文及代码
相关链接 (1)[第十届"泰迪杯"数据挖掘挑战赛]B题:电力系统负荷预测分析 问题一Baseline方案 (2)[第十届"泰迪杯"数据挖掘挑战赛]B题:电力系统 ...
- 分享篇:第十届“泰迪杯”数据挖掘挑战赛-农田害虫图像识别(特等奖)
第十届"泰迪杯" 数据挖掘挑战赛优秀作品-农田害虫图像识别--特等奖 实验结果分析 4.1.1 实验配置 本篇论文的实验都是基于 Ubuntu 系统下进行,使用 GPU 和 CPU ...
- 分享篇:第十届“泰迪杯”数据挖掘挑战赛-农田害虫图像识别(特等奖)一
1.1 赛题背景 昆虫的种类浩如烟海,农田常见的昆虫是人工生态系统的重要组成部分.分辨益 虫和害虫,保留益虫,消灭害虫,对于减轻害虫对农田的生产危害有重要意义.常见 农田害虫共有 138 种,天敌昆虫 ...
- 【第十届“泰迪杯”数据挖掘挑战赛】B题:电力系统负荷预测分析第一问LSTM模型的建立
1️⃣问题分析 地区负荷的中短期预测分析 根据附件中提供的某地区电网间隔15分钟的负荷数据,建立中短期负荷预测模型:
- 2023年泰迪杯数据挖掘挑战赛B题--产品订单数据分析与需求预测(1.数据处理)
1. 前言 本题相对来说比较适合新手,包括针对数据的预处理,数据分析,特征提取以及模型训练等多个步骤,完整的做下来是可以学到很多东西的. 2.问题一思路分析 本题要求利用附件中的训练数据进行深入的分析 ...
- 2023年泰迪杯数据挖掘挑战赛B题--产品订单数据分析与需求预测(2.数据探索性分析)
前言 继续上一片数据预处理进行续写,利用预处理之后的数据进行数据分析并且解决问题一相关的问题.问题一主要目的是让研究各种因素对于需求量的影响,然后找到确定影响需求量的主要因素并且进行数据分析和主要特征 ...
- 泰迪杯数据挖掘挑战赛C题 通用论坛正文提取
参与第五届泰迪杯,侥幸获得二等奖,简单记录一下. 一.问题的背景 在当今的大数据时代里,伴随着互联网和移动互联网的高速发展,人们产生的数据总量呈现急剧增长的趋势,当前大约每六个月互联网中产生的数据总量 ...
- 第八届“泰迪杯”数据挖掘挑战赛C题“泰迪杯”奖论文(基于卷积神经网络及集成学习的网络问政平台留言文本挖掘与分析)
目 录 第一章 引言 1.1挖掘背景 1.2挖掘意义 1.3问题描述 第二章 群众留言分类 2.1数据准备 2.1.1数据描述 2.1.2数据预处理 2.2特征提取 2.3建立模型 2.3.1卷积神经 ...
- 泰迪杯-数据挖掘挑战赛
http://www.tipdm.org/bdrace/tzjingsai/20181226/1544.html?cName=ral_101 第七届泰迪杯数据挖掘挑战赛组委会及专家组名单 2018-0 ...
最新文章
- 深入理解XGBoost,优缺点分析,原理推导及工程实现
- 设计模式六大原则(5):迪米特法则
- Linux查看端口、进程情况及kill进程
- java 屏蔽邮箱_使用javamail发送邮件的时候如何阻止附件内容输出到控制台
- c++ object model
- 物联网的十大基本功能和形态四种
- Notepad++相关插件
- 腾讯开源物联网操作系统 TencentOS tiny,最小体积 1.8KB!
- SecureCRT 回车按键值修改
- php date 加30分钟,PHP date函数常用时间处理方法
- python 中的堆栈 用列表实现
- 华为模拟器linux,华为模拟器命令.doc
- 金沙滩51单片机LED 闪烁程序
- python语法错误检查_Python之静态语法检查
- 网站访问量统计的重要指标
- “黑暗潜伏者” -- 手机病毒新型攻击方式
- 外置USB供电与内置锂电池供电自动切换电路,便携电子设备常用,经典电路必须掌握...
- oracle中主键违反唯一,一个非常奇怪的违反唯一性约束的问题:
- 证件怎么扫描?手机即可扫描
- 解决方案:爬虫被反爬,检测出是selenium,报400,无法进入网站