窃电漏电用户的发现

  • 背景

    • 在研究这个项目之前我也在想,为什么这种领域需要数据挖掘?其实你若愿意去发现,你会发现,数据挖掘无处不在。
    • 为什么选择数据分析与挖掘技术?原因当然是之前处理方式的不合理。

      方式 不合理之处
      定期巡检、定期检查电表、用户举报 对人的依赖太高,容错率低 。
      营销稽查人员、用电检查人员利用计量异常报警功能和电能量数据查询功能开展在线监控,采集异常信息,建立数据分析模型 由于终端误报,存在数据可靠性问题。
    • 目前存在的分析模型,各输入指标权重是由人定的,这是含有主观臆断的,存在明显缺陷,实施效果不尽如人意。
    • 目前的自动化系统可以采集相关信息,通过这些信息提取漏电用户的特征,构建识别模型,就能做到自动检查。
  • 分析过程和方法

    • 数据获取

      • 数据集已给出,很多时候分析人员拿到的不是数据集信息而是需要处理的原始数据如多个文档、多个图片,处理方法各不相同。
    • 数据探索
      • 分布分析(主要目的是筛选分析对象类别)
      • 周期性分析(查看正常用户和非正常用户数据周期变化比对)
    • 数据预处理
      • 过滤不可能窃电用户,剔除之
      • 过滤特殊时间点数据(节假日,数据不合理是正常的)
      • 缺失值处理,使用拉格朗日插值法插值(注意,这里直接删除会造成周期性分析不合理)
    • 数据挖掘建模
      • 典型的给出特征和分类标签,对新的数据特征进行分类(打标签)
      • 使用LM神经网络和CART决策树进行模型搭建
    • 后续处理
      • 根据用户数据实时分析用户特征,也就是模型的实际使用。
  • 补充说明
    • 使用两种建模方式(LM神经网络和CART决策树)
    • 本案例数据集已经相当合理,主要工作就是建模,不多赘述
    • 参考书《Python数据分析与挖掘实战》
