半导体数据分析: 玩转WM-811K Wafermap 数据集(三) AI 机器学习
前面我们已经通过两篇文章,一起熟悉了WM-811K Wafermap 数据集,并对其中的一些数据进行了调用,生成了一些统计信息和图片。今天我们接着继续往前走。
半导体数据分析: 玩转WM-811K Wafermap 数据集(二) AI 机器学习_wm811k数据集-CSDN博客
半导体数据分析: 玩转WM-811K Wafermap 数据集(一) AI 机器学习_wafer dataset-CSDN博客
当我们在处理大规模的数据集的时候,很多人都会有一种束手无策的感觉,尤其是面对海量的数据和复杂的结构时,可能会感到无从下手。我的经验就是抽丝剥茧,一步步来。实际上,通过系统化的步骤和合理的策略,我们可以有效地应对这些挑战。
搞过数据分析的都知道,缺失值的检查是数据处理过程中不可忽视的一环。当我们浏览数据集时,可能会发现相当一部分数据由于缺失值而变得无用。这些缺失值可能源于数据采集过程中的误差、设备故障或其他原因。为了确保后续分析的准确性,我们需要识别并处理这些缺失值。
当然,明确分析目标也非常重要。例如,如果我们只对具有特定故障类型标签的晶圆感兴趣,那么可以删除那些没有故障类型标签的数据。这样做不仅能够减少数据集的规模,还能提高数据的质量,使分析结果更加聚焦和可靠。
下面我我们就将整个数据做一些初步的处理,我们先来处理失效形式和训练类型。
之前我们从数据集中取出过一些数据 显示如下:
其中有两项 trianTestLabel和failureType,分别代表了训练测试标签,和失效标签。
我们对这两项通过下面的代码来进行处理:
import pandas as pdmp_file = "/data_disk/public_lib/wm811k_wafer_map/in/LSWMD.pkl"
df = pd.read_pickle(mp_file)df['failureNum']=df.failureType
df['trainTestNum']=df.trianTestLabel
mapping_type={'Center':0,'Donut':1,'Edge-Loc':2,'Edge-Ring':3,'Loc':4,'Random':5,'Scratch':6,'Near-full':7,'none':8}
mapping_traintest={'Training':0,'Test':1}
df=df.replace({'failureNum':mapping_type, 'trainTestNum':mapping_traintest})
tol_wafers = df.shape[0]
tol_wafers
在上面的代码中,我们抽取了 trianTestLabel 和failureNum 两列,分别重新命名为两列failureNum和trainTestNum,并通过两个字典mapping_type 和mapping_traintest进行了映射。在df.shape[0]中 返回 df 数据框的行数,即数据集中的总晶圆数量。该值存储在变量 tol_wafers 中。
811457
总数的晶圆是811457张。
然后我们来统计一下,失效的形式:
df_withlabel = df[(df['failureNum']>=0) & (df['failureNum']<=8)]
df_withlabel =df_withlabel.reset_index()
df_withpattern = df[(df['failureNum']>=0) & (df['failureNum']<=7)]
df_withpattern = df_withpattern.reset_index()
df_nonpattern = df[(df['failureNum']==8)]
df_withlabel.shape[0], df_withpattern.shape[0], df_nonpattern.shape[0]
上面的代码列出了三种标签 全部标签(0-8),有标记的标签(0-7),和 无标记的标签(8)。
并且每次取出标签的时候,都进行了重新索引:reset_index()。 这里对这个重新索引稍微解释一下:
重置索引通常是数据处理中的一个重要步骤,特别是在筛选数据或进行某些操作后。下面是重置索引的几个常见原因:
1. 确保索引连续
当你对 DataFrame 进行筛选或过滤后,原始数据的索引可能会变得不连续。例如,假设你从一个 DataFrame 中删除了一些行,结果就是剩余的行的索引会留下“空隙”。重置索引可以让你重新生成连续的索引,通常是从 0 开始递增的整数。
2. 方便后续操作
使用连续的整数索引使得后续的操作更简单。例如,在进一步分析或可视化数据时,连续的索引能避免因为跳跃的索引导致的潜在错误。它还可以帮助在合并(merge)或连接(concat)时避免索引冲突。
3. 删除旧的索引列
在使用 reset_index() 时,如果你不指定参数,原来的索引会被添加为一个新列。例如,如果你过滤掉了 DataFrame 的一些行,原索引列可能仍然包含那些被删除行的索引。重置索引不仅让索引连续,而且会去掉原始的索引列(除非你选择保留它)。
4. 避免潜在的错误
如果后续的操作需要基于索引进行一些处理(比如索引与行数的关联),不连续的索引可能会导致逻辑错误或不一致。重置索引确保了数据的索引一致性,减少了潜在的错误发生。
5. 保持代码整洁
有时,重置索引是为了保证代码简洁和易于阅读。尤其是当数据已经过多次筛选、过滤、分组等操作后,重新整洁的索引可以让分析过程更加清晰,避免在后续处理中迷失。
6. 去除层次索引(如果有)
如果在处理过程中曾经使用过多级索引(MultiIndex),可以通过 reset_index() 来降级到简单的单级索引,使得数据的访问和管理更为直观。
在 pandas 中,重新索引(reset index) 的主要目的是为数据框的索引(下标)重新分配连续的整数值,同时可以选择是否保留旧索引作为新列。
上面代码的最终运行结果是:
(172950, 25519, 147431)
这意味着172950片晶圆有标签,其中25519片晶圆被标记了失效形式,147431片晶圆没有标记失效形式。这个统计数据对我们后面用ai进行数据分析有参考作用。
然后我们来做一个统计图:
#创建图形和子图:
fig = plt.figure(figsize=(20, 4.5))
gs = gridspec.GridSpec(1, 2, width_ratios=[1, 2.5])
ax1 = plt.subplot(gs[0])
ax2 = plt.subplot(gs[1])#饼图:展示晶圆的标签分类
no_wafers = [tol_wafers - df_withlabel.shape[0], df_withpattern.shape[0], df_nonpattern.shape[0]]colors = ['silver', 'orange', 'gold']
explode = (0.1, 0, 0)
labels = ['no-label', 'label&pattern', 'label&non-pattern']
ax1.pie(no_wafers, explode=explode, labels=labels, colors=colors, autopct='%1.1f%%', shadow=True, startangle=140)#条形图:显示不同故障类型的分布
uni_pattern = np.unique(df_withpattern.failureNum, return_counts=True)
labels2 = ['', 'Center', 'Donut', 'Edge-Loc', 'Edge-Ring', 'Loc', 'Random', 'Scratch', 'Near-full']ax2.bar(uni_pattern[0], uni_pattern[1] / df_withpattern.shape[0], color='gold', align='center', alpha=0.9)
ax2.set_title("Failure Type Frequency")
ax2.set_ylabel("% of Pattern Wafers")plt.show()
运行结果如下:

