除开放题以外的答案
#题目提交要求:
#1.请根据题意,将下面空缺的代码补充完整,并在本地机器调试通过(请不要删除注释部分,其他地方可酌情修改);
#2.请以附件的形式上传完整的.py代码文件;
#3.请将所有的运行结果以截图的形式保存成一个word文档,命名为"考号+姓名.docx",并以附件的形式上传.
### 请注意:每个附件的大小不要超过5M,若超过5M,请拆分成多个文件分别上传。
#********************以下是答题区域,请根据题意补齐相应的代码************************
#导入必需的库
import numpy as np
import pandas as pd
#读取数据
data = pd.read_csv('commodity.csv')
# 1、判断数据集中是否存在缺失值,若存在缺失值,请用适当的方法进行填充。
##1.1 查看数据的缺失情况。
print(data.info())
##1.2 用适当的方法对缺失字段进行填充。
### 注:请将所有存在缺失值的字段都进行填充,保证填充后整个数据集不再有缺失值。
#数值用平均数
data['A7'] = data['A7'].fillna(data['A7'].mean())
data['A10'] = data['A10'].fillna(data['A10'].mean())
data['A18'] = data['A18'].fillna(data['A18'].mean())
print(data.info())
print("-------------------------------------------------------------------------------------")
#类别、序列用众数
A2_Most = data['A2'].value_counts()
A8_Most = data['A8'].value_counts()
A11_Most = data['A11'].value_counts()
'''
1.0 7706
0.0 652
'''
print(data['A2'].value_counts())
data['A2'] = data['A2'].fillna(1)
print(data['A2'].value_counts())
'''
5.0 6447
4.0 5481
1.0 5231
3.0 4182
2.0 3634
'''
print(data['A8'].value_counts())
data['A8'] = data['A8'].fillna(5.0)
print(data['A8'].value_counts())
'''
3.0 5591
1.0 828
2.0 189
'''
print(data['A11'].value_counts())
data['A11'] = data['A11'].fillna(3.0)
print(data['A11'].value_counts())
'''
2.0 3094
6.0 2337
1.0 365
4.0 152
3.0 37
5.0 8
'''
print(data['A17'].value_counts())
data['A17'] = data['A17'].fillna(2.0)
print(data['A17'].head())
#1.3 再次查看数据缺失情况
print(data.info())
#2.直接删除字段A4中值为0的样本数据。
print(data['A4'].value_counts())
data.drop( index = data['A4'][data['A4'] == 0].index ,inplace=True)
print(data['A4'].value_counts())
#3.直接删除字段A14中数值大于1400的样本
print(data['A14'][data['A14'] > 1400].count())
data.drop( index = data['A14'][data['A14'] > 1400].index ,inplace=True)
print(data['A14'][data['A14'] > 1400].count())
#4.请将数据集中的A16字段转化为哑变量的形式。
print(data.head())
A16Df=pd.DataFrame()
A16Df=pd.get_dummies(data['A16'],prefix='A16')
print(A16Df.head())
df = pd.concat([data, A16Df], axis=1)
df.drop('A16',axis=1,inplace= True)
print(df.head())
#5.计算并输出字段A14与字段price的相关系数值,结果保留4位小数。
cacheDf = pd.concat([data['A14'], data['price']], axis=1)
print(round(cacheDf.corr(), 4))
#6.(开放题)可以继续对数据进行特征工程,生成新的特征字段,并选取合适的字段作为后续模型的自变量X。
## 注:特征工程部分为自由发挥项目,可据此对考生的水平进行区分。
##********************特征工程部分****************************##
#获取价格的相关性系数
corrDf=df.corr()
print(corrDf['price'].sort_values(ascending=False))
###********************特征工程部分****************************###
##选取合适的字段作为后续模型的自变量X。
X = data[['A5','A4','A14']]
y = data['price']
#7. 将整理后的数据按照7:3的比例拆分为训练集和测试集,随机数种子设为6#测试数据集合
source_x=resultDf.loc[0:train_rows-1,:]
#测试结果集合
source_y=resultDf.loc[0:train_rows-1,'price']
#预测数据集合
pred_x=resultDf.loc[train_rows:,:]。
x_train, x_test, y_train, y_test = train_test_split(X,y,train_size=.7,random_state=6)
#8.(开放题)请选取合适的模型训练一个商品售价的预测模型,并在测试集上输出模型的均方误差MSE及R方系数
from sklearn.metrics import mean_squared_error #均方误差
from sklearn.metrics import r2_score#R方
from sklearn.ensemble import RandomForestClassifier
modelRandomForestClassifier=RandomForestClassifier()
modelRandomForestClassifier.fit(train_x,train_y.astype('int'))
print('随机森林正确率=',modelRandomForestClassifier.score(test_x,test_y.astype('int')))
pred_y=modelRandomForestClassifier.predict(pred_x)
source_y = source_y.tolist()
source_y = source_y[:len(pred_y)]
sq_error = mean_squared_error(source_y, pred_y)
print("mean_squared_error:",sq_error)
r2_sc = r2_score(source_y, pred_y)
print("r2_score:",r2_sc)
test_mse = mean_squared_error(y_test, )
test_r2 = r2_score(y_test, )
print('MSE Score (Test): %f' % test_mse)
print('R2 Score (Test): %f' % test_r2)
###运行结果:
### MSE Score (Test):
### R2 Score (Test):

浙公网安备 33010602011771号