半导体数据分析: 玩转WM-811K Wafermap 数据集(二) AI 机器学习

一、数据集回顾

前面我们已经基本了解了WM-811K Wafermap 数据集,并通过几段代码,熟悉了这个数据集的数据结构,这里为了方便各位连续理解,让我们再回顾一下:

WM-811K Wafermap 数据集是一个在半导体制造领域广泛使用的公开数据集,主要用于晶圆缺陷模式识别和分析。该数据集包含了大量晶圆图(wafer maps),这些图展示了半导体制造过程中晶圆上的缺陷分布情况。以下是该数据集的一些关键信息:

数据集概述

  • 数据量:WM-811K 数据集包含约 811,457 张晶圆图。

  • 缺陷类型:数据集中标注了多种常见的缺陷模式,如中心缺陷、边缘缺陷、局部缺陷、环形缺陷等。

  • 应用场景:该数据集常用于机器学习、深度学习和模式识别任务,特别是在半导体制造中的缺陷检测和分类。

数据集结构

  • 晶圆图:每张晶圆图是一个二维矩阵,表示晶圆上的缺陷分布。

  • 标签:每张图都有对应的标签,标明缺陷的类型或模式。

  • 元数据:可能包含制造过程中的其他相关信息,如工艺参数、设备状态等。

应用

  • 缺陷分类:通过训练模型,自动识别和分类晶圆上的缺陷模式。

  • 质量控制:帮助制造商优化工艺,减少缺陷率,提高良品率。

  • 研究:用于学术研究和工业应用中的算法开发和验证。

以下是上次我们演示过的,数据集的最后5条记录:

如果你没有看过我之前的文章,建议先看一下:

半导体数据分析: 玩转WM-811K Wafermap 数据集(一) AI 机器学习_wafer dataset-优快云博客 我们接着上一篇文章来继续深入了解这个数据的结构和内容

二、基本统计

如果按照前面我们介绍的数据来计算,这个数据集收集自实际工厂的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 文件中读取数据,并将其加载为一个 DataFramedf 是这个数据框。

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.waferMapDataFrame 中的 waferMap 列,假设它包含二维数组或类似的数据结构。
  • .apply(find_dim)find_dim 函数应用到 waferMap 列的每个元素上,计算每个元素的维度,并将结果存储在新的列 waferMapDim 中。

find_dim 函数被应用于 df.waferMap 列的每个元素。这里的关键是理解 .apply() 函数的工作原理。

详细解释:

  • df.waferMapDataFrame 中的一个列,假设它包含的是一系列二维数组或者列表(在你的数据中表现为嵌套的列表,如 [[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]]
    • 这是一个 3 行 3 列的二维列表。
  • find_dim 函数会接收到这个二维列表,并计算它的维度:
    • np.size(x, axis=0) 会返回 3(行数)。
    • np.size(x, axis=1) 会返回 3(列数)。
    • 所以,find_dim 的返回值是 (3, 3)

6. 查看 df 的随机样本

df.sample(5)
  • 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.waferMapDimDataFrame 中的列,存储了每个 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].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 种不同的尺寸。因此,为了统一输入的尺寸,必须进行数据转换(特征提取),这种方法将在后续章节中介绍。

### 回答1: 晶圆 wm-811k数据集是一种用于半导体制造和研究的数据集。它收集了大量晶圆的相关信息,包括晶圆的特性和生产过程中的各种参数。 该数据集的收集方式主要通过传感器和控制系统来获取晶圆的相关数据。这些数据包括晶圆的尺寸、形状、材料、厚度等物理特性,以及在制造过程中的温度、压力、气氛、薄膜的均匀性等工艺参数。 通过对晶圆 wm-811k数据集的分析,可以深入研究半导体制造中的各种问题和挑战。例如,可以分析晶圆尺寸与性能之间的关系,以优化晶圆的设计和制造过程。还可以研究不同工艺参数对晶圆品质的影响,从而改进制造流程并提高生产效率。 除此之外,晶圆 wm-811k数据集还可用于开发晶圆制造的机器学习人工智能模型。通过对数据集进行训练和验证,可以建立晶圆制造的模型,以预测晶圆的性能和品质,从而提前发现和解决潜在的问题,减少不良品率并提高产品质量。 总的来说,晶圆 wm-811k数据集是一个有价值的资源,它为半导体制造和研究提供了丰富的数据,可以用于优化制造流程,提高产品质量,并为机器学习人工智能的应用提供支持。 ### 回答2: 晶圆 wm-811k数据集是一个关于晶圆的数据集,它包含了与晶圆生产和测试相关的大量数据。 该数据集中的数据主要包括以下方面: 1. 晶圆生产数据:包括晶圆的制造过程中的工艺参数、设备状态和生产环境等信息。这些数据可以帮助分析师了解晶圆制造过程中的关键参数和影响因素,从而优化生产流程和提高产量和质量。 2. 晶圆测试数据:包括对晶圆进行测试时得到的各种电学、光学和物理性能的测量数据。这些数据可以用于分析晶圆的性能和质量,并判断是否符合质量标准。 3. 晶圆质量数据:包括晶圆的缺陷和瑕疵数据。这些数据可以帮助分析师检测晶圆的质量问题,并定位和解决生产过程中可能存在的缺陷源。 使用晶圆 wm-811k数据集可以进行很多方面的分析和研究,如生产工艺优化、晶圆质量控制、故障分析和预测等。通过对这些数据进行统计、模型建立和机器学习等方法的应用,可以从数据中挖掘出有关晶圆生产和测试的有用信息,以支持决策制定和质量管理。此外,通过对数据集进行可视化和数据挖掘,可以更直观地展现晶圆的生产过程和性能特征,从而帮助分析师更好地理解和分析晶圆相关问题。 总之,晶圆 wm-811k数据集是一个有价值的资源,对于研究和分析晶圆生产和测试具有重要的意义,有助于提高生产效率和产品质量。 ### 回答3: 晶圆WM-811K是一个广泛应用于半导体行业的数据集。晶圆是半导体制造过程中的一种材料,它通常由硅单晶制成,具有特殊的物理和电化学性质。WM-811K是该晶圆样品的编号,用于区分不同种类的晶圆。 晶圆WM-811K数据集是收集、整理和记录关于晶圆WM-811K的一系列数据的集合。这些数据主要用于半导体制造过程中的质量控制和品质管理。数据集中包含了各类晶圆WM-811K的特征信息、生产过程中的控制参数以及质量检测结果等数据。 通过分析晶圆WM-811K数据集,可以得出一些有价值的结论。首先,可以根据这些数据对晶圆WM-811K进行分类和归类,以帮助制造商对不同类别的晶圆进行区分和使用。其次,可以通过对数据集中的控制参数进行分析,找到影响晶圆品质的关键参数,并据此进行生产过程的控制和优化。此外,还可以通过对数据集中的质量检测结果进行统计和分析,找出晶圆WM-811K在不同生产批次中的质量变化规律,为后续的质量改进提供参考。 晶圆WM-811K数据集半导体行业中的应用非常广泛。制造商可以根据数据集中的信息进行生产控制和质量管理,以提高晶圆的品质和产量。同时,研究人员也可以利用该数据集开展相关的数据分析和建模工作,以促进半导体制造技术的发展和创新。 总之,晶圆WM-811K数据集是一个重要的资源,它为半导体制造企业提供了丰富的数据基础,有助于提高产品质量和生产效率。同时,该数据集也为研究人员提供了一个宝贵的研究对象,有助于推动半导体制造技术的进一步发展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值