# -*- coding: utf-8 -*-
"""
使用决策树建模数据预估
"""
import matplotlib.pyplot as plt
import pandas as pd
from random import shuffle
import pydotplus
from sklearn.externals.six import StringIO
from sklearn import tree
from sklearn import metrics
from sklearn.model_selection import train_test_splitfeathersName = Nonedef getDataSet(fileName):data = pd.read_excel(fileName)global feathersName# 提取特征名feathersName = data.columns[:3].valuesdata = data.values# 随机打乱shuffle(data)# 设置训练集数据量为总数据的80%rawData = data[:, :3]rawLabel = data[:, 3]trainData, testData, trainLabel, testLabel = train_test_split(rawData, rawLabel, test_size=0.2)return trainData, testData, trainLabel, testLabeldef modeling(trainData, trainLabel, testData, testLabel):# 构建CART决策树模型clf = tree.DecisionTreeClassifier(max_depth=5)clf.fit(trainData, trainLabel)# 本地落地模型from sklearn.externals import joblibjoblib.dump(clf, 'tree.pkl')# 可视化决策树plt.rcParams['font.sans-serif'] = ['SimHei']plt.rcParams['axes.unicode_minus'] = Falsedot_data = StringIO()tree.export_graphviz(clf, out_file=dot_data, feature_names=feathersName, class_names=str(clf.classes_),filled=True, rounded=True, special_characters=True)graph = pydotplus.graph_from_dot_data(dot_data.getvalue())graph.write_pdf("tree.pdf")# 利用模型回判测试集,输出预测结果混淆矩阵cm = metrics.confusion_matrix(trainLabel, clf.predict(trainData))print(cm)# 利用模型预测测试集,输出ROC曲线from sklearn.metrics import roc_curvefpr, tpr, thresholds = roc_curve(testLabel, clf.predict_proba(testData)[:, 1], pos_label=1)plt.plot(fpr, tpr, linewidth=2, label='ROC of CART', color='green')plt.title("CART决策树分类结果")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()if __name__ == '__main__':a, b, c, d = getDataSet('./data/model.xls')modeling(a, c, b, d)
# -*- coding: utf-8 -*-
"""
使用LM神经网络进行建模分析
"""
import pandas as pd
import matplotlib.pyplot as plt
from random import shuffle
from keras.models import Sequential
from keras.layers.core import Dense, Activation
from cm_plot import *
from sklearn.metrics import roc_curve
from sklearn.metrics import confusion_matrix
from sklearn.model_selection import train_test_splitdef getDataSet(fileName):data = pd.read_excel(fileName)data = data.values# 随机打乱shuffle(data)rawData = data[:, :3]rawLabel = data[:, 3]trainData, testData, trainLabel, testLabel = train_test_split(rawData, rawLabel, test_size=0.2)def modeling(trainData, trainLabel, testData, testLabel):'''构建LM神经网络:return:'''netFile = 'net.model'net = Sequential()# 添加输入层(3结点)到隐藏层(10结点)的连接net.add(Dense(input_dim=3, units=10))# 隐藏层使用relu激活函数net.add(Activation('relu'))# 添加隐藏层(10结点)到输出层(1结点)的连接net.add(Dense(input_dim=10, units=1))# 输出层使用sigmoid激活函数net.add(Activation('sigmoid'))net.compile(loss='binary_crossentropy', optimizer='adam')# 循环1000次训练模型net.fit(trainData, trainLabel, epochs=1000, batch_size=1)# 本地化模型net.save_weights(netFile)# 训练集数据回判# keras用predict给出预测概率,predict_classes才是给出预测类别,而且两者的预测结果都是n*1维数组,而不是通常的1*nrst = net.predict_classes(trainData).reshape(len(trainData))# 输出混淆矩阵cm = confusion_matrix(trainLabel, rst)print('训练集混淆矩阵', cm)# 测试集预测rst_test = net.predict_classes(testData).reshape(len(testData))cm2 = confusion_matrix(testLabel, rst_test)print('测试集混淆矩阵', cm2)rst2 = net.predict(testData).reshape(len(testData))fpr, tpr, thresholds = roc_curve(testLabel, rst2, pos_label=1)#plt.rcParams['font.sans-serif'] = ['SimHei']plt.rcParams['axes.unicode_minus'] = Falseplt.plot(fpr, tpr, linewidth=2, label='ROC of LM')plt.title("LM神经网络分类结果")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()modeling(trainData, trainLabel, testData, testLabel)if __name__ == '__main__':getDataSet('./data/model.xls')

具体数据集和代码可以看我的github。

