收益:
- 能够建立可重复的分析工作流程,使用 pandas 加载和清理遥测、测试和生产数据
- 能够逐行理解和验证输出,同时接收来自人工智能的代码、属性和可视化帮助
- 能够审核分析结果的单位一致性、数据泄漏和再现性
在之前的单位中,我们像“顾问”一样使用人工智能。在本单元中,我们更进一步,建立了一个使用 Python 亲手分析汽车数据的工作流程。我们的目标不是让你成为一名软件开发人员;而是让你成为一名软件开发人员。就是要培养一个能够逐行理解和验证代码的工程师,同时获得AI的代码帮助。因为人工智能生成的代码可能是错误的,就像人工智能生成的文本一样;可能会混淆体积、泄漏数据、居中错误的列。在不理解代码的情况下运行代码就像发布未签名的报告。
为什么?因为它是数据分析领域事实上的标准:您可以使用 pandas(表格数据)、numpy(数值处理)、matplotlib(绘图)和 scikit-learn(机器学习)库轻松处理遥测、测试和生产数据。
可重复分析的六个步骤
可靠的分析始终遵循相同的框架:
- 加载:从文件中读取数据。
- 检查:维度、列、数据类型、缺失值。
- 干净:缺失/离群值、单位、时间戳校正。
- 提取特征:导出有意义的变量。
- 分析/模型:统计、可视化或模型。
- 验证和报告:结果提供、体积/泄漏检查、记录。
提示:当向人工智能询问代码时,请说“注释掉你在每一步所做的事情并写下你的假设。”因此,您可以在阅读代码时对其进行验证。
分步示例:遥测分析
以下代码加载 CAN/遥测记录并进行基本检查。 (注意:在运行代码之前,请确保您理解这些代码;列名称根据您的数据而有所不同。)
import pandas as pd# 1) 加载:半点 CSV,第一列 timestampdf = pd.read_csv("telemetry.csv", parse_dates=["time"])# 2) Checkprint(df.shape) # 多少行,多少列 print(df.dtypes) # 每列的类型(数字或文本) print(df.isna().sum()) # 每列缺失值的数量columnprint(df.describe()) # 汇总统计数据:最小值、最大值、平均值
describe() 输出是您验证的第一个机会:如果发动机转速最大值为 45,000 rpm(典型客用发动机约为 7,000 rpm),则存在单元或传感器故障。
审计步骤中最常用的 pandas 命令及其作用:
命令
什么是
它证实了什么?
df.形状
行/列数
是预期的尺寸吗?
df.dtypes
列类型
数字栏变成文本了吗?
df.isna().sum()
缺失值计数
有多少空间?
df.describe()
最小值/最大值/平均值
物理上合理吗?
df.duplicated().sum()
重复行
有双重注册吗?
# 3) Clear:标记物理上不可能的值
注意:不要立即删除异常值;首先了解为什么它是异常值。这是真实事件(突然加热)还是传感器故障?盲目删除可能会掩盖真正的错误。
# 4) 提取特征:温升率(导数)df = df.sort_values("time")df["sic_increase_speed"] = df["motor_sic"].diff() / df["time"].diff().dt.total_seconds()# 5) 简单可视化import matplotlib.pyplot as pltplt.plot(df["time"], df["motor_sic"])plt.xlabel("时间"); plt.ylabel("发动机温度(℃)")plt.title("发动机温度历程")plt.show()
Python中防止数据泄露
构建预测模型时最危险的错误是数据泄漏(单元 5):当模型看到预测时无法知道的信息时。在时间序列中避免这种情况的黄金法则:用过去训练,用未来测试——不要随机洗牌。
from sklearn.model_selection import train_test_split# FALSE: 随机分割时间序列会泄露未来# df[df["time"] > Threshold] # 最后 20% 的未来
注意:train_test_split 默认情况下会打乱数据(shuffle=True)。在时间序列中,这将未来与教育混淆并产生错误的高分。如果人工智能在其生成的代码中这样做了,请务必修复它。
单位一致性:无声杀手
汽车领域最隐蔽的错误是单位错误:km/h 换算为 m/s、Nm 换算为 lb-ft、bar 换算为 kPa、°C 换算为 K。在分析中保留每列单位的字典并写下换算结果显然可以挽救生命。
# 显式记录单位 = {"speed": "km/h", "motor_sic": "C", "Pressure": "bar"}# 必要时显式转换 (km/h -> m/s)df["speed_ms"] = df["speed"] / 3.6
小型案例研究
情况 1 - 描述()捕获错误。分析师运行人工智能的代码并做出范围估计;结果高得离谱。当我们查看describe()输出时,我们发现在某些行中输入的电池容量以Wh为单位,而在其他行中以kWh为单位输入(相差1000倍)。当该单元采用统一类型时,结果会有所改善。结论:简单的汇总统计可以避免错误的预测。
案例 2 - 混淆陷阱。实习生的制动器磨损模型在测试集上的准确率为 98%。检查代码时,可以看到 train_test_split(shuffle=True) 和时间序列是混合的,这意味着未来的点会泄漏到训练中。当除以时间时,准确度会下降到 80%,但现在已经很现实了。结论:仅仅因为AI代码有效,它就不对;人类发现了泄漏。
案例 3 - 了解异常值。在耐久性记录中,AI代码会自动删除异常应变值。工程师查看删除的点;这些正是测试感兴趣的裂纹萌生时刻。删除被删除,违规行为被单独审查。结果:在“清理”下可以删除真实信号;质疑每一步。
提示模板
模板 1 - 请求代码(带说明):
角色:你是一名Python数据分析师导师。任务:编写加载和检查遥测CSV的代码。上下文:列:时间、速度(km/h)、engine_sic(C)、转数(rpm)。约束:注释掉每一行;解释进行了哪些检查以及原因;添加物理上不可能的值检查;默默地删除任何内容。输出:注释代码+我应该查看哪个输出以及为什么。
模板 2 - 泄漏检查:
角色:您是一名机器学习代码审查员。任务:检查以下训练/测试拆分代码是否存在数据泄漏。上下文:这是一个时间序列(车辆遥测)。约束:如果存在随机洗牌则发出警告;建议按时间划分并证明其合理性。输出:结果+更正的代码+解释。
模板 3 - 单位验证:
角色:您是数据质量审核员。任务:建议检查以查找 DataFrame 中的单位不一致情况。上下文:某些行中的容量可能为 kWh,其他行中的容量可能为 Wh。输出:检查代码 + 如何查找可疑模式。
模板 4 - 可视化 + 评论:
角色:您是数据可视化专家。任务:编写绘制发动机温度曲线和增长率的代码。约束:用单位标记轴;直观地标记异常;在解释图表时不要声称有明确的错误。输出:代码+在图中查找的内容。
弱提示/强提示
弱提示:
使用这些数据构建模型。
不清楚哪个目标、哪个舱室、哪个验证;人工智能可以输出扰乱的、有漏洞的、单元盲的代码。
强力提示:
角色:您是一名 Python ML 导师。任务:编写初始工作流程来预测刹车片磨损并演示验证陷阱。背景:时间序列遥测;目标:剩余焊盘厚度。约束:按时间分割时间序列(无洗牌);标记有数据泄露风险的属性;记录单元;解释每个步骤;写下结果进入现场之前需要进行哪些检查。输出:注释代码+验证清单。
常见错误
- 在不理解代码的情况下运行代码。 AI代码也可能有错误;逐行阅读。
- 混合时间序列。 shuffle=True 会泄漏未来并产生假分数。
- 盲目删除异常值。可以清除实际信号(故障发生)。
- 不记录单位。 km/h 与 m/s、Wh 与 kWh 等误差悄然增长。
- 跳过描述()/检查步骤。大多数错误出现在第一个汇总统计中。
综上所述
- Python(pandas、numpy、matplotlib、scikit-learn)是汽车数据分析的事实标准。
- 可重复分析:加载、检查、清理、特征分析、验证和报告。
- 逐行理解和验证AI生成的代码势在必行;仅仅因为它有效并不意味着它是正确的。
- 保持时间序列中过去/未来的区别;随机洗牌会导致数据泄漏。
- 单位一致性和异常值解释是沉默但关键的验证点。
应用任务
获取一个小数据集(真实或合成遥测)。 (1) 按照六步框架,使用模板1生成加载和控制代码,并确认您理解每一行。 (2) 在describe()输出中找到至少一个可疑值并调查原因。 (3) 在预测任务中,对训练/测试分割进行计时,并使用模板 2 检查泄漏风险。 (4) 在字典中记录您使用的每列的单位。
清单
- [ ] 我用六步框架建立了分析。
- [ ] 我逐行阅读并理解了AI生成的代码。
- [ ] 我用describe()/audit查找可疑值。
- [ ] 我按时间分割时间序列(不打乱)。
- [ ] 我标记了存在数据泄露风险的属性。
- [ ] 我记录了每列的单位并明确地编写了转换。