第二章 测试数据分析基础:数据采集方法、数据清洗与标准化
各位工程师朋友,大家好。我是你们的老朋友,一个在芯片测试行业摸爬滚打了十几年的老兵。今天咱们聊聊测试数据分析的基础。说白了,就是拿到一堆传感器数据后,怎么把它变成能用的、靠谱的信息。
我见过太多人,一上来就搞什么高大上的算法,结果数据本身都是脏的、乱的。你想想看,垃圾数据进去,再牛的模型也只能输出垃圾结果。所以,这一章咱们把地基打牢。
2.1 数据采集方法:源头决定质量
数据采集,听起来简单,不就是把传感器读数记下来吗?其实门道不少。我个人的习惯是,在项目开始前,先花半天时间把采集方案想清楚。这比后面花几天去补数据要划算得多。
2.1.1 常见的采集方式
- 实时采集:通过I2C、SPI等接口,直接读取传感器寄存器。适合高速、连续监测的场景。
- 批量采集:先把数据存到传感器内部的FIFO里,然后一次性读出来。省电,适合物联网设备。
- 触发采集:设定一个阈值,比如加速度超过2g时才开始记录。适合捕捉异常事件。
2.1.2 采样率与分辨率的选择
采样率不是越高越好。你想想看,一个室温传感器,每秒采1000次有意义吗?浪费存储和功耗。我一般遵循“奈奎斯特定理”的工程简化版:采样率至少是信号最高频率的5倍,留点余量。
| 传感器类型 | 典型信号频率 | 推荐采样率 |
|---|---|---|
| 温度传感器 | 0.01 Hz | 1 Hz |
| 加速度计 | 50 Hz | 250 Hz |
| 麦克风 | 4 kHz | 20 kHz |
2.2 数据清洗:把脏数据挡在门外
数据采集回来,别急着分析。先看看有没有“坏蛋”混进来。数据清洗,说白了就是三件事:处理缺失值、干掉异常值、统一格式。
2.2.1 缺失值处理
为什么会缺失?可能是传感器没响应,也可能是通信丢包了。我遇到过最离谱的一次,是焊点虚焊,导致数据间歇性丢失。
处理缺失值,常用的方法有几种:
- 直接删除:如果缺失比例很小(比如<5%),直接删掉那几行数据,简单粗暴。
- 填充法:用均值、中位数或者前一个有效值填充。我个人习惯用中位数,因为它不受极端值影响。
- 插值法:用前后数据拟合出一个值。适合变化缓慢的信号,比如温度。
2.2.2 异常值处理
异常值,就是那些明显偏离正常范围的数据点。比如一个室温传感器,突然读出来150度,那肯定是出问题了。
怎么判断异常?我常用两种方法:
- 3σ原则:数据在均值±3倍标准差之外,就算异常。适合正态分布的数据。
- 箱线图法:用四分位数来界定。超出上下边缘的点就是异常。这个方法更稳健,不受极端值影响。
# Python示例:用3σ原则检测异常值
import numpy as np
data = np.array([25.1, 25.3, 25.0, 150.2, 24.9, 25.2])
mean = np.mean(data)
std = np.std(data)
# 定义上下限
lower = mean - 3 * std
upper = mean + 3 * std
# 找出异常值
anomalies = data[(data < lower) | (data > upper)]
print("异常值:", anomalies) # 输出:[150.2]
2.3 数据标准化与归一化:让数据站在同一起跑线
不同传感器的量纲不一样。比如压力传感器读数是0-1000 kPa,温度传感器是-40到85度。直接放一起分析,压力数据会把温度数据“吃掉”。
所以,我们需要把数据缩放到一个统一的尺度。常用的方法有两种:
2.3.1 归一化(Min-Max Scaling)
把数据压缩到[0, 1]区间。公式很简单:
X_norm = (X - X_min) / (X_max - X_min)
适合数据分布比较均匀的情况。但有个缺点:如果数据里有极端值,归一化后大部分数据会被挤到很小的区间里。
2.3.2 标准化(Z-score Normalization)
把数据变成均值为0、标准差为1的分布。公式:
X_std = (X - mean) / std
这个更常用。它不受极端值影响,而且保留了数据的分布形状。我个人的习惯是,只要不是特别要求,一律用标准化。
2.4 本章知识体系
下面这张图,是我自己总结的测试数据分析基础流程。你可以把它当作一个检查清单,每次做分析前过一遍。
嗯,这一章的内容就到这里。数据采集、清洗、标准化,这三步看起来基础,但做好了,后面的分析工作会顺畅很多。我见过太多项目,因为数据预处理没做好,导致整个分析结论都是错的。希望你能重视起来。