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

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

作者: 小螳螂 | 来源:发表于2019-01-04 12:22 被阅读0次

    知识点

    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()
    

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/psuhrqtx.html