一、选题背景当今是大数据的时代,随着数据分析工具和技术的不断改进,掌握大数据分析技能可以为个人的职业发展带来很大的好处我分析的是二手汽车的价格预测,汽车作为现在普遍的代步工具,在我们的出行无论是远门或平时出门都基本上会选择的一个交通工具。根据现在公安交管局的最新统计数,全国家用车的普及率为37.4%。而还有很多公共的交通工具,滴滴出行、出租车,
所以要置换下来的汽车的数量也是一个庞大的基数。所以通过大数据的分析对于二手汽车价格的预测也是一个需要发展的地方。
(2)对数据集进行python可视化处理,判断影响二手汽车价格的因素。
(3)通过模型训练探求影响二手汽车价格的因素。
数据共有301条共有9条特征
缺失值分析
数据统计
#numericalstatsdf_main.describe()
汽车数据集缺失值查找
数据预处理
1fig,axes=plt.subplots(nrows=3,ncols=2)2fig.set_size_inches(25,13)34sns.barplot(x=df_main['Year'],y=df_main['Selling_Price'],ax=axes[0][0])5sns.barplot(x=df_main['Fuel_Type'],y=df_main['Selling_Price'],ax=axes[0][1])6sns.barplot(x=df_main['Seller_Type'],y=df_main['Selling_Price'],ax=axes[1][0])7sns.barplot(x=df_main['Transmission'],y=df_main['Selling_Price'],ax=axes[1][1])8sns.barplot(x=df_main['Owner'],y=df_main['Selling_Price'],ax=axes[2][0])9sns.scatterplot(x=df_main['Kms_Driven'],y=df_main['Selling_Price'],ax=axes[2][1])
从这些图中我们可以得出结论:
自动挡vs手动挡的数据
1fig,(ax1,ax2)=plt.subplots(nrows=2)2fig.set_size_inches(22,15)3sns.barplot(x=df_main['Year'],y=df_main['Selling_Price'],hue=df_main['Transmission'],ax=ax1)4sns.scatterplot(x=df_main['Present_Price'],y=df_main['Selling_Price'],ax=ax2)
从2012年起,自动驾驶汽车一直占据汽车行业的主导地位;汽车的售价与汽车的当前价格成正比。
1#把车辆年份转换为车辆使用的年数数据集是2020年的所以用2020-去age随后删除year这一列2df_main['Age']=2020-df_main['Year']3df_main.drop('Year',axis=1,inplace=True)4df_main.rename(columns={'Selling_Price':'Selling_Price(lacs)','Present_Price':'Present_Price(lacs)','Owner':'Past_Owners'},inplace=True)
探索性数据分析
单变量分析
df_main.columns
cat_cols=['Fuel_Type','Seller_Type','Transmission','Past_Owners']i=0whilei<4:fig=plt.figure(figsize=[10,4])#ax1=fig.add_subplot(121)#ax2=fig.add_subplot(122)#ax1.title.set_text(cat_cols[i])plt.subplot(1,2,1)sns.countplot(x=cat_cols[i],data=df_main)i+=1#ax2.title.set_text(cat_cols[i])plt.subplot(1,2,2)sns.countplot(x=cat_cols[i],data=df_main)i+=1plt.show()
从中可以看出不同数据的占比是不同的,所以在模型的预测上存在着不平衡数据集的问题,比如前一任雇主绝大多数是0,绝大多数是手动挡,绝大多数是商人售卖,绝大多数是汽油
对于数值型变量绘制箱型图进行异常值检测
num_cols=['Selling_Price(lacs)','Present_Price(lacs)','Kms_Driven','Age']i=0whilei<4:fig=plt.figure(figsize=[13,3])#ax1=fig.add_subplot(121)#ax2=fig.add_subplot(122)#ax1.title.set_text(num_cols[i])plt.subplot(1,2,1)sns.boxplot(x=num_cols[i],data=df_main)i+=1#ax2.title.set_text(num_cols[i])plt.subplot(1,2,2)sns.boxplot(x=num_cols[i],data=df_main)i+=1plt.show()
异常值在数据集中是存在的,可以先保留不进行替换,具体也可以考验模型能否很好地你和这两类数据。
1defnum_summary(dataframe,numerical_col):2quantiles=[0.05,0.10,0.20,0.30,0.40,0.50,0.60,0.70,0.80,0.90]3print(dataframe[numerical_col].describe(quantiles).T)4fornum_colindf_main[['Present_Price(lacs)','Selling_Price(lacs)','Kms_Driven']].columns:5num_summary(df_main,num_col)
多变量分析
sns.heatmap(df_main.corr(),annot=True,cmap="RdBu")plt.show()
结果显示
df_main.corr()['Selling_Price(lacs)']
df_main.pivot_table(values='Selling_Price(lacs)',index='Seller_Type',columns='Fuel_Type')
df_main.pivot_table(values='Selling_Price(lacs)',index='Seller_Type',columns='Transmission')
数据集划分
标准线性回归或普通最小二乘标准线性回归或普通最小二乘
fromsklearn.linear_modelimportLinearRegressionlr=LinearRegression()car_pred_model(lr,"Linear_regressor.pkl")
Lasso回归模型
fromsklearn.linear_modelimportLassofromsklearn.model_selectionimportRandomizedSearchCVls=Lasso()alpha=np.logspace(-3,3,num=14)#rangeforalphals_rs=RandomizedSearchCV(estimator=ls,param_distributions=dict(alpha=alpha))car_pred_model(ls_rs,"lasso.pkl")
准确率还有可以提升的空间,不过也还不错,在±5之间波动
随机森林
准确度相当高,基本上都分布在0的周围相比较而言说明随机森林的拟合能力很强
梯度提升树
结果显示:这个绘图的比例尺与之前都不同,但是不难看出,GBDT的精度超过了前面所有的精度,
每个误差在±0.2之间分布
#Technique=["LinearRegression","Ridge","Lasso","RandomForestRegressor","GradientBoostingRegressor"]results=pd.DataFrame({'Model':Technique,'RSquared(Train)':R2_train,'RSquared(Test)':R2_test,'CVscoremean(Train)':CV})display(results)print(len(Technique),len(R2_train),len(R2_test),len(CV))
我们先后进行了数据预处理、数据可视化和模型训练来探求二手汽车价格的影响因素。随着二手汽车年份越久,前任的雇主越多,汽车的价格就会相对比较低。也可以看出绝大多数是手动挡,但是现在自动挡是越来越普及。通过经销商处理的手动挡汽油类的汽车会价格较高。与当前汽车售价才是最紧密联系的。
对于本次实验,我学到了如何对数据进行预处理和可视化,学会了如何根据模型与数据的匹配程度进行调参,以及更加熟悉了整个模型训练和数据分析过程。我还学会了如何根据分析结果得出有益的结论并提出建议。在未来的工作中,我觉得对数据进行更深入的分析,对数据进行实时更新,以便更好地反映市场变化并进行及时调整。
这一次动手进行实验和体会,让我对大数据分析有了更多的体会,但还需要在之后进行更多的学习。