根据failureType变量过滤,172950片晶圆有标签,而78.7%的晶圆没有标签。在贴有标签的晶圆片中,只有3.1%(25,519片)的晶圆片存在真正的失效模式,而147,431片晶圆片仍贴有“无”标签。因此,我们只关注这25,519个实例,这大大减少了我们工作的计算量。从上面的第二张图中,数据集显示出,失效形式呈现出了高度的不平衡分布。
图片展示数据是一种最佳数据展示的方式之一,因此观察原始数据的最好方法是进行数据可视化。接下来我们用数据集中标记的模式显示前100个样本。
fig, ax = plt.subplots(nrows = 10, ncols = 10, figsize=(20, 20))
ax = ax.ravel(order='C')
for i in range(100):img = df_withpattern.waferMap[i]ax[i].imshow(img)ax[i].set_title(df_withpattern.failureType[i][0][0], fontsize=10)ax[i].set_xlabel(df_withpattern.index[i], fontsize=8)ax[i].set_xticks([])ax[i].set_yticks([])
plt.tight_layout()
plt.show()

我们同样也可以通过失效形式分别来绘制晶圆图:
x = [0,1,2,3,4,5,6,7]
labels2 = ['Center','Donut','Edge-Loc','Edge-Ring','Loc','Random','Scratch','Near-full']for k in x:fig, ax = plt.subplots(nrows = 1, ncols = 10, figsize=(18, 12))ax = ax.ravel(order='C')for j in [k]:img = df_withpattern.waferMap[df_withpattern.failureType==labels2[j]]for i in range(10):ax[i].imshow(img[img.index[i]])ax[i].set_title(df_withpattern.failureType[img.index[i]][0][0], fontsize=10)ax[i].set_xlabel(df_withpattern.index[img.index[i]], fontsize=10)ax[i].set_xticks([])ax[i].set_yticks([])plt.tight_layout()plt.show()








