APP下载

基于Pandas进行关键部位维修周期分析

2020-08-17马孝宗王雪山魏景春

现代信息科技 2020年9期
关键词:关键部位数据分析

马孝宗 王雪山 魏景春

摘  要:以关键部位维修周期分析为例,详细阐述了基于Pandas对Excel表格进行数据导入、清洗无效行、清洗无效列、数据透视、数据合并重塑、排序与排名、分组运算的实现过程。该方法解决了关键部位维修周期分析中的存在数据量大、基础数据不规范、计算过程复杂等难点,实现了关键部位维修周期分析的自动化。该方法也适用于人事数据、财务数据的年度汇总,具有良好的实用性与推广价值。

关键词:Pandas;运维记录;关键部位;数据分析

中图分类号:TP391       文献标识码:A 文章编号:2096-4706(2020)09-0148-03

Maintenance Cycle Analysis of Key Parts Based on Pandas

MA Xiaozong,WANG Xueshan,WEI Jingchun

(Cigarette Rolling Department of Zhumadian Cigarette Factory of Henan Zhongyan Industry Co.,Ltd.,Zhumadian  463000,China)

Abstract:Taking the maintenance cycle analysis of key parts as an example,the realization process of data import,invalid row cleaning,invalid column cleaning,data perspective,data consolidation and reconstruction,sorting and ranking,grouping operation of Excel tables based on Pandas is described in detail. This method solves the problems of large amount of data,nonstandard basic data and complex calculation process in the analysis of key partsmaintenance cycle,and realizes the automation of the analysis of key partsmaintenance cycle. This method is also applicable to the annual summary of personnel data and financial data,and has good practicability and promotion value.

Keywords:Pandas;operation and maintenance records;key parts;data analysis

0  引  言

在先进的卷烟工业中,一般采用装备管理系统记录设备维修、运行数据,装备管理系统是集设備运行维护、点检管理、润滑管理、保养管理、维修管理、零备件申报与发放为一体的信息系统,其提供的维修实施报表和运维报表记录了机组名称、维修部位、维修工时、备件费用、设备总产量、制度时间、保养时间等信息。为了对关键部位进行重点维保,需要摸清各机组的关键部位和对应的维修周期,为此需要对多年的维修实施记录、运维记录进行统计分析,但该分析过程存在数据量大、基础数据不规范、计算过程复杂等难点,分析过程费时费力。

Pandas是Python的一个数据分析包。其提供了大量快速便捷地处理数据的函数和方法,不但包含常见的计数、筛选、排序、分组运算、描述性统计、数据透视、数据合并与重塑等分析功能,还提供了自定义函数功能以满足用户个性化的需求。借助Pandas可以对维修实施记录、运维记录进行高效的数据导入、数据清洗、个性化分析。下面介绍基于Pandas进行关键部位维修周期分析的方法。

1  需求分析

关键部位维修周期分析的数据来源包括维修实施记录、运维记录两个Excel文件。维修实施记录包括机组名称、维修部位、维修工时、备件费用等信息,运维记录包括机组名称、设备总产量、制度时间、保养时间等信息。关键部位维修周期分析结果分为两个阶段:第一个阶段根据维修频次、维修工时、备件费用确定各机组的关键部位;第二个阶段根据维修频次、制度时间、保养时间确定各机组各关键部位的维修周期。

在关键部位年度维修周期分析中存在以下难点:一是数据量大,其数据来源于多年的维修实施记录、运维记录;二是数据不规范,比如部分记录的维修部位与机组名称不标准或设备总产量为零的无效记录;三是标题行位置不确定,维修实施记录、运维记录自系统导出时有空行且标题行位置不统一;四是关键部位的确定涉及维修频次、维修工时、备件费用三个因素,计算过程复杂;五是要将各机组关键部位、维修周期等分析结果汇至一处,便于查看与比对。

2  编程实现

基于Pandas进行关键部位维修周期分析,包括标题行识别、数据导入、数据清洗、数据分析、数据导出五个步骤。

2.1  编程环境