数据分析与挖掘实战-窃电漏电用户的发现相关推荐

  1. 数据分析与挖掘实战-电商产品评论数据情感分析

    电商产品评论数据情感分析 背景 随着网上购物越来越流行,人们对于网上购物的需求越来越高,这让京东.淘宝等电商平台得到了很大的发展机遇.但是,这种需求也推动了更多的电商平台的崛起,引发了激烈的竞争.在这 ...

  2. 《Python数据分析与挖掘实战》第15章 ——电商产品评论数据情感分析(LED)

    文章目录 1.挖掘背景与目标 2.2 数据探索与预处理 2.1 数据筛选 2.2 数据去重 2.3 删除前缀评分 2.4 jieba分词 3 基于LDA 模型的主题分析 4.权重 5.如何在主题空间比 ...

  3. 数据分析与挖掘实战-家用电器用户行为分析与事件识别

    家用电器用户行为分析与事件识别 背景 居民使用家电过程中,会因为地区气候.区域不同.年龄差异,形成不同的使用习惯,若能深入了解这些习惯,针对性地开发新功能,便能开拓市场. 本案例以热水器为例,分析用户 ...

  4. 数据分析与挖掘实战-电子商务网站用户行为分析及服务推荐

    电子商务网站用户行为分析及服务推荐 背景 随着互联网和信息技术的迅速发展,电子商务.网上服务与交易等网络业务越来越普及,大量的信息聚集起来,形成了"海量"信息.用户想要从海量信息中 ...

  5. 大数据培训课程分享:Python数据分析与挖掘实战课程介绍

    <Python数据分析与挖掘实战>课程内容以Python数据分析与挖掘的常用技术与真实案例相结合的方式,深入浅出地介绍Python数据分析与挖掘的重要内容,共分为基础篇(第1~5章)和实战 ...

  6. 《Python数据分析与挖掘实战》一3.1 数据质量分析

    本节书摘来自华章出版社<Python数据分析与挖掘实战>一书中的第3章,第3.1节,作者 张良均 王路 谭立云 苏剑林,更多章节内容可以访问云栖社区"华章计算机"公众号 ...

  7. 数据分析与挖掘实战-基于基站定位数据的商圈分析

    基于基站定位数据的商圈分析 背景 随着个人手机终端的普及,出行群体中手机拥有率和使用率已经达到相当高的比例,手机移动网络也基本上实现了城乡空间区域的全覆盖.根据手机信号在真实地理空间上的覆盖情况,将手 ...

  8. 《Python数据分析与挖掘实战》一1.2 从餐饮服务到数据挖掘

    本节书摘来自华章出版社<Python数据分析与挖掘实战>一书中的第1章,第1.2节,作者 张良均 王路 谭立云 苏剑林,更多章节内容可以访问云栖社区"华章计算机"公众号 ...

  9. 【Hadoop大数据分析与挖掘实战】(一)----------P19~22

    这是一本书的名字,叫做[Hadoop大数据分析与挖掘实战],我从2017.1开始学习 软件版本为Centos6.4 64bit,VMware,Hadoop2.6.0,JDK1.7. 但是这本书的出版时 ...

最新文章

  1. Python使用matplotlib可视化两个时间序列的交叉相关性图、交叉相关图显示了两个时间序列之间的滞后性(Cross Correlation plot)
  2. 如何实践AI深度学习的十大惊艳案例
  3. oracle更改控制文件位置
  4. MATLAB中使用streamline函数绘制正负点电荷及它们构成的电偶极子的电场线分布图
  5. UIAutomator 2
  6. mysql maria引擎_MySQL体系结构和存储引擎概述
  7. 歌词数据解析、歌词滚动、歌词进度控制功能的实现(基于js-base64、lyric-parser、better-scroll),以vue项目为例
  8. JQuery EasyUI DataGrid 、tree查询
  9. VS code解决Latex不显示参考文献,正文中显示[?]的问题
  10. 张量(tensor)
  11. oracle查看表空间里具体一张表的大小
  12. car-like robot运动模型及应用分析(图片版)
  13. 博科brocade光纤交换机alias-zone的划分--实操案例
  14. 微信小程序常用图标大全1
  15. 妙计叠出,谋而后动——融云以“锦囊”之策,守护客户全生命周期
  16. 微博技术架构分析和设计
  17. C语言实现模拟银行存取款管理系统课程设计(纯C语言版)
  18. 实名认证平台如何实现?
  19. 全新整理:微软、谷歌、百度等公司经典面试100题[第1-60题]
  20. Excel如何冻结窗口

热门文章

  1. 平衡二叉树(AVL Tree)(左旋、右旋)
  2. QuorumPeerMain.runFromConfig
  3. zookeeper的设计猜想-集群组成
  4. 偏向锁的获取和撤销逻辑
  5. Redis 购物车 - 删除商品与更新购买数量
  6. response对象简介
  7. Collection集合概述
  8. 数据库-优化-通过执行计划查询分析SQL执行计划-每个字段的说明
  9. Filter_快速入门
  10. 将微服务注册到Eureka Server上