C-MAPSS数据集探索性分析

2024-06-10 18:44
文章标签 分析 数据 探索性 mapss

本文主要是介绍C-MAPSS数据集探索性分析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

实验数据为商用模块化航空推进系统仿真C-MAPSS数据集,该数据集为NASA格林中心为2008年第一届预测与健康管理国际会议(PHM08)竞赛提供的引擎性能退化模拟数据集,数据集整体信息如下所示:

图片

涡扇发动机仿真模拟模型如下图所示。

图片

仿真建模主要针对发动机气路部分,主要包含风扇扇叶(Fan)、低压压气机(LPC)、高压压气机(HPC)、燃烧室(Combustor)、低压转子(N1)、高压转子(N2)、高压涡轮(HPT)、低压涡轮(LPT)、尾喷管(Nozzle)。数据集是涡扇发动机性能组件在不同时刻的监测数据,因此数据具有时序性且反映出涡扇发动机性能的退化。

数据集划分出四个子数据集,不同的子数据集发动机处在不同的运行工况且故障模式不一致。子数据集中均包含对应的训练数据集、预测数据集和预测结果标签数据集。在同一训练数据集中,所有涡扇发动机机组是同一类型,但每台涡扇发动机存在初始磨损和制造安装误差;每个机组的传感器监测数据是完整,反映了涡扇发动机从初始到故障的所有生命周期。而测试集是同一涡扇发动机生命周期的片段化数据。训练数据集和测试数据集都是26列,其中第一列是涡扇发动机机组编号,第二列是某一机组发动机运行的周期数,第三列到第五列是三种输入参数配置即操作数,以及余下21列为传感器监测的涡扇发动机指标如下所示。

图片

图片

为充分提取所有监测数据中的退化特征,选择出能够体现发动机退化趋势的传感器数据。以编号为FD001的训练数据集为例,给出部分传感器数据变化曲线如下图所示。

图片

编号为FD001的训练数据集中存在7组传感器采集的数据是恒定的,并不随涡扇发动机使用时间的增加而产生变化;14组传感器采集的数据与涡扇发动机的性能变化相关,传感器具体名称和符号如下所示。

图片

图片

from google.colab import drivedrive.mount('/content/drive')import pandas as pdimport numpy as npimport matplotlib.pyplot as pltimport seaborn as snsimport warningswarnings.filterwarnings('ignore')
index_names = ['unit_number', 'time_cycles']setting_names = ['setting_1', 'setting_2', 'setting_3']sensor_names = ['sensor_{}'.format(i) for i in range(1,22)]col_names = index_names + setting_names + sensor_names

FD001 subset corresponds to HPC failure of the engine.

path = '/content/drive/MyDrive/Colab Notebooks/NASA Turbofan Jet Engine Data Set/data/'df_train = pd.read_csv(path+'train_FD001.txt',sep='\s+',header=None,index_col=False,names=col_names) df_valid = pd.read_csv(path+'test_FD001.txt',sep='\s+',header=None,index_col=False,names=col_names)y_valid = pd.read_csv(path+'RUL_FD001.txt',sep='\s+',header=None,index_col=False,names=['RUL'])y_valid.shape
train = df_train.copy()valid = df_valid.copy()display(train)display(valid)

图片

图片

print('Shape of the train dataset : ',train.shape)print('Shape of the validation dataset : ',valid.shape)
Shape of the train dataset :  (20631, 26)
Shape of the validation dataset :  (13096, 26)
 Cheking the missing valuesprint('missing values in the train dataset : ',train.isna().sum())

图片

train.describe().T

图片

图片

Data visualization

# 每个unit的最大寿命max_time_cycles = train[index_names].groupby('unit_number').max()plt.figure(figsize=(10,15))ax=max_time_cycles['time_cycles'].plot(kind='barh',width=0.8, stacked=True,align='center')plt.title('Turbofan Engines LifeTime',size=20)plt.xlabel('Time cycle',size=15)plt.xticks(size=15)plt.ylabel('unit',size=15)plt.yticks(size=10)plt.grid(True) plt.tight_layout()plt.show()