编程环境采用Windows下的Anaconda软件,Anaconda包含了conda、Python在内的大量科学包及其依赖项,以及高效的Python开发环境Spyder。具体开发环境为:Windows 7/10操作系统、Anaconda3-5.3.0(64 bit)。

2.2  标题行识别

自装备管理系统导出的维修实施记录、运维记录中既有空行又有表头,Pandas提供的skip_blank_lines方法可在导入Excel数据时跳过空行,却无法跳过表头,影响下一步数据处理。为此设计识别标题行的自定义函数,利用空行、表头导入时产生大量“Unnamed”字符的特点,判断Excel标题行所在位置并返回正确的数据帧。关键代码如下:

def check_excel(f):

sign = 0#返回正确数据帧的标志

for i in range (10):

df = pd.read_excel(f, skiprows=i, header=0)

cols = df.columns.tolist()

cols = [str(s)[:7] for s in cols].count('Unnamed')

if df.shape[1] > cols * 2:#如果标题行Unnamed字符较少

return df#返回该正确数据帧

sign = 1

else:

pass

2.3  數据导入

首先获取当前工作目录下的所有文件名,判断文件的后缀名是否是“.xlsx”或“.xls”并且文件名包含“维修实施”或“运维”;接着创建一个标准的机组名称列表,便于下一步清洗数据;最后将“维修实施记录”和“运维记录”分别导入为Pandas的数据帧。根据自定义函数check_excel保证数据导入时标题行位置正确。关键代码如下:

files = os.listdir()#遍历当前目录下文件名

order_name = ['卷接' + str(i + 1) + '号' for i in range(7)] + ['包装' + str(i + 1) + '号' for i in range(7)]#创建标准的机组名称

l_f = []

for f in files:

if (f.endswith('.xlsx') or f.endswith('.xls')) and '维修实施' in f:

l_f.insert(0,f)

elif (f.endswith('.xlsx') or f.endswith('.xls')) and '运维' in f:

l_f.append(f)

else:

pass

if len(sign_f==2):#维修实施表和运维记录表同时存在才导入数据

df_data1 = check_excel(l_f[0])

df_data2 = check_excel(l_f[1])

else:

os._exit(0)

2.4  数据清洗

导入后的数据通常包含无效值、缺失值、重复值、错误值等,通过数据清洗的过程过滤掉不符合要求的数据。Pandas中过滤数据的常见操作包括筛选、删除、填充、替换等。维修实施表中需要清洗的数据包括三种:一是无效记录;二是“机组名称”不标准;三是“部位名称”不标准。运维记录表中需要清洗的数据包括两种:一是无效记录;二是“设备总产量”为0。通过筛选的方法清洗数据,关键代码如下:

df_data1 = df_data1[['机组名称', '部位名称', '维修工时(分钟)', '备件费用']]

df_data2 = df_data2[['机组名称', '制度班次时间(h)', '保养时间(h)', '设备总产量']]

df_data1 = df_data1[((df_data1['机组名称'].isin(order_name))& (~df_data1['部位名称'].isin(order_name)& (df_data1 ['记录状态']=='已提交'))]]

df_data2 = df_data2[((df_data2['记录状态']=='已提交') & (df_data2['设备总产量'] > 0))]

2.5  数据分析

Pandas中常用的数据分析方式包括数据透视、数据合并重塑、排序与排名、分组运算等。首先对维修实施记录进行数据透视,统计各机组的维修频次、维修工时、备件费用;接着依据维修频次、维修工时、备件费用进行综合排名,返回排名前三的关键部位名称、维修频次;然后对运行记录表进行数据透视,统计各机组、各部位的生产时间;最后以“机组名称”为连接键合并数据,得到各机组的关键部位名称、维修频次、生产时间并计算出维修周期。关键代码如下:

df_频次 = pd.pivot_table(df_data1, index=['机组名称', '部位名称'], values=['维修工时(分钟)'],aggfunc=['count']).reset_index()

