3. 按批次计算良率并可视化
任务说明
给定一份晶圆测试明细(每行一片晶圆,含批次号与通过/失败标记),按批次号分组计算每批良率(通过数 / 该批总数),并用柱状图对比各批次良率差异。
环境与依赖
pip install pandas matplotlib
完整实现
import pandas as pd
import matplotlib.pyplot as plt
# 1. 构造最小可复现的测试明细:每行一片晶圆
df = pd.DataFrame({
"lot_id": ["L01", "L01", "L01", "L01",
"L02", "L02", "L02", "L02",
"L03", "L03", "L03", "L03"],
"wafer_id": ["W1", "W2", "W3", "W4",
"W1", "W2", "W3", "W4",
"W1", "W2", "W3", "W4"],
"pass": [1, 1, 0, 1,
1, 0, 0, 0,
1, 1, 1, 0],
})
# 2. 按批次分组计算良率
yield_by_lot = (
df.groupby("lot_id")["pass"]
.agg(total="count", passed="sum")
.assign(yield_rate=lambda x: x["passed"] / x["total"])
.reset_index()
)
print(yield_by_lot)
# 3. 柱状图展示批次间良率差异
fig, ax = plt.subplots(figsize=(6, 4))
bars = ax.bar(yield_by_lot["lot_id"], yield_by_lot["yield_rate"], color="#4C78A8")
ax.set_xlabel("Lot ID")
ax.set_ylabel("Yield Rate")
ax.set_title("Yield by Lot")
ax.set_ylim(0, 1.0)
ax.bar_label(bars, fmt="%.2f")
plt.tight_layout()
plt.savefig("yield_by_lot.png", dpi=120)
plt.show()
运行与验证
- 保存为
yield_by_lot.py后执行python yield_by_lot.py。 - 终端应打印三行批次汇总,其中
yield_rate分别为 L01=0.75、L02=0.25、L03=0.75(由给定输入唯一确定)。 - 当前目录生成
yield_by_lot.png,柱高与上述良率一致,L02 明显低于 L01、L03,即判定通过。
关键点
groupby("lot_id") 按批次聚合,count 得该批晶圆总数、sum 得通过数,两者相除即良率。若真实数据中 pass 为布尔或字符串,先统一为 0/1 再聚合。