马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
一、数据集回顾
前面我们已经根本相识了WM-811K Wafermap 数据集,并通过几段代码,认识了这个数据集的数据结构,这里为了方便各位连续理解,让我们再回顾一下:
WM-811K Wafermap 数据集是一个在半导体制造范畴广泛使用的公开数据集,主要用于晶圆缺陷模式辨认和分析。该数据集包含了大量晶圆图(wafer maps),这些图展示了半导体制造过程中晶圆上的缺陷分布情况。以下是该数据集的一些关键信息:
数据集概述
- 数据量:WM-811K 数据集包含约 811,457 张晶圆图。
- 缺陷类型:数据集中标注了多种常见的缺陷模式,如中心缺陷、边沿缺陷、局部缺陷、环形缺陷等。
- 应用场景:该数据集常用于机器学习、深度学习和模式辨认使命,特殊是在半导体制造中的缺陷检测和分类。
数据集结构
- 晶圆图:每张晶圆图是一个二维矩阵,表示晶圆上的缺陷分布。
- 标签:每张图都有对应的标签,标明缺陷的类型或模式。
- 元数据:大概包含制造过程中的其他相关信息,如工艺参数、装备状态等。
应用
- 缺陷分类:通过练习模子,主动辨认和分类晶圆上的缺陷模式。
- 质量控制:资助制造商优化工艺,镌汰缺陷率,进步良品率。
- 研究:用于学术研究和工业应用中的算法开发和验证。
以下是上次我们演示过的,数据集的最后5条记载:
如果你没有看过我之前的文章,发起先看一下:
半导体数据分析: 玩转WM-811K Wafermap 数据集(一) AI 机器学习_wafer dataset-CSDN博客 我们接着上一篇文章来继承深入相识这个数据的结构和内容
二、根本统计
如果按照前面我们介绍的数据来计算,这个数据集收集自现实工厂的47,543个批次。但是,47,543个批次× 25个晶圆/批次=1,157,325张晶圆图比811,457张晶圆图要多出许多。为什么这个数据集现实只有811,457片wafer呢?
频次统计
从上面的图片看,每个批次(LOT)最多有25片Wafer(waferIndex <=25),so, 我们清楚地看到,最后两个批次分别是1片和2片。所以并不是每个Lot都有完整的25片wafer的!
我们通过下面的代码,来统计每个Lot中waferIndex的出现频率:
- import pandas as pd # 导入 Pandas 库,用于数据处理和分析
- import numpy as np # 导入 NumPy 库,用于科学计算和数组操作
- import matplotlib.pyplot as plt # 导入 Matplotlib 的 pyplot 模块,用于绘图
- %matplotlib inline # Jupyter Notebook 的魔法命令,使图形直接显示在 Notebook 中
- # 定义数据文件的路径 -- 这是我自己的路径,每个人都不会相同,请注意
- mp_file = "/data_disk/public_lib/wm811k_wafer_map/in/LSWMD.pkl"
- # 使用 Pandas 读取 pickle 格式的数据文件,并将其加载到 DataFrame 中
- df = pd.read_pickle(mp_file)
- # 使用 NumPy 的 unique 函数统计 df.waferIndex 列中的唯一值及其出现次数
- # uni_Index 是一个包含两个数组的元组:唯一值数组和对应的计数数组
- uni_Index = np.unique(df.waferIndex, return_counts=True)
- # 使用 Matplotlib 绘制柱状图
- # uni_Index[0] 是 x 轴数据(唯一值),uni_Index[1] 是 y 轴数据(出现次数)
- # color='gold' 设置柱状图颜色为金色,align='center' 使柱状图居中,alpha=0.5 设置透明度
- plt.bar(uni_Index[0], uni_Index[1], color='gold', align='center', alpha=0.5)
- # 设置图表的标题
- plt.title("wafer Index distribution")
- # 设置 x 轴的标签
- plt.xlabel("index #")
- # 设置 y 轴的标签
- plt.ylabel("frequency")
- # 设置 x 轴的范围为 0 到 26
- plt.xlim(0, 26)
- # 设置 y 轴的范围为 30000 到 34000
- plt.ylim(30000, 34000)
- # 显示绘制的图表
- plt.show()
复制代码 运行代码,表现如下:
从图中可以看出,并非全部批次都有完美的25片晶圆,这大概是由于传感器故障或其他未知题目造成的。换句话说,waferIndex 列的值大概不完整或不一致,这大概会影响后续的数据分析或建模。
所幸我们在分类中不需要索引特性,因此我们可以删除这个字段。
- df = df.drop(['waferIndex'], axis = 1)
复制代码 所以你看到,我们如许就删除了这个字段:
新增字段
从上面的数据中,固然从 wafer map 列中无法直接提取出很多有用的信息,但我们可以观察到每个晶圆图(wafer map)的尺寸(die size)是不同的。因此,让我们创建一个新的量 waferMapDim 来记载每个晶圆图的尺寸信息,以便后续分析或处置惩罚。
运行以下的代码:
- import pandas as pd # 导入 Pandas 库,用于数据处理和分析
- import numpy as np # 导入 NumPy 库,用于科学计算和数组操作
- # 定义数据文件的路径
- mp_file = "/data_disk/public_lib/wm811k_wafer_map/in/LSWMD.pkl"
- # 使用 Pandas 读取 pickle 格式的数据文件,并将其加载到 DataFrame 中
- df = pd.read_pickle(mp_file)
- # 移除 DataFrame 中的 'waferIndex' 列,因为该列在当前任务中不需要
- #这行代码删除了 df 中的 waferIndex 列。axis=1 表示删除的是列(axis=0 是删除行)。
- df = df.drop(['waferIndex'], axis=1)
- # 定义一个函数 find_dim,用于计算二维数组的尺寸
- def find_dim(x):
- """
- 计算二维数组的尺寸(行数和列数)。
-
- 参数:
- x (np.array): 输入的二维数组。
-
- 返回:
- tuple: 包含行数和列数的元组。
- """
- dim0 = np.size(x, axis=0) # 计算数组的行数
- dim1 = np.size(x, axis=1) # 计算数组的列数
- return dim0, dim1 # 返回行数和列数
- # 对 DataFrame 中的 'waferMap' 列应用 find_dim 函数,计算每个晶圆图的尺寸,并将结果存储在新列 'waferMapDim' 中
- df['waferMapDim'] = df.waferMap.apply(find_dim)
- # 随机抽取 DataFrame 中的 5 行数据,用于查看结果
- df.sample(5)
复制代码 代码释义:
这段代码的功能是读取数据集文件,处置惩罚此中的数据,并计算出每个“waferMap”列的维度信息。
1. 导入必要的库
- import pandas as pd
- import numpy as np
复制代码
- pandas 是一个强大的数据处置惩罚库,常用于数据清洗和分析。通过 pd 引用。
- numpy 是一个用于科学计算的库,尤其擅长数组操作和数学计算。通过 np 引用。
2. 读取 .pkl 文件
- mp_file = "/data_disk/public_lib/wm811k_wafer_map/in/LSWMD.pkl"
- df = pd.read_pickle(mp_file)
复制代码
- mp_file 定义了文件的路径,LSWMD.pkl 是一个 pickle 文件,这个文件保存了数据。
- pd.read_pickle(mp_file) 用于从 .pkl 文件中读取数据,并将其加载为一个 DataFrame。df 是这个数据框。
3. 删除指定列
- df = df.drop(['waferIndex'], axis=1)
复制代码
- 这行代码删除了 df 中的 waferIndex 列。axis=1 表示删除的是列(axis=0 是删除行)。
4. 定义函数 find_dim
- def find_dim(x):
- dim0 = np.size(x, axis=0)
- dim1 = np.size(x, axis=1)
- return dim0, dim1
复制代码
- find_dim 是一个函数,用来计算输入对象 x 的维度。这个函数担当一个二维对象(如矩阵或数组)并返回其两个维度:
- np.size(x, axis=0) 获取 x 的第一个维度(行数)。
- np.size(x, axis=1) 获取 x 的第二个维度(列数)。
5. 应用 find_dim 函数到 waferMap 列
- df['waferMapDim'] = df.waferMap.apply(find_dim)
复制代码
- df.waferMap 是 DataFrame 中的 waferMap 列,假设它包含二维数组或雷同的数据结构。
- .apply(find_dim) 将 find_dim 函数应用到 waferMap 列的每个元素上,计算每个元素的维度,并将效果存储在新的列 waferMapDim 中。
find_dim 函数被应用于 df.waferMap 列的每个元素。这里的关键是理解 .apply() 函数的工作原理。
具体解释:
- df.waferMap 是 DataFrame 中的一个列,假设它包含的是一系列二维数组大概列表(在你的数据中表现为嵌套的列表,如 [[0, 0, 0, 0, 0, 0, ...]])。每个元素对应一个 waferMap,即一个二维的矩阵大概数组。
- df.waferMap.apply(find_dim) 会对 df.waferMap 列中的每个元素应用 find_dim 函数。
find_dim 函数的输入:
find_dim 函数的输入是 df.waferMap 列中的每个元素,也就是每个 waferMap。根据这些数据,这些 waferMap 看起来是二维的列表或数组。
举个例子:
- 假设某个 waferMap 的值是:[[0, 0, 0], [1, 1, 1], [2, 2, 2]]
- find_dim 函数会接收到这个二维列表,并计算它的维度:
- np.size(x, axis=0) 会返回 3(行数)。
- np.size(x, axis=1) 会返回 3(列数)。
- 所以,find_dim 的返回值是 (3, 3)。
6. 查看 df 的随机样本
- df.sample(5)
随机选择 df 中的 5 行,并表现它们。这通常用于快速查看数据的样本。
这段代码的核心功能是处置惩罚二维数组(waferMap)并计算它们的维度信息。
解释了这么多,上面的代码运行的效果如下图:
请注意最后的括号内的数值,也就是说代表了行和列的矩阵,表明了这片wafer的规模。
- max(df.waferMapDim), min(df.waferMapDim)
复制代码 最大和最小就出来了:
加上下面这段代码:
- uni_waferDim=np.unique(df.waferMapDim, return_counts=True)
- uni_waferDim[0].shape[0]
复制代码 这行代码涉及到对 df.waferMapDim 列进行去重和计数操作,并访问其效果的一部分。
1. np.unique(df.waferMapDim, return_counts=True)
- uni_waferDim = np.unique(df.waferMapDim, return_counts=True)
复制代码
- df.waferMapDim 是 DataFrame 中的列,存储了每个 waferMap 的维度信息,比方 (88, 81)、(35, 36) 等。
- np.unique 是 NumPy 的一个函数,返回输入数组中唯一的元素,并可以计算每个唯一元素的出现次数。
- df.waferMapDim 是要处置惩罚的输入数据。
- return_counts=True 表示除了返回唯一元素自己,还会返回每个唯一元素的出现次数。
因此,uni_waferDim 会是一个元组,包含两个数组:
- 第一个数组是全部 唯一的维度元组(如 (88, 81)、(35, 36) 等)。
- 第二个数组是每个唯一维度元组在 df.waferMapDim 中出现的次数。
比方,假设 df.waferMapDim 中有以下维度数据:
- [(88, 81), (35, 36), (88, 81), (35, 36), (25, 27)]
复制代码 则 np.unique 会返回:
- uni_waferDim[0] = [(88, 81), (35, 36), (25, 27)] # 唯一的维度元组
- uni_waferDim[1] = [2, 2, 1] # 每个维度元组出现的次数
复制代码 2. uni_waferDim[0].shape[0]
- uni_waferDim[0] 是返回的唯一维度元组的数组(比方 [(88, 81), (35, 36), (25, 27)])。
- uni_waferDim[0].shape 返回的是这个数组的形状。在这个例子中,uni_waferDim[0] 是一个长度为 3 的数组,因此 uni_waferDim[0].shape 会返回 (3,)。
- .shape[0] 访问的是数组的第一个维度的巨细,也就是数组的长度。在这个例子中,uni_waferDim[0].shape[0]
会返回 3,表示有 3 个唯一的维度元组。
uni_waferDim[0].shape[0]
的含义是 返回 waferMapDim 中唯一维度元组的数量。也就是说,统计 df.waferMapDim 列中有多少种不同的维度元组。比方,如果有 3 种不同的维度元组,效果就是 3。
本例中效果是 632
就是说 唯一维度的元组的数量是 632种。
圆图的尺寸(大概说图像巨细)并不总是雷同的。我们注意到,数据集中有 632 种不同的尺寸。因此,为了统一输入的尺寸,必须进行数据转换(特征提取),这种方法将在后续章节中介绍。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |