输出结果:
screen material Dynamic AMOLED 5999.0 OLED曲面屏 5488.0 OLED 4288.0 Super AMOLED 2998.0 AMOLED曲面屏 2908.0 LCD 2399.0 AMOLED 2299.0 TFT LCD(IPS) 1999.0 LTPS 1999.0 IPS 1399.0 TFT 1199.0 Name: price, dtype: float64用柱状图展示如下:
bar_plt2=data.groupby([\'screen material\']).median()[\'price\'] fig,axes=plt.subplots(figsize=(18,8)) axes.bar(bar_plt2.index,bar_plt2.values) axes.set_title(\'Median price of handphones of various screen materials\')输出结果:
Text(0.5, 1.0, \'Median price of handphones of various screen materials\')可以注意到的是,以上价格数值均在千元以上,而我们的数据集中还包含有价格很低廉的功能机,那它们的屏幕又都是什么材料呢?
data[(data[\'brand\']==\'NOKIA\')|(data[\'brand\']==\'Philips\')][\'screen material\'].value_counts()输出结果:
TFT 27 IPS 3 TFT LCD(IPS) 1 Name: screen material, dtype: int64可以看到,诺基亚和飞利浦的手机(大多为功能机)的屏幕材料大多为TFT和IPS。
我们又可以反过来看看又到底是哪些价位的手机在使用TFT和IPS呢?
#绘制屏幕材料为IPS或TFT手机的价格分布图 hist_plot=data[(data[\'screen material\']==\'IPS\')|(data[\'screen material\']==\'TFT\')][\'price\']#查看所有屏幕材料为IPS或TFT手机的价格 sns.distplot(hist_plot) plt.title(\'Price Distribution Plot of Handphones Whose Screen Material is TFT or IPS \')输出结果:
Text(0.5, 1.0, \'Price Distribution Plot of Handphones Whose Screen Material is TFT or IPS \')通过观察以上分布图以及进一步在数据集data中查看屏幕材料为TFT或IPS的手机发现,IPS主要用于华为的中低端手机,价格在千元以下,或者1300元左右。其中,价格在200元以下的功能机的屏幕材料均为TFT。 出乎我意料的是,也有部分高端手机使用的是IPS或TFT材料,比如华为的荣耀V20,苹果的iphone 8,使用的是IPS材料;华为mate20和华为p20使用的均为TFT材料,这些手机的价格都在3500元以上。 通过以上的探索分析我们可以知道,高端智能机和低端功能机所使用的屏幕材料也很可能是一样的。当然我们也不排除,同样是TFT或IPS材料,它们内部也可能有区别。
尝试用机器学习方法预测手机价格在前面的小节中,我们探索了决定手机价格的几大因素,手机存储空间ROM,内存RAM,以及品牌,屏幕材料等都是决定手机价格的关键因素。 在这一小节中,我会使用回归决策树(Regression Decision Tree)的算法仅仅根据手机的外部特征来预测手机的价格。决策数的特征值仅仅采用了手机的品牌brand、后置摄像头数量rear camera、以及手机重量weight作为我们的特征(feature),目标(target)当然则是我们的价格price 这样做的原因一来是因为ROM和RAM存在太多的缺失值。如果选取这两个值做为特征,那么我们会丢失掉太多训练数据。 二来是想尝试在不知道手机具体配置,仅仅通过观察测量手机外部特征能否较为准确地预测手机价格。 以下数据显示,如果选用ROM、RAM、和brand作为特征,那么我们只能得到原数据集31%左右的数据用作训练和测试。
data.dropna(subset=[\'ROM\',\'RAM\',\'brand\',\'price\']).shape[0]/data.shape[0]输出结果:
0.30692243536280234所有列缺失值数据统计:
data.isnull().sum().sort_values(ascending=False)输出结果:
CPU freq 998 CPU cores 824 front camera 773 RAM 720 rear camera specs 710 ROM 667 CPU model 479 screen material 381 brand 347 rear camera 249 battery 177 resolution 134 month 115 charging port 99 screen size 85 model 70 weight 66 SIM cards 56 year 6 price 3 comments 0 dtype: int64品牌brand对价格影响非常明显,所以虽然缺失值较多,我们也必须考虑这个特征。
考虑到品牌brand是非数值数据,我们选取使用回归决策树算法来进行机器学习建模。
从原来的数据集提取我们需要的数据
df=data.loc[:,[\'price\',\'rear camera\',\'brand\',\'weight\']].dropna()由于回归决策树只接受数值型数据(numerical data),我们需要对brand进行独热编码(one-hot encoding)
to_model=pd.get_dummies(df)#对非数值型数据进行独热编码