然后我们从上面选取几种来进行放大可视:
根据上面的编号选取: [12,340, 8, 14, 13, 66, 15, 189]
x = [12, 340, 8, 14, 13, 66, 15, 189]
labels2 = ['Center','Donut','Edge-Loc','Edge-Ring','Loc','Random','Scratch','Near-full']#ind_def = {'Center': 9, 'Donut': 340, 'Edge-Loc': 3, 'Edge-Ring': 16, 'Loc': 0, 'Random': 25, 'Scratch': 84, 'Near-full': 37}
fig, ax = plt.subplots(nrows = 2, ncols = 4, figsize=(20, 10))
ax = ax.ravel(order='C')
for i in range(8):img = df_withpattern.waferMap[x[i]]ax[i].imshow(img)ax[i].set_title(df_withpattern.failureType[x[i]][0][0],fontsize=24)ax[i].set_xticks([])ax[i].set_yticks([])
plt.tight_layout()
plt.show()
经过上面的可视化,我们进一步加深了对这个数据集的了解,后面我们将对数据进行转换:通过使用缩放、属性分解和属性聚合的工程特征,转换为机器学习准备的预处理数据。
相关文章:
半导体数据分析: 玩转WM-811K Wafermap 数据集(三) AI 机器学习
前面我们已经通过两篇文章,一起熟悉了WM-811K Wafermap 数据集,并对其中的一些数据进行了调用,生成了一些统计信息和图片。今天我们接着继续往前走。 半导体数据分析: 玩转WM-811K Wafermap 数据集(二) AI…...
【.net core】【sqlsugar】时间查询示例
1、时间包含查询示例 //model.TimeInterval为时间区间参数,参数格式为2024-01-01~2025-01-01 //query为当前查询的语句内容 //为当前查询语句增加创建时间模糊搜索查询条件 query query.Where(a > ((DateTime)a.F_CreatorTime).ToString("yyyy-MM-dd HH:m…...
Kotlin 协程基础十 —— 协作、互斥锁与共享变量
Kotlin 协程基础系列: Kotlin 协程基础一 —— 总体知识概述 Kotlin 协程基础二 —— 结构化并发(一) Kotlin 协程基础三 —— 结构化并发(二) Kotlin 协程基础四 —— CoroutineScope 与 CoroutineContext Kotlin 协程…...
Java中网络编程的学习
目录 网络编程概述 网络模型 网络通信三要素: IP 端口号 通信协议 IP地址(Internet Protocol Address) 端口号 网络通信协议 TCP 三次握手 四次挥手 UDP TCP编程 客户端Socket的工作过程包含以下四个基本的步骤: 服务器程序…...
[计算机网络]一. 计算机网络概论第一部分
作者申明:作者所有文章借助了各个渠道的图片视频以及资料,在此致谢。作者所有文章不用于盈利,只是用于个人学习。 1.0推荐动画 【网络】半小时看懂<计算机网络>_哔哩哔哩_bilibili 1.1计算机网络在信息时代的作用 在当今信息时代&…...
【0393】Postgres内核 checkpointer process ③ 构建 WAL records 工作缓存区
1. 初始化 ThisTimeLineID、RedoRecPtr 函数 InitXLOGAccess() 内部会初始化 ThisTimeLineID、wal_segment_size、doPageWrites 和 RedoRecPtr 等全局变量。 下面是这四个变量初始化前的值: (gdb) p ThisTimeLineID $125 = 0 (gdb) p wal_segment_size $126 = 16777216 (gdb…...
正则表达式基础知识及grep、sed、awk常用命令
文章目录 前言一、正则表达式元字符和特性1. 字符匹配2. 量词3. 字符类4. 边界匹配5. 分词和捕获6. 特殊字符7. 位置锚定 二、grep常用参数1. -n额外输出行号2. -v 排除匹配的行3. -E 支持扩展正则匹配4. -e进行多规则匹配搜索5. -R 递归匹配目录中的文件内容6. -r递归地搜索目…...
redhat安装docker 24.0.7
1、下载docker镜像包 wget https://download.docker.com/linux/static/stable/x86_64/docker-24.0.7.tgz 2、解压 tar -xvf docker-24.0.7.tgz 3、解压的docker文件夹全部移动至/usr/bin目录 cd docker cp -p docker/* /usr/bin 4、注册服务 vi /usr/lib/systemd/syste…...
【excel】VBA简介(Visual Basic for Applications)
文章目录 一、基本概念二、语法2.1 数据类型2.11 基本数据类型2.12 常量2.13 数组 2.2 控制语句2.21 条件语句2.22 循环语句2.23 错误处理:On Error2.24 逻辑运算 2.3 其它语句2.31 注释2.32 with语句 2.4 表达式2.41 常见表达式类型2.42 表达式的优先级 2.5 VBA 的…...
【大厂面试AI算法题中的知识点】方向涉及:ML/DL/CV/NLP/大数据...本篇介绍为什么self-attention可以堆叠多层,这有什么作用?
【大厂面试AI算法题中的知识点】方向涉及:ML/DL/CV/NLP/大数据…本篇介绍为什么self-attention可以堆叠多层,这有什么作用? 【大厂面试AI算法题中的知识点】方向涉及:ML/DL/CV/NLP/大数据…本篇介绍为什么self-attention可以堆叠…...
NanoKVM简单开箱测评和拆解,让普通电脑实现BMC/IPMI远程管理功能
Sipeed推出了NanoKVM,简直是没有BMC的台式机和工作站的福音。有了这个就可以轻松实现以往服务器才有的远程管理功能。 NanoKVM 简介 Lichee NanoKVM 是基于 LicheeRV Nano 的 IP-KVM 产品,继承了 LicheeRV Nano 的极致体积 和 强大功能。 NanoKVM 包含…...
【Idea】编译Spring源码 read timeout 问题
Idea现在是大家工作中用的比较多的开发工具,尤其是做java开发的,那么做java开发,了解spring框架源码是提高自己技能水平的一个方式,所以会从spring 官网下载源码,导入到 Idea 工具并编译,但是发现build的时…...
VSCode的配置与使用(C/C++)
从0开始教你在vscode调试一个C文件 一.首先是配置你的编译环境,添加到环境变量(默认你是全新的电脑,没有安装vs2019之类的) 原因:因为相比于vs2019,vscode只是个代码编辑器,相当于一个彩色的、…...
SpringMVC (1)
目录 1. 什么是Spring Web MVC 1.1 MVC的定义 1.2 什么是Spring MVC 1.3 Spring Boot 1.3.1 创建一个Spring Boot项目 1.3.2 Spring Boot和Spring MVC之间的关系 2. 学习Spring MVC 2.1 SpringBoot 启动类 2.2 建立连接 1. 什么是Spring Web MVC 1.1 MVC的定义 MVC 是…...
本地部署大模型—MiniCPM-V 2.0: 具备领先OCR和理解能力的高效端侧多模态大模型
MiniCPM-V 2.0: 具备领先OCR和理解能力的高效端侧多模态大模型 简介 MiniCPM 系列的最新多模态版本 MiniCPM-V 2.0。该模型基于 [MiniCPM 2.4B和 SigLip-400M 构建,共拥有 2.8B 参数。MiniCPM-V 2.0 具有领先的光学字符识别(OCR)和多模态理解能力。该模型在综合性 OCR 能力…...
国产linux系统(银河麒麟,统信uos)使用 PageOffice 实现后台批量生成PDF文档
PageOffice 国产版 :支持信创系统,支持银河麒麟V10和统信UOS,支持X86(intel、兆芯、海光等)、ARM(飞腾、鲲鹏、麒麟等)、龙芯(LoogArch)芯片架构。 PageOffice 版本&…...
Python 扫描枪读取发票数据导入Excel
财务需要一个扫描枪扫描发票文件,并将主要信息录入Excel 的功能。 文件中sheet表的列名称,依次为:发票编号、发票编码、日期、金额、工号、扫描日期。 扫描的时候,Excel 文件需要关闭,否则会报错。 import openpyxl …...
电源自动测试系统中的ate定制化包含哪些内容?
1. 测试项目和指标 基础测试项目:虽然大多数电源模块的基础测试项目(如输入输出电压、电流、效率等)已经包含在测试系统中,但针对特殊或小众的测试项目,如VPX电源测试时的通讯验证,可以根据客户需求进行定…...
人工智能-机器学习之多分类分析(项目实战二-鸢尾花的多分类分析)
Softmax回归听名字,依然好像是做回归任务的算法,但其实它是去做多分类任务的算法。 篮球比赛胜负是二分类,足球比赛胜平负就是多分类 识别手写数字0和1是二分类,识别手写数字0-9就是多分类 Softmax回归算法是一种用于多分类问题…...
多包单仓库(monorepo)实现形式
目录 背景 需求和方案 从0开始搭建一个Monorepo项目 创建 配置全局公共样式 配置全局公共组件 方式1:不需要独立发布的组件包,只在当前项目的子项目中使用 方式2:需要独立发布和版本维护的包 子项目的独立构建和部署 总结 Monorepo优势 便于代码维护、管理 支持…...
在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module
1、为什么要修改 CONNECT 报文? 多租户隔离:自动为接入设备追加租户前缀,后端按 ClientID 拆分队列。零代码鉴权:将入站用户名替换为 OAuth Access-Token,后端 Broker 统一校验。灰度发布:根据 IP/地理位写…...
华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建
华为云FlexusDeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色,华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型,能助力我们轻松驾驭 DeepSeek-V3/R1,本文中将分享如何…...
Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)
参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...
项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)
Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...
【Go语言基础【13】】函数、闭包、方法
文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数(函数作为参数、返回值) 三、匿名函数与闭包1. 匿名函数(Lambda函…...
[ACTF2020 新生赛]Include 1(php://filter伪协议)
题目 做法 启动靶机,点进去 点进去 查看URL,有 ?fileflag.php说明存在文件包含,原理是php://filter 协议 当它与包含函数结合时,php://filter流会被当作php文件执行。 用php://filter加编码,能让PHP把文件内容…...
Vue ③-生命周期 || 脚手架
生命周期 思考:什么时候可以发送初始化渲染请求?(越早越好) 什么时候可以开始操作dom?(至少dom得渲染出来) Vue生命周期: 一个Vue实例从 创建 到 销毁 的整个过程。 生命周期四个…...
Oracle11g安装包
Oracle 11g安装包 适用于windows系统,64位 下载路径 oracle 11g 安装包...
Monorepo架构: Nx Cloud 扩展能力与缓存加速
借助 Nx Cloud 实现项目协同与加速构建 1 ) 缓存工作原理分析 在了解了本地缓存和远程缓存之后,我们来探究缓存是如何工作的。以计算文件的哈希串为例,若后续运行任务时文件哈希串未变,系统会直接使用对应的输出和制品文件。 2 …...
针对药品仓库的效期管理问题,如何利用WMS系统“破局”
案例: 某医药分销企业,主要经营各类药品的批发与零售。由于药品的特殊性,效期管理至关重要,但该企业一直面临效期问题的困扰。在未使用WMS系统之前,其药品入库、存储、出库等环节的效期管理主要依赖人工记录与检查。库…...
