杜瀚霖,郭志达,李晓莉
(广东电网责任有限公司惠州供电局,广东 惠州516000)
随着经济的发展和人民生活水平的不断提高,供电企业为了提高供电的效率,保障供电的安全及稳定,需要对用电情况进行及时检查和数据分析[1]。由于用电电路的复杂化以及供电方式的多样化,传统人工方式的用电情况的检查及分析已经不能适应当前工作的需求,然而信息技术的发展为用户用电情况的分析提供了条件。本文首先利用Python 编程和数据分析软件tableau,对用户用电量、报装容量、故障工单等信息进行分析,并在此基础上对高负荷用电与故障之间的关系进行判断,然后利用Python 编程实现信息的自动发送,将高负荷用电的用户信息,通过微信、企业微信、钉钉等方式发送至对应的客户经理和设备主人。
为实现对用电情况的分析,进而对高负荷用电与故障的关系进行判断,并及时进行信息反馈。系统的主要功能模块如图1 所示。
主要功能包括:数据获取、数据分析、信息管理。
其中数据分析部分,除了Python 编程外还使用了更加专业的数据分析工具Tableau。
数据获取主要通过从营销系统导出,本文使用了用电量报表、用电故障单、用户报装容量单三个表格。
图1 系统功能结构图
首先根据是否高负荷用电和是否出现故障将用户分为四类,如表1 所示,分别统计数量。
表1 高负荷用电及故障数据统计表
根据独立性检验公式(1),计算随机变量K2的值
并根据表2 确定“高负荷用电和出现故障有关系“的可信程度。
表2 高负荷用电及故障关系可信度
例如,若K2计算结果为7,6.635<7<7.879,则“高负荷用电和出现故障有关系”成立的概率为1-0.010=99%,可以认为高负荷用电与出现故障有较大的关联;若K2计算结果为0.5,0.455<0.5<0.708,则“高负荷用电和出现故障有关系”成立的概率为1-0.50=50%,可以认为高负荷用电与出现故障关联较小。
本文使用JN 营业厅的数据对系统进行运行测试。数据包括:该营业厅所有用户11 月的用电量、该营业厅11月的故障单、该营业厅所有用户的报装容量。数据分析采用以下两种方式。
(1)近几年,随着大数据、人工智能快速发展,Python这一跨平台、开源的高级编程语言,发展势头迅猛,呈现出爆发式的增长。Python 语言是一种面向对象的动态类型编程语言,语法简单,便于学习,功能强大,快捷高效,应用领域非常广泛。同时,Python 提供了强大的模块支持,能极大的提高程序的开发效率[2]。
利用Python 编写程序,分别读取用电量报表、用电故障单、用户报装容量表中的数据,然后将每个用户的户号、电话号码、所属台区、所属线路、本月用电量、报装容量、是否发生故障等信息整合到一个数据文件result.xls中,然后对其中的数据进行分析计算,从而筛选出高负荷的用户信息。
(2)为了提高数据分析的效率,降低错误率,还可以使用专业的数据分析软件对数据进行分析。如使用Tableau 软件可直接绘制出各台区和线路的高负荷户数柱状图,横轴代表不同的台区、线路,纵轴代表高负荷户数,颜色代表高负荷用户占的比例。结果如图2 所示。
统计有无高负荷用电和有无故障的用户数量,填入表3 中。
将数据代入式(1)中进行计算,得到结果
根据计算结果对比表2 可以得知,“高负荷用电和出现故障有关系”成立的概率在97.5%与99%之间。因此,可以认为用户高负荷用电和出现故障之间是存在相关关系的。
图2 各台区、线路高负荷用户数量柱状图
根据以上结论,在发现用户存在高负荷用电行为后,如果及时将高负荷用电用户的信息发送给对应的客户经理和设备主人进行预警,可以达到减少故障的发生次数和减小故障带来的负面影响的目的。
表3 高负荷用电及故障数据统计表
及时将用电信息发送给客户经理和设备主人有利于降低故障的发生率,但是完全依靠人工发送信息,会大量增加管理人员的工作负荷,同时也容易出现差错。利用微信、钉钉等平台实现信息的自动发送可以有效解决这一问题。
目前利用Python 编程实现微信自动发消息的方式,几乎都是通过itchat 或wxpy 模块自动登陆网页版微信,实现的微信在线助理功能。但随着微信管理越来越严格,为了避免平台充斥大量垃圾信息,腾讯公司对网页版微信进行了动态安全策略调整,对自动发消息的限制越来越多,基于web API 的方案都失效了。本文巧妙运用Python 的PyAutoGUI 模块,模拟用户控制鼠标、键盘在电脑屏幕上进行的各种操作,实现自动发送信息的功能。
“高负荷用电故障预警系统”可以自动从excel 数据表中根据需要筛选数据,自动查找相关的微信、企业微信或钉钉联系人,并点对点发送信息,从而能实现有针对性的及时报告,向客户经理和设备主人反馈用户高负荷用电情况。
2.2.1 PyAutoGUI
PyAutoGUI 是一个纯Python 的自动化工具,能实现用程序自动控制鼠标和键盘操作。它不仅可以模拟鼠标的移动、点击、拖拽,键盘按键输入操作,以及鼠标和键盘热键的同时操作,还可以实现控制消息框、截图、定位等功能。利用它可以通过自动化的模拟鼠标、键盘操作,将大量重复性的电脑手动操作转变为自动运行。
“高负荷用电故障预警系统”巧妙灵活地运用PyAutoGUI 模块中的各种函数,自动代替需操作者手动完成的相应操作。例如:自动在屏幕上查找微信等应用程序快捷方式图标的位置坐标,并移动鼠标到该图标上;模拟鼠标双击,自动运行该程序;模拟移动鼠标到需要的位置;模拟鼠标单击,定位光标在屏幕上的位置;模拟“Ctrl+v”操作,粘贴剪贴板中的内容到光标当前位置;模拟点击回车按键,确认消息发送。在“高负荷用电故障预警系统”的实现过程中,主要用到的该模块的如下几个函数:
(1)pyautogui.locateOnScreen()
获取相关图标在电脑屏幕上的位置。例如,先截取屏幕上的微信图标保存为‘login.png’,然后利用pyautogui.locateOnScreen(‘login.png’)函数来获取电脑屏幕上微信图标屏幕坐标。
(2)pyautogui.center()
获取一个区域的中心值,作为当前操作的位置。例如:pyautogui.center(L,T,W,H),获取该区域中心的X 和Y 坐标。
(3)pyautogui.moveRel(x,y)
移动鼠标到指定位置或相对位置,例如pyautogui.moveRel(xOffset=0,yOffset=60),自动下移鼠标60 像素。
(4)pyautogui.click()
模拟鼠标在当前位置的单个鼠标左键单击,相当于在当前位置按下鼠标左键,然后将其释放。
(5)pyautogui.doubleClick()
实现在当前位置,鼠标左键双击。
(6)pyautogui.hotkey()
模拟键盘上的热键组合,可以接受多个按键字符串参数,顺序按下,再按相反的顺序释放。例如用pyautogui.hotkey(‘ctrl’,‘v’)可以模拟按下Ctrl+v 键,实现粘贴功能。
(7)pyautogui.press()
模拟点击键盘上的按键,相当于按下和释放的集合。例如用pyautogui.press(‘enter’)可以模拟按下回车键。
2.2.2 Pyperclip
Pyperclip 模块的主要功能是复制、粘贴字符串,该模块中有两个函数,分别是copy()和paste(),copy()用于复制文本到计算机的剪贴板,paste()用于从计算机剪贴板粘贴文本到当前位置。“高负荷用电故障预警系统”主要运用该模块从用户信息文件中复制信息到剪贴板中。
2.2.3 具体实现方法
通过以上的函数实现对鼠标和键盘的控制,可以代替对鼠标和键盘的手动重复操作。利用编程,将这些函数根据信息发送的需要进行调用,就可以实现信息的自动发送。本文以通过微信平台自动化发送信息为例,说明利用Python 编程,实现“高负荷用电故障预警系统”的方法,数据来源于excel 文件,具体实现方法如下:
第一步,筛选excel 表中符合条件的数据。在数据分析的过程中,用Python 编程或Tableau 软件读取多个表格中的内容,并且将高负荷用电的用户筛选出来,将其户号、户主、电话号码、客户经理、用电量、报装容量、所属台区、所属线路、设备主人等信息输出到一个excel 表格中。然后我们可以根据需要,从该excel 表中筛选需要发送的数据及需要发送信息的微信名。例如:高负荷用电用户的户号、户主、电话号码、用电量、报装容量和对应的客户经理微信好友名,高负荷用电用户的户号、所在的台区、线路、用电量、报装容量和对应的设备主人微信好友名。主要代码如图3 所示。
第二步,定位屏幕上的微信图标,并双击登陆。通过微信平台自动发送信息,需要先在电脑上启动“微信”。程序自动搜索屏幕上的微信图标,找到后获取微信图标的屏幕坐标中心点,在该位置处模拟鼠标双击,即可自动运行微信程序,然后手机扫二维码认证登录。主要代码如图4 所示。
图3 筛选信息程序代码
图4 自动运行微信程序代码
第三步,定位鼠标热点到微信搜索框,自动查找好友。启动微信后,就要在微信中,找到需要发送信息的微信好友,好友微信名已经在前面第一步筛选出来。
同样利用pyautogui.locateOnScreen 函数在屏幕上查找“微信好友搜索框”的位置,定位鼠标到好友搜索框。再利用Pyperclip 模块,从筛选出来的学生数据文件中,用pyperclip.copy() 函数自动复制微信好友名,利用pyautogui.hotkey()函数模拟“Ctrl+v”操作,将微信好友名粘贴到搜索栏;然后,模拟点击回车,搜索好友。
第四步,定位鼠标热点到该好友对话框的信息发送栏。搜索到好友后,利用pyautogui.moveRel()函数,模拟移动鼠标到好友对话框,并模拟鼠标单击,激活好友对话框。
第五步,复制需要发送的数据,自动发送。激活查找到的好友对话框后,利用pyperclip.copy()函数,将数据文件中需要发送的信息(户号、用电量、报装容量等信息),复制到剪贴板;然后,模拟“Ctrl+v”操作,将信息粘贴到对话框;模拟点击回车,发送信息。
程序重复以上操作步骤,直到所有筛选出来的数据自动发送完毕。以上就是利用Python 编程实现“高负荷用电故障预警系统”,在微信平台上自动发送信息给指定好友的主要步骤。
基于Python 的“高负荷用电故障预警系统”短小精悍,操作简单,下面通过一个实例介绍其具体运行过程。
首先,启动“高负荷用电故障预警系统”,程序会自动读取用电量报表、用电故障单、用户报装容量三个表格中的内容,从中选取需要的数据进行分析并整合到一个高负荷用电数据表格中。接下来自动打开高负荷用户数据文件,如图5 所示,需要发送高负荷用电用户的高负荷用电信息给对应的客户经理和设备主人。
其次,模拟鼠标自动操作电脑,在桌面查找并双击打开微信程序,读取表格中的数据;如图6 所示,打开“张三”的微信对话框。自动从高负荷用户数据文件中复制赵某的高负荷用电信息到信息发送栏中,并自动发送给“张三”,从而自动完成高负荷用电用户信息的点对点发送。
第三,依次读取高负荷用户数据表格中的数据,并重复以上步骤,通过微信发送给对应的客户经理和设备主人,直至所有信息点对点发送完毕。
图5 excel 表中的信息截图
图6 利用微信对话框自动发送信息
图7 用户接收到故障预警系统发送的信息
在整个程序运行过程中,不仅能通过对用电数据的分析,筛选出高负荷用电用户信息,还能利用Python 模块函数模拟鼠标和键盘,在电脑屏幕上自动实现微信程序的启动,微信好友的查找,以及对信息的搜索、复制、粘贴,并自动发送微信信息。全过程中不需要对电脑进行任何手动操作,既节省了人力,又保证了信息发送的准确、快捷和安全,能够让客户经理和设备主人及时了解自己的管辖范围内有哪些用户存在高负荷用电行为,为后续的运行维护工作提供支撑。
通过本系统可以快速对用户的用电情况进行统计,结合图形显示,直观地对用电情况进行了解。同时分析高负荷用电与故障间的关系,并且准确地将高负荷用户的信息自动发送至对应的客户经理和设备主人。对改善用电检查的工作效率,保障用电系统的安全及稳定具有积极的意义。