机器学习笔记01——数据EDA(探索性数据分析)入门

知识点

  1. 数据属性分布分析(概率密度分析/是否呈现正态分布)

  2. 数据属性与Target之间的相关性(correlation协方差:值域[-1,1],映射到余弦相似度cos距离)

  3. 缺失属性相关性分析--进行合理的填充

  4. 构造属性和构造属性的相关性分析


阶段 1

train2 = pd.read_csv('./train.csv')

01.相关函数

  1. pd.get_dummies 函数
    默认对category and object 进行one-hot 编码。也可以对指定列进行编码。eg:

    pd.get_dummies(train2,columns=['col']#指定列
    pd.get_dumnies(train2)
    
    
  2. train2.get_dtype_counts() 查看数据的类型统计

    float64     3
    int64      35
    object     43
    dtype: int64
    
  3. 统计数据每列为空的数据个数的统计

     tmp = train2.isnull().sum()
     tmp[tmp> 0]
    

    输出:

         LotFrontage      259
         Alley           1369
         MasVnrType         8
         MasVnrArea         8
         BsmtQual          37
         BsmtCond          37
         BsmtExposure      38
         BsmtFinType1      37
         BsmtFinType2      38
         Electrical         1
         FireplaceQu      690
         GarageType        81
         GarageYrBlt       81
         GarageFinish      81
         GarageQual        81
         GarageCond        81
         PoolQC          1453
         Fence           1179
         MiscFeature     1406
         dtype: int64
    

02.相关性(协方差矩阵推出的相关系数矩阵【Pearson correlation coefficient】)

值域:【-1,1】
|r| >= 0.95 显著关系 (显著的关系需要概率 该特征是否与目标有很强的关联关系)(报价和成交价,这样的话可能考虑去掉,否则影响判断)
|r| >= 0.8 强相关
|r| >= 0.5 中度相关
0.5 >=|r| >= 0.3 弱相关 (部分数据与该特征可能存在较强的相关性)(草率的 可以去掉,待挖掘)(楼房屋顶和顶楼的成交价)
|r| < 0.3 极弱相关 
  1. 获取相关系数矩阵

     train.corr()#相关系数矩阵
    
  2. 获取指定列的相关系数矩阵

     corr = train.corr()["SalePrice"]#与房价的标签 相关性
     corr[corr>0.5].sort_values()
     #corr[corr<0]
    
  3. 相关性可视化

     #导入包:
    
     import seaborn as sns
     import matplotlib.pyplot as plt
     %matplotlib inline #功能是可以内嵌绘图,并且可以省略掉plt.show()这一步
     
     #绘图
     plt.figure(figsize=(30,30))
     sns.heatmap(train2.corr(),linewidth=0.01,square=True,cmap='viridis',annot=True)
    

    输出:

下载.png
*seaborn.heatmap解析*     

```
seaborn.heatmap(
data,
vmin=None, 
vmax=None, 
cmap=None, 
center=None,
robust=False, 
annot=None, 
fmt='.2g', 
annot_kws=None, 
linewidths=0, 
linecolor='white', 
cbar=True, 
cbar_kws=None, 
cbar_ax=None, 
square=False, 
xticklabels='auto', 
yticklabels='auto',
mask=None, 
ax=None, 
**kwargs)
  ```
参数名称 描述 值域/示例
data 要显示的数据 ax=sns.heatmap(data)
vmin,vmax 显示数据值的最大和最小范围 ax=sns.heatmap(data,vmin=0,vmax=1
cmap matplotlib颜色表名称或对象,或颜色列表,可选从数据值到色彩空间的银蛇,如果没有提供,默认设置 ax = sns.heatmap(data,vmin=0, vmax=1, cmap = 'GnBu')
center 指定色彩的中心值 ax = sns.heatmap(data,vmin=0, vmax=1, cmap = 'GnBu', center=0.7)
annot 如果为True,则将数据值写入每个单元格中 ax = sns.heatmap(data,vmin=0, vmax=1, cmap = 'GnBu', center=0.5,robust=False,annot=True) #Set1
robust 如果“True”和“vmin”或者“vmax"不存在,则使用强分位数计算颜色映射范围,而不是极值 ax = sns.heatmap(data,vmin=0, vmax=1, cmap = 'GnBu', center=0.5, robust=False) #Set1
fmt 表格里显示数据的类型 fmt ='.0%'#显示百分比;fmt ='f' 显示完整数字 = fmt ='g';fmt ='.3'显示小数的位数 = fmt ='.3f' = fmt ='.3g'
annot_kws 未知 未知
linewidths 划分每个单元格的线条宽度 ** 0.01
linecolor 划分每个单元格的线的颜色 **
cbar 是否绘制颜色条:colorbar 默认绘制
square 为‘True’时,整个网格为一个正方形 True
xticklabels, yticklabels 可以以字符串进行命名,也可以调节编号的间隔,也可以不显示坐标 1)ax = sns.heatmap(uniform_data,cmap = 'RdBu', center=0,cbar = True, square=False,xticklabels =['12','22'])#字符串命名;2)ax = sns.heatmap(uniform_data,cmap = 'RdBu', center=0,cbar = True, square = False,xticklabels =2)#编号间隔为2;3)ax = sns.heatmap(uniform_data,cmap = 'RdBu', center=0,cbar = True, square = False,xticklabels =False)#不显示坐标
mask boolean array or DataFrame, optionalIf passed, data will not be shown in cells where mask is True. Cells with missing values are automatically masked. >>>mask = np.zeros_like(corr)>>>mask[np.triu_indices_from(mask)] = Truewith>>>sns.axes_style("white"):>>>ax = sns.heatmap(corr, mask=mask, vmax=.3, square=True)
示例代码:
        
        import numpy as np;
        np.random.seed(0)
        import seaborn as sns; sns.set()
        import matplotlib.pyplot as plt
        data = np.random.rand(10, 12)
        f, ax = plt.subplots(figsize=(8,5))
        ax = sns.heatmap(data,cmap = 'RdBu',ax=ax,vmin=0, vmax=1,annot=True,fmt ='0.1g')
        #设置坐标字体方向
        label_y = ax.get_yticklabels()
        plt.setp(label_y, rotation=45,          horizontalalignment='right')
        label_x = ax.get_xticklabels()
        plt.setp(label_x, rotation=45,          horizontalalignment='right')
        plt.xlabel('x.num')#设置坐标名称
        plt.ylabel('y.num')
        plt.title('Plotting')#标题
        plt.show()
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容