• python数据特征预处理


    一、属性规约

    在进行数据预处理的过程中,如果数据的某一列都是一样的或者属性是一样的,那么这一列对我们的预测没有帮助,应该将这一列去掉,pandas中如果某一列属性值相同,但是此列中有缺失值(NaN),pandas会默认其有两个属性,我们在进行此操作的过程中应该首先去掉缺失值,然后检查唯一性。代码如下;

    orig_columns = loans_2007.columns
    drop_columns = []
    for col in orig_columns:
        col_series = loans_2007[col].dropna().unique()
        if len(col_series) == 1:
            drop_columns.append(col)
    loans_2007 = loans_2007.drop(drop_columns, axis=1)
    

    二、缺失值

    用下面的代码进行缺失值查看数据中每一列的缺失值情况,对于缺失值比较多的列,可以直接删除,对于缺失值比较少的列可以删除其样本,或者填充其他值代替。

    null_counts = loans.isnull().sum()

    缺失值处理方法:

    参考:https://www.zhihu.com/question/26639110

    beh_tgt_mergeA.dropna(how='all')  #dropna默认丢弃任何含有缺失值的行,传入how='all'则之丢弃全为NaN的行或列
    beh_tgt_mergeA.dropna(how='all',axis=1)  #丢弃列
    beh_tgt_mergeA.dropna(thresh=3)  #另一个参数是thresh,该参数的类型为整数,thresh=3,会在一行中至少有 3 个非 NA 值时将其保留。
    beh_tgt_mergeA.dropna(axis=1,thresh=3)  #保留至少存在3个非NaN的列

        df.dropna(subset=['C'])     # 只有当NaN出现在特定列(这里:“C”)时,才会删除行。  

    检测数据集中是否有缺失值

    # 第一种
    np.isnan(appdata).any()
    
    # 第二种
    app_train.isnull().sum()
    
    # 第三种
    cols = avg_buro.columns
    for col in cols:
        if avg_buro[col].isnull().sum() != 0:
            print(col)
    print('No Missing')
    1. np.random.seed(1234)
    2. d1 = pd.Series(2*np.random.normal(size = 100)+3)
    3. d2 = np.random.f(2,4,size = 100)
    4. d3 = np.random.randint(1,100,size = 100)
    5. d1.count() #非空元素计算
    6. d1.min() #最小值
    7. d1.max() #最大值
    8. d1.idxmin() #最小值的位置,类似于R中的which.min函数
    9. d1.idxmax() #最大值的位置,类似于R中的which.max函数
    10. d1.quantile(0.1) #10%分位数
    11. d1.sum() #求和
    12. d1.mean() #均值
    13. d1.median() #中位数
    14. d1.mode() #众数
    15. d1.var() #方差
    16. d1.std() #标准差
    17. d1.mad() #平均绝对偏差
    18. d1.skew() #偏度
    19. d1.kurt() #峰度
    20. d1.describe() #一次性输出多个描述性统计指标

    缺失值填充的几种方法:

    # 均值填充
    selectdata1['beta'] = selectdata1['beta'].fillna(selectdata1['beta'].mean())
    # 众数填充
    selectdata1['beta'] = selectdata1['beta'].fillna(selectdata1['beta'].mode())
    # 前一个数填充
    selectdata1['beta'] = selectdata1['beta'].fillna(method='pad') 
    #后一个数填充
    selectdata1['beta']=selectdata1['beta'].fillna(method='bfill')
    #插值填充
    selectdata1['beta']=selectdata1['beta'].interpolate()

    对于一批数据来说,如果缺失值在40%~60%之间的话,可以将是否缺失作为一个特征;如果缺失超过70%,其实可以将这个特征删除,缺失值在20%~30%的,对于数值型数据,可以将填充众数,对于类别型数据,可以填充最多的类别。

    data['EMI_Loan_Submitted_Missing'] = data['EMI_Loan_Submitted'].apply(lambda x: 1 if pd.isnull(x) else 0)
    

      

    三、字符转化

    print(loans.dtypes.value_counts())
    object_columns_df = loans.select_dtypes(include=["object"]) #选择字符型的属性

    用上面的代码看每一列的属性,sklearn不能处理字符型的,只能接受数值型的。对于字符型的可以进行如下处理:

    mapping_dict = {
        "emp_length": {
            "10+ years": 10,
            "9 years": 9,
            "8 years": 8,
            "7 years": 7,
            "6 years": 6,
            "5 years": 5,
            "4 years": 4,
            "3 years": 3,
            "2 years": 2,
            "1 year": 1,
            "< 1 year": 0,
            "n/a": 0
        }
    }
    loans = loans.replace(mapping_dict)
    loans = loans.drop(["last_credit_pull_d", "earliest_cr_line", "addr_state", "title"], axis=1)
    loans["int_rate"] = loans["int_rate"].str.rstrip("%").astype("float")
    

     对于能枚举的可以做一个字典,然后对数据做一个replace,对于有“%”的列,可以直接去掉百分号就好了。

     四、样本不均衡问题

    1、数据增强

    2、加权重项

    (1)(lr = LogisticRegression(class_weight="balanced"))

    (2)自己设置,传到class_weight中如下:

    penalty = {
        0: 5,
        1: 1
    }
    lr = LogisticRegression(class_weight=penalty)
    

    3、多个模型融合

     五、删除指定行

    filtered1_beh_tgt_mergeA[(filtered1_beh_tgt_mergeA['var1639'].isin([121505.0,121504.0]))]
    test = list(filtered1_beh_tgt_mergeA.var1639)
    test.remove(121505.0)
    test.remove(121504.0)
    filtered1_beh_tgt_mergeA = filtered1_beh_tgt_mergeA[filtered1_beh_tgt_mergeA.var1639.isin(test)]
    

      

    既然无论如何时间都会过去,为什么不选择做些有意义的事情呢
  • 相关阅读:
    js获取input file文件二进制码
    nginx新手入门
    代码神器Atom,最常用的几大插件,你值得拥有。
    css3 3d 与案例分析
    express搭建简易web的服务器
    hosts文件管理和nginx总结
    css3 3D
    问题大神
    面试题整理
    版本控制简介,git使用----使用GitHub托管代码
  • 原文地址:https://www.cnblogs.com/xiaodongsuibi/p/9031139.html
Copyright © 2020-2023  润新知