设备管理中数据聚类处理-预处理
§01 数据预处理
一、背景介绍
在 统计数据背后的指数分布模型 对于设备利用时间进行了初步统计,可以看到数据本身具有指数分布的特性。 为了进一步将设备种类划分小类别,下面计划对于设备命名属性进行聚类。
二、数据分析
1、数据文件
处理的数据仍然来自于最初的EXCEL表格文件。下面数据原始EXCEL表格文件:
数据文件中包含有五个表单,分别是 2017 至 2021 年的记录信息。其中能够有效反应设备属性和 应用时间的属性字段包括有:
- 仪器名称: 汉字字符串
- 仪器编号: 八位长的字符串
- 分类号: 八位 至 十位 长的字符串
- 有效机时:数字
- 使用方向:分为 教学,科研,公共服务等
- 是否开放共享: 是,否,未定等;
除了上面字段之外,还有其它一些字段。在这五个表格中,字段的种类和个数各不相同。在2017,2018年里,没有校外机时这一栏。
2、数据预处理
(1)表格结构
首先将EXCEL表格中的所有数据分别存储在 TEXT 文件中。
▲ 图1.1.1 数据文件及其大小
下面是出数据文件每一行的字段属性。对于2017,2018年没有校外机时这一属性。
['填报院系', '使用单位号', '使用单位', '仪器编号', '分类号', '仪器名称', '负责人', '有效机时', '备注(低于150机时情况说明)', '使用方向', '型号', '规格', '单价', '国别', '国别码', '厂家', '建帐日期', '领用人', '经费来源', '平台类型', '平台实验室号', '平台实验室名称', '是否开放共享', '校外机时']
- 1
(2)提取所需表单属性
从上面五个数据文件中,提取以下字段合并成统一后续处理的数据文件,并存储在 NPZ文件中。
- 仪器编号;
- 分类号
- 仪器名称
- 有效计时
- 使用方向
- 型号
- 校外机时(2017,2018都设置为0)
下面是处理后截取的部分数据:
['12026444', '04060300', '三室真空定向炉 ', 0.0, '科研', 'ZGD-10BYF', 0]
['12005527', '03040404', '光电发射光谱仪', 0.0, '科研', 'PDA-7000', 0]
['07001233', '03040100', '高分辨率磁力显微镜', 0.0, '教学', 'HR-MFM', 0]
['10016800', '03060301', '超高真空电子束镀膜机', 0.0, '科研', 'SCTES-15CUHV', 0]
['12013022', '03060302', '高真空共溅镀仪', 0.0, '科研', 'LJ-103', 0]
['09000108', '03260100', '自动大气汞监测系统', 8640.0, '科研', '2537/1130/1135', 0]
['09018343', '03260208', '痕量汞分析仪', 8640.0, '科研', 'TeRran 2537B', 0]
['16015174', '04060807', '高温压力烧结炉', 0, '科研', 'SIP150/200-2000-9', 0]
['16005806', '03060300', '聚焦离子束', 4045.0, '教学', 'Auriga', 810.0]
['16034354', '03040101', '激光共聚焦显微镜', 2600.0, '科研', 'OLS4100', 500.0]
['16042019', '03040702', '场发射透射电镜', 3800.0, '科研', 'Titan Clubed Themis', 400.0]
['11027718', '03040900', '皮秒激光器', 2000.0, '科研', 'PX100Ⅱ-A', 400.0]
['16016382', '03041142', '40W飞秒激光器', 1800.0, '科研', 'TruMicro5050', 300.0]
['02006744', '03031110', '多功能气体分析仪', 1025.0, '科研', '1312型', 700.0]
['06002158', '03040415', '三维激光扫描仪', 1800.0, '教学', '3Dguru-LR', 0.0]
['06005777', '03030220', '红外热成像仪', 500.0, '教学', 'Yario CAM 170I', 0.0]
['06012268', '03030714', '质子传递反应质谱仪', 200.0, '科研', '06-03(33)', 0.0]
['07021260', '03030706', '气相质谱热脱附联用仪', 5760.0, '科研', '6850/5975B', 0.0]
['07021261', '03141131', '三维粒子成像测速系统', 800.0, '科研', 'Model', 100.0]
['20027587', '03240109', 'Servotest结构加载试验控制系统', 0.0, '科研', 'Pulsar 非标', 0.0]
['11021410', '03011105', '光纤测温控制器', 0.0, '科研', 'OTS4OPFS4', 0.0]
['17033987', '03080404', '涡度自动监测系统', 0.0, '科研', 'AV-OPEC', 0.0]
['20036620', '0316060201', '高亮度激光投影机', 0.0, '公共服务', 'AL-TU26K', 0.0]
['08018395', '03030706', '液相色谱/串联质谱', 0.0, '公共服务', 'UPLC/Quattro Premier', 0.0]
['10000899', '03030706', '气相色谱质谱联用仪', 0.0, '科研', 'Agilent 7890A', 0.0]
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
合并之后,得到有效的记录为 11531。
from head import *
datadir = r'D:\Temp\exceltxt'
filedim = os.listdir(datadir)
attrstr = ['仪器编号', '分类号', '仪器名称','有效机时', '使用方向', '型号', '校外机时']
alldata = []
for f in filedim:
fname = os.path.join(datadir, f)
sectattr = []
with open(fname, 'r', encoding='gbk') as f:
for id,l in enumerate(f.readlines()):
l = l.strip('\n').split('\t')
if id == 0:
sectattr = []
for a in attrstr:
if a in l:
sectattr.append(l.index(a))
else: sectattr.append(0)
printf(sectattr)
continue
if len(l[0]) == 0: continue
alldata.append(list(array(l)[sectattr]))
for id, d in enumerate(alldata):
uset = d[3]
if uset.replace('.','').isdigit():
d[3] = float(uset)
else: d[3] = 0
uset = d[-1]
if uset.replace('.','').isdigit():
d[-1] = float(uset)
else: d[-1] = 0
printf(len(alldata))
tspsave('alldata', attrstr=attrstr, alldata=alldata)
printf('\a')
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
3、数据初步分析
将合并的数据的有效机时绘制曲线,曲线如下。 奇怪的事情出现了。可以看到曲线中间部分(2019,2020年)使用机时呈现比较随机的分布,符合数据规律。但是 数据开始(2017,2018)和数据结束(2021年)曲线呈现规律的增加和减少的趋势。这不符合数据随机分布的特性。
▲ 使用机时分布
查看原始 EXCEL 数据表格,可以看到又是表格中的 有效机时就是这样分布的。所以确定也是数据中的 “有效机时” 数据可能存在问题。
JYH 对于上述数据给出如下说明:
- 2017, 2018,2021 的数据分布是排序后的分布,所以数据应该都是正确的;
- 对于所有数值超过8760 (365×24=8760)都应该去掉,或者修正为8760。
三、分词与聚类
1、仪器名称分词
所有 11531 条记录中,涉及到不同 仪器名称 的个数为 2438。 利用 快速检索并引用你在CSDN上所有的博文笔记 所使用的 JieBa 分词调用,对所有仪器的名称进行分词,然后存储在 namecut.npz 中。
from headm import *
import jieba
attrstr, alldata = tspload('alldata', 'attrstr', 'alldata')
allname = []
alltime = []
cutname = []
for id,a in enumerate(alldata):
alltime.append(float(a[3]))
allname.append(a[2])
seg = '`'.join(jieba.cut(a[2]))
cutname.append(seg)
if id % 100 == 0: printf(id)
tspsave('namecut', cutname=cutname)
printf(cutname[:100])
printf('\a')
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
下面是分词后的所有记录的示例,每个名字的分词都使用 ‘·’进行隔离。
'三室`真空`定向`炉` ', '光电`发射`光谱仪', '高分辨率`磁力`显微镜', '超高`真空`电子束`镀膜机', '高`真空`共溅`镀仪', '原子力`显微镜', '热`分析`系统', '高级`扩展`流变`仪', '粉末`烧结`快速`成形`机', '场`发射`扫描电镜', '电子显微镜`及`能谱仪', '核磁共振`波`谱仪', '直流电源`及其`控制系统', '无人驾驶`电动`飞艇', '摇摆`综合`模拟`台架`系统', '氦气`风机', '摇摆`实验`本体`装置', '自然`循环`大`模拟实验', '晶闸管`整流`装置', '氦`净化`工程`验证`回路', '气相色谱仪', '一体化`卸料`装置`台架', '进球`及`装料`缓冲`台架', '车载`测试仪', '气相色谱仪', 'X射线`检测仪', 'DR`-`CT`安全检查`系统', '转`筒式`固态`发酵罐`系统', '超声`多普勒`测速仪', '粒径`速度`测定仪', '单倾`冷冻`传输`杆`系统', '圆二色`光谱仪'
- 1
- Word:
2、分词后的统计
对于 11531 个仪器名称进行分词后,获得分词总量为2308个。出现频次较高的前100个分词为:
'系统', 2347), ('仪', 989), ('分析仪', 900), ('显微镜', 744), ('激光', 619), ('激光器', 516), ('测试', 329), ('扫描', 319), ('质谱', 295), ('机', 255), ('光谱仪', 247), ('分析', 223), ('联用', 216), ('荧光', 212), ('探针', 188), ('平台', 186), ('装置', 185), ('聚焦', 177), ('真空', 173), ('谱仪', 173), ('色谱', 173), ('成像', 172), ('高速', 169), ('X射线', 168), ('信号', 167), ('共', 160), ('测量', 160), ('液相', 157), ('网络', 157), ('质谱仪', 155), ('电子显微镜', 152), ('高', 152), ('测试仪', 152), ('纯化', 151), ('飞秒', 146), ('设备', 146), ('沉积', 145), ('原子力', 145), ('矢量', 142), ('流式细胞', 138), ('台', 135), ('试验机', 135), ('采集', 132), ('低温', 131), ('热', 130), ('多功能', 127), ('发射', 126), ('显微', 125), ('离子', 124), ('刻蚀', 123), ('红外', 115), ('三维', 115), ('与', 114), ('半导体', 114), ('衍射', 113), ('探测器', 112), ('分辨', 110), ('相色谱', 110), ('蛋白', 110), ('场', 107), ('等离子体', 107), ('快速', 106), ('发生器', 106), ('光学', 106), ('检测', 105), ('气', 105), ('全自动', 99), ('光纤', 99), ('拉曼', 98), ('精密', 97), ('脉冲', 96), ('超', 95), ('数据', 95), ('热仪', 93), ('红外光谱仪', 92), ('-', 90), ('实验', 87), ('动态', 87), ('试验台', 87), ('示波器', 84), ('超高', 82), ('工作站', 81), ('扫描电镜', 81), ('气体', 80), ('多', 80), ('光谱', 79), ('处理', 79), ('纳米', 78), ('控制系统', 78), ('电子束', 76), ('微波', 75), ('高温', 75), ('倒置', 74), ('自动', 74), ('等离子', 73), ('频谱', 71), ('及', 70), ('摄像机', 70), ('分子', 70), ('炉', 69)
- 1
from headm import *
cutname = tspload('namecut', 'cutname')
printf(len(cutname))
worddim = []
for c in cutname:
cc = c.split('`')
for ccc in cc:
ccc = ccc.strip(' ')
if len(ccc) > 0: worddim.append(ccc)
printf(len(worddim))
wordset = list(set(worddim))
wordnum = []
for w in wordset:
wordnum.append(worddim.count(w))
wordall = zip(wordset, wordnum)
wordall = sorted(wordall, key=lambda x:x[1], reverse=True)
printf(wordall[:100])
tspsave('word', wordall = wordall)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- namecut:
将所有分词前面若干个出现的频次累计起来,绘制出累计曲线如下:
▲ 分词出现频次累计曲线
from headm import *
cutname = tspload('namecut', 'cutname')
wordall = tspload('word', 'wordall')
numdim = []
num = 0
for w in wordall:
num += float(w[1])
numdim.append(num)
plt.plot(numdim)
plt.xlabel("n")
plt.ylabel("Sigma")
plt.grid(True)
plt.tight_layout()
plt.show()
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
3、建立词典
从 2308 个分词中选取部分分词作为词典,然后给所有的仪器名称建立 ONE-HOT 数据向量,用于后面的聚类分析。那么选择多少个分词作为词典呢?
下面按照分词频率从高到低排序后,分别选择前面 若干个作为字典,统计在所有仪器名称中能够只要匹配上一个分词的个数,绘制如下曲线。可以看到选择前面300个分词作为字典,则可以匹配上98%以上的仪器名称。因此,词典的个数课程在 100 - 300 之间选择。
▲ 选择分词个数与匹配频次
from headm import *
cutname = tspload('namecut', 'cutname')
wordall = tspload('word', 'wordall')
printf(len(cutname), len(list(wordall)))
printf(wordall[:100])
matchnum = []
for i in range(len(wordall)):
num = 0
for a in cutname:
for w in wordall[:i+1]:
if a.find(w[0]) >= 0:
num += 1
break
matchnum.append(num)
printf(i)
plt.plot(matchnum)
plt.xlabel("n")
plt.ylabel("Number")
plt.grid(True)
plt.tight_layout()
plt.show()
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
※ 总 结 ※
本文对于设备管理中的数据进行了预处理,主要的工作包括:
- 将所有的EXCEL表格中的内容转移到 alldata.npz文件中;
- 对设备仪器名称进行了分词,并进行了统计;
下面可以基于此建立仪器名称分词字典,并建立起设备名称的向量,使用SOFM进行聚类。
一、基本数据
▲ 图1.3.3 处理程序界面
■ 相关文献链接:
● 相关图表链接:
文章来源: zhuoqing.blog.csdn.net,作者:卓晴,版权归原作者所有,如需转载,请联系作者。
原文链接:zhuoqing.blog.csdn.net/article/details/126266783
- 点赞
- 收藏
- 关注作者
评论(0)