杜瀚霖,郭志達,李曉莉
(廣東電網責任有限公司惠州供電局,廣東 惠州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()用于從計算機剪貼板粘貼文本到當前位置?!案哓摵捎秒姽收项A警系統”主要運用該模塊從用戶信息文件中復制信息到剪貼板中。
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 模塊函數模擬鼠標和鍵盤,在電腦屏幕上自動實現微信程序的啟動,微信好友的查找,以及對信息的搜索、復制、粘貼,并自動發送微信信息。全過程中不需要對電腦進行任何手動操作,既節省了人力,又保證了信息發送的準確、快捷和安全,能夠讓客戶經理和設備主人及時了解自己的管轄范圍內有哪些用戶存在高負荷用電行為,為后續的運行維護工作提供支撐。
通過本系統可以快速對用戶的用電情況進行統計,結合圖形顯示,直觀地對用電情況進行了解。同時分析高負荷用電與故障間的關系,并且準確地將高負荷用戶的信息自動發送至對應的客戶經理和設備主人。對改善用電檢查的工作效率,保障用電系統的安全及穩定具有積極的意義。