用Python做半导体良品率预测——数据清洗踩坑记录【AI辅助学习】
我最近在学AI交叉机器学习,很早之前自己看视频学过一点点python,
- 我在github上下载了半导体良率检测项目
- 目前都不是很懂,现在正在一步步debug数据清洗模块,
- 目前遇到的问题就是代码都看不太明白,很茫然,所以现在正在用VS code先一行行看代码,和模块;
- 首先是将项目下载下来以后,用VS code打开,因为这个项目要先进行数据清洗,,所以在项目中先打开找到Notebooks文件夹,找到ipynb这个文件,选择01_data_explration.ipynb,一个个模块进行运行,了解他什么意思,

这个模块做了5件事:1告诉python去哪里找文件,2导入需要使用的工具库,3导入这个项目自己写的工具,4做一些显示和风格设置,5固定随机数种子
如果说前一步导入 Pandas 和 Seaborn 是请来了“会计师”和“插画师”,那么这一段代码就是给实验室调整灯光、布置画板、定下工作规矩,好让你在后续 Debug 观察数据时,眼睛最舒服、信息最直观。
以下是每一行代码的通俗大白话解释:
1. warnings.filterwarnings('ignore') —— “清净世界”
大白话解释:跟 Python 系统大喊一声:“闭嘴,没报错就别烦我!”
为什么要它?:Python 的各种工具包经常升级。如果你的代码用了一个旧版本的画图函数,系统就会在代码下面疯狂弹出一大段黄色或红色的提示文字(警告你以后这个函数可能不能用了)。这些文字不是报错,代码其实跑通了,但它会严重破坏你 Notebook 的整洁度。
Debug 意图:把它设为 ignore(忽略),就可以把这些“唠叨”全部隐藏,让你的屏幕只留下干净的输出结果。
2. plt.style.use('seaborn-v0_8-darkgrid') —— “学术风背景板”
大白话解释:给你的画布贴上一张“带灰色网格线”的现代感壁纸。
为什么要它?:Matplotlib 默认画出来的图背景是纯白色的,没有任何参考线,在看高精度传感器数据时,你很难一眼用肉眼对齐 Y 轴的数值。darkgrid(深色网格)会给图表加上淡淡的灰色背景和白色网格线。
Debug 意图:有了这些网格线,后续你在观察传感器数据(比如压力、温度)的波动时,能非常直观地看清它到底是在哪个数值区间跳变。
3. sns.set_palette("husl") —— “多色多调配色盘”
大白话解释:把画笔的颜色换成一套科学、柔和、好区分的彩色调色盘。
为什么要它?:我们后面可能要在同一张图里画出好几个传感器的趋势,或者对比好品和坏品的分布。如果颜色太接近(比如都是深蓝、浅蓝),眼睛根本分不清。husl 是数据可视化里非常著名的一套方案,它保证了生成的每一种颜色在视觉上的“亮度”是均匀的,而且颜色之间反差足够大。
Debug 意图:防止“视觉疲劳”,让你一眼就能把不同的特征或类别区分开。
4. pd.set_option('display.max_columns', None) —— “拒绝中间省略号”
大白话解释:“有多少列,你就给我完整展示多少列,绝对不许偷懒打省略号!”
为什么要它?:这是针对半导体数据最关键的一行设置。Pandas 默认非常抠门,如果你的表格超过 20 列,它在中间就会显示成 ...(省略号)。但我们的半导体数据集足足有 590 列!如果不加这一行,你打印数据时,中间 500 多个传感器的数据你连看都看不到。
Debug 意图:把最大列数设为 None(不设限制),这样当你用鼠标向右滚动屏幕时,就能从 Feature_0 一直畅通无阻地看到 Feature_589,方便全面排查。
5. pd.set_option('display.max_rows', 100) —— “限高100层的折叠屏”
大白话解释:“如果表格太长,最多只许显示 100 行,再多就折叠起来。”
为什么要它?:我们的晶圆样本有 1567 行。如果你不小心打错了代码,把整个表格打印出来,你的浏览器网页会瞬间被撑开 1500 多行,你需要疯狂滚动鼠标好几屏才能滑过去,不仅卡顿,还严重影响阅读。
Debug 意图:限高 100 行,既能让你看到足够多的数据样本,又保证了笔记本电脑的屏幕不会被一长串数字“刷屏”。
6. %matplotlib inline —— “原地画图魔术”
大白话解释:“画出来的图就给我老老实实嵌在代码正下方,不许跳出新窗口!”
为什么要它?:在老版本的 Jupyter 或者是某些传统的编程软件里,运行画图代码后,电脑会突然弹出一个独立的、晃晃悠悠的软件新窗口来秀这张图。这非常打断思路。
Debug 意图:加上这行魔术命令(带有 % 的叫魔术命令),所有的统计图、热力图都会像插图一样,直接紧贴在催生它的那段代码屁股后面。你往下滚动鼠标就能边看代码边看图。
RANDOM_STATE = 42np.random.seed(RANDOM_STATE)
做了什么: 固定随机数。
为什么这很重要: 机器学习里很多步骤有随机性(比如随机森林随机选特征)。固定种子之后,你今天跑和明天跑结果完全一样,别人下载你代码跑也一样。42是程序员传统,没有特殊含义。
为什么固定随机数,是干什么的不理解,
答:“固定随机数种子”是很多人刚接触编程和机器学习时,最觉得反直觉、最难理解的一个概念。因为在日常生活中,“随机”就意味着彻底的不可预测,怎么还能被“固定”呢?
别慌,我们用一个你非常熟悉的物理实验和单机游戏的例子,瞬间就能彻底想通。
1. 终极真相:电脑的“随机”其实是假的!
首先,我们要明白一个计算机底层的秘密:电脑是无法凭空产生真正随机的数字的。
电脑产生随机数,其实是靠一个复杂的数学公式(比如一具超级复杂的数学粉碎机)。
如果你不给它任何设定,它默认会偷偷把“当前电脑系统的时间(精确到毫秒)”作为初始数字塞进粉碎机。
因为你每一毫秒的时间都在变,所以每次粉碎出来的数字看起来都不一样。这在写游戏(比如抽卡、掉装备)时很好用。
而代码里的 np.random.seed(42),就是跟电脑说:“别用系统时间了!今天我就把 42 这个数字当做初始输入(种子)塞进粉碎机!”
2. 为什么要固定它?(两个生动的比喻)
比喻一:单机游戏的“关卡种子(Seed)”
如果你玩过《我的世界》(Minecraft)或者某些肉鸽(Roguelike)游戏,你一定知道“地图种子”。
游戏里的世界是随机生成的(哪里有山,哪里有水,哪里有金矿)。
如果你和朋友都输入了一模一样的种子数字 42,那么你们两个人进入游戏后,出生点的左边一定会有一头猪,右边一定会有一座山。不管你们重开多少次,地形一模一样。
比喻二:材料学实验的“控制变量”
你在做物化实验或者模拟晶体结构时,如果每次实验的温度、压力、升温速率都在悄悄变化,你最后测出来的电导率肯定每次都不一样,你就无法判断到底是哪一个配方真的起作用了。
在机器学习里,算法本身也是要“做实验”的。比如“随机森林(Random Forest)”算法,它在训练时会:
随机挑选 1000 个晶圆样本中的一部分。
随机挑选 590 个传感器特征中的一部分去建树。
如果不固定种子:你点一次播放键,算法随机抓了一批特征,准确率是 91.2%;你再点一次,它又随机抓了另一批特征,准确率变成了 89.5%。
致命问题:这时候如果你修改了一行清洗数据的代码,发现准确率变动了。你根本分不清:到底是因为你代码改得好?还是因为算法这次运气好,随机抓到了一批好特征?
3. 固定种子后,到底发生了什么?
当你写下这两行代码:
Python
RANDOM_STATE = 42
np.random.seed(RANDOM_STATE)
确定实验环境:你把算法的随机轨迹彻底“冻结”了。
今天和明天一样:你今天下午跑代码,随机森林第一步抓取的是 Feature_3 和 Feature_7;你明天早上来跑,它抓取的依然是 Feature_3 和 Feature_7。模型输出的准确率会死死固定在(比如)90.54%,小数点后六位都不会变。
你和作者一样:GitHub 的作者在几年前跑出了这个结果,你今天在你的电脑上按下播放键,只要数据和种子一样,你也能跑出一模一样的数字。
这就是数据科学里的 “可重复性(Reproducibility)”。
--------------------------------------------------------------------------------------
1. import pandas as pd —— 为什么是处理表格数据的?
为什么能处理表格?:pandas 的名字来源于 Panel Data(面板数据)。它是 Python 世界里的 “Excel 终结者”。它在 Python 内存中专门创造了一种叫 DataFrame(数据框)的结构,这种结构和 Excel 一模一样,有行、有列、有表头、有索引。
它能做什么?:Excel 能做的(筛选、排序、交叉表、VLOOKUP 拼接),它都能做,而且能轻松处理几十万行、几百列(比如你现在这个 590 列的半导体数据集)的大表格,Excel 遇到这种数据早就卡死了。
后缀 as pd:只是个缩写(别名),后面写代码时用 pd.read_csv() 代替 pandas.read_csv(),少敲几次键盘。
2. import numpy as np —— 为什么是数学计算的?
为什么能做数学计算?:numpy 的全称是 Numerical Python(数值 Python)。Python 自带的列表(List)计算速度极慢。而 NumPy 是用 C 语言底层写的,它创造了 “多维矩阵(Array)”。
它能做什么?:在材料模拟、图像处理或机器学习中,数据都是以矩阵形式存在的。NumPy 可以让你对一个包含 100 万个数字的矩阵进行“瞬间同时乘以 2”的操作(叫做向量化计算),速度比普通循环快几百倍。
3. import matplotlib.pyplot as plt —— 为什么是画图的?
为什么能画图?:matplotlib 的名字致敬了科学界著名的商业软件 MATLAB,pyplot 意思是 Python Plot(Python 绘图)。它是 Python 绘图界的老祖宗。
它能做什么?:它就像一块数字画布。你可以用它画出折线图、散点图、柱状图。你在这个项目里看到的每一张图,底层其实都是由它把一个一个像素点描绘出来的。
4. import seaborn as sns —— 为什么是更好看的图?
为什么更好看?:matplotlib 虽然强大,但默认画出来的图样式比较复古、不好看,且写起来很复杂。seaborn 是 建立在 matplotlib 基础之上的“高级皮肤”。
它能做什么?:它内置了非常符合现代学术论文和商业报告审美的配色方案。更厉害的是,它专门为数据科学设计,你只需要传给它一个表格,它就能自动帮你画出复杂的相关性热力图(Heatmap)或分布密度图,省去了你自己调颜色的麻烦。
5. from scipy import stats —— 为什么是统计分析的?
为什么能做统计?:scipy 叫 Scientific Python(科学计算 Python),而 stats 就是 Statistics(统计学) 模块。
它能做什么?:做科研和数据分析离不开统计检验。比如,你想知道“故障晶 Wafer 的某个传感器均值,是否显著高于合格晶 Wafer?”(这需要做 t 检验),或者你想计算数据的 Z-Score(标准分数) 来揪出离群点,都是调用这个模块。
6. from scipy.cluster import hierarchy —— 为什么是聚类分析的?
为什么能做聚类?:cluster 意思是聚类(物以类聚),hierarchy 意思是层次/树状结构。
它能做什么?:我们有 590 个传感器,我们想知道“哪些传感器测量的其实是同一道工序的不同参数?”。这个工具可以计算传感器之间的“亲疏远近”,然后画出一棵 “家族树”(Dendrogram 谱系图)。通过看这棵树,你就能把高度相似的传感器归为一类,从而实现降维。
7. import warnings —— 为什么是控制警告信息的?
为什么能控制警告?:这是 Python 自带的系统级警告管理器。
它能做什么?:Python 库经常更新,有时候你用的某个函数太老了,系统就会疯狂弹窗提示:“注意:这个功能在下个版本可能要删了!”(这叫 DeprecationWarning)。
在项目里的作用:作者在下面写了 warnings.filterwarnings('ignore'),意思是“闭嘴,不要烦我”。直接忽略这些不影响运行的唠叨,让你的 Jupyter Notebook 界面保持绝对的干净。
----------------------------------------------------------------------------------------------------------------------------
上面的代码运行后的结果,JUPYTER VARIABLES 面板,就是项目的 “实时内存监视器”1. 核心数据源(你的原材料)
features (1567, 590):这还是你的原始数据,包含 1567 块晶圆、590 个传感器。
labels (1567,) 和 timestamps (1567,):对应的合格/故障标签以及生产时间戳。
2. 核心诊断成果(你刚刚跑出来的体检报告)
注意看新出现的这三个变量,它们是刚才“深度扫描”代码的结晶:
feature_stats (590, 10):
解读:它一共有 590 行(每个传感器一行),10 列指标(包含我们刚才说的均值、方差、缺失率、零值率等)。这就是 590 个传感器的整体综合体检表。
missing_analysis (590, 3):
解读:专门针对缺失值的分析表。包含三列:传感器名字、缺失个数、缺失百分比。
missing_cats (dict, 长度为 4):
解读:这是最精彩的部分!往右看它的 Value:
'No Missing': 52 —— 只有 52 个传感器是完美的。
'Low (0-10%)': 486 —— 绝大多数传感器(486个)有轻微缺失。
'Medium (10-40%)'
cat 和 count:看最上面两行,cat 当前停在 'High (>40%)',对应的 count 是 32。这意味着:有 32 个传感器是缺失超过 40% 的“高危特征”。

更多推荐



所有评论(0)