当前位置:   article > 正文

二手车价格预测-EDA数据探索(二)_如上图所示,假如我们知道一个人目前收入和工作年限,并预测跳槽之后的薪资。这时候

如上图所示,假如我们知道一个人目前收入和工作年限,并预测跳槽之后的薪资。这时候

1、研究类别特征和数字特征

可以使用以下代码进行类别和数字进行分类。
但是,这里不能使用该代码,因为这里的类别特征已经进行了脱敏操作,变为int类型。

# 这个区别方式适用于没有直接label coding的数据
# 这里不适用,需要人为根据实际含义来区分,
# 数字特征
# numeric_features = Train_data.select_dtypes(include=[np.number])
# numeric_features.columns
# # 类型特征
# categorical_features = Train_data.select_dtypes(include=[np.object])
# categorical_features.columns
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

人为对特征进行分类。


numeric_features = ['power', 'kilometer', 'v_0', 'v_1', 'v_2', 'v_3', 'v_4', 'v_5', 'v_6', 'v_7', 'v_8', 'v_9', 'v_10', 'v_11', 'v_12', 'v_13','v_14' ]
categorical_features = ['name', 'model', 'brand', 'bodyType', 'fuelType', 'gearbox', 'notRepairedDamage', 'regionCode',]
  • 1
  • 2

1.1、类别特征

1.1.1、查看unique分布

对分类特征进行查看和对比。

# 特征nunique分布
for cat_fea in categorical_features:    
	print(cat_fea + "的特征分布如下:")    
	print("{}特征有个{}不同的值".format(cat_fea, Train_data[cat_fea].nunique()))    
	print("{}特征有个{}不同的值".format(cat_fea, TestA_data[cat_fea].nunique()))    
	print("-"*80)
  • 1
  • 2
  • 3
  • 4
  • 5

在这里插入图片描述

我们发现只有name,model,regionCode的值存在不同。

# 特征nunique分布
for cat_fea in categorical_features:    
	print(cat_fea + "的特征分布如下:")    
	print("{}特征有个{}不同的值".format(cat_fea, Train_data[cat_fea].nunique()))
	print(Train_data[cat_fea].value_counts())    			    	
  • 1
  • 2
  • 3
  • 4

在这里插入图片描述

