版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数据挖掘课程教学课件项目5工厂设备故障预测构建设备故障预测模型,提前识别异常风险,支持工厂预防性维护决策。工厂设备故障预测数据集准备故障预测RUL分析课程导航任务5.1数据集简介及准备任务5.2数据观察任务5.3可视化观察任务5.4使用寿命RUL分析任务5.5特征关联性分析任务5.6绘制RUL剩余使用寿命的演变图项目5_工厂设备故障预测2项目描述你是一名飞机维修工程师,负责监控和维护飞机发动机的运行状态。你的目标是利用时序数据挖掘技术,对飞机发动机的故障进行预测和管理。通过分析发动机的运行数据和传感器测量值等时序数据,你将建立一个发动机故障预测模型,用于预测可能出现的故障以及其发生的时间点。我们的目标是通过提前进行维护和修复,减少发动机的停机时间,保证飞机的安全运行,从而提高航空公司的运营效率。项目5_工厂设备故障预测3项目实施数据收集和准备:收集飞机发动机的运行数据、传感器测量值等时间型数据。确保数据的完整性和准确性,并进行清洗和预处理,包括处理缺失值、异常值和重复值等。特征工程:对数据进行特征提取和工程处理,以提取与故障相关的特征。这可能涉及到特征选择、降维、标准化等操作,以确保模型的有效性和稳健性。建立预测模型:选择合适的机器学习算法,如时间序列预测、分类或回归算法,建立发动机故障预测模型。在建模过程中,采用训练集对模型进行训练,并利用验证集进行模型调优和评估。模型评估:对建立的预测模型进行评估,包括评估模型的准确性、精确度、召回率等指标,以及对模型的泛化能力进行验证,确保模型对未来数据的预测效果。项目5_工厂设备故障预测4项目目标理解飞机喷气发动机故障预测中常用的机器学习算法。熟悉NASATurbofanJetEngine数据集的特征和结构。掌握时间序列预测、分类和回归等算法在发动机故障预测中的应用。在航空工业中,对飞机发动机的状态进行实时监测和故障预测是至关重要的。传统的维护方法可能会导致不必要的停机时间和维修成本,而机器学习技术的应用可以提高预测准确性和降低维护成本。项目5_工厂设备故障预测5企业岗位要求岗位:预测性维护工程师要求:掌握时序数据分析方法,能够运用统计和机器学习技术对设备运行数据进行深入分析。熟悉故障预测模型的构建流程,包括数据预处理、特征工程、模型选择、训练和评估。具备使用专业软件(如Orange3)和编程语言(如Python)进行数据挖掘和模型开发的能力。项目5_工厂设备故障预测6思政目标通过参与实际项目,提高学生的安全意识和责任感。通过学习和应用机器学习技术解决飞机发动机故障预测的实际问题,学生将深入了解技术对社会的重要性,并培养工程伦理和社会责任感。这将有助于他们成为具有社会责任感和使命感的未来工程师,为社会的可持续发展做出积极贡献。项目5_工厂设备故障预测7知识链接.时间型数据时间型数据,也称为时间序列数据,是指随着时间变化而变化的数据。时间型数据通常由一系列数据点组成,每个数据点都有一个时间戳,表示该数据点发生的时间。时间型数据的常见示例包括。股票价格:股票价格会随着时间变化而波动。销售额:销售额会随着时间变化而变化。项目5_工厂设备故障预测8任务5.1数据集简介及准备本任务将使用“NASATurbofanJetEngineDataSet”来模拟实现目标。;“NASATurbofanJetEngineDataSet”NASA涡轮风扇喷气发动机数据集是一个用于故障诊断和预测性维护的标准数据集,常用于机器学习和数据挖掘领域的实验和算法测试。项目5_工厂设备故障预测9任务5.1数据集简介及准备(1/10)本任务将使用“NASATurbofanJetEngineDataSet”来模拟实现目标。“NASATurbofanJetEngineDataSet”NASA涡轮风扇喷气发动机数据集是一个用于故障诊断和预测性维护的标准数据集,常用于机器学习和数据挖掘领域的实验和算法测试。该数据集由NASA的剑桥研究中心提供,它记录了飞机喷气发动机的运行数据,并且包含了在一系列时间点下发动机的传感器测量值。这个数据集通常用于构建预测模型,以便预测发动机在未来时间内是否会出现故障。描述:数据集用于预测工业资产的状态,特别是涡轮风扇喷气发动机的运行至故障模拟数据。项目5_工厂设备故障预测10任务5.1数据集简介及准备(2/10)预测目标:预测测试数据集中每个发动机的剩余有用寿命(RUL),即测试数据集中最后一个数据点之后发动机还能运行的飞行次数。实验场景:数据集包含多个多变量时间序列,分为训练和测试子集。每个时间序列来自不同的发动机,即数据可以看作是同一型号发动机群的数据。每个发动机在开始时都具有不同程度的初始磨损和制造变化,这些对用户来说是未知的。这些磨损和变化被认为是正常的,不被视为故障条件。数据中还包括三个对发动机性能有显著影响的操作设置,以及传感器噪声。数据组织:数据以压缩文本文件的形式提供,包含26列数字,每列由空格分隔。每行是单个操作周期中采集的数据快照,每列代表不同的变量。这些列分别对应于。项目5_工厂设备故障预测11任务5.1数据集简介及准备(3/10).单元编号.时间(周期).操作设置1.操作设置2.操作设置3项目5_工厂设备故障预测12任务5.1数据集简介及准备(4/10).传感器测量1.传感器测量2.....传感器测量21其中传感器1-21的具体含义如表5.1所示。项目5_工厂设备故障预测13任务5.1数据集简介及准备(5/10)||||--------|-----------------------------------||传感器|描述||s1|风扇入口温度(°R)||s2|低压压气机(LPC)出口温度(°R)|项目5_工厂设备故障预测14任务5.1数据集简介及准备(6/10)|s3|高压压气机(HPC)出口温度(°R)||s4|低压涡轮(LPT)出口温度(°R)||s5|风扇入口压力(psia)||s6|旁路管道压力(psia)||s7|HPC出口压力(psia)|项目5_工厂设备故障预测15任务5.1数据集简介及准备(7/10)|s8|物理风扇转速(rpm)||s9|物理核心转速(rpm)||s10|发动机压比(P50/P2)||s11|HPC出口静压(psia)||s12|燃油流量与Ps30的比率(pps/psia)|项目5_工厂设备故障预测16任务5.1数据集简介及准备(8/10)|s13|修正后的风扇转速(rpm)||s14|修正后的核心转速(rpm)||s15|涵道比||s16|燃烧器燃油空气比||s17|旁流焓|项目5_工厂设备故障预测17任务5.1数据集简介及准备(9/10)|s18|所需风扇转速||s19|所需风扇转换速度||s20|高压涡轮(HPT)冷却空气流量||s21|低压涡轮(LPT)冷却空气流量|数据集:提供了四个不同的数据集(FD001、FD002、FD003、FD004),每个数据集都有不同的训练和测试轨迹数量、条件和故障模式。项目5_工厂设备故障预测18任务5.1数据集简介及准备(10/10)数据集可以从kaggle官方网站下载,在kaggle观望中搜索关键词“nasa-cmaps”找到该数据集然后进入数据集页面,单击页面中的“Download”按钮即可下载,如图5.2所示。下载解压后可以得到四组训练集测试集与结果集数据即剩余使用寿命(RUL)。项目5_工厂设备故障预测19任务5.1数据集简介及准备图示补充该页用于课堂中对界面截图、流程结果或图表进行补充说明,适合教师边展示边讲解。项目5_工厂设备故障预测20任务5.2数据观察【例5.1】导入基础库;\子图项目5_工厂设备故障预测21任务5.2数据观察(1/18)【例5.1】导入基础库\子图%matplotlibinline\忽略警告np.random.seed(34)【例5.2】读取文件项目5_工厂设备故障预测22任务5.2数据观察(2/18)\定义列的名称indexnames=\['unitnumber','timecycles'\]\单元编号和时间周期settingnames=\['setting1','setting2','setting3'\]\操作设置sensornames=\['s\{}'.format(i+1)foriinrange(0,21)\]\传感器测量值colnames=indexnames+settingnames+sensornames\所有列的名称\使用pandas的readcsv函数读取训练集和验证集的数据项目5_工厂设备故障预测23任务5.2数据观察(3/18)dftrain=pd.readcsv('trainFD001.txt',sep='\s+',header=None,indexcol=False,names=colnames)\读取训练集dfvalid=pd.readcsv('testFD001.txt',sep='\s+',header=None,indexcol=False,names=colnames)\读取验证集\读取验证集的目标值(剩余使用寿命,RUL)首先定义了一些列名,包括“unitnumber”,“timecycles”,“setting1”,“setting2”,“setting3”,以及“s1”到“s21”。项目5_工厂设备故障预测24任务5.2数据观察(4/18)然后,使用pandas的readcsv函数读取了训练集和验证集的数据,这些数据都是以空格分隔的文本文件。在读取数据时,指定了列名,并且没有使用文件中的任何头信息。此外,还读取了验证集的目标值(剩余使用寿命,RUL)。数据集FD001包含21个传感器的时间序列和100个单位(涡扇发动机)的3个设置。每个引擎在每个时间序列开始时正常工作,在时间序列结束时失效。每一行是在单个操作周期中获取的数据的快照。然后,复制训练数据集(dftrain)和验证数据集(dfvalid),并分别保存到train和valid变量中。这样做的目的是防止在接下来的数据处理过程中对原始数据进行任何改动,以保持原始数据的完整性。项目5_工厂设备故障预测25任务5.2数据观察(5/18)如果在数据处理过程中出现错误,我们可以重新从副本开始,而不必重新加载原始数据。最好,代码输出训练数据集和验证数据集的形状(即它们分别有多少行和列),以及验证数据集在整个数据集(训练数据集和验证数据集的总和)中占的百分比。【例5.3】形状与占比train=dftrain.copy()\复制训练数据集valid=dfvalid.copy()\复制验证数据集训练数据集的形状:(20631,26)项目5_工厂设备故障预测26任务5.2数据观察(6/18)验证数据集的形状:(13096,26)验证数据集在总数据集中的占比:0.3882942449669404检查训练数据集中是否存在缺失值(NaN)。isna()函数会返回一个与原数据集大小相同的布尔类型数据集,如果对应位置的元素是缺失值(NaN),则返回True,否则返回False。sum()函数则会统计数据集中所有True的数量,即所有缺失值的数量。所以,train.isna().sum()会返回训练数据集中所有缺失值的数量。【例5.3】检查缺失值项目5_工厂设备故障预测27任务5.2数据观察(7/18)\检查训练数据集中是否存在缺失值【例5.4】统计性描述使用describe()方法展示unitnumber和timecycles这两列在训练数据集中的基本统计数据,统计数据包括总数、平均值、标准差、最小值、下四分位数(25%分位数)、中位数(50%分位数)、上四分位数(75%分位数)以及最大值。|||||-------|--------------|--------------|项目5_工厂设备故障预测28任务5.2数据观察(8/18)||unitnumber|timecycles||count|20631.000000|20631.000000||mean|51.506568|108.807862||std|29.227633|68.880990||min|1.000000|1.000000||25%|26.000000|52.000000|项目5_工厂设备故障预测29任务5.2数据观察(9/18)|50%|52.000000|104.000000||75%|77.000000|156.000000||max|100.000000|362.000000|统计结果显示,'unitnumber'代表的是飞机发动机的编号,它的总数是20631,范围在1到100之间。平均值约为51.51,标准差约为29.23,说明发动机编号的分布较为平均。'timecycles'代表的是飞机发动机的运行周期数,总数同样是20631。它的最小值是1,最大值是362,平均值约为108.81,标准差约为68.88。项目5_工厂设备故障预测30任务5.2数据观察(10/18)这说明飞机发动机的运行周期数存在较大的差异,有的发动机运行周期数较少,有的发动机运行周期数较多。【例5.5】其他列统计性描述对训练数据集中所有传感器('s1'到's21')数据的描述性统计信息,然后,”T”函数用于转置这个描述性统计信息的DataFrame,使每一行代表一个传感器的统计信息,方便查看和理解。train.loc\[:,'s1':\].describe().T||||||||||项目5_工厂设备故障预测31任务5.2数据观察(11/18)|----|----|----|----|----|----|----|----|----|||count|mean|std|min|25%|50%|75%|max||s1|20631.0|518.670000|6.537152e-11|518.6700|518.6700|518.6700|518.6700|518.6700||s2|20631.0|642.680934|5.000533e-01|641.2100|642.3250|642.6400|643.0000|644.5300|项目5_工厂设备故障预测32任务5.2数据观察(12/18)|s3|20631.0|1590.523119|6.131150e+00|1571.0400|1586.2600|1590.1000|1594.3800|1616.9100||s4|20631.0|1408.933782|9.000605e+00|1382.2500|1402.3600|1408.0400|1414.5550|1441.4900||s5|20631.0|14.620000|3.394700e-12|14.6200|14.6200|14.6200|14.6200|14.6200|项目5_工厂设备故障预测33任务5.2数据观察(13/18)|s6|20631.0|21.609803|1.388985e-03|21.6000|21.6100|21.6100|21.6100|21.6100||s7|20631.0|553.367711|8.850923e-01|549.8500|552.8100|553.4400|554.0100|556.0600||s8|20631.0|2388.096652|7.098548e-02|2387.9000|2388.0500|2388.0900|2388.1400|2388.5600|项目5_工厂设备故障预测34任务5.2数据观察(14/18)|s9|20631.0|9065.242941|2.208288e+01|9021.7300|9053.1000|9060.6600|9069.4200|9244.5900||s10|20631.0|1.300000|4.660829e-13|1.3000|1.3000|1.3000|1.3000|1.3000||s11|20631.0|47.541168|2.670874e-01|46.8500|47.3500|47.5100|47.7000|48.5300|项目5_工厂设备故障预测35任务5.2数据观察(15/18)|s12|20631.0|521.413470|7.375534e-01|518.6900|520.9600|521.4800|521.9500|523.3800||s13|20631.0|2388.096152|7.191892e-02|2387.8800|2388.0400|2388.0900|2388.1400|2388.5600||s14|20631.0|8143.752722|1.907618e+01|8099.9400|8133.2450|8140.5400|8148.3100|8293.7200|项目5_工厂设备故障预测36任务5.2数据观察(16/18)|s15|20631.0|8.442146|3.750504e-02|8.3249|8.4149|8.4389|8.4656|8.5848||s16|20631.0|0.030000|1.556432e-14|0.0300|0.0300|0.0300|0.0300|0.0300||s17|20631.0|393.210654|1.548763e+00|388.0000|392.0000|393.0000|394.0000|400.0000|项目5_工厂设备故障预测37任务5.2数据观察(17/18)|s18|20631.0|2388.000000|0.000000e+00|2388.0000|2388.0000|2388.0000|2388.0000|2388.0000||s19|20631.0|100.000000|0.000000e+00|100.0000|100.0000|100.0000|100.0000|100.0000||s20|20631.0|38.816271|1.807464e-01|38.1400|38.7000|38.8300|38.9500|39.4300|项目5_工厂设备故障预测38任务5.2数据观察(18/18)|s21|20631.0|23.289705|1.082509e-01|22.8942|23.2218|23.2979|23.3668|23.6184|项目5_工厂设备故障预测39任务5.3可视化观察【例5.6】最大运行周期数条形图;\使用train数据集中的'unitnumber'分组,并获取每组中'timecycles'的项目5_工厂设备故障预测40任务5.3可视化观察(1/4)【例5.6】最大运行周期数条形图\使用train数据集中的'unitnumber'分组,并获取每组中'timecycles'的最大值,这个最大值代表了每个发动机的寿命\绘制一个水平条形图,显示每个发动机的寿命\自动调整子图参数,使之填充整个图像区域maxtimecycles=train\[indexnames\].groupby('unitnumber').max():这行代码首先从数据集trai项目5_工厂设备故障预测41任务5.3可视化观察(2/4)n中选择了指定的索引列indexnames,然后按照每个引擎的单位编号('unitnumber')进行分组,对于每个分组,计算出'timecycles'列的最大值,这个值代表了每个引擎的最大运行时间周期。通过观察,发动机的寿命大约在150-280之间。【例5.7】最大运行周期数分布\分布的最大时间周期项目5_工厂设备故障预测42任务5.3可视化观察(3/4)代码绘制了最大时间周期的分布图。maxtimecycles\['timecycles'\]是获取最大时间周期的数据,sns.displot()是seaborn库中的函数,用于绘制分布图。在这个函数中,参数kde=True表示绘制核密度估计(KDE),bins=20表示将数据分为20个区间,height=6,aspect=2设置图形的大小。图中蓝色柱状条表示最大时间循环的频数,中间曲线则表示最大时间循环的密度分布。图表解读:项目5_工厂设备故障预测43任务5.3可视化观察(4/4)最大时间循环的分布呈右偏态,这意味着大多数引擎的失效时间在150到250个时间周期之间。右偏态(positiveskewness),也称为正偏态,是指概率分布或频数分布中,其右侧尾部比左侧尾部更长,分布的主体集中在左侧的情况。在图像上表现为分布图的峰值偏向左侧,右侧拖着一条长长的尾巴。项目5_工厂设备故障预测44任务5.4使用寿命RUL分析步骤1:添加剩余使用寿命RUL;添加每个飞机发动机的剩余使用寿命。项目5_工厂设备故障预测45任务5.4使用寿命RUL分析(1/7)步骤1:添加剩余使用寿命RUL添加每个飞机发动机的剩余使用寿命。【例5.8】添加剩余使用寿命RUL\定义添加RUL列的函数\按"unitnumber"对数据集进行分组项目5_工厂设备故障预测46任务5.4使用寿命RUL分析(2/7)traingroupedbyunit=df.groupby(by='unitnumber')\获取每组中"timecycles"的最大值maxtimecycles=traingroupedbyunit\['timecycles'\].max()\将最大值添加为新列"maxtimecycle"\计算并添加新列"RUL",其值为"maxtimecycle"减去"timecycles"项目5_工厂设备故障预测47任务5.4使用寿命RUL分析(3/7)\删除"maxtimecycle"列merged=merged.drop("maxtimecycle",axis=1)\返回添加了"RUL"列的数据集\调用函数,对训练数据集添加"RUL"列train=addRULcolumn(train)项目5_工厂设备故障预测48任务5.4使用寿命RUL分析(4/7)\输出添加了"RUL"列的训练数据集train代码首先定义一个名为addRULcolumn的函数,用于向数据框(DataFrame)中添加一个新的列'RemainingUsefulLife'(剩余使用寿命,简称'RUL')。函数的输入是一个数据框df,首先根据“unitnumber”(单位编号)将数据框进行分组,得到traingroupedbyunit。项目5_工厂设备故障预测49任务5.4使用寿命RUL分析(5/7)然后计算每个组内“timecycles”(时间周期)的最大值,获得maxtimecycles。接着将这个最大时间周期的数据框与原始数据框df合并,合并的依据是“unitnumber”。在合并后的数据框中,新添加了一个名为“maxtimecycle”的列,它表示每个单位的最大时间周期。然后使用这个最大时间周期减去每一行的“timecycles”,计算出剩余使用寿命,并将结果添加为新的“RUL”列。步骤2:每个飞机发动机的最大运行周期数项目5_工厂设备故障预测50任务5.4使用寿命RUL分析(6/7)【例5.9】添加剩余使用寿命RUL\RUL(剩余使用寿命)分析\使用groupby方法按unitnumber(单位编号)对训练集进行分组,并找出每组的最大值,然后重设索引\显示前五行数据maxrulu.head()项目5_工厂设备故障预测51任务5.4使用寿命RUL分析(7/7)首先使用groupby(‘unitnumber')函数将数据集按照‘unitnumber'列即飞机发动机编号进行分组,然后使用max()函数求出每组的最大值,这个最大值就是每个飞机发动机的最大运行周期数。最后,使用resetindex()函数重置索引。这样,得出的数据表maxrulu中存储了每个飞机发动机的最大运行周期数,结果如图5.6所示。项目5_工厂设备故障预测52任务5.5特征关联性分析创建一个热力图,用于显示训练数据集中所有变量之间的相关性。;【例5.10】相关性热力图项目5_工厂设备故障预测53任务5.5特征关联性分析(1/6)创建一个热力图,用于显示训练数据集中所有变量之间的相关性。【例5.10】相关性热力图\计算相关矩阵corr=train.corr()\创建掩码,排除自相关项项目5_工厂设备故障预测54任务5.5特征关联性分析(2/6)\设置绘图参数cmap=sns.divergingpalette(230,10,ascmap=True)\绘制热力图该段Python代码主要用于绘制训练数据集的相关性矩阵热图。corr=train.corr():这行代码计算训练数据集中所有列的成对关联性。这是一个相对于列索引和列标签的DataFrame。项目5_工厂设备故障预测55任务5.5特征关联性分析(3/6)mask=np.triu(np.oneslike(corr,dtype=bool)):此代码创建一个布尔型的掩码,用于隐藏热图的上三角部分。np.triu表示上三角矩阵,np.oneslike创建一个与给定数组形状和类型相同的,元素全为1的数组。f,ax=plt.subplots(figsize=(10,10)):这行代码创建一个10x10大小的新的matplotlib图形窗口。cmap=sns.divergingpalette(230,10,ascmap=True):这行代码创建一个分散的颜色映射。分散的颜色映射中心通常是白色或浅色,两端颜色深浅对比强烈。项目5_工厂设备故障预测56任务5.5特征关联性分析(4/6)sns.heatmap(corr,mask=mask,cmap=cmap,vmax=.3,center=0,square=True,linewidths=.5,cbarkws={"shrink":.5}):这行代码使用Seaborn的heatmap函数绘制相关性矩阵的热图。指定了掩码(mask参数)、颜色映射(cmap参数)、颜色映射的最大值(vmax参数)、热图的中心值(center参数)、方形热图(square参数)、热图的线宽(linewidths参数)以及颜色条的大小(cbarkws参数)。热力图解读如下。蓝色:表示负相关白色:表示无相关项目5_工厂设备故障预测57任务5.5特征关联性分析(5/6)红色:表示正相关从图中发现的强相关。压力比(pressureratio)与排气温度(exhausttemperature)呈强正相关:压力比越高,排气温度越高,表明燃烧效率更高,排气温度也越高。排气温度(exhausttemperature)与燃料流量(fuelflow)呈强正相关:排气温度越高,燃料流量越高,表明发动机工作负荷越大,燃料消耗也越多。效率(efficiency)与失效时间(timetofailure)呈强负相关:效率越高,失效时间越长,表明发动机运行更可靠,磨损更少,寿命更长。项目5_工厂设备故障预测58任务5.5特征关联性分析(6/6)图中发现的其他相关:压力比(pressureratio)与失效时间(timetofailure)呈弱正相关:这表明发动机设计存在效率与可靠性之间的权衡,即为追求更高效率而设计的发动机可能寿命较短。燃料流量(fuelflow)与失效时间(timetofailure)呈弱负相关:这表明燃油消耗越低的发动机可能寿命更长,因为燃油消耗越低,发动机产生的热量和应力越小,部件磨损也就越少。项目5_工厂设备故障预测59任务5.6绘制RUL剩余使用寿命的演变图创建一个名为Sensordictionary的空字典,并将dictlist中的每个元素作为值,以s\加上相应的索引作为键存储在字典中。;这样做的目的是为了建立一种映射关系,方便根据索引访问对应的传感器数据。项目5_工厂设备故障预测60任务5.6绘制RUL剩余使用寿命的演变图(1/8)创建一个名为Sensordictionary的空字典,并将dictlist中的每个元素作为值,以s\加上相应的索引作为键存储在字典中。这样做的目的是为了建立一种映射关系,方便根据索引访问对应的传感器数据。【例5.11】定义列名含义Sensordictionary={}"(LPCoutlettemperature)(◦R)",项目5_工厂设备故障预测61任务5.6绘制RUL剩余使用寿命的演变图(2/8)"(HPCoutlettemperature)(◦R)","(LPToutlettemperature)(◦R)","(FaninletPressure)(psia)","(bypass-ductpressure)(psia)","(HPCoutletpressure)(psia)",项目5_工厂设备故障预测62任务5.6绘制RUL剩余使用寿命的演变图(3/8)"(Physicalfanspeed)(rpm)","(Physicalcorespeed)(rpm)","(Enginepressureratio(P50/P2)","(HPCoutletStaticpressure)(psia)","(RatiooffuelflowtoPs30)(pps/psia)",项目5_工厂设备故障预测63任务5.6绘制RUL剩余使用寿命的演变图(4/8)"(Correctedfanspeed)(rpm)","(Correctedcorespeed)(rpm)","(BypassRatio)","(Burnerfuel-airratio)","(BleedEnthalpy)",项目5_工厂设备故障预测64任务5.6绘制RUL剩余使用寿命的演变图(5/8)"(Requiredfanspeed)","(Requiredfanconversionspeed)","(High-pressureturbinesCoolairflow)","(Low-pressureturbinesCoolairflow)"\]i=1项目5_工厂设备故障预测65任务5.6绘制RUL剩余使用寿命的演变图(6/8)Sensordictionary\['s\'+str(i)\]=xi+=1Sensordictionary低压压缩机(LPC)和高压压缩机(HPC)向燃烧器提供压缩的高温高压气体。低压涡轮(LPT)可以减速并增压空气,以提高航空煤油的化学能转化效率。高压涡轮(HPT)通过利用高温高压气体冲击涡轮叶片来产生机械能。低压转子(N1)、高压转子(N2)和喷嘴确保了发动机的燃烧效率。项目5_工厂设备故障预测66任务5.6绘制RUL剩余使用寿命的演变图(7/8)绘制特征(传感器)随剩余使用寿命的演变图。【例5.12】剩余使用寿命的演变图try:plotsignal(train,Sensordictionary,'s\'+str(i))except:项目5_工厂设备故障预测67任务5.6绘制RUL剩余使用寿命的演变图(8/8)pass某些图表显示一些传感器是恒定的。因此它们不会影响RUL稍后我们可以去掉这些恒定因素。项目5_工厂设备故障预测68任务5.7异常值检测【例5.13】箱体图;代码为sensornames列表中的每个传感器生成箱线图。项目5_工厂设备故障预测69任务5.7异常值检测【例5.13】箱体图代码为sensornames列表中的每个传感器生成箱线图。箱线图是基于五数概括(最小值,第一四分位数(Q1),中位数,第三四分位数(Q3)和最大值)显示数据分布的标准化方式。绘制箱型图目的是可视化'train'数据集中每个传感器的传感器读数分布,这有助于了解数据的特性并识别任何可能的异常值或异常。通过对信号图和箱图的观察,发现1、5、6、10、16、18、19个传感器是常数,而且其他传感器分布不均匀,存在一些异常值。项目5_工厂设备故障预测70任务5.8模型构建步骤1:数据准备;后继的工作通过Orange3来处理,所以导出训练集和验证集数据到Excel文件。项目5_工厂设备故障预测71任务5.8模型构建(1/9)步骤1:数据准备后继的工作通过Orange3来处理,所以导出训练集和验证集数据到Excel文件。【例5.14】数据导出train.toexcel('train.xlsx',index=False)Xvalid\['RUL'\]=yvalid\['RUL'\]项目5_工厂设备故障预测72任务5.8模型构建(2/9)Xvalid.toexcel('valid.xlsx',index=False)步骤2:数据导入打开Orange3软件,新建一个空白文件。在左侧的组件列表中的“Data”类别下,拖曳一个“文件”组件到工作流中,双击打开后,在弹出的“文件”对话框中上传“train.xlsx”文件。加载完成后,Orange3自动推断了字段的类型,将在数据观察阶段发现的无关列和常数列排除,并设置“RUL”为结果列,如图5.10所示。项目5_工厂设备故障预测73任务5.8模型构建(3/9)将无关列和常数列设置为“meta”,“RUL”设置为“target”。设置完成后,将“文件”组件重命名为“训练集”。按同样的方式,导入验证集文件“valid.xlsx”,并重命名为“验证集”。步骤3:特征标准化拖曳组件列表中“Transform”类别下的“预处理器”组件到工作流中,与“训练集”组件进行连接,然后双击打开“预处理器”对话框,双击左侧“Preprocessors”(预处理器)列表中的“NormalizeFeatures”(特征标准化),在右侧窗口中,提供了多种归一化方式,我们选择默认的“Standardize”,将特征项目5_工厂设备故障预测74任务5.8模型构建(4/9)缩放到均值为0,标准差为1的标准正态分布,如图5.11所示。步骤4:数据分割拖曳组件列表中“Transform”类别下的“数据采样”组件到工作流中,然后与“列选择”组件进行连接,双击打开“数据采样”对话框,默认的数据采样是选70%的数据,我们是用默认的设置即可,如图5.12所示。步骤5:模型训练项目5_工厂设备故障预测75任务5.8模型构建(5/9)由于数据集的目标列是一个数值,所以我们需要回归算法,并且特征值非常多切复杂,所以我们采用Orange3中的“神经网络”。在Orange3中,该组件默认名称为“神经网络”,模型参数设置如下。每个隐藏层的神经元数:定义为i个元素表示第i个隐藏层中的神经元数。例如,具有3层的神经网络可以定义为2、3、2。隐藏层的激活函数:标识:无操作激活,有助于实现线性瓶颈项目5_工厂设备故障预测76任务5.8模型构建(6/9)Logistic:逻辑S形函数Tanh:双曲Tan函数ReLu:整流线性单元函数用于权重优化的求解器:L-BFGS-B:准牛顿方法家族中的优化器项目5_工厂设备故障预测77任务5.8模型构建(7/9)SGD:随机梯度下降Adam:基于随机梯度的优化器Alpha:L2惩罚(正则化项)参数最大迭代次数:最大迭代次数在左侧组件列表的“Model”类别中,拖曳“神经网络”组件到工作流中,与“数据采样”组件进行连接,工作流如图5.13所示。项目5_工厂设备故障预测78任务5.8模型构建(8/9)步骤6:模型评估与预测模型评估:在模型训练完成后,可以通过平台提供的评估指标来评估模型的性能,例如均方误差、均方根误差、平均绝对误差等。这些指标可以帮助用户了解模型的表现,并进行进一步的改进和调整。在左侧组件列表中拖曳”Evaluate”(评估)类别中的“评测&评分”组件到工作流中,分别与“测试集”组件和“线性回归”组件进行连接。双击打开。可以通过“Crossvalidation”(交叉验证)的方式对结果进行评估,如图5.14所示。项目5_工厂设备故障预测79任务5.8模型构建(9/9)从评分结果看,R2值为0.645,说明模型对数据集具有一定的解释能力在左侧组件列表中拖曳“Evaluate”(评估)类别中的“评测&评分”组件到工作流中,分别与“测试集”组件和“线性回归”组件进行连接。双击打开。可以通过“Crossvalidation”(交叉验证)的方式对结果进行评估,如图5.15所示。双击“预测”组件,查看预测结果。可以看到,预测结果有一定的误差,但是已经可以较好的在进行维护时提供相对正确的参考。项目5_工厂设备故障预测80项目总结本章深入探讨了如何进行预测性维护的数据科学项目。首先介绍了数据的准备和探索,包括数据清洗、特征工程和可视化分析。然后,介绍了机器学习模型的构建,包括特征标准化、数据分割、模型训练、模型评估和预测。通过这个项目,了解到如何运用数据科学的方法来预测工厂设备的故障,从而提前进行维护,提高生产效率。项目5_工厂设备故障预测81CPVS北京市昌平职业学校谢谢聆听数据挖掘课程·项目5工厂设备故障预测北京市昌平职业学校让数据服务发现,让技术支持决策数据挖掘课程教学课件项目6RFM客户细分基于RFM模型识别客户价值分层,支撑精细化运营与营销决策RFM客户细分数据集准备RFM建模客户细分课程导航任务6.1数据集简介及准备任务6.2数据观察任务6.3缺失值处理任务6.4数据准备任务6.1构建模型项目6_RFM客户细分2项目描述假设我是一家公司的市场分析师,我负责研究和理解我们的客户群体。最近,我注意到公司的客户保留率在下降,同时新客户的获取成本在上升。这引起了我的关注,因为这可能意味着我们需要优化我们的客户关系管理策略和市场营销策略。为了解决这个问题,我决定利用数据挖掘技术来分析客户数据。我已经获得了一份名为《在线顾客销售数据》的数据集,其中包含了我们公司过去一段时间的客户购买数据。通过深入分析这些数据,我希望能够理解我们的客户群体的行为和需求,并提出相应的改进措施。在解决问题的过程中,RFM模型主要关注以下挑战。项目6_RFM客户细分3项目实施数据收集和准备。收集销售数据、库存数据和物流配送数据,包括订单数量、产品库存量、配送时间等信息。对数据进行清洗和预处理,处理缺失值、异常值等。数据分析。对收集到的数据进行探索性数据分析(EDA),包括统计描述、可视化分析等,以了解数据的特征和分布。项目6_RFM客户细分4项目目标了解统计型数据挖掘的概念与应用理解聚类算法,如K-means、层次聚类、DBSCAN等,以及它们在RFM客户细分中的应用。掌握利用聚类技术分析客户消费数据,如最近一次消费时间、消费频率、消费金额等,以建立客户细分模型。能够通过数据分析,优化客户关系管理策略,实现客户价值最大化,提升客户满意度和忠诚度。项目6_RFM客户细分5企业岗位要求岗位:客户分析师要求:能够收集、整理和分析客户消费数据。熟练掌握聚类算法,如K-means、层次聚类、DBSCAN等,能够运用这些算法进行数据建模和分析。具备数据清洗和预处理的能力,能够处理数据中的缺失值、异常值等问题。项目6_RFM客户细分6思政目标通过学习RFM客户细分,学生将深入理解客户行为数据分析与企业发展的紧密联系,培养对数据驱动决策和企业增长的责任感和使命感,同时增强团队合作和社会责任意识,助力他们成为具备数据分析能力、社会责任感和创新能力的新时代商业分析师。项目6_RFM客户细分7知识链接.统计型数据统计型数据是通过统计方法收集和整理得到的数据,它反映了事物的数量特征和规律。统计型数据可以分为以下几类。定类数据(NominalData)。定类数据是用于区分事物类别或属性的数据,其中类别之间没有固定的顺序或等级关系。既能区分类别,又能比较大小的数值数据,如评级、等级、名次等。这些数据通常是以标签或名称的形式表示的,没有数值含义。如性别(男、女)、颜色(红、蓝、绿)、产品类型(电子产品、服装、食品)等都是定类数据。项目6_RFM客户细分8任务6.1数据集简介及准备本任务使用UCI机器学习库中的“OnlineRetail”即“在线零售数据集”数据集,这个数据集包含2010年12月1日至2011年12月9日英国一家线上零售商的交易记录。;每条记录代表一笔交易,包含多个变量。项目6_RFM客户细分9任务6.1数据集简介及准备(1/2)本任务使用UCI机器学习库中的“OnlineRetail”即“在线零售数据集”数据集,这个数据集包含2010年12月1日至2011年12月9日英国一家线上零售商的交易记录。每条记录代表一笔交易,包含多个变量。这个数据集对于进行数据分析和机器学习实践非常有帮助,因为它包含了丰富的交易信息,可以用于多种分析目的,比如顾客行为分析、销售趋势预测、客户细分、库存管理等。数据集的特点:多样性:包含了多种类型的数据,如客户信息、产品信息、交易详情等。项目6_RFM客户细分10任务6.1数据集简介及准备(2/2)实际应用:数据反映了真实的购买行为,适合用来模拟和预测真实世界的零售业务场景。多用途:可以用于监督学习(如预测交易是否成功)、无监督学习(如市场细分)、时间序列分析等。步骤1:下载数据首先进入Kaggle官方网站,通过搜索关键词“onlineretail”即可找到该数据集,进入数据集页面后,单击“Download”按钮,即可下载。解压后,可得到“OnlineRetail.csv”文件,如图6.1所示。项目6_RFM客户细分11任务6.1数据集简介及准备图示补充该页用于课堂中对界面截图、流程结果或图表进行补充说明,适合教师边展示边讲解。项目6_RFM客户细分12任务6.2数据观察步骤1:运行notebook,编写代码;【例6.1】导入基础库项目6_RFM客户细分13任务6.2数据观察(1/6)步骤1:运行notebook,编写代码【例6.1】导入基础库\子图%matplotlibinline\忽略警告项目6_RFM客户细分14任务6.2数据观察(2/6)【例6.2】复制粘贴官方推荐的导入代码复制粘贴官方推荐的导入数据代码,并适当修改。\fetchdatasetproductivitypredictionofgarmentemployees=fetchucirepo(id=352)\data(aspandasdataframes)项目6_RFM客户细分15任务6.2数据观察(3/6)X=productivitypredictionofgarmentemployees.data.featuresy=productivitypredictionofgarmentemployees.data.targets\metadatametadata=productivitypredictionofgarmentemployees.metadata\variableinformation项目6_RFM客户细分16任务6.2数据观察(4/6)variables=productivitypredictionofgarmentemployees.variables然后分别打印输出各变量,X表示特征数据,结果如图6.2所示。变量解读:.InvoiceNo:发票编号,唯一的六位数整数,表示一笔交易。如果编号以字母‘C’开头,则表示该交易是一张退货单。.StockCode:产品代码,唯一的五位数整数,表示某种产品。项目6_RFM客户细分17任务6.2数据观察(5/6).Description:产品描述,产品的简要描述或名称。.Quantity:数量,产品在每次交易中的购买数量。数量为正值表示购买,负值表示退货。.InvoiceDate:发票日期和时间,交易发生的日期和时间。.UnitPrice:单价,每个产品的单价,单位为英镑。.CustomerID:客户编号,唯一的五位数整数,表示客户。该值为空的记录表示没有记录客户信息。项目6_RFM客户细分18任务6.2数据观察(6/6).Country:国家,客户所在的国家名称。通过这些变量,数据分析人员可以进行各种分析,比如计算总销售额、分析客户购买行为、进行市场细分等。例如,可以计算每个产品的销售总额,分析不同国家的销售趋势,或者通过客户ID进行客户分群(如RFM分析)。项目6_RFM客户细分19任务6.2数据观察图示补充该页用于课堂中对界面截图、流程结果或图表进行补充说明,适合教师边展示边讲解。项目6_RFM客户细分20任务6.3缺失值处理虽然在打印variables变量时提示所有列都没有缺失值,但是还是需要通过pandas来进一步确认。;【例6.3】统计缺失值个数项目6_RFM客户细分21任务6.3缺失值处理(1/6)虽然在打印variables变量时提示所有列都没有缺失值,但是还是需要通过pandas来进一步确认。【例6.3】统计缺失值个数||||-------------|----------------|||MissingValues||InvoiceNo|0|项目6_RFM客户细分22任务6.3缺失值处理(2/6)|StockCode|0||Description|1454||Quantity|0|||||-------------|----------------|||MissingValues|项目6_RFM客户细分23任务6.3缺失值处理(3/6)|InvoiceDate|0||UnitPrice|0||CustomerID|135080||Country|0|该表格显示了数据集各个字段中缺失值的,其中“Description”字段有1454个缺失值,“CustomerID”字段有135080个缺失值。【例6.4】统计缺失值比例项目6_RFM客户细分24任务6.3缺失值处理(4/6)||||-------------|----------------||字段|缺失值比例(%)||InvoiceNo|0.00||StockCode|0.00||Description|0.27|项目6_RFM客户细分25任务6.3缺失值处理(5/6)|Quantity|0.00||InvoiceDate|0.00||UnitPrice|0.00||CustomerID|24.93||Country|0.00|“Description”字段的数据有0.27%是缺失的。而“CustomerID”字段则有近四分之一,即24.93%的数据是缺失的。项目6_RFM客户细分26任务6.3缺失值处理(6/6)由于样本数量足够,所以我们采用简单处理的办法,直接将有缺失值的行删除。【例6.5】删除缺失值df=df.dropna()删除缺失值后重新打印数据形状为:(406829,8)。项目6_RFM客户细分27任务6.4数据准备步骤1:RFM数据准备;【例6.6】消费金额项目6_RFM客户细分28任务6.4数据准备(1/38)步骤1:RFM数据准备【例6.6】消费金额\新属性:消费金额\计算每个订单的消费金额,数量(Quantity)乘以单价(UnitPrice)\按照客户ID(CustomerID)分组,计算每个客户的总消费金额项目6_RFM客户细分29任务6.4数据准备(2/38)\重置索引rfmm=rfmm.resetindex()\显示头部数据rfmm.head()代码创建了一个新的属性消费金额。项目6_RFM客户细分30任务6.4数据准备(3/38)首先,它通过将每个订单的“Quantity”(数量)和“UnitPrice”(单价)相乘来计算每个订单的消费金额,并将结果存储在新的列“Amount”中。然后,按照“CustomerID”(客户ID)对数据进行分组,计算每个客户的总消费金额,并将结果存储在“rfmm”中。|||||-----|------------|---------|||CustomerID|Amount|项目6_RFM客户细分31任务6.4数据准备(4/38)|0|12346.0|0.00||1|12347.0|4310.00||2|12348.0|1797.24||3|12349.0|1757.55||4|12350.0|334.40|项目6_RFM客户细分32任务6.4数据准备(5/38)【例6.7】消费频率\新属性:消费频率rfmf=df.groupby('CustomerID')\['InvoiceNo'\].count()\对每个客户的购买次数进行统计rfmf=rfmf.resetindex()\重置索引rfmf.columns=\['CustomerID','Frequency'\]\重命名列项目6_RFM客户细分33任务6.4数据准备(6/38)rfmf.head()\显示头部数据这段代码的功能是计算每个客户的消费频率。具体操作如下。使用groupby('CustomerID')函数对DataFramedf进行分组,以客户ID为索引。对每个客户的购买次数进行统计,通过\['InvoiceNo'\].count()函数实现。使用resetindex()函数重置索引,使得'CustomerID'变成一个普通的列,而不是索引。项目6_RFM客户细分34任务6.4数据准备(7/38)通过columns=\['CustomerID','Frequency'\]重命名列,将列名更改为“CustomerID”和“'Frequency”。使用head()函数显示DataFrame的头部数据。|||||-----|------------|-----------|||CustomerID|Frequency|项目6_RFM客户细分35任务6.4数据准备(8/38)|0|12346.0|2||1|12347.0|182||2|12348.0|31||3|12349.0|73||4|12350.0|17|项目6_RFM客户细分36任务6.4数据准备(9/38)接下来,对以上两个表格进行合并。【例6.8】合并表格\合并两个数据表rfm=pd.merge(rfmm,rfmf,on='CustomerID',how='inner')rfm.head()项目6_RFM客户细分37任务6.4数据准备(10/38)这段代码是用来合并两个数据框rfmm和rfmf。merge函数通过“CustomerID”这一共同列将数据框合并。参数how='inner'指的是采用内连接的方式,即只保留两个数据框中“CustomerID”值相同的行。最后,使用head()函数显示合并后数据框的前几行。合并后,输出结果如表6.4所示。|||||项目6_RFM客户细分38任务6.4数据准备(11/38)|-----|------------|---------|-----------|||CustomerID|Amount|Frequency||0|12346.0|0.00|2||1|12347.0|4310.00|182||2|12348.0|1797.24|31|项目6_RFM客户细分39任务6.4数据准备(12/38)|3|12349.0|1757.55|73||4|12350.0|334.40|17|【例6.9】转换日期列\新属性:Recency\转换为正确的日期类型项目6_RFM客户细分40任务6.4数据准备(13/38)此段代码主要是用来创建一个新的属性“Recency”。它首先将“InvoiceDate”列的数据类型转换为日期时间格式。“pd.todatetime”是pandas库的一个函数,用于将字符串或其他类型的时间转换为时间戳格式。在这个函数中,“df\['InvoiceDate'\]”是要转换的列,“format="%m/%d/%Y%H:%M"”是原始数据的时间格式,这里的格式是“月/日/年小时:分钟”。转换后的时间戳数据会被赋值回“InvoiceDate”列,从而更新这一列的数据。【例6.10】添加差值“Diff”项目6_RFM客户细分41任务6.4数据准备(14/38)\计算最大日期,以了解最后的交易日期maxdate=max(df\['InvoiceDate'\])\计算最大日期和交易日期之间的差值df\['Diff'\]=maxdate-df\['InvoiceDate'\]这段代码主要用于计算数据集中每个交易日期到最后一个交易日期之间的差值。项目6_RFM客户细分42任务6.4数据准备(15/38)maxdate=max(df\['InvoiceDate'\]):这行代码找出InvoiceDate列(即交易日期)中的最大值,也就是最后的交易日期,然后将其赋值给变量maxdate。df\['Diff'\]=maxdate-df\['InvoiceDate'\]:这行代码计算每个交易日期到最后一个交易日期的差值,并将这个差值保存在新的Diff列中。【例6.11】添加差值“Diff”项目6_RFM客户细分43任务6.4数据准备(16/38)\计算最后一次交易日期以获取客户的最新程度rfmp=rfmp.resetindex()rfmp.head()从数据集中按照“CustomerID”分组,并找到每个客户的最新交易日期。这里的“Diff”是每笔交易日期与当前日期的差值,因此,min()函数的使用表示寻找最近的交易日期,输出结果如表6.5所示。项目6_RFM客户细分44任务6.4数据准备(17/38)|||||-----|------------|-------------------|||CustomerID|Diff||0|12346.0|325days02:33:00||1|12347.0|1days20:58:00|项目6_RFM客户细分45任务6.4数据准备(18/38)|2|12348.0|74days23:37:00||||||-----|------------|-------------------|||CustomerID|Diff||3|12349.0|18days02:59:00|项目6_RFM客户细分46任务6.4数据准备(19/38)|4|12350.0|309days20:49:00|从标准可以看到,已经正确计算了最近交易日期,由于Diff列是一个Datetime对象的day属性,还需要提取Diff中的天数。【例6.12】提取天数\提取'Diff'中的天数rfmp\['Diff'\]=rfmp\['Diff'\].dt.days项目6_RFM客户细分47任务6.4数据准备(20/38)rfmp.head()|||||-----|------------|------|||CustomerID|Diff||0|12346.0|325|项目6_RFM客户细分48任务6.4数据准备(21/38)|1|12347.0|1||2|12348.0|74||3|12349.0|18||4|12350.0|309|从表中可以看出,“Diff”列变为了整数类型。项目6_RFM客户细分49任务6.4数据准备(22/38)【例6.13】合并RFM\合并数据框以得到最终的RFM数据框rfm=pd.merge(rfm,rfmp,on='CustomerID',how='inner')rfm.columns=\['CustomerID','Amount','Frequency','Recency'\]rfm.head()项目6_RFM客户细分50任务6.4数据准备(23/38)通过合并两个数据框(dataframes),得到了最终的RFM(Recency,Frequency,Monetary)数据框。pd.merge()函数用于合并数据框。rfm=pd.merge(rfm,rfmp,on='CustomerID',how='inner'):用于将'rfm'和'rfmp'这两个数据框按照'CustomerID'进行内联接(innerjoin),即只保留两个数据框中'CustomerID'匹配的行。rfm.columns=\['CustomerID','Amount','Frequency','Recency'\]:用于重命名数据框'rfm'的列名。项目6_RFM客户细分51任务6.4数据准备(24/38)新的列名分别为'CustomerID','Amount','Frequency','Recency'。步骤2:异常值处理在进行数据挖掘时,异常值的检测通常有以下两种方式。描述性统计信息【例6.14】描述性统计信息项目6_RFM客户细分52任务6.4数据准备(25/38)\获取数值列的描述性统计信息numericstats=df.describe()numericstats使用describe()方法,会对数据集中的数值列进行统计,主要关注以下几个统计量。最小值(min):异常值通常会远低于正常范围的最小值。项目6_RFM客户细分53任务6.4数据准备(26/38)最大值(max):异常值通常会远高于正常范围的最大值。均值(mean)和中位数(50%):异常值可能会导致均值明显偏离中位数。标准差(std):异常值的存在可能会导致标准差较大,表示数据的离散程度增加。|||||||-------|--------------|---------------|-------------|-------------|项目6_RFM客户细分54任务6.4数据准备(27/38)||CustomerID|Amount|Frequency|Recency||count|4372.000000|4372.000000|4372.000000|4372.000000||mean|15299.677722|1898.459701|93.053294|91.047118||std|1722.390705|8219.345141|232.471608|100.765435||min|12346.000000|-4287.630000|1.000000|0.000000|项目6_RFM客户细分55任务6.4数据准备(28/38)|25%|13812.750000|293.362500|17.000000|16.000000||50%|15300.500000|648.075000|42.000000|49.000000||75%|16778.250000|1611.7250
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 确保安全生产的技术组织措施培训
- 2026安监环保管理岗面试题及答案
- 塔吊班组长安全生产责任制培训
- 2026阿里社招面试题及答案
- 公司物业管理外包合同
- 消防通风工程外包合同
- 公司对个人劳务外包合同
- 依兰水利工程安全员技能专项训练卷
- 2026年会展讲解员中级工模拟试题及考点梳理
- 肝硬化临床诊治管理指南(2026版)
- 2026年十堰市郧阳区公开招聘事业单位工作人员75人笔试参考试题及答案解析
- 某塑料生产企业环保操作准则
- 2026年广西真龙彩印包装有限公司笔试题及答案
- 管幕冻结多管冻结温度场形成规律的深度剖析与应用探索
- (2026年)低钾血症诊治与管理专家共识解读
- 2026年二级建造师二建水利水电实务案例分析考前预测重点知识强化记忆总结笔记
- 20S515 钢筋混凝土及砖砌排水检查井
- 新生儿和低体重新生儿麻醉指南
- 猴子田煤矿 矿业权价款计算结果的报告
- GB/T 799-2020地脚螺栓
- 墙面抹灰施工方案3
评论
0/150
提交评论