Chapter 6 电力窃漏电用户自动识别

目录

 

一、数据抽取

二、数据探索

2.1 分布分析

2.2 周期性分析

三、数据预处理

3.1 数据清洗

3.2 缺失值处理

3.3 数据变换

四、模型构建

4.1 数据划分

4.2 构建CART决策树模型

4.3 模型评价

五、模型应用


一、数据抽取

二、数据探索

2.1 分布分析

对各个用电类别的窃漏电用户情况,作条形图。

2.2 周期性分析

对每天的用电情况,作折线图。

2.2.1 正常用电电量周期性分析

2.2.2 窃漏电用户电量周期性分析

三、数据预处理

3.1 数据清洗

3.2 缺失值处理

# -*- coding: utf-8 -*-
# 拉格朗日插值代码
import pandas as pd  # 导入数据分析库Pandas
from scipy.interpolate import lagrange  # 导入拉格朗日插值函数

inputfile = '.../data/missing_data.xls'  # 输入数据路径,需要使用Excel格式;
outputfile = '.../tmp/missing_data_processed.xls'  # 输出数据路径,需要使用Excel格式

data = pd.read_excel(inputfile, header=None)  # 读入数据

# 自定义列向量插值函数
# s为列向量,n为被插值的位置,k为取前后的数据个数,默认为5
def ployinterp_column(s, n, k=5):
  y = s[list(range(n-k, n)) + list(range(n+1, n+1+k))]  # 取数
  y = y[y.notnull()]  # 剔除空值
  return lagrange(y.index, list(y))(n)  # 插值并返回插值结果

#逐个元素判断是否需要插值
for i in data.columns:
  for j in range(len(data)):
    if (data[i].isnull())[j]:  # 如果为空即插值。
      data[i][j] = ployinterp_column(data[i], j)

data.to_excel(outputfile, header=None, index=False)  # 输出结果

3.3 数据变换

根据原来的数据,基于数据变换,构建出以下新的评价指标:

  • 1)电量趋势下降指标
  • 2)线损指标
  • 3)告警指标

四、模型构建

4.1 数据划分

# -*- coding: utf-8 -*-
# 构建并测试CART决策树模型

import pandas as pd  # 导入数据分析库
from random import shuffle  # 导入随机函数shuffle,用来打乱数据

datafile = '.../data/model.xls'  # 数据名
data = pd.read_excel(datafile)  # 读取数据,数据的前三列是特征,第四列是标签
data = data.as_matrix()  # 将表格转换为矩阵
shuffle(data)  # 随机打乱数据

p = 0.8  # 设置训练数据比例
train = data[:int(len(data)*p),:]  # 前80%为训练集
test = data[int(len(data)*p):,:]  # 后20%为测试集

4.2 构建CART决策树模型

#构建CART决策树模型
from sklearn.tree import DecisionTreeClassifier  # 导入决策树模型

treefile = 'C:/Users/Cong Ma/Desktop/exercise/case_6/temp/tree.pkl'  # 模型输出名字

tree = DecisionTreeClassifier()  # 建立决策树模型
tree.fit(train[:,:3], train[:,3])  # 训练

# 保存模型
from sklearn.externals import joblib
joblib.dump(tree, treefile)

4.3 模型评价

# 1 混淆矩阵
import seaborn as sns
from sklearn.metrics import confusion_matrix
import matplotlib.pyplot as plt

# 1.1 得到混淆矩阵
C2=confusion_matrix(train[:,3], tree.predict(train[:,:3]))  # 注意到Scikit-Learn使用predict方法直接给出预测结果。
print(C2) #打印出来看看

# 1.2 根据混淆矩阵画热力图
sns.set()
f,ax=plt.subplots()

sns.heatmap(C2, annot=True, fmt=".3g",ax=ax)  # 画热力图,注意:默认fmt=".2g",此时图中的数据"144"会显示成"1.4e+02"
ax.set_title('confusion matrix')  # 标题
ax.set_xlabel('predict')  # x轴
ax.set_ylabel('true')  # y轴


# 2 ROC曲线
from sklearn.metrics import roc_curve  # 导入ROC曲线函数
from matplotlib import pyplot as plt

fpr, tpr, thresholds = roc_curve(test[:,3], tree.predict_proba(test[:,:3])[:,1], pos_label=1)
plt.plot(fpr, tpr, linewidth=2, label = 'ROC of CART', color = 'green')  # 作出ROC曲线
plt.xlabel('False Positive Rate')  # 坐标轴标签
plt.ylabel('True Positive Rate')  # 坐标轴标签
plt.ylim(0,1.05)  # 边界范围
plt.xlim(0,1.05)  # 边界范围
plt.legend(loc=4)  # 图例
plt.show()  # 显示作图结果

五、模型应用

采集数据,并按进行数据变换,得到3.3中构建的指标,得到模型输入数据。利用构建好的模型对窃漏电用户进行诊断。

 

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值