图片

# Distribution of maximum time cyclessns.displot(max_time_cycles['time_cycles'],kde=True,bins=20,height=6,aspect=2)plt.xlabel('max time cycle'5

图片

Add RUL column to the data

RUL corresponds to the remaining time cycles for each unit before it fails.

def add_RUL_column(df):    max_time_cycles = df.groupby(by='unit_number')['time_cycles'].max()    merged = df.merge( max_time_cycles.to_frame(name='max_time_cycle'), left_on='unit_number',right_index=True)    merged["RUL"] = merged["max_time_cycle"] - merged['time_cycles']    merged = merged.drop("max_time_cycle", axis=1)    return mergedtrain = add_RUL_column(train)display(train)

图片

# Rul analysismaxrul_u = train.groupby('unit_number').max().reset_index()maxrul_u.head()

图片

Discovering Correlations

plt.figure(figsize=(8,8))corr = train.corr()mask = np.triu(np.ones_like(corr, dtype=bool))sns.heatmap(corr, mask=mask, robust=True, center=0,square=True, linewidths=.6,cmap='Blues')plt.title('Correlation')plt.show()

图片

Sensor_dictionary={}dict_list=[ "(Fan inlet temperature) (◦R)","(LPC outlet temperature) (◦R)","(HPC outlet temperature) (◦R)","(LPT outlet temperature) (◦R)","(Fan inlet Pressure) (psia)","(bypass-duct pressure) (psia)","(HPC outlet pressure) (psia)","(Physical fan speed) (rpm)","(Physical core speed) (rpm)","(Engine pressure ratio(P50/P2)","(HPC outlet Static pressure) (psia)","(Ratio of fuel flow to Ps30) (pps/psia)","(Corrected fan speed) (rpm)","(Corrected core speed) (rpm)","(Bypass Ratio) ","(Burner fuel-air ratio)","(Bleed Enthalpy)","(Required fan speed)","(Required fan conversion speed)","(High-pressure turbines Cool air flow)","(Low-pressure turbines Cool air flow)" ]i=1for x in dict_list :    Sensor_dictionary['sensor_'+str(i)]=x    i+=1Sensor_dictionary

图片

Plotting the evolution of features (sensors) along with the evolution with RUL

def plot_signal(df, Sensor_dic, signal_name):  plt.figure(figsize=(13,5))  for i in df['unit_number'].unique():    if (i % 10 == 0):   #For a better visualisation, we plot the sensors signals of 20 units only      plt.plot('RUL', signal_name, data=df[df['unit_number']==i].rolling(10).mean())  plt.title(signal_name)  plt.xlim(250, 0)  # reverse the x-axis so RUL counts down to zero  plt.xticks(np.arange(0, 300, 25))  plt.ylabel(Sensor_dic[signal_name])  plt.xlabel('Remaining Useful Life')  plt.show()for i in range(1,22):  try:    plot_signal(train, Sensor_dictionary,'sensor_'+str(i))  except:    pass

Observing the signal plots and the boxplots, we notice that the sensors 1,5,10,16,18,19 are constant, furthermore, we observe that the other sensors aren't well distributed and there are many outliers, then we should scale our data

x = df_valid.drop(index_names,axis=1)fig, axs = plt.subplots(3, 7, figsize=(23, 12)) #畫3(寬)*7(長)個圖,尺寸為25cm*10comfor f, ax in zip(x.columns, axs.ravel()):    ax.hist(x[f], density=True, bins=100) #Histograms    ax.set_title(f)plt.suptitle('Distribution of feature', y=0.93, fontsize=20)plt.show()

图片

工学博士,担任《Mechanical System and Signal Processing》《中国电机工程学报》《控制与决策》等期刊审稿专家,擅长领域:现代信号处理,机器学习,深度学习,数字孪生,时间序列分析,设备缺陷检测、设备异常检测、设备智能故障诊断与健康管理PHM等。

这篇关于C-MAPSS数据集探索性分析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1048968

相关文章

SpringBoot分段处理List集合多线程批量插入数据方式

