基于Python检查EAM系统数据规范性

2022-07-06 08:15马孝宗王雪山
现代信息科技 2022年3期
关键词:数据处理

马孝宗 王雪山

摘  要: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—),男,汉族,河南驻马店人,中级工程师,硕士,主要研究方向:数据分析、办公自动化。

猜你喜欢
数据处理
两轴车辆质心位置影响因素分析及数据处理方法
电容式传感系统数据处理电路的设计
认知诊断缺失数据处理方法的比较:零替换、多重插补与极大似然估计法*
基于ARCGIS 的三种数据处理方法的效率对比研究
高层建筑沉降监测数据处理中多元回归分析方法的应用研究
高层建筑沉降监测数据处理中多元回归分析方法的应用研究
视频大数据处理的设计与应用