df_时间 = pd.pivot_table(df_data1, index=['机组名称', '部位名称'], values=['维修工时(分钟)'],aggfunc=[np.sum]). reset_index()

df_费用 = pd.pivot_table(df_data1, index=['机组名称', '部位名称'], values=['备件费用'],aggfunc=[np.sum]).reset_index()

df_data1 = pd.merge(df_频次, df_时间, on=['机组名称', '部位名称'], how='left')

df_data1 = pd.merge(df_data1, df_费用, on=['机组名称', '部位名称'], how='left')

df_data1['排名'] = df_data1.groupby(['机组名称'])['维修频次'].rank(ascending=False, method='dense') * 0.4+df_data1.

groupby(['机组名称'])['维修工时'].rank(ascending=False,method ='dense') * 0.4+df_data1.groupby(['机组名称'])['备件费用'].rank(ascending=False, method='dense')*0.2

df_data1['排名'] = df_data1.groupby(['机组名称'])['排名'].rank(ascending=True, method='first')

df_result1 = analysis1(df_data1)#自定義函数返回关键部位

df_result2 = analysis2(df_data1)#自定义函数返回维修频次

df_data2 = df_data2[['机组名称', '制度班次时间(h)', '保养时间(h)', '设备总产量']]

df_data2['生产时间'] = df_data2['制度班次时间(h)'] - df_data2['保养时间(h)']

df_data2 = pd.pivot_table(df_data2, index=['机组名称'], values=['生产时间'], aggfunc=[np.sum]).reset_index()

df_data2.columns = ['机组名称', '生产时间']

df_result2 = pd.merge(df_result2, df_data2, on=['机组名称'], how='left')

df_result2['维修周期1'] = (df_result2['生产时间'] / df_result2['维修频次1']).round(0)

df_result2['维修周期2'] = (df_result2['生产时间'] / df_result2['维修频次2']).round(0)

df_result2['维修周期3'] = (df_result2['生产时间'] / df_result2['维修频次3']).round(0)

df_result_all = pd.merge(df_result1, df_result2, on=['机组名称'], how='left')

2.6  数据导出

利用Pandas中的to_excel方法将分析结果输出为Excel文件,便于查看、分析与记录。

writer = pd.ExcelWriter('维修周期分析结果.xlsx')

df_result_all.to_excel(writer, '维修周期分析结果', index= None)

writer.save()

3  结  论

对于多年维修实施、运维数据的分析,如果缺乏自动、高效的数据分析工具,难以解决数据量大、基础数据不规范、计算过程复杂等难点。借助功能强大的Pandas工具,统计人员可以快速、准确地对Excel表格进行数据导入、清洗无效行、清洗无效列、数据透视、数据合并重塑、排序与排名、分组运算等操作。除了Pandas工具自带的统计分析函数,用户也可以方便地自定义函数,实现个性化的分析功能,极大地拓展了Pandas的分析能力,有效地提高了分析效率。

参考文献:

[1] 马孝宗.基于Pandas定位信息系统中的异常数据 [J].电脑编程技巧与维护,2019(12):95-96+108.

[2] 张若愚.Python科学计算 [M].北京:清华大学出版社,2012:469-471.

[3] 韦斯·麦金尼.利用Python进行数据分析:第2版 [M].徐敬一,译.北京:机械工业出版社,2018:10-11.

[4] 托比·西格兰.集体智慧编程 [M].莫映,王开福,译.北京:电子工业出版社,2009:156-157.

作者简介:马孝宗(1989—),男,汉族,河南驻马店人,信息管理员,硕士,研究方向:数据分析、机器视觉。

猜你喜欢

关键部位数据分析
斗轮堆取料机关键部件焊接变形研究及控制分析
炫目视界
浅谈公路工程施工中关键部位的施工技术
浅析建筑施工中关键和特殊部位施工技术
公路工程施工中关键部位的施工技术解析
新常态下集团公司内部审计工作研究
浅析大数据时代对企业营销模式的影响
基于读者到馆行为数据分析的高校图书馆服务优化建议
西南地区男青年标准人体三维模型的建立