当前位置:网站首页>设备管理中数据聚类处理
设备管理中数据聚类处理
2022-08-10 20:17:00 【卓晴】
§01数据处理
背景介绍
在 统计数据背后的指数分布模型 对于设备利用时间进行了初步统计,可以看到数据本身具有指数分布的特性。 为了进一步将设备种类划分小类别,下面计划对于设备命名属性进行聚类。
数据分析
数据文件
处理的数据仍然来自于最初的EXCEL表格文件。下面数据原始EXCEL表格文件:
数据文件中包含有五个表单,分别是 2017 至 2021 年的记录信息。其中能够有效反应设备属性和 应用时间的属性字段包括有:
- 仪器名称: 汉字字符串
- 仪器编号: 八位长的字符串
- 分类号: 八位 至 十位 长的字符串
- 有效机时:数字
- 使用方向:分为 教学,科研,公共服务等
- 是否开放共享: 是,否,未定等;
除了上面字段之外,还有其它一些字段。在这五个表格中,字段的种类和个数各不相同。在2017,2018年里,没有校外机时这一栏。
数据预处理
表格结构
首先将EXCEL表格中的所有数据分别存储在 TEXT 文件中。
▲ 图1.1.1 数据文件及其大小
下面是出数据文件每一行的字段属性。对于2017,2018年没有校外机时这一属性。
['填报院系', '使用单位号', '使用单位', '仪器编号', '分类号', '仪器名称', '负责人', '有效机时', '备注(低于150机时情况说明)', '使用方向', '型号', '规格', '单价', '国别', '国别码', '厂家', '建帐日期', '领用人', '经费来源', '平台类型', '平台实验室号', '平台实验室名称', '是否开放共享', '校外机时']
提取所需表单属性
从上面五个数据文件中,提取以下字段合并成统一后续处理的数据文件,并存储在 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]
合并之后,得到有效的记录为 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')
数据初步分析
将合并的数据的有效机时绘制曲线,曲线如下。 奇怪的事情出现了。可以看到曲线中间部分(2019,2020年)使用机时呈现比较随机的分布,符合数据规律。但是 数据开始(2017,2018)和数据结束(2021年)曲线呈现规律的增加和减少的趋势。这不符合数据随机分布的特性。
▲ 使用机时分布
查看原始 EXCEL 数据表格,可以看到又是表格中的 有效机时就是这样分布的。所以确定也是数据中的 “有效机时” 数据可能存在问题。
JYH 对于上述数据给出如下说明:
- 2017, 2018,2021 的数据分布是排序后的分布,所以数据应该都是正确的;
- 对于所有数值超过8760 (365×24=8760)都应该去掉,或者修正为8760。
分词与聚类
仪器名称分词
所有 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')
下面是分词后的所有记录的示例,每个名字的分词都使用 ‘·’进行隔离。
'三室`真空`定向`炉` ', '光电`发射`光谱仪', '高分辨率`磁力`显微镜', '超高`真空`电子束`镀膜机', '高`真空`共溅`镀仪', '原子力`显微镜', '热`分析`系统', '高级`扩展`流变`仪', '粉末`烧结`快速`成形`机', '场`发射`扫描电镜', '电子显微镜`及`能谱仪', '核磁共振`波`谱仪', '直流电源`及其`控制系统', '无人驾驶`电动`飞艇', '摇摆`综合`模拟`台架`系统', '氦气`风机', '摇摆`实验`本体`装置', '自然`循环`大`模拟实验', '晶闸管`整流`装置', '氦`净化`工程`验证`回路', '气相色谱仪', '一体化`卸料`装置`台架', '进球`及`装料`缓冲`台架', '车载`测试仪', '气相色谱仪', 'X射线`检测仪', 'DR`-`CT`安全检查`系统', '转`筒式`固态`发酵罐`系统', '超声`多普勒`测速仪', '粒径`速度`测定仪', '单倾`冷冻`传输`杆`系统', '圆二色`光谱仪'
- Word:
分词后的统计
对于 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)
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)
- 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()
建立词典
从 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.3.3 处理程序界面
边栏推荐
- 「POJ 3666」Making the Grade 题解(两种做法)
- 机器学习模型验证:被低估的重要一环
- 转铁蛋白Tf功能化β-榄香烯-雷公藤红素/紫杉醇PLGA纳米粒/雷公藤甲素脂质体(化学试剂)
- 怎么完全卸载赛门铁克_Symantec卸载方法,赛门铁克卸载「建议收藏」
- Heme - gold nanoparticles (Heme - AuNP) composite nanometer enzyme | gold nanoparticles nuclear porous hollow carbon nanometer spherical shell (Au @ HCNs) nano enzyme
- 【SemiDrive源码分析】【MailBox核间通信】51 - DCF_IPCC_Property实现原理分析 及 代码实战
- 七月券商金工精选
- 机器学习|模型评估——AUC
- C语言详解系列——关于调试那些事
- 手把手教你Charles抓包工具使用
猜你喜欢
[email protected]纳米模拟酶|PtCo合金纳米粒子"/>
水溶性合金量子点纳米酶|CuMoS纳米酶|多孔硅基Pt(Au)纳米酶|[email protected]纳米模拟酶|PtCo合金纳米粒子
电信保温杯笔记——《统计学习方法(第二版)——李航》第17章 潜在语义分析
Multifunctional Nanozyme Ag/PANI | Flexible Substrate Nano ZnO Enzyme | Rhodium Sheet Nanozyme | Ag-Rh Alloy Nanoparticle Nanozyme | Iridium Ruthenium Alloy/Iridium Oxide Biomimetic Nanozyme
测试/开发程序员值这么多钱么?“我“不会愿赌服输......
(12) findContours function hierarchy explanation
[Natural Language Processing] [Vector Representation] PairSupCon: Pairwise Supervised Contrastive Learning for Sentence Representation
论文解读(g-U-Nets)《Graph U-Nets》
WCF and TCP message communication practice, c # 】 【 realize group chat function
The 2021 ICPC Asia Shanghai Regional Programming Contest D、E
导入FontForge生成字体
随机推荐
巧用RoaringBitMap处理海量数据内存diff问题
「POJ 3666」Making the Grade 题解(两种做法)
The servlet mapping path matching resolution
哈工大软件构造Lab3(2022)
MySQL数据库的主从复制部署详解
(十二) findContours函数的hierarchy详解
XML小讲
"POJ 3666" Making the Grade problem solution (two methods)
洛谷 P1629 邮递员送信 (三种最短路)
nfs挂载服务器,解决挂载后无法更改用户id,无法修改、写文件,文件只读权限Read-only file system等问题
[SemiDrive source code analysis] [MailBox inter-core communication] 52 - DCF Notify implementation principle analysis and code combat
知识图谱Knowledge Graph
YOLOv3 SPP源码分析
重载和重写
手把手教你Charles抓包工具使用
苹果字体查找
IIC通信协议总结[通俗易懂]
FEMRL: A Framework for Large-Scale Privacy-Preserving Linkage of Patients’ Electronic Health Rec Paper Summary
Tf铁蛋白颗粒包载顺铂/奥沙利铂/阿霉素/甲氨蝶呤MTX/紫杉醇PTX等药物
【毕业设计】基于STM32的天气预报盒子 - 嵌入式 单片机 物联网