# 特征nunique分布
for cat_fea in categorical_features:    
	print(cat_fea + "的特征分布如下:")    	
	print("{}特征有个{}不同的值".format(cat_fea, TestA_data[cat_fea].nunique())

	print(Train_data[cat_fea].value_counts())            
  • 1
  • 2
  • 3
  • 4
  • 5

在这里插入图片描述

1.1.2、特征分析

研究类别特征对price 的影响。

# 因为 name和 regionCode的类别太稀疏了,这里我们把不稀疏的几类画一下
categorical_features = ['model', 'brand', 'bodyType', 'fuelType', 'gearbox', 'notRepairedDamage']
for c in categorical_features:    
	Train_data[c] = Train_data[c].astype('category')    
	if Train_data[c].isnull().any():        
		Train_data[c] = Train_data[c].cat.add_categories(['MISSING'])        
		Train_data[c] = Train_data[c].fillna('MISSING')
def boxplot(x, y, **kwargs):    
	sns.boxplot(x=x, y=y)    
	x=plt.xticks(rotation=90)
f = pd.melt(Train_data, id_vars=['price'], value_vars=categorical_features)
g = sns.FacetGrid(f, col="variable",  col_wrap=2, sharex=False, sharey=False, size=5)
g = g.map(boxplot, "value", "price")
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

在这里插入图片描述

关于DataFrame的category的详细讲解
类别特征的小提琴可视化

## 3) 类别特征的小提琴图可视化
catg_list = categorical_features
target = 'price'
for catg in catg_list :
    sns.violinplot(x=catg, y=target, data=Train_data)
    plt.show()
  • 1
  • 2
  • 3
  • 4
  • 5

在这里插入图片描述

类别特征的柱形图可视化

## 4) 类别特征的柱形图可视化
def bar_plot(x, y, **kwargs):    
	sns.barplot(x=x, y=y)    
	x=plt.xticks(rotation=90)
f = pd.melt(Train_data, id_vars=['price'], value_vars=categorical_features)
g = sns.FacetGrid(f, col="variable",  col_wrap=2, sharex=False, sharey=False, size=5)
g = g.map(bar_plot, "value", "price")
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

在这里插入图片描述
类别特征的每个类别频数可视化(count_plot)

def count_plot(x,  **kwargs):    
	sns.countplot(x=x)    
	x=plt.xticks(rotation=90)
f = pd.melt(Train_data,  value_vars=categorical_features)
g = sns.FacetGrid(f, col="variable",  col_wrap=2, sharex=False, sharey=False, size=5)
g = g.map(count_plot, "value")
  • 1
  • 2
  • 3
  • 4
  • 5

在这里插入图片描述

1.2、数字特征

计算数字特征和price 的相关性。

## 1) 相关性分析
price_numeric = Train_data[numeric_features]
correlation = price_numeric.corr()
print(correlation['price'].sort_values(ascending = False),'\n')
  • 1
  • 2
  • 3

在这里插入图片描述
查看数字特征之间的相关性

f , ax = plt.subplots(figsize = (7, 7))
plt.title('Correlation of Numeric Features with Price',y=1,size=16)
sns.heatmap(correlation,square = True,  vmax=0.8)
  • 1
  • 2

在这里插入图片描述
查看数字特征的偏度和峰度

## 2) 查看几个特征得 偏度和峰值
del price_numeric['price']
for col in numeric_features:    
	print('{:15}'.format(col),
	'Skewness: {:05.2f}'.format(Train_data[col].skew()) ,
	'   ' ,
	'Kurtosis: {:06.2f}'.format(Train_data[col].kurt())           
	)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

在这里插入图片描述

## 3) 每个数字特征得分布可视化
# melt()将列名转换为列数据(columns name → column values),重构DataFrame
f = pd.melt(Train_data, value_vars=numeric_features)
g = sns.FacetGrid(f, col="variable",  col_wrap=2, sharex=False, sharey=False)
g = g.map(sns.distplot, "value")
  • 1
  • 2
  • 3
  • 4
  • 5

在这里插入图片描述
可以看出匿名特征相对均分布

## 4) 数字特征相互之间的关系可视化
sns.set()
columns = ['price', 'v_12', 'v_8' , 'v_0', 'power', 'v_5',  'v_2', 'v_6', 'v_1', 'v_14']
sns.pairplot(Train_data[columns],size = 2 ,kind ='scatter',diag_kind='kde')
plt.show()
  • 1
  • 2
  • 3
  • 4

在这里插入图片描述

## 5) 多变量互相回归关系可视化
fig, ((ax1, ax2), (ax3, ax4), (ax5, ax6), (ax7, ax8), (ax9, ax10)) = plt.subplots(nrows=5, ncols=2, figsize=(24, 20))
# ['v_12', 'v_8' , 'v_0', 'power', 'v_5',  'v_2', 'v_6', 'v_1', 'v_14']
v_12_scatter_plot = pd.concat([Y_train,Train_data['v_12']],axis = 1)
sns.regplot(x='v_12',y = 'price', data = v_12_scatter_plot,scatter= True, fit_reg=True, ax=ax1)
v_8_scatter_plot = pd.concat([Y_train,Train_data['v_8']],axis = 1)
sns.regplot(x='v_8',y = 'price',data = v_8_scatter_plot,scatter= True, fit_reg=True, ax=ax2)
v_0_scatter_plot = pd.concat([Y_train,Train_data['v_0']],axis = 1)
sns.regplot(x='v_0',y = 'price',data = v_0_scatter_plot,scatter= True, fit_reg=True, ax=ax3)
power_scatter_plot = pd.concat([Y_train,Train_data['power']],axis = 1)
sns.regplot(x='power',y = 'price',data = power_scatter_plot,scatter= True, fit_reg=True, ax=ax4)
v_5_scatter_plot = pd.concat([Y_train,Train_data['v_5']],axis = 1)
sns.regplot(x='v_5',y = 'price',data = v_5_scatter_plot,scatter= True, fit_reg=True, ax=ax5)
v_2_scatter_plot = pd.concat([Y_train,Train_data['v_2']],axis = 1)
sns.regplot(x='v_2',y = 'price',data = v_2_scatter_plot,scatter= True, fit_reg=True, ax=ax6)
v_6_scatter_plot = pd.concat([Y_train,Train_data['v_6']],axis = 1)
sns.regplot(x='v_6',y = 'price',data = v_6_scatter_plot,scatter= True, fit_reg=True, ax=ax7)
v_1_scatter_plot = pd.concat([Y_train,Train_data['v_1']],axis = 1)
sns.regplot(x='v_1',y = 'price',data = v_1_scatter_plot,scatter= True, fit_reg=True, ax=ax8)
v_14_scatter_plot = pd.concat([Y_train,Train_data['v_14']],axis = 1)
sns.regplot(x='v_14',y = 'price',data = v_14_scatter_plot,scatter= True, fit_reg=True, ax=ax9)
v_13_scatter_plot = pd.concat([Y_train,Train_data['v_13']],axis = 1)
sns.regplot(x='v_13',y = 'price',data = v_13_scatter_plot,scatter= True, fit_reg=True, ax=ax10)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/675355
推荐阅读
相关标签
  

闽ICP备14008679号