汽车网站管理系统,东莞网络营销外包有哪些,如何绑定网站域名解析,软件开发文档管理系统前面我们已经通过两篇文章#xff0c;一起熟悉了WM-811K Wafermap 数据集#xff0c;并对其中的一些数据进行了调用#xff0c;生成了一些统计信息和图片。今天我们接着继续往前走。
半导体数据分析#xff1a; 玩转WM-811K Wafermap 数据集#xff08;二#xff09; 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}
dfdf.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, labelpattern, labelnon-pattern]
ax1.pie(no_wafers, explodeexplode, labelslabels, colorscolors, autopct%1.1f%%, shadowTrue, startangle140)#条形图显示不同故障类型的分布
uni_pattern np.unique(df_withpattern.failureNum, return_countsTrue)
labels2 [, Center, Donut, Edge-Loc, Edge-Ring, Loc, Random, Scratch, Near-full]ax2.bar(uni_pattern[0], uni_pattern[1] / df_withpattern.shape[0], colorgold, aligncenter, alpha0.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(orderC)
for i in range(100):img df_withpattern.waferMap[i]ax[i].imshow(img)ax[i].set_title(df_withpattern.failureType[i][0][0], fontsize10)ax[i].set_xlabel(df_withpattern.index[i], fontsize8)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(orderC)for j in [k]:img df_withpattern.waferMap[df_withpattern.failureTypelabels2[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], fontsize10)ax[i].set_xlabel(df_withpattern.index[img.index[i]], fontsize10)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(orderC)
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],fontsize24)ax[i].set_xticks([])ax[i].set_yticks([])
plt.tight_layout()
plt.show() 经过上面的可视化我们进一步加深了对这个数据集的了解后面我们将对数据进行转换通过使用缩放、属性分解和属性聚合的工程特征转换为机器学习准备的预处理数据。