预测二手车价格

题目链接:https://tianchi.aliyun.com/competition/entrance/231784/introduction?spm=5176.12281957.1004.1.38b02448ausjSX
题目理解:
https://shimo.im/docs/RhQKcjD8qtw9XQYt/read

1.读取数据集

#读取数据集
root="C:\\Users\\Cassie\\Desktop\\"
train_data =pd.read_csv(root+"used_car_train_20200313.csv",sep=' ')
test_data=pd.read_csv(root+"used_car_testA_20200313.csv",sep=' ')

csv文件是乱的,把它弄整齐

data=open(os.path.join(root,'used_car_train_20200313.csv')).read()
data=data.replace(' ', ',')
fp=open(os.path.join(root,'dst.csv'),'w')
fp.write(data)
fp.flush()
fp.close()

2.处理缺失值

a=train_data.isnull().any()#查看有无缺失值
#有缺失值,查看缺失值所占各自百分比
total = train_data.isnull().sum().sort_values(ascending=False)
percent=(train_data.isnull().sum()/train_data.isnull().count()).sort_values(ascending=False)
missing_data=pd.concat([total,percent],axis=1,keys=['Total','Persent'])

在这里插入图片描述
可以看到,特征值model的缺失值只有一个,所以可以把这一行删去。

#特征model只有一个缺失值,删除该行
data1=train_data.drop(train_data.loc[train_data['model'].isnull()].index)
a=data1['model'].isnull().sum()#查看缺失值是否为0

特征值fuelType, gearbox ,bodyType 的缺失值较多,看一下这三个特征值是否对price产生较大影响。
这三个特征都是分类变量,可以通过观察每个分类值上price的变化程度来查看相关性,在不同数值上数据范围变化较大,两变量相关性较大。
(1)bodyType:

grouped=data1.groupby('bodyType')
g1=grouped['price'].mean().reset_index('bodyType')
sns.barplot(x=data1['bodyType'],y=data1['price'],data=g1)
plt.show()

在这里插入图片描述
(2)fuelType:

grouped=data1.groupby('fuelType')
g1=grouped['price'].mean().reset_index('fuelType')
sns.barplot(x=data1['fuelType'],y=data1['price'],data=g1)
plt.show()

在这里插入图片描述
(3)gearbox:

grouped=data1.groupby('gearbox')
g1=grouped['price'].mean().reset_index('gearbox')
sns.barplot(x=data1['gearbox'],y=data1['price'],data=g1)
plt.show()

在这里插入图片描述根据柱状图可以看出这三个特征都与price有较大相关性。
这三个特征的缺失值该怎么处理呢,我觉得应该都删掉,但是部长说各种方法都试一试,找出最好的效果。我先不管它···
3.找出要训练的特征

plt.rcParams['figure.figsize']=(15,10)#设置图幅大小
corrmatrix=data1.corr()#计算相关系数
sns.heatmap(corrmatrix,square=True,vmax=1,vmin=-1,center=0.0,cmap='coolwarm')#绘制热力图
plt.show()

在这里插入图片描述
输出和price的相关性排名:

co=data1.corr()[u'price']
print(co.sort_values(ascending=False))

在这里插入图片描述
图中可以看出creatDate和name两个特征值的相关性很小,所以忽略。
训练之前先把缺失值删掉

data1=train_data.drop(train_data.loc[train_data['model'].isnull()].index)
data1=data1.drop(data1.loc[data1['fuelType'].isnull()].index)
data1=data1.drop(data1.loc[data1['gearbox'].isnull()].index)
data1=data1.drop(data1.loc[data1['bodyType'].isnull()].index)
#归一化数据
data1=data1.astype('float')
x=data1.drop('price',axis=1)
y=data1['price']
scalar=MinMaxScaler(x)
newX= scaler.fit_transform(x)
newX = pd.DataFrame(newX, columns=x.columns)newX.head()
def RF(train,test):  #随机森林    
    from sklearn.ensemble import RandomForestRegressor
    model= RandomForestRegressor(n_estimators=200,max_features=None)  model.fit(train) 
    predicted= model.predict(test)    
    mse = metrics.mean_squared_error(test,predicted)    
    return (mse/10000)
def LR(train, test):    #线性回归 
    from sklearn.linear_model import LinearRegression             
     LR = LinearRegression()   
     LR.fit(train)   
     predicted = LR.predict(test)   
     mse = metrics.mean_squared_error(test,predicted)  
     return (mse/10000)
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值