zoukankan      html  css  js  c++  java
  • 数据预处理 | 使用 OneHotEncoder 及 get_dummuies 将分类型数据转变成哑变量矩阵

    【分类数据的处理】

    问题:

      在数据建模过程中,很多算法或算法实现包无法直接处理非数值型的变量,如 KMeans 算法基于距离的相似度计算,而字符串则无法直接计算距离

    如:

      性别中的男和女 [0,1] [1,0]

      用户的价值度分为高、中、低

     

    处理方法:

      将字符串表示的 分类特征 转换成 数值 类型(哑变量矩阵)

      导入数据:

    import pandas as pd
    from sklearn.preprocessing import OneHotEncoder
    
    # 生成数据
    df = pd.DataFrame({'id': [3566841, 6541227, 3512441],
                       'sex': ['male', 'Female', 'Female'],
                       'level': ['high', 'low', 'middle'],
                       'score': [1, 2, 3]})

    方法 1 :使用 sklearn 库的 OneHotEncoder

    # 获得ID列(还保留二维的形式,等一会儿还要拼回去)
    id_data = df[['id']]
    # 指定要转换的列
    test_data = df.iloc[:,1:]
    
    # 建立标志转换模型对象(也称为哑编码对象)
    onehot_model = OneHotEncoder()
    df1 = onehot_model.fit_transform(test_data).toarray()
    
    # 拼接
    df_all = pd.concat((id_data, pd.DataFrame(df1)), axis=1)

      完成转换~

     注:

      1> 通过 OneHotEncoder 后,得到一个矩阵对象,

    # 得到的 df1 是一个矩阵对象 <3x8 sparse matrix of type '<class 'numpy.float64'>'
    df1 = onehot_model.fit_transform(test_data)

      2> 矩阵进行 toarray() 后,得到 array 对象, 得到的 array 要进一步转化成 DataFrame,才能使用 pd.concat 完成拼接

    df1 = pd.DataFrame(df1.toarray())
    df_all = pd.concat([id_data,df1],axis=1)

    方法二:使用 pandas 的 get_dummuies 

      此方法只会对非数值类型的数据做转换

    id_data = df.id
    test_data = df.iloc[:,1:]
    
    test_data_dum = pd.get_dummies(test_data)  # 核心代码
    df_dum = pd.concat([id_data, test_data_dum],axis=1)

      保留数值型特征 score,对非数值型的 sex 和 level 进行了转换

     

  • 相关阅读:
    2020年MongoDB 企业应用实战 基础 复制集 分片集群
    2020年Redis5.0 从入门到企业应用实战
    2020年Jumpserver1.5.8企业生产部署指南
    python单例与数据库连接池
    python 异常处理
    python 正则
    python 多线程
    python 队列
    python 闭包与装饰器
    程序员面试资源集锦
  • 原文地址:https://www.cnblogs.com/ykit/p/12375732.html
Copyright © 2011-2022 走看看