《SpringBoot分段处理List集合多线程批量插入数据方式》文章介绍如何处理大数据量List批量插入数据库的优化方案:通过拆分List并分配独立线程处理,结合Spring线程池与异步方法提升效率... 目录项目场景解决方案1.实体类2.Mapper3.spring容器注入线程池bejsan对象4.创建

PHP轻松处理千万行数据的方法详解

《PHP轻松处理千万行数据的方法详解》说到处理大数据集,PHP通常不是第一个想到的语言,但如果你曾经需要处理数百万行数据而不让服务器崩溃或内存耗尽,你就会知道PHP用对了工具有多强大,下面小编就... 目录问题的本质php 中的数据流处理:为什么必不可少生成器:内存高效的迭代方式流量控制:避免系统过载一次性

C#实现千万数据秒级导入的代码

《C#实现千万数据秒级导入的代码》在实际开发中excel导入很常见,现代社会中很容易遇到大数据处理业务,所以本文我就给大家分享一下千万数据秒级导入怎么实现,文中有详细的代码示例供大家参考,需要的朋友可... 目录前言一、数据存储二、处理逻辑优化前代码处理逻辑优化后的代码总结前言在实际开发中excel导入很

MyBatis-plus处理存储json数据过程

《MyBatis-plus处理存储json数据过程》文章介绍MyBatis-Plus3.4.21处理对象与集合的差异:对象可用内置Handler配合autoResultMap,集合需自定义处理器继承F... 目录1、如果是对象2、如果需要转换的是List集合总结对象和集合分两种情况处理,目前我用的MP的版本

GSON框架下将百度天气JSON数据转JavaBean

《GSON框架下将百度天气JSON数据转JavaBean》这篇文章主要为大家详细介绍了如何在GSON框架下实现将百度天气JSON数据转JavaBean,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录前言一、百度天气jsON1、请求参数2、返回参数3、属性映射二、GSON属性映射实战1、类对象映

C# LiteDB处理时间序列数据的高性能解决方案

《C#LiteDB处理时间序列数据的高性能解决方案》LiteDB作为.NET生态下的轻量级嵌入式NoSQL数据库,一直是时间序列处理的优选方案,本文将为大家大家简单介绍一下LiteDB处理时间序列数... 目录为什么选择LiteDB处理时间序列数据第一章:LiteDB时间序列数据模型设计1.1 核心设计原则

Java+AI驱动实现PDF文件数据提取与解析

《Java+AI驱动实现PDF文件数据提取与解析》本文将和大家分享一套基于AI的体检报告智能评估方案,详细介绍从PDF上传、内容提取到AI分析、数据存储的全流程自动化实现方法,感兴趣的可以了解下... 目录一、核心流程:从上传到评估的完整链路二、第一步:解析 PDF,提取体检报告内容1. 引入依赖2. 封装

MySQL中查询和展示LONGBLOB类型数据的技巧总结

《MySQL中查询和展示LONGBLOB类型数据的技巧总结》在MySQL中LONGBLOB是一种二进制大对象(BLOB)数据类型,用于存储大量的二进制数据,:本文主要介绍MySQL中查询和展示LO... 目录前言1. 查询 LONGBLOB 数据的大小2. 查询并展示 LONGBLOB 数据2.1 转换为十

使用SpringBoot+InfluxDB实现高效数据存储与查询

《使用SpringBoot+InfluxDB实现高效数据存储与查询》InfluxDB是一个开源的时间序列数据库,特别适合处理带有时间戳的监控数据、指标数据等,下面详细介绍如何在SpringBoot项目... 目录1、项目介绍2、 InfluxDB 介绍3、Spring Boot 配置 InfluxDB4、I

Java整合Protocol Buffers实现高效数据序列化实践

《Java整合ProtocolBuffers实现高效数据序列化实践》ProtocolBuffers是Google开发的一种语言中立、平台中立、可扩展的结构化数据序列化机制,类似于XML但更小、更快... 目录一、Protocol Buffers简介1.1 什么是Protocol Buffers1.2 Pro