特征变量和y值的可视化

一、标签为数值变量

一般常见于回归相关的问题。

1.1类别变量+数值标签

关于类别变量与数值标签的关系,我们一般会观察下面的结果。

  1. 每个类别情况下对应的均值,这个可以直接使用pandas进行绘制;
  2. 均值反映的信息并不十分详细,如果希望得到更加具体的分布,可以使用boxplot进行绘制。

如果不同类别之间的标签分布相差较大,则说明该类别信息是非常有有价值的,如果所有类别的标签都是一样的分布,则该类别信息的区分度相对较低。

数据链接 https://tianchi.aliyun.com/competition/entrance/231784/information,可以看我另一篇文章:https://www.cnblogs.com/cgmcoding/p/13279789.html

 

1. pandas直接绘图

手动挡和自动挡的价格分布

#%%导入模块
import pandas as pd 
import numpy as np
from scipy import stats
import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline
plt.rc("font",family="SimHei",size="12")  #解决中文无法显示的问题
import pycard as pc

#波士顿房价数据集
df = pd.read_csv('D:/迅雷下载/used_car_train_20200313.csv',sep=' ')


var   = 'gearbox'
label = 'price'
df.groupby(var)[label].mean().plot(kind = 'bar')

 2. boxplot绘图

plt.figure(figsize=[10,6])
sns.boxplot(x=var, y=label, data=df)

 但是当该特征的类别特别多的时候,不建议画图

 

1.2数值变量+数值标签

关于数值变量与数值标签的关系,我们一般会观察下面的结果。

  • 数值特征与数值标签的pearson相关系数;如果该数值的绝对值越大,往往说明该特征能为模型带来非常大的帮助。
  • 观察数值特征与数值标签的时候,一般采用散点图即可,也可以使用regplot绘制出拟合的曲线。

1. person相关系数

df[['v_0',label]].corr('pearson')

 2. scatter绘图

plt.scatter(x='v_0', y = label, data = df);
plt.xlabel('v_0')
plt.ylabel(label)

 3. regplot绘图

sns.regplot(x=df['v_0'] , y=df[label])

1.3 时间变量+数值标签

关于时间与数值标签,我们主要希望随着时间变化,数据是否表现除了某些特殊的模式(周期性等),以及是否出现了明显的异常现象等等。时间变量与数值变量的可视化直接使用plot函数即可。

1. plot绘图

df['creatDate'] = pd.to_datetime(df['creatDate'], format='%Y%m%d', errors='coerce')
                           
plt.plot(df.creatDate, df[label].values, color='black', linestyle='--', linewidth='1', label=label)

plt.xlabel('creatDate', fontsize=14)   
plt.ylabel(label, fontsize=16)     

二、标签为二元变量

一般常见于二分类问题。

2.1 类别变量+二元标签

关于类别变量与二元标签的关系可以直接通过barplot函数进行可视化,如果不同类之间的分布差不大,那说明该类别变量大概率是意义不大的。

df = pd.read_csv('E:/谷歌下载/seaborn-data-master/titanic.csv')
var    = 'pclass'
label  = 'survived'
df.groupby(var)[label].mean()
'''
pclass
1    0.629630
2    0.472826
3    0.242363
Name: survived, dtype: float64
'''

画图

sns.barplot(x=var,  y=label , data=df)

2.2 数值变量+二元标签

数值变量与二元标签的关系一般可以通过下面的两种方式分析:

  • 对数值变量进行分桶,然后基于类别变量与二元标签的关系进行分析;
  • 使用boxplot函数,观测在不同标签下,数值特征的分布差异。
sns.boxplot(df[label], df['fare'])

2.3标签为N(>2)元类别变量

也就是我们常说的多分类问题。在观测标签为多分类的问题时,因为标签是多个类别的,我们可以通过两种策略对其进行观察。

  • 将多分类转化为多个二分类然后进行观测,这么做最大的问题是我们需要分析量大大增加了,会使得问题变得更加繁琐;
  • 采用和数值变量+二元标签的策略对模型进行观测。
'''
    随机模拟产出多分类标签
'''
multi_label = 'y_generated'
df['y_generated'] = np.random.randint(low =0.5, high = 3.5, size = df.shape[0])

3.1 类别变量+N标签

直接使用countplot,将hue的位置设置为标签的名称即可。

sns.countplot(x='pclass', hue=multi_label, data=df)
plt.ylabel('Number of Occurrences', fontsize=12)
plt.xlabel(multi_label, fontsize=12)
plt.show()

3.2 数值变量+N元标签

直接使用boxplot即可,观测在每个类处数值变量的分布情况。如果所有类处的数值变量分布都类似,那可能该数值变量带来的影响会相对较小,反之影响较大。

sns.boxplot(x=multi_label, y='age', data=df)
plt.ylabel('Age distribution', fontsize=12)
plt.xlabel(multi_label, fontsize=12)
plt.show()

 文章参考:https://mp.weixin.qq.com/s/yPhrYp7gL28W5H5GatmCXA,只做笔记,不做商业用途

原文地址:https://www.cnblogs.com/cgmcoding/p/14623153.html