Python下数值型与字符型类别变量独热编码(One-hot Encoding)实现
- 1 OneHotEncoder
- 2 pd.get_dummies
在数据处理与分析领域,数值型与字符型类别变量的编码是不可或缺的预处理操作。本文基于Python下OneHotEncoder
与pd.get_dummies
两种方法,对机器学习中最优的编码方法——独热编码加以实现。
1 OneHotEncoder
首先导入必要的模块。
import pandas as pd
from sklearn.preprocessing import OneHotEncoder
其中,OneHotEncoder
是我们实现独热编码的关键模块。
接下来,导入并显示数据前五行。
test_data_1=pd.read_csv('G:/CropYield/03_DL/00_Data/onehot_test.csv',names=['EVI0610','EVI0626','SoilType'],header=0)
test_data_1.head(5)
关于这里导入数据代码的解释,大家可以查看博客1与博客2,这里就不再赘述啦~
数据前五行展示如下图。其中,前两列'EVI0610'
与'EVI0626'
为数值型连续变量,而'SoilType'
为数值型类别变量。我们要做的,也就是将第三列'SoilType'
进行独热编码。
接下来,进行独热编码的配置。
ohe=OneHotEncoder(handle_unknown='ignore')
ohe.fit(test_data_1)
在这里,第一行是对独热编码的配置,第二行则是对我们刚刚导入的数据进行独热编码处理。得到一个独热编码配置的输出结果。
接下来,看看独热编码处理后,将我们的数据分成了哪些类别。
ohe.categories_
得到结果如下图。
可以发现,一共有三个array
,为什么呢?仔细看可以发现,独热编码是将我们导入的三列数据全部都当作类别变量来处理了。之所以会这样,是因为我们在一开始没有表明哪一列是类别变量,需要进行独热编码;而哪一列不是类别变量,从而不需要进行独热编码。
那么,我们如何实现上述需求,告诉程序我们要对哪一行进行独热编码呢?在老版本的sklearn
中,我们可以借助categorical_features=[x]
参数来实现这一功能,但是新版本sklearn
取消了这一参数。那么此时,一方面,我们可以借助ColumnTransformer
来实现这一过程,另一方面,我们可以直接对需要进行转换的列加以处理。后者相对较为容易理解,因此本文对后者进行讲解。
我们将test_data_1
中的'SoilType'
列作为索引,从而仅仅对该列数据加以独热编码。
ohe_column=pd.DataFrame(ohe.fit_transform(test_data_1[['SoilType']]).toarray())
ohe_column.head(5)
其中,[['SoilType']]
表示仅仅对这一列进行处理。得到结果如下图。
可以看到,原来的'SoilType'
列现在成为了63列的编码列,那么这样的话,说明我们原先的'SoilType'
应该一共是有63个不同的数值。是不是这个样子呢?我们来检查一下。
count=pd.DataFrame(test_data_1['SoilType'].value_counts())
print(count)
得到结果如下。
好的,没有问题:可以看到此结果共有63行,也就是'SoilType'
列原本是有63个不同的值的,证明我们的独热编码没有出错。
此时看一下我们的test_data_1
数据目前长什么样子。
test_data_1.head(5)
是的,我们仅仅对'SoilType'
列做了处理,没有影响到整个初始数据。那么先将原本的'SoilType'
列剔除掉。
test_data_1=test_data_1.drop(['SoilType'],axis=1)
test_data_1.head(5)
再将经过独热编码处理后的63列加上。
test_data_1.join(ohe_column)
大功告成!
但是这里还有一个问题,我们经过独热编码所得的列名称始以数字来命名的,非常不方便。因此,有没有什么办法可以在独热编码进行的同时,自动对新生成的列加以重命名呢?
2 pd.get_dummies
pd.get_dummies
是一个最好的办法!其具体用法与上述OneHotEncoder
类似,因此具体过程就不再赘述啦,大家看代码就可以明白。
首先还是导入与上述内容中一致的初始数据。
test_data_2=pd.read_csv('G:/CropYield/03_DL/00_Data/onehot_test.csv',names=['EVI0610','EVI0626','SoilType'],header=0)
test_data_2.head(5)
进行独热编码并看看结果。
test_data_2_ohe=pd.get_dummies(test_data_2,columns=['SoilType'])
test_data_2_ohe.head(5)
最终结果中,列名称可以说是非常醒目,同时,共有65列数据,自动删除了原本的'SoilType'
列,实现了“独热编码”“新列重命名”与“原始列删除”,可谓一举三得,简直是太方便啦~
欢迎关注公众号:疯狂学习GIS
Python下数值型与字符型类别变量独热编码(One-hot Encoding)实现相关推荐
- 机器学习类别/标称(categorical)数据处理:独热编码(One Hot Encoding)
机器学习类别/标称(categorical)数据处理:独热编码(One Hot Encoding) 序号编码:序号编码通常用于处理类别间具有大小关系的数据 可以通过导入sklearn.preproce ...
- python 独热码_数据预处理:独热编码(One-Hot Encoding)
问题由来 在很多机器学习任务中,特征并不总是连续值,而有可能是分类值. 例如,考虑一下的三个特征: ["male", "female"] ["from ...
- 独热编码python实现_详解深度学习中的独热编码
很多人开始接触深度学习,数据处理遇到第一个专业英文术语就是one-hot encode(独热编码),很多初学者就会迷茫,这个东西是什么意思,其实说的直白点所谓的独热编码最重要的就是把一组字符串或者数字 ...
- python 独热码_One-hot coding(独热编码)
在数据预处理中,为了方便模型的输入,常常会把非数值类型量化成数值类型. 其中比较简单的一种处理离散型数值编码方式叫one-hot coding(独热编码) 1.概念 独热编码即 One-Hot 编码, ...
- 前端:JS/17/前篇总结(JS程序的基本语法,变量),数据类型-变量的类型(数值型,字符型,布尔型,未定义型,空型),数据类型转换,typeof()判断数据类型,从字符串提取整数或浮点数的函数
JS程序的基本语法 1,JS是区分大小写的,如:Name和name是不同的: 2,JS中每一条语句,一般以英文的分号(;)结束,在Java中是严格地一定要加上分号,不然会报错:但在JavaScript ...
- R语言学习2.1.数值型与字符型
知识点补充 1.标量:只有一个元素的向量为标量 2.判断数据类型的方法 (1)class(变量) (2)is.数据类型(变量) #TRUE:是,FALSE:否 1.数值型(numeric) 赋值方式 ...
- c语言中长整型变量的值一定大于短整型常量的值,c语言第3讲 常量、变量与标志符 整型、实型、字符型数据.ppt...
c语言第3讲 常量.变量与标志符 整型.实型.字符型数据 第3讲 常量.变量与标志符 整型.实型.字符型数据 2.1-2.5 常量.变量与标识符 例2.1 符号常量的使用 2. 变量 3. 标识符 标 ...
- [初级]Java中的switch对整型、字符型、字符串的具体实现细节
转载自 [初级]Java中的switch对整型.字符型.字符串的具体实现细节 Java 7中,switch的参数可以是String类型了,这对我们来说是一个很方便的改进.到目前为止switch支持这样 ...
- python json.loads()中文问题-解决Python下json.loads()中文字符出错的问题
Python:2.7 IDE:Pycharm5.0.3 今天遇到一个问题,就是在使用json.load()时,中文字符被转化为Unicode码的问题,解决方案找了半天,无解.全部代码贴出,很简单的一个 ...
最新文章
- Android 隐式跳转(Activity的隐式跳转)
- 自查自纠 | 线性回归,你真的掌握了嘛?
- ping php支付,thinkphp框架中引出ping++支付server SDK
- hadoop的三大核心组件之HDFS和YARN
- 在ECR上推送Spring Boot Docker映像
- JavaScript 字符串转数字
- 一种软件定时器/超时机制的实现方法
- awx文件解析,运用NCL处理风云卫星2E的AWX格式数据的总结
- 安卓模拟器调试GPS
- STM32电机控制--API函数应用
- get/post在线接口
- psd文件怎样导出html5,PSD格式的文件怎么转换成CAD格式?
- ubuntu 16 打开 dmg 文件
- symbian3 java游戏测试,Symbian^3愤怒的小鸟测试版C7首发实测
- 13 个非常有用的 Python 代码片段,建议收藏
- 计算机电脑为什么0无法输入,电脑浏览器网页无法输入文字该怎么办?
- scrollTop记录滚动位置
- 关于%(取余)和 /(取整)的解释
- dnf搬砖代码Python_让搬砖变得轻松——python操作excel用的脚本
- 微信大号平台运营简谈