单位 9 / 11

使用 Python 进行汽车数据分析:端到端

收益:

  • 能够建立可重复的分析工作流程,使用 pandas 加载和清理遥测、测试和生产数据
  • 能够逐行理解和验证输出,同时接收来自人工智能的代码、属性和可视化帮助
  • 能够审核分析结果的单位一致性、数据泄漏和再现性

在之前的单位中,我们像“顾问”一样使用人工智能。在本单元中,我们更进一步,建立了一个使用 Python 亲手分析汽车数据的工作流程。我们的目标不是让你成为一名软件开发人员;而是让你成为一名软件开发人员。就是要培养一个能够逐行理解和验证代码的工程师,同时获得AI的代码帮助。因为人工智能生成的代码可能是错误的,就像人工智能生成的文本一样;可能会混淆体积、泄漏数据、居中错误的列。在不理解代码的情况下运行代码就像发布未签名的报告。

为什么?因为它是数据分析领域事实上的标准:您可以使用 pandas(表格数据)、numpy(数值处理)、matplotlib(绘图)和 scikit-learn(机器学习)库轻松处理遥测、测试和生产数据。

可重复分析的六个步骤

可靠的分析始终遵循相同的框架:

  1. 加载:从文件中读取数据。
  2. 检查:维度、列、数据类型、缺失值。
  3. 干净:缺失/离群值、单位、时间戳校正。
  4. 提取特征:导出有意义的变量。
  5. 分析/模型:统计、可视化或模型。
  6. 验证和报告:结果提供、体积/泄漏检查、记录。
提示:当向人工智能询问代码时,请说“注释掉你在每一步所做的事情并写下你的假设。”因此,您可以在阅读代码时对其进行验证。

分步示例:遥测分析

以下代码加载 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查找可疑值。
  • [ ] 我按时间分割时间序列(不打乱)。
  • [ ] 我标记了存在数据泄露风险的属性。
  • [ ] 我记录了每列的单位并明确地编写了转换。