杜瀚霖,郭志達(dá),李曉莉
(廣東電網(wǎng)責(zé)任有限公司惠州供電局,廣東 惠州516000)
隨著經(jīng)濟的發(fā)展和人民生活水平的不斷提高,供電企業(yè)為了提高供電的效率,保障供電的安全及穩(wěn)定,需要對用電情況進(jìn)行及時檢查和數(shù)據(jù)分析[1]。由于用電電路的復(fù)雜化以及供電方式的多樣化,傳統(tǒng)人工方式的用電情況的檢查及分析已經(jīng)不能適應(yīng)當(dāng)前工作的需求,然而信息技術(shù)的發(fā)展為用戶用電情況的分析提供了條件。本文首先利用Python 編程和數(shù)據(jù)分析軟件tableau,對用戶用電量、報裝容量、故障工單等信息進(jìn)行分析,并在此基礎(chǔ)上對高負(fù)荷用電與故障之間的關(guān)系進(jìn)行判斷,然后利用Python 編程實現(xiàn)信息的自動發(fā)送,將高負(fù)荷用電的用戶信息,通過微信、企業(yè)微信、釘釘?shù)确绞桨l(fā)送至對應(yīng)的客戶經(jīng)理和設(shè)備主人。
為實現(xiàn)對用電情況的分析,進(jìn)而對高負(fù)荷用電與故障的關(guān)系進(jìn)行判斷,并及時進(jìn)行信息反饋。系統(tǒng)的主要功能模塊如圖1 所示。
主要功能包括:數(shù)據(jù)獲取、數(shù)據(jù)分析、信息管理。
其中數(shù)據(jù)分析部分,除了Python 編程外還使用了更加專業(yè)的數(shù)據(jù)分析工具Tableau。
數(shù)據(jù)獲取主要通過從營銷系統(tǒng)導(dǎo)出,本文使用了用電量報表、用電故障單、用戶報裝容量單三個表格。
圖1 系統(tǒng)功能結(jié)構(gòu)圖
首先根據(jù)是否高負(fù)荷用電和是否出現(xiàn)故障將用戶分為四類,如表1 所示,分別統(tǒng)計數(shù)量。
表1 高負(fù)荷用電及故障數(shù)據(jù)統(tǒng)計表
根據(jù)獨立性檢驗公式(1),計算隨機變量K2的值
并根據(jù)表2 確定“高負(fù)荷用電和出現(xiàn)故障有關(guān)系“的可信程度。
表2 高負(fù)荷用電及故障關(guān)系可信度
例如,若K2計算結(jié)果為7,6.635<7<7.879,則“高負(fù)荷用電和出現(xiàn)故障有關(guān)系”成立的概率為1-0.010=99%,可以認(rèn)為高負(fù)荷用電與出現(xiàn)故障有較大的關(guān)聯(lián);若K2計算結(jié)果為0.5,0.455<0.5<0.708,則“高負(fù)荷用電和出現(xiàn)故障有關(guān)系”成立的概率為1-0.50=50%,可以認(rèn)為高負(fù)荷用電與出現(xiàn)故障關(guān)聯(lián)較小。
本文使用JN 營業(yè)廳的數(shù)據(jù)對系統(tǒng)進(jìn)行運行測試。數(shù)據(jù)包括:該營業(yè)廳所有用戶11 月的用電量、該營業(yè)廳11月的故障單、該營業(yè)廳所有用戶的報裝容量。數(shù)據(jù)分析采用以下兩種方式。
(1)近幾年,隨著大數(shù)據(jù)、人工智能快速發(fā)展,Python這一跨平臺、開源的高級編程語言,發(fā)展勢頭迅猛,呈現(xiàn)出爆發(fā)式的增長。Python 語言是一種面向?qū)ο蟮膭討B(tài)類型編程語言,語法簡單,便于學(xué)習(xí),功能強大,快捷高效,應(yīng)用領(lǐng)域非常廣泛。同時,Python 提供了強大的模塊支持,能極大的提高程序的開發(fā)效率[2]。
利用Python 編寫程序,分別讀取用電量報表、用電故障單、用戶報裝容量表中的數(shù)據(jù),然后將每個用戶的戶號、電話號碼、所屬臺區(qū)、所屬線路、本月用電量、報裝容量、是否發(fā)生故障等信息整合到一個數(shù)據(jù)文件result.xls中,然后對其中的數(shù)據(jù)進(jìn)行分析計算,從而篩選出高負(fù)荷的用戶信息。
(2)為了提高數(shù)據(jù)分析的效率,降低錯誤率,還可以使用專業(yè)的數(shù)據(jù)分析軟件對數(shù)據(jù)進(jìn)行分析。如使用Tableau 軟件可直接繪制出各臺區(qū)和線路的高負(fù)荷戶數(shù)柱狀圖,橫軸代表不同的臺區(qū)、線路,縱軸代表高負(fù)荷戶數(shù),顏色代表高負(fù)荷用戶占的比例。結(jié)果如圖2 所示。
統(tǒng)計有無高負(fù)荷用電和有無故障的用戶數(shù)量,填入表3 中。
將數(shù)據(jù)代入式(1)中進(jìn)行計算,得到結(jié)果
根據(jù)計算結(jié)果對比表2 可以得知,“高負(fù)荷用電和出現(xiàn)故障有關(guān)系”成立的概率在97.5%與99%之間。因此,可以認(rèn)為用戶高負(fù)荷用電和出現(xiàn)故障之間是存在相關(guān)關(guān)系的。
圖2 各臺區(qū)、線路高負(fù)荷用戶數(shù)量柱狀圖
根據(jù)以上結(jié)論,在發(fā)現(xiàn)用戶存在高負(fù)荷用電行為后,如果及時將高負(fù)荷用電用戶的信息發(fā)送給對應(yīng)的客戶經(jīng)理和設(shè)備主人進(jìn)行預(yù)警,可以達(dá)到減少故障的發(fā)生次數(shù)和減小故障帶來的負(fù)面影響的目的。
表3 高負(fù)荷用電及故障數(shù)據(jù)統(tǒng)計表
及時將用電信息發(fā)送給客戶經(jīng)理和設(shè)備主人有利于降低故障的發(fā)生率,但是完全依靠人工發(fā)送信息,會大量增加管理人員的工作負(fù)荷,同時也容易出現(xiàn)差錯。利用微信、釘釘?shù)绕脚_實現(xiàn)信息的自動發(fā)送可以有效解決這一問題。
目前利用Python 編程實現(xiàn)微信自動發(fā)消息的方式,幾乎都是通過itchat 或wxpy 模塊自動登陸網(wǎng)頁版微信,實現(xiàn)的微信在線助理功能。但隨著微信管理越來越嚴(yán)格,為了避免平臺充斥大量垃圾信息,騰訊公司對網(wǎng)頁版微信進(jìn)行了動態(tài)安全策略調(diào)整,對自動發(fā)消息的限制越來越多,基于web API 的方案都失效了。本文巧妙運用Python 的PyAutoGUI 模塊,模擬用戶控制鼠標(biāo)、鍵盤在電腦屏幕上進(jìn)行的各種操作,實現(xiàn)自動發(fā)送信息的功能。
“高負(fù)荷用電故障預(yù)警系統(tǒng)”可以自動從excel 數(shù)據(jù)表中根據(jù)需要篩選數(shù)據(jù),自動查找相關(guān)的微信、企業(yè)微信或釘釘聯(lián)系人,并點對點發(fā)送信息,從而能實現(xiàn)有針對性的及時報告,向客戶經(jīng)理和設(shè)備主人反饋用戶高負(fù)荷用電情況。
2.2.1 PyAutoGUI
PyAutoGUI 是一個純Python 的自動化工具,能實現(xiàn)用程序自動控制鼠標(biāo)和鍵盤操作。它不僅可以模擬鼠標(biāo)的移動、點擊、拖拽,鍵盤按鍵輸入操作,以及鼠標(biāo)和鍵盤熱鍵的同時操作,還可以實現(xiàn)控制消息框、截圖、定位等功能。利用它可以通過自動化的模擬鼠標(biāo)、鍵盤操作,將大量重復(fù)性的電腦手動操作轉(zhuǎn)變?yōu)樽詣舆\行。
“高負(fù)荷用電故障預(yù)警系統(tǒng)”巧妙靈活地運用PyAutoGUI 模塊中的各種函數(shù),自動代替需操作者手動完成的相應(yīng)操作。例如:自動在屏幕上查找微信等應(yīng)用程序快捷方式圖標(biāo)的位置坐標(biāo),并移動鼠標(biāo)到該圖標(biāo)上;模擬鼠標(biāo)雙擊,自動運行該程序;模擬移動鼠標(biāo)到需要的位置;模擬鼠標(biāo)單擊,定位光標(biāo)在屏幕上的位置;模擬“Ctrl+v”操作,粘貼剪貼板中的內(nèi)容到光標(biāo)當(dāng)前位置;模擬點擊回車按鍵,確認(rèn)消息發(fā)送。在“高負(fù)荷用電故障預(yù)警系統(tǒng)”的實現(xiàn)過程中,主要用到的該模塊的如下幾個函數(shù):
(1)pyautogui.locateOnScreen()
獲取相關(guān)圖標(biāo)在電腦屏幕上的位置。例如,先截取屏幕上的微信圖標(biāo)保存為‘login.png’,然后利用pyautogui.locateOnScreen(‘login.png’)函數(shù)來獲取電腦屏幕上微信圖標(biāo)屏幕坐標(biāo)。
(2)pyautogui.center()
獲取一個區(qū)域的中心值,作為當(dāng)前操作的位置。例如:pyautogui.center(L,T,W,H),獲取該區(qū)域中心的X 和Y 坐標(biāo)。
(3)pyautogui.moveRel(x,y)
移動鼠標(biāo)到指定位置或相對位置,例如pyautogui.moveRel(xOffset=0,yOffset=60),自動下移鼠標(biāo)60 像素。
(4)pyautogui.click()
模擬鼠標(biāo)在當(dāng)前位置的單個鼠標(biāo)左鍵單擊,相當(dāng)于在當(dāng)前位置按下鼠標(biāo)左鍵,然后將其釋放。
(5)pyautogui.doubleClick()
實現(xiàn)在當(dāng)前位置,鼠標(biāo)左鍵雙擊。
(6)pyautogui.hotkey()
模擬鍵盤上的熱鍵組合,可以接受多個按鍵字符串參數(shù),順序按下,再按相反的順序釋放。例如用pyautogui.hotkey(‘ctrl’,‘v’)可以模擬按下Ctrl+v 鍵,實現(xiàn)粘貼功能。
(7)pyautogui.press()
模擬點擊鍵盤上的按鍵,相當(dāng)于按下和釋放的集合。例如用pyautogui.press(‘enter’)可以模擬按下回車鍵。
2.2.2 Pyperclip
Pyperclip 模塊的主要功能是復(fù)制、粘貼字符串,該模塊中有兩個函數(shù),分別是copy()和paste(),copy()用于復(fù)制文本到計算機的剪貼板,paste()用于從計算機剪貼板粘貼文本到當(dāng)前位置?!案哓?fù)荷用電故障預(yù)警系統(tǒng)”主要運用該模塊從用戶信息文件中復(fù)制信息到剪貼板中。
2.2.3 具體實現(xiàn)方法
通過以上的函數(shù)實現(xiàn)對鼠標(biāo)和鍵盤的控制,可以代替對鼠標(biāo)和鍵盤的手動重復(fù)操作。利用編程,將這些函數(shù)根據(jù)信息發(fā)送的需要進(jìn)行調(diào)用,就可以實現(xiàn)信息的自動發(fā)送。本文以通過微信平臺自動化發(fā)送信息為例,說明利用Python 編程,實現(xiàn)“高負(fù)荷用電故障預(yù)警系統(tǒng)”的方法,數(shù)據(jù)來源于excel 文件,具體實現(xiàn)方法如下:
第一步,篩選excel 表中符合條件的數(shù)據(jù)。在數(shù)據(jù)分析的過程中,用Python 編程或Tableau 軟件讀取多個表格中的內(nèi)容,并且將高負(fù)荷用電的用戶篩選出來,將其戶號、戶主、電話號碼、客戶經(jīng)理、用電量、報裝容量、所屬臺區(qū)、所屬線路、設(shè)備主人等信息輸出到一個excel 表格中。然后我們可以根據(jù)需要,從該excel 表中篩選需要發(fā)送的數(shù)據(jù)及需要發(fā)送信息的微信名。例如:高負(fù)荷用電用戶的戶號、戶主、電話號碼、用電量、報裝容量和對應(yīng)的客戶經(jīng)理微信好友名,高負(fù)荷用電用戶的戶號、所在的臺區(qū)、線路、用電量、報裝容量和對應(yīng)的設(shè)備主人微信好友名。主要代碼如圖3 所示。
第二步,定位屏幕上的微信圖標(biāo),并雙擊登陸。通過微信平臺自動發(fā)送信息,需要先在電腦上啟動“微信”。程序自動搜索屏幕上的微信圖標(biāo),找到后獲取微信圖標(biāo)的屏幕坐標(biāo)中心點,在該位置處模擬鼠標(biāo)雙擊,即可自動運行微信程序,然后手機掃二維碼認(rèn)證登錄。主要代碼如圖4 所示。
圖3 篩選信息程序代碼
圖4 自動運行微信程序代碼
第三步,定位鼠標(biāo)熱點到微信搜索框,自動查找好友。啟動微信后,就要在微信中,找到需要發(fā)送信息的微信好友,好友微信名已經(jīng)在前面第一步篩選出來。
同樣利用pyautogui.locateOnScreen 函數(shù)在屏幕上查找“微信好友搜索框”的位置,定位鼠標(biāo)到好友搜索框。再利用Pyperclip 模塊,從篩選出來的學(xué)生數(shù)據(jù)文件中,用pyperclip.copy() 函數(shù)自動復(fù)制微信好友名,利用pyautogui.hotkey()函數(shù)模擬“Ctrl+v”操作,將微信好友名粘貼到搜索欄;然后,模擬點擊回車,搜索好友。
第四步,定位鼠標(biāo)熱點到該好友對話框的信息發(fā)送欄。搜索到好友后,利用pyautogui.moveRel()函數(shù),模擬移動鼠標(biāo)到好友對話框,并模擬鼠標(biāo)單擊,激活好友對話框。
第五步,復(fù)制需要發(fā)送的數(shù)據(jù),自動發(fā)送。激活查找到的好友對話框后,利用pyperclip.copy()函數(shù),將數(shù)據(jù)文件中需要發(fā)送的信息(戶號、用電量、報裝容量等信息),復(fù)制到剪貼板;然后,模擬“Ctrl+v”操作,將信息粘貼到對話框;模擬點擊回車,發(fā)送信息。
程序重復(fù)以上操作步驟,直到所有篩選出來的數(shù)據(jù)自動發(fā)送完畢。以上就是利用Python 編程實現(xiàn)“高負(fù)荷用電故障預(yù)警系統(tǒng)”,在微信平臺上自動發(fā)送信息給指定好友的主要步驟。
基于Python 的“高負(fù)荷用電故障預(yù)警系統(tǒng)”短小精悍,操作簡單,下面通過一個實例介紹其具體運行過程。
首先,啟動“高負(fù)荷用電故障預(yù)警系統(tǒng)”,程序會自動讀取用電量報表、用電故障單、用戶報裝容量三個表格中的內(nèi)容,從中選取需要的數(shù)據(jù)進(jìn)行分析并整合到一個高負(fù)荷用電數(shù)據(jù)表格中。接下來自動打開高負(fù)荷用戶數(shù)據(jù)文件,如圖5 所示,需要發(fā)送高負(fù)荷用電用戶的高負(fù)荷用電信息給對應(yīng)的客戶經(jīng)理和設(shè)備主人。
其次,模擬鼠標(biāo)自動操作電腦,在桌面查找并雙擊打開微信程序,讀取表格中的數(shù)據(jù);如圖6 所示,打開“張三”的微信對話框。自動從高負(fù)荷用戶數(shù)據(jù)文件中復(fù)制趙某的高負(fù)荷用電信息到信息發(fā)送欄中,并自動發(fā)送給“張三”,從而自動完成高負(fù)荷用電用戶信息的點對點發(fā)送。
第三,依次讀取高負(fù)荷用戶數(shù)據(jù)表格中的數(shù)據(jù),并重復(fù)以上步驟,通過微信發(fā)送給對應(yīng)的客戶經(jīng)理和設(shè)備主人,直至所有信息點對點發(fā)送完畢。
圖5 excel 表中的信息截圖
圖6 利用微信對話框自動發(fā)送信息
圖7 用戶接收到故障預(yù)警系統(tǒng)發(fā)送的信息
在整個程序運行過程中,不僅能通過對用電數(shù)據(jù)的分析,篩選出高負(fù)荷用電用戶信息,還能利用Python 模塊函數(shù)模擬鼠標(biāo)和鍵盤,在電腦屏幕上自動實現(xiàn)微信程序的啟動,微信好友的查找,以及對信息的搜索、復(fù)制、粘貼,并自動發(fā)送微信信息。全過程中不需要對電腦進(jìn)行任何手動操作,既節(jié)省了人力,又保證了信息發(fā)送的準(zhǔn)確、快捷和安全,能夠讓客戶經(jīng)理和設(shè)備主人及時了解自己的管轄范圍內(nèi)有哪些用戶存在高負(fù)荷用電行為,為后續(xù)的運行維護(hù)工作提供支撐。
通過本系統(tǒng)可以快速對用戶的用電情況進(jìn)行統(tǒng)計,結(jié)合圖形顯示,直觀地對用電情況進(jìn)行了解。同時分析高負(fù)荷用電與故障間的關(guān)系,并且準(zhǔn)確地將高負(fù)荷用戶的信息自動發(fā)送至對應(yīng)的客戶經(jīng)理和設(shè)備主人。對改善用電檢查的工作效率,保障用電系統(tǒng)的安全及穩(wěn)定具有積極的意義。