馬孝宗 王雪山



摘? 要:EAM中的數據來源包括員工錄入、自動生成、數據交互等,為確保設備分析、考核指標、維保計劃的準確性,設備管理人員必須周期性的開展基礎數據規范性檢查。由于檢查過程具有數據維度多、數據量大、檢查項目多、存在異常數據等特點,占用設備管理人員大量的時間。文章基于Python檢查EAM系統數據規范性并進行分析研究,闡述了使用Selinium、Pyautogui、Pandas庫實現瀏覽器控制、文件下載與轉移、數據導入與清洗、數據分析與輸出的方法。
關鍵詞:Python;Selenium;規范性檢查;數據處理
中圖分類號:TP311 ? ? 文獻標識碼:A文章編號:2096-4706(2022)03-0092-03
Checking the Data Normalization of EAM System Based on Python
MA Xiaozong, WANG Xueshan
(Cigarette Rolling Department of Zhumadian Cigarette Factory of Henan Zhongyan Industry Co., Ltd., Zhumadian? 463000, China)
Abstract: Data sources in EAM include employee input, automatic generation, data interaction and so on. In order to ensure the accuracy of equipment analysis, assessment indicators and maintenance plan, equipment managers must periodically carry out normative inspection of basic data. Due to the inspection process has the characteristics of many data dimensions, large amount of data, many inspection items and abnormal data and so on, it takes a lot of time for equipment managers. This paper checks the data normalization of EAM system based on Python then analyzes and studies it, expounds the methods of using Selinium, Pyautogui and Pandas libraries to realize browser control, file download and transfer, data import and cleaning, data analysis and output.
Keywords: Python; Selenium; normative inspection; data processing
0? 引? 言
EAM(設備管理信息系統)是大型工業企業中不可或缺的信息系統,其具備運維計劃、運行管理、保養管理、維修管理、點檢管理、潤滑管理、資產管理、零備件管理等關鍵模塊,是設備管理的基礎與核心。EAM中的數據來源包括員工錄入、自動生成、數據交互等,設備管理人員需要周期性的開展基礎數據規范性檢查。數據規范性檢查的過程包括操作瀏覽器、查詢與下載、數據分析、結果存檔等步驟,具有數據維度多、數據量大、存在異常數據等特點,費時費力。為此,需要借助數據分析工具實現EAM數據規范性檢查的自動化。
Pandas是基于Python語言的數據分析庫,可以便捷地導入、清洗、分析、輸出數據、生成圖形,得益于Python語言的簡潔高效,用戶可以自定義函數以實現個性化的分析功能。Selenium是Web應用程序的自動化測試工具,支持跨平臺的多種主流瀏覽器,可以精準的定位頁面元素,具備豐富的操作功能。開發人員將用戶對瀏覽器的操作分解為對指定元素或坐標的點擊、鍵入、選擇、刪除等步驟,再將各步驟編寫為代碼,從而實現瀏覽器登錄、輸入、查詢、切換頁面、下載等操作的自動化。
1? EAM數據規范性檢查項目
EAM常用模塊包括“運行記錄”“維修實施記錄”“零配件消耗明細”“產量工單”“零配件庫存”“需求計劃跟蹤查詢”等模塊,常見檢查項目包括:“運維記錄班組錄入錯誤”“運維記錄設備總產量為0”“運維記錄OEE效率大于100”“運維記錄運行效率超100且有故障”“運維記錄系統自動提交”“運行效率低于83.3且總故障時間小于0.5”“維修記錄未提交”“維修記錄有更換卻無備件費用”“半年以上未到貨需求計劃”“壽命異常卻未錄入處理備注”“產量工單異常”“08貨位庫存分析”“庫存金額分析”“冷件金額分析”等。通常情況下,設備管理人員對每個檢查項目實施查詢瀏覽器、下載數據、Excel數據分析等步驟,下面介紹如何基于Python實現瀏覽器控制、數據查詢與下載、數據導入與清洗、數據分析與輸出等,提高設備管理人員的工作效率。
2? EAM數據規范性檢查流程
數據規范性檢查就是檢查大量數據的一項或多項關鍵指標是否符合實際情況的過程,基于Python檢查EAM系統數據規范性的流程分為以下4個步驟。
2.1? 瀏覽器控制
常用的瀏覽器控制方法包括基于頁面元素、基于屏幕坐標兩種。基于頁面元素的方式可以準確地識別操作對象、設置瀏覽器選項,但難以定位動態元素或相互覆蓋的元素;基于屏幕坐標的方式簡便、直觀,但坐標值的確定必須考慮顯示縮放倍數的影響。為此,將兩種瀏覽器控制方法的優點結合起來:首先使用Selenium庫創建瀏覽器、設置瀏覽器選項、登陸EAM、打開指定頁面,再使用Pyautogui庫對當前頁面下的指定坐標進行點擊、鍵入、選擇、刪除等步驟,即可簡便、直觀的完成瀏覽器操作的自動化。對于定位頁面元素:以火狐瀏覽器96.0.3(64位)為例,使用瀏覽器的查看元素功能或在瀏覽器中按下F12,即可打開元素查看器獲取頁面元素信息。對于定位屏幕坐標:首先查看計算機顯示設置的縮放比例,再使用屏幕坐標獲取工具讀取指定點的坐標值,如圖1所示。坐標值乘以縮放比例即為指定點的真實坐標。關鍵代碼為:
driver = webdriver.Firefox(firefox_profile=profile)#創建瀏覽器
driver.maximize_window()#瀏覽器全屏
driver.get("XXX")#打開網址
driver.find_element(By.ID,'user_code').send_keys('XXX')#輸入用戶名
driver.find_element(By.ID,'user_pass').send_keys('XXX')#輸入密碼
time.sleep(1)#暫停等待頁面加載
pyautogui.click(XXX*1.3,XXX*1.3)#點擊屏幕坐標,已知縮放比例為130%
pyautogui.typewrite('XXX',0.1)#在點擊的位置調用輸入法以0.1秒的間隔輸入字符
2.2? 文件下載與轉移
通過Selenium庫設置不彈出下載管理器、不詢問Excel文件等,實現點擊下載按鈕后不再彈窗詢問,而是直接下載到瀏覽器默認下載路徑中。待操作瀏覽器完成后,以系統日期為名創建結果文件夾,如圖2所示。遍歷瀏覽器默認下載路徑下的文件,以文件修改時間為依據,將最后下載的一批文件轉存到結果文件夾。關鍵代碼為:
profile = webdriver.FirefoxProfile()
profile.set_preference('browser.download.dir', '\\download_data')#指定下載路徑
profile.set_preference('browser.download.folderList', 2)#使用自定義下載路徑
profile.set_preference('browser.download.manager.showWhenStarting', False) #不顯示下載管理器
profile.set_preference('browser.helperApps.neverAsk.saveToDisk', 'application/vnd.ms-excel') #不詢問excel文件
files = os.listdir(path_download)#遍歷默認下載路徑下所有文件
file1 = sorted(files, key=lambda f: os.path.getctime(f), reverse=True)[0]#找到下載的最后一個文件
results='C:/Users/Administrator/Desktop/結果/'+datetime.datetime.now().strftime('%Y-%m-%d-%H-%M')
#根據檢查時間創建存放檢查數據與檢查結果的文件夾
if not os.path.exists(results):#若結果文件夾不存在
os.makedirs(results) #創建結果文件夾
shutil.move(file1,results)#文件轉移
2.3? 數據導入與清洗
遍歷結果文件夾內的文件,判斷文件名是否包含特定字符,將符合的文件導入為Pandas數據幀。以“產量工單異常”檢查項目為例,將文件名包含“產量工單”的Excel文件導入為數據幀“df_工單”,導入后的數據幀不可避免的包含不符合要求的數據,數據清洗就是過濾不符合要求的數據的過程。例如篩選保留“df_工單”數據幀中“班次名稱”不為空的數據。以下是關鍵代碼:
files = os.listdir(results)#遍歷結果文件夾中的文件
for f in files:
if '產量工單' in f and (f.endswith('xls') or f.endswith('xlsx')): #如果文件名包含“產量工單”
df_工單 = pd.read_excel(f,skiprows=2,header=0,usecols=[3,5,9,10,15,17,19])#導入指定列
df_工單.dropna(subset=['班次名稱'])#刪除“班次名稱”列為空的行
2.4? 數據分析與輸出
數據規范性檢查即從原始數據中提取關鍵指標并判斷其是否符合規則的過程。常見關鍵指標與判異規則有:同日期、同班次下班組的個數大于1、設備總產量小于等于0、OEE效率大于等于100、運行效率大于等于100且故障時間大于0、填報人為系統自動提交、處理方法包含“更換”二字且備件費用為0、申報日期為半年前且計劃狀態不等于“已到貨驗收”、壽命比例低于0.8且處理備注為空、中班產量工單個數小于1或晚班產量工單個數小于2、指定貨位查詢備件的申報備注并按單價降序輸出、查詢全部備件的申報備注并按單價降序輸出、查詢備件最后出庫日期距今一年以上備件的申報備注并按日期升序輸出。以“產量工單異常”檢查項目為例,使用數據透視功能以日期、機組名、班次名稱為依據統計產量工單的個數,再根據班次名稱和工單個數判斷是否異常,判斷規則是中班工單個數不小于1且晚班工單個數不小于2。在編輯器內執行代碼,可輸出操作信息,如圖3所示。以下是關鍵代碼:
def judge(班次名稱,工單個數):#自定義函數
if (班次名稱 == '中班' and 工單個數 >= 1) or (班次名稱 == '晚班' and 工單個數 >= 2):
pass
else:
return '異常'
df_工單 = df_工單.pivot_table(index=['生產日期','eam常用名','班次名稱'],values=['實際產量(箱)'],aggfunc='count' ).reset_index()#數據透視
df_工單.rename(columns=({'實際產量(箱)':'工單個數'}),inplace=True)#替換列名
df_工單['工單數量異常'] = df_工單.apply(lambda x: judge(x.班次名稱, x.工單個數), axis=1)#使用函數
df_工單_check = df_工單.loc[df_工單['工單數量異常'] == '異常'].copy()
checkrows = df_工單_check.shape[0]#返回異常數據的行數
if checkrows > 0:
print("×××MES產量工單異常的有[%d]條"%checkrows)#輸出信息
df_工單_check.to_excel('產量工單異常檢查結果.xlsx',index=False)#結果輸出為Excel文件
3? 結? 論
在對EAM開展周期性的數據規范性檢查工作中,存在大量的重復性操作。借助功能強大的Selenium、Pyautogui、Pandas庫,管理人員可以將瀏覽器控制、文件下載與轉移、數據導入與清洗、數據分析與輸出等步驟固化為代碼,實現煩瑣步驟的自動化。將Selenium庫的頁面元素定位方法與Pyautogui庫的坐標定位方法相結合,即使頁面元素相互遮擋也能精準操作,以較少的代碼即可實現瀏覽器的控制,有效地提高了管理人員的工作效率。
參考文獻:
[1] 張良均,王路,譚立云等.Python數據分析與挖掘實戰 [M].北京:機械工業出版社,2015.
[2] 蟲師.Selenium3自動化測試實戰基于Python語言 [M].北京:電子工業出版社,2019.
[3] 明日科技.Python編程錦囊 [M].長春:吉林大學出版社,2019.
[4] 李慶輝.深入淺出Pandas:利用Python進行數據處理與分析 [M].北京:機械工業出版社,2021.
[5] 零一,韓要賓,黃園園.Python3爬蟲、數據清洗與可視化實戰:第2版 [M].北京:電子工業出版社,2020.
作者簡介:馬孝宗(1989—),男,漢族,河南駐馬店人,中級工程師,碩士,主要研究方向:數據分析、辦公自動化。