美文网首页
数据分析之特征工程

数据分析之特征工程

作者: ShowMeCoding | 来源:发表于2020-09-18 21:13 被阅读0次

    1 数据总体了解

    读取数据集并了解数据集大小,原始特征维度; 通过info熟悉数据类型; 粗略查看数据集中各特征基本统计量;

    • 数据集查看常用函数
    # 1 查看数据集的原始特征维度
    data_train.shape
    
    # 2 查看数据集特征的个数、类型
    data_train.info()
    
    # 3 查看每个特征的基本统计量,包括特征样本数,中位数,标准差,极值等
    data_train,describe()
    
    # 4 查看数据集前几行,默认前5行
    data_train.head()
    

    2 缺失值和唯一值

    查看数据缺失值情况,查看唯一值特征情况

    • 常用代码
    # 1 查看样本的缺失率
    miss = data_train.isnull().sum()/len(data_train)
    

    缺失值处理方法:

    • 缺失率较高,直接删除该特征
    • 缺失率较低,自行填充
    # 1 查找特征属性只有一值的特征
    one_value_fea = [col for col in data_train.columns if data_train[col].nunique() <= 1]
    
    • 对于只有一值的特征,对预测结果几乎没有贡献,直接删除

    3 深入数据-查看数据类型

    • 特征一般都是由类别型特征和数值型特征组成,而数值型特征又分为连续型和离散型。
    • 类别型特征有时具有非数值关系,有时也具有数值关系。比如‘grade’中的等级A,B,C等,是否只是单纯的分类,还是A优于其他要结合业务判断。
    • 数值型特征本是可以直接入模的,但往往风控人员要对其做分箱,转化为WOE编码进而做标准评分卡等操作。从模型效果上来看,特征分箱主要是为了降低变量的复杂性,减少变量噪音对模型的影响,提高自变量和因变量的相关度。从而使模型更加稳定。
    • 常用代码
    # 1 分离出数值型特征
    numerical_fea = list(data_train.select_dtypes(exclude=['object']).columns)
    
    # 2 分离出类别型特征
    category_fea = list(filter(lambda x: x not in numerical_fea,list(data_train.columns)))
    
    # 3 过滤数值型类别特征
    def get_numerical_serial_fea(data,feas):
        numerical_serial_fea = []
        numerical_noserial_fea = []
        for fea in feas:
            temp = data[fea].nunique()
            if temp <= 10:
                numerical_noserial_fea.append(fea)
                continue
            numerical_serial_fea.append(fea)
        return numerical_serial_fea,numerical_noserial_fea
    numerical_serial_fea,numerical_noserial_fea = get_numerical_serial_fea(data_train,numerical_fea)
    
    • 可以用过滤出离散型(numerical_noserial_fea)和连续型变量(numerical_serial_fea)
    • 查看某一个数值型变量的分布,查看变量是否符合正态分布,如果不符合正态分布的变量可以log化后再观察下是否符合正态分布。
    • 如果想统一处理一批数据变标准化 必须把这些之前已经正态化的数据提出
    • 正态化的原因:一些情况下正态非正态可以让模型更快的收敛,一些模型要求数据正态(eg. GMM、KNN),保证数据不要过偏态即可,过于偏态可能会影响模型预测结果。

    例如将特征loanAmnt 进行log处理

    #Ploting Transaction Amount Values Distribution
    plt.figure(figsize=(16,12))
    plt.suptitle('Transaction Values Distribution', fontsize=22)
    plt.subplot(221)
    sub_plot_1 = sns.distplot(data_train['loanAmnt'])
    sub_plot_1.set_title("loanAmnt Distribuition", fontsize=18)
    sub_plot_1.set_xlabel("")
    sub_plot_1.set_ylabel("Probability", fontsize=15)
    
    plt.subplot(222)
    sub_plot_2 = sns.distplot(np.log(data_train['loanAmnt']))
    sub_plot_2.set_title("loanAmnt (Log) Distribuition", fontsize=18)
    sub_plot_2.set_xlabel("")
    sub_plot_2.set_ylabel("Probability", fontsize=15)
    

    4 数据间相关关系

    特征和特征之间关系 特征和目标变量之间关系

    #透视图 索引可以有多个,“columns(列)”是可选的,聚合函数aggfunc最后是被应用到了变量“values”中你所列举的项目上。
    pivot = pd.pivot_table(data_train, index=['grade'], columns=['issueDateDT'], values=['loanAmnt'], aggfunc=np.sum)
    pivot
    

    5 用pandas_profiling生成数据报告

    import pandas_profiling
    
    pfr = pandas_profiling.ProfileReport(data_train)
    pfr.to_file("./example.html")
    

    相关文章

      网友评论

          本文标题:数据分析之特征工程

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