目录

  • 相关链接
  • 完整代码下载链接
  • 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实现相关推荐

  1. 【第十届“泰迪杯”数据挖掘挑战赛】B题:电力系统负荷预测分析 31页省一等奖论文及代码

    相关链接 (1)[第十届"泰迪杯"数据挖掘挑战赛]B题:电力系统负荷预测分析 问题一Baseline方案 (2)[第十届"泰迪杯"数据挖掘挑战赛]B题:电力系统 ...

  2. 分享篇:第十届“泰迪杯”数据挖掘挑战赛-农田害虫图像识别(特等奖)

    第十届"泰迪杯" 数据挖掘挑战赛优秀作品-农田害虫图像识别--特等奖 实验结果分析 4.1.1 实验配置 本篇论文的实验都是基于 Ubuntu 系统下进行,使用 GPU 和 CPU ...

  3. 分享篇:第十届“泰迪杯”数据挖掘挑战赛-农田害虫图像识别(特等奖)一

    1.1 赛题背景 昆虫的种类浩如烟海,农田常见的昆虫是人工生态系统的重要组成部分.分辨益 虫和害虫,保留益虫,消灭害虫,对于减轻害虫对农田的生产危害有重要意义.常见 农田害虫共有 138 种,天敌昆虫 ...

  4. 【第十届“泰迪杯”数据挖掘挑战赛】B题:电力系统负荷预测分析第一问LSTM模型的建立

    1️⃣问题分析 地区负荷的中短期预测分析 根据附件中提供的某地区电网间隔15分钟的负荷数据,建立中短期负荷预测模型:

  5. 2023年泰迪杯数据挖掘挑战赛B题--产品订单数据分析与需求预测(1.数据处理)

    1. 前言 本题相对来说比较适合新手,包括针对数据的预处理,数据分析,特征提取以及模型训练等多个步骤,完整的做下来是可以学到很多东西的. 2.问题一思路分析 本题要求利用附件中的训练数据进行深入的分析 ...

  6. 2023年泰迪杯数据挖掘挑战赛B题--产品订单数据分析与需求预测(2.数据探索性分析)

    前言 继续上一片数据预处理进行续写,利用预处理之后的数据进行数据分析并且解决问题一相关的问题.问题一主要目的是让研究各种因素对于需求量的影响,然后找到确定影响需求量的主要因素并且进行数据分析和主要特征 ...

  7. 泰迪杯数据挖掘挑战赛C题 通用论坛正文提取

    参与第五届泰迪杯,侥幸获得二等奖,简单记录一下. 一.问题的背景 在当今的大数据时代里,伴随着互联网和移动互联网的高速发展,人们产生的数据总量呈现急剧增长的趋势,当前大约每六个月互联网中产生的数据总量 ...

  8. 第八届“泰迪杯”数据挖掘挑战赛C题“泰迪杯”奖论文(基于卷积神经网络及集成学习的网络问政平台留言文本挖掘与分析)

    目 录 第一章 引言 1.1挖掘背景 1.2挖掘意义 1.3问题描述 第二章 群众留言分类 2.1数据准备 2.1.1数据描述 2.1.2数据预处理 2.2特征提取 2.3建立模型 2.3.1卷积神经 ...

  9. 泰迪杯-数据挖掘挑战赛

    http://www.tipdm.org/bdrace/tzjingsai/20181226/1544.html?cName=ral_101 第七届泰迪杯数据挖掘挑战赛组委会及专家组名单 2018-0 ...

最新文章

  1. 深入理解XGBoost,优缺点分析,原理推导及工程实现
  2. 设计模式六大原则(5):迪米特法则
  3. Linux查看端口、进程情况及kill进程
  4. java 屏蔽邮箱_使用javamail发送邮件的时候如何阻止附件内容输出到控制台
  5. c++ object model
  6. 物联网的十大基本功能和形态四种
  7. Notepad++相关插件
  8. 腾讯开源物联网操作系统 TencentOS tiny,最小体积 1.8KB!
  9. SecureCRT 回车按键值修改
  10. php date 加30分钟,PHP date函数常用时间处理方法
  11. python 中的堆栈 用列表实现
  12. 华为模拟器linux,华为模拟器命令.doc
  13. 金沙滩51单片机LED 闪烁程序
  14. python语法错误检查_Python之静态语法检查
  15. 网站访问量统计的重要指标
  16. “黑暗潜伏者” -- 手机病毒新型攻击方式
  17. 外置USB供电与内置锂电池供电自动切换电路,便携电子设备常用,经典电路必须掌握...
  18. oracle中主键违反唯一,一个非常奇怪的违反唯一性约束的问题:
  19. 证件怎么扫描?手机即可扫描
  20. 解决方案:爬虫被反爬,检测出是selenium,报400,无法进入网站

热门文章

  1. 免费云服务器 放视频 小程序,教培人都在用的四款免费小程序(良心推荐)
  2. 服务器端口增加白名单设置,使用ipset设置防火墙端口白名单,只让指定国家访问...
  3. golang mysql 中间件_golang编写的数据库中间件kingshard
  4. uniapp栅格事件委托
  5. laravel 163邮箱
  6. ODDR2原语使用方法
  7. 设计模式之二——工厂模式
  8. PP-LCNet论文全文解析
  9. OCZ PCI-e ssd安装使用
  10. 中国保险行业数字化升级研究报告 附下载