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()

运行与验证

  1. 保存为 yield_by_lot.py 后执行 python yield_by_lot.py。
  2. 终端应打印三行批次汇总,其中 yield_rate 分别为 L01=0.75、L02=0.25、L03=0.75(由给定输入唯一确定)。
  3. 当前目录生成 yield_by_lot.png,柱高与上述良率一致,L02 明显低于 L01、L03,即判定通过。

关键点

groupby("lot_id") 按批次聚合,count 得该批晶圆总数、sum 得通过数,两者相除即良率。若真实数据中 pass 为布尔或字符串,先统一为 0/1 再聚合。