来杯 高校大数据挑战赛作为3月份唯一一场数模竞赛正式开赛,基于初步选题人数评估,B题选题人数预计将达到本届竞赛的70%以上。因此,本文对B题 新能源电动汽车的故障预警研究 进行详详细介绍
注1:各赛题获奖按照百分比获奖,不会因为选题人数多,获奖比例而降低.
注2:题目给出文献可主要阅读 基于数据驱动的新能源汽车动力电池故障诊断与预警研究 (硕士学位论文,长安大学).硕士,第一、四章节与本问题高度重合,可在阅读完题目后,进行阅读该论文。
B题 新能源电动汽车的故障预警研究
该题涉及时序数据分析、故障诊断与预测建模,主要挑战是从历史行驶数据中提取有用信息,并建立有效的预测模型。具体而言,首先进行必要的数据预处理(数据清洗、数据描述性分析等),基于预处理结果进行数据分析筛选出与故障报警的主要影响因素。基于筛选出的主要特征构建电动汽车故障预警模型,并利用十月份的数据进行实例预测。
问题一:数据预处理、故障报警次数统计与分析
首先,进行数据预处理,首先将全部数据合并到同一文件中以便统一进行处理。通常表格文件合并时,最多只能显示100万行,该数据前九个月合并后一共116 6205行,因此这里比较推荐使用代码合并,具体如下所示
import pandas as pd
import os
# 指定包含CSV文件的文件夹路径
folder_path = r'C:\Users\24404\PycharmProjects\pythonProject1\未来杯\附件'
# 要合并的文件名列表
file_names = ['month_01.csv', 'month_02.csv', 'month_03.csv', 'month_04.csv',
'month_05.csv', 'month_06.csv', 'month_07.csv', 'month_08.csv', 'month_09.csv']
# 创建一个空列表,用于存储每个CSV文件的DataFrame
dfs = []
# 遍历每个文件,读取它并将其添加到列表中
for file in file_names:
file_path = os.path.join(folder_path, file) # 获取完整的文件路径
try:
df = pd.read_csv(file_path, encoding='utf-8') # 尝试使用utf-8编码读取CSV文件
except UnicodeDecodeError: # 如果出现解码错误,尝试使用GBK编码
df = pd.read_csv(file_path, encoding='GBK') # 使用GBK编码读取
dfs.append(df) # 将DataFrame添加到列表中
# 使用pd.concat()将所有DataFrame按行合并
merged_df = pd.concat(dfs, ignore_index=True)
# 可选:将合并后的DataFrame保存为新的CSV文件
merged_df.to_csv(os.path.join(folder_path, 'merged_data.csv'), index=False)
对于合并后的数据,我们需要进行必要的缺失值以及异常值处理。对于缺失值,我们使用代码对合并后的空缺项进行识别,得出并无缺失值。因此,本文的工作主要针对异常值处理,处理分为两部分,一、模型处理;二、人为判定。
我们采用模型判定将边缘值判定为异常数据,对于部分异常数据符合实际情况(急刹车、点刹、等红绿灯等异常数据)结合题目给出取值范围进一步进行确定。
可以使用箱形图(Box plot)或Z-score方法检测异常值。二者主要针对于不同的分布方式数据,对于正态分布数据使用Z-score方法,对于非正态分布数据使用箱形图(Box plot)。对于合并后的数据初步进行判定
正态分布的列: []
非正态分布的列: ['车辆状态', '充电状态', '车速', '累计里程', '总电压', '总电流', 'SOC', 'DC-DC状态', '绝缘电阻', '电池单体电压最高值', '电池单体电压最低值', '最高温度值', '最低温度值', '最高报警等级']
因此,对非正态分布的列使用箱线图进行判定得出结果如下所示
车辆状态 列的异常值数量: 148523
充电状态 列的异常值数量: 127205
车速 列的异常值数量: 2032
累计里程 列的异常值数量: 27
总电压 列的异常值数量: 10
总电流 列的异常值数量: 219886
SOC 列的异常值数量: 0
DC-DC状态 列的异常值数量: 24375
绝缘电阻 列的异常值数量: 70290
电池单体电压最高值 列的异常值数量: 0
电池单体电压最低值 列的异常值数量: 10
最高温度值 列的异常值数量: 21705
最低温度值 列的异常值数量: 16784
最高报警等级 列的异常值数量: 38908
部分检测结果如下所示
基于识别后的结果,需要对数据进行人为判定,结果下述取值范围
各指标取值区间 | |
字段名称 | 说明 |
车速 | 有效值范围:0~2200,最小计量单元:0.1km/h, |
累计里程 | 有效值范围:0~9999999,最小计量单元:0.1km。 |
总电压 | 有效值范围: 0~10000,最小计量单元: 0.1V |
总电流 | 有效值范围: 0~20000,最小计量单元: 0.1A |
SOC | 有效值范围:0~100,最小计量单元:1% |
DC-DC状态 | 1: 工作; 2:断开 |
绝缘电阻 | 有效范围 0~60000,最小计量单元: 1KΩ |
驱动电机控制器温度 | 有效值范围:0~250,最小计量单元:1℃ |
驱动电机转速 | 偏移量 1000rpm,表示-1000rpm~10000rpm |
驱动电机温度 | 有效值范围:0~250,最小计量单元:1℃ |
电机控制器输入电压 | 有效值范围: 0~10000,最小计量单元: 0.1V |
电机控制器直流母线电流 | 有效值范围: 0~20000,最小计量单元: 0.1A |
电池单体电压最高值 | 有效值范围:0~15 000,最小计量单元:0.001V |
电池单体电压最低值 | 有效值范围:0~15 000,最小计量单元:0.001V |
最高温度值 | 有效值范围:0~250,最小计量单元:1℃ |
最低温度值 | 有效值范围:0~250,最小计量单元:1℃ |
利用处理后的数据对故障报警以及用车情况统计
问题二:故障报警的主要影响因素分析
通常情况下,电动汽车的车辆数据、电机数据以及电池数据内部相 互之间可能存在某种关联性,数据中包含有 0-3 级别的故障报警指标,请根据附件中 1-9 月的汽车数据,选择合适的大数据方法找出造成电动汽车不同级别故障报警的主要影响因素。
该问题最简单有效的做法就是进行相关性分析,绘制矩阵热力图进行描述分析选择相关性较好的几个指标。
较为复杂的做法有
- 计算每个特征与目标变量(最高报警等级)之间的互信息,评估特征与目标之间的非线性关系。
- 使用 LASSO 回归(带 L1 正则化的线性回归)来选择重要特征。通过回归系数的大小来评估特征的重要性,并可视化回归系数。
- 使用决策树模型计算每个特征的重要性。
- 使用随机森林模型计算每个特征的重要性。
- 其他各种方法等
上述方法部分结果如下所示
最高报警等级 1.000000
SOC 0.005544
电池单体电压最高值 0.003824
总电压 0.003671
DC-DC状态 0.003520
绝缘电阻 0.003140
电池单体电压最低值 0.003089
车辆状态 0.002687
充电状态 0.000825
车速 0.000120
总电流 -0.002462
最高温度值 -0.057690
最低温度值 -0.057840
累计里程 -0.091469
问题三:构建电动汽车故障预警模型
对于该问题,构建模型分类模型对不同时间下的故障进行分类使用,分类0.1.2.3。
分类模型:如逻辑回归、支持向量机(SVM)、决策树、随机森林等,用于预测故障报警的等级。根据问题二中的分析结果,选择影响故障报警的主要特征
模型结果:
- 使用交叉验证(如K-fold交叉验证)来评估模型的泛化能力,并通过网格搜索或随机搜索调优超参数。
- 性能评价:、常见的评估指标有准确率(Accuracy)、精确率(Precision)、召回率(Recall)、F1值、ROC曲线等。对于回归问题,常见的评估指标有均方误差(MSE)、均方根误差(RMSE)等。
问题四:第 10 个月故障预测
根据问题三中建立的故障预警模型,使用附件中1-9月的数据进行训练,并将训练好的模型应用于第10个月的缺失数据,预测其故障报警等级。
预测过程:输入第10个月的数据(不含故障报警信息),通过模型计算每个时间点可能发生的故障报警等级。
问题五:车辆使用建议
基于前面问题的分析,结合充电、故障检修、用车规律等,给出车辆的使用建议。可以从以下几个方面进行总结:(虚假的,使用ai自动生成,实际应该结合问题二三四问的结果进行参考)
充电建议:如避免过度充电,定期检查充电设备的状态,避免长时间低电量使用。
故障预防与检修建议:定期检查电池、电机及控制器的温度、压力等,特别关注过充、过放电等问题。
用车习惯建议:驾驶时避免急加速、急刹车,保持平稳驾驶,减少对电池的损害。