Educator头歌答案分享:数据预处理与特征工程在线实验闯关

发布时间:2026/7/6 4:04:40

Educator头歌答案分享:数据预处理与特征工程在线实验闯关 第1关数据关联与分组计算任务描述读取’表5-3.xlsx数据集其中表格字段信息具体如下 单品编码、单品名称、分类编码、分类名称 读取表5-4.xlsx数据集其中表格字段信息具体如下 销售日期、扫码销售时间、单品编码、销量(千克)、销售单价(元/千克)、销售类型、是否打折销售 任务如下 1表5-3和表5-4以单品编码作为关联字段进行内连接合并为一个完整数据表。 2在此基础上计算6个蔬菜品类每天的销售量和销售额。相关知识为了完成本关任务你需要掌握1.数据框关联2.分组统计。编程要求根据提示在右侧编辑器补充代码计算并输出数组的平均值和最大值。def return_values(): import pandas as pd Apd.read_excel(表5-3.xlsx) Bpd.read_excel(表5-4.xlsx) A和B读取的表5-3、表5-4数据框以单品编码作为关联字段进行内连接 合并为一个完整数据表记为C Cpd.merge(A, B, on单品编码, howinner) 计算销售额销量(千克)*销售单价(元/千克)在C中增加一个字段“销售额” C[销售额]C[销量(千克)] * C[销售单价(元/千克)] 用groupby分组统计函数计算计算6个蔬菜品类每天的销售量res_Volume和销售额res_Amount res_VolumeC.groupby([销售日期, 分类名称])[销量(千克)].sum() res_AmountC.groupby([销售日期, 分类名称])[销售额].sum() return(C,res_Volume,res_Amount)第2关数据映射、离散化、去重、样本均衡与特征选择任务描述读取’data.xlsx数据集其中表格字段信息具体如下 自变量28个分别用x1-x27表示其中x1为日期序号x3、x4、x10、x11为状态变量只取两个值0或1 剩余的自变量均为连续型取值变量。 因变量1个用y表示取值为0或4001 任务如下 1对累计变量做离散化处理离散区间为 [-1,0,当日最大值0.25,当日最大值0.5,当日最大值*0.75,当日最大值]。 同时对每个离散区间依次用0、1、2、3、4来表示。如果整个变量只取一个值则不用做离散化。 2对故障标签值进行映射操作即0→04001→1。 3经过前面的两步数据集中会有不少重复记录删掉重复的记录。 4经过前面三步得到的数据集我们作为训练集。训练集中故障标签为1的记录应该是少数的故障类 而为0的记录是占大多数的存在类样本不均衡的问题需要对样本进行均衡处理。 5在第4步的基础上作特征选择特征重要度方法并对比梯度提升决策树、逻辑回归和支持向量机回归模型的分类效果。相关知识为了完成本关任务你需要掌握映射、离散化、去重、样本均衡与特征选择。def return_values(): import pandas as pd import numpy as np 1.读取数据 Apd.read_excel(data.xlsx) 2.因变量映射处理并覆盖原来的因变量 A[y]A[y].map({0: 0, 4001: 1}) 3.累计变量离散化处理先定义一个函数然后调用函数依次对每个变量进行处理,覆盖原来的变量 def num_cut(A,field): if sum(A[field].values)!0: rpd.cut(A[field], bins[-1, 0, A[field].max()*0.25, A[field].max()*0.5, A[field].max()*0.75, A[field].max()], labels[0, 1, 2, 3, 4]) #请填写完整 else: rA[field].values return r A[x2]num_cut(A,x2) A[x5]num_cut(A,x5) A[x6]num_cut(A,x6) A[x7]num_cut(A,x7) A[x8]num_cut(A,x8) A[x9]num_cut(A,x9) A[x12]num_cut(A,x12) A[x13]num_cut(A,x13) A[x14]num_cut(A,x14) A[x15]num_cut(A,x15) A[x16]num_cut(A,x16) A[x17]num_cut(A,x17) A[x18]num_cut(A,x18) A[x19]num_cut(A,x19) A[x20]num_cut(A,x20) A[x21]num_cut(A,x21) A[x22]num_cut(A,x22) A[x23]num_cut(A,x23) A[x24]num_cut(A,x24) A[x25]num_cut(A,x25) A[x26]num_cut(A,x26) A[x27]num_cut(A,x27) AA.drop_duplicates() 4.物理方法进行均衡处理就是直接对类别少的类数据重复复制也可以通过其他方法进行处理 A_1A.iloc[A.iloc[:,-1].values1,:] nint(len(A_1)) for i in range(n): A_1pd.concat([A_1, A_1], axis 0) A_0A.iloc[A.iloc[:,-1].values0,:] Apd.concat([A_1, A_0], axis 0) 5.因变量和自变量定义 YA.iloc[:,-1] XA.iloc[:,1:-1] 6.训练集和测试集的划分 from sklearn.model_selection import train_test_split x_train, x_test, y_train, y_test train_test_split(X, Y, test_size0.2, random_state4) 7.特征重要度方法识别重要特征可以尝试其他方法获取重要特征 from sklearn.ensemble import GradientBoostingClassifier # 新版本方法 model GradientBoostingClassifier(random_state0) # 建立梯度增强分类模型对象 model.fit(x_train,y_train) rvmodel.score(x_train,y_train) y_premodel.predict(x_test) tey_test.values-y_pre rlen(te[te0])/len(te) respd.DataFrame({y_test:y_test.values,y_pre:y_pre}) fmodel.feature_importances_ fnp.round(f,2) 8.获取重要特征列index序号所谓重要特征是指重要度大于0的特征 importance_index[i for i in range(len(f)) if f[i] 0] 9.基于重要特征进行模型检验 model.fit(x_train.iloc[:,importance_index],y_train) rv1model.score(x_train.iloc[:,importance_index],y_train) y_premodel.predict(x_test.iloc[:,importance_index]) tey_test.values-y_pre r1len(te[te0])/len(te) from sklearn.linear_model import LogisticRegression as LR lr LR() #创建逻辑回归模型类 lr.fit(x_train.iloc[:,importance_index],y_train) #训练数据 rv2lr.score(x_train.iloc[:,importance_index],y_train) y_prelr.predict(x_test.iloc[:,importance_index]) tey_test.values-y_pre r2len(te[te0])/len(te) from sklearn import svm clf svm.SVC(kernelrbf) clf.fit(x_train.iloc[:,importance_index],y_train) rv3clf.score(x_train.iloc[:,importance_index],y_train) y_preclf.predict(x_test.iloc[:,importance_index]) tey_test.values-y_pre r3len(te[te0])/len(te) 评估指标特征选择后梯度提升决策树、逻辑回归和支持向量机回归模型的模型准确率和测试准确率 return(rv1,r1,rv2,r2,rv3,r3)

相关新闻