数据分析——数据清洗之文字特征编码
在对数据进行预处理时,有时会面临特征值是字符串类型的时候,这时候就需要对特征值进行编码处理,主要分为一下两类:
- 各个特征值之间没有任何关联,如['red', 'green', 'blue']。
- 各个特征值之间有关系,如['Excellent', 'Good', 'Normal', 'Bad']。
下面分别说一下如何对以上两种类型数据进行编码处理:
拿kaggle中的House Price数据来举例说明。
import pandas as pddf = pd.read_csv('./data/train.csv')
columns = ['MSZoning','ExterQual']
df_used = df[columns]
print(df_used)
使用到的两列的意义分别如下,很明显MSZoning是没有任何关联的,而ExterQual是对房屋材质进行的评价,是有等级划分的。
MSZoning: Identifies the general zoning classification of the sale.A AgricultureC CommercialFV Floating Village ResidentialI IndustrialRH Residential High DensityRL Residential Low DensityRP Residential Low Density ParkRM Residential Medium DensityExterQual: Evaluates the quality of the material on the exteriorEx ExcellentGd GoodTA Average/TypicalFa FairPo Poor
一、各个特征值之间没有任何关联
下面通过四种方法来处理这类问题。
1、pd.get_dummies()
看下源码:作用是将categorical变量转换为指标型变量。
def get_dummies(data, prefix=None, prefix_sep='_', dummy_na=False,columns=None, sparse=False, drop_first=False):"""Convert categorical variable into dummy/indicator variablesParameters----------data : array-like, Series, or DataFrameprefix : string, list of strings, or dict of strings, default NoneString to append DataFrame column namesPass a list with length equal to the number of columnswhen calling get_dummies on a DataFrame. Alternativly, `prefix`can be a dictionary mapping column names to prefixes.prefix_sep : string, default '_'If appending prefix, separator/delimiter to use. Or pass alist or dictionary as with `prefix.`dummy_na : bool, default FalseAdd a column to indicate NaNs, if False NaNs are ignored.columns : list-like, default NoneColumn names in the DataFrame to be encoded.If `columns` is None then all the columns with`object` or `category` dtype will be converted.sparse : bool, default FalseWhether the dummy columns should be sparse or not. ReturnsSparseDataFrame if `data` is a Series or if all columns are included.Otherwise returns a DataFrame with some SparseBlocks... versionadded:: 0.16.1drop_first : bool, default FalseWhether to get k-1 dummies out of n categorical levels by removing thefirst level... versionadded:: 0.18.0Returns-------dummies : DataFrame or SparseDataFrame
df_used = pd.get_dummies(df_used, columns=['MSZoning'])
print(df_used.head())
ExterQual MSZoning_C (all) MSZoning_FV MSZoning_RH MSZoning_RL \
0 Gd 0.0 0.0 0.0 1.0
1 TA 0.0 0.0 0.0 1.0
2 Gd 0.0 0.0 0.0 1.0
3 TA 0.0 0.0 0.0 1.0
4 Gd 0.0 0.0 0.0 1.0 MSZoning_RM
0 0.0
1 0.0
2 0.0
3 0.0
4 0.0
从结果来看,它为每一个单独的列特征创建了一个单独的列,并进行了one-hot编码。 另外,直接对dataframe转换的话,每个列名之前都会有之前列名作为前缀。
2、sklearn.preprocessing.LabelEncoder
熟悉sklearn的话应该用过sklearn.preprocessing.OneHotEncoder,然而OneHotEncoder只能对数值类型进行编码,而LabelEncoder可以对字符类型进行编码处理。
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
result = le.fit_transform(df_used['MSZoning'])
df_used['MSZoning'] = result
print(df_used.head())
这里会报一个copy的warn:http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
不过没有什么影响,结果如下。
MSZoning ExterQual
0 3 Gd
1 3 TA
2 3 Gd
3 3 TA
4 3 Gd
5 3 TA
3、使用map函数
通过enumerate内置函数来为列属性中的所有值建立索引,然后将索引来代替之前的值。
map_MSZoning = {key : value for value, key in enumerate(set(df['MSZoning']))}
df_used['MSZoning'] = df_used['MSZoning'].map(map_MSZoning)
print(df_used.head())
MSZoning ExterQual
0 2 Gd
1 2 TA
2 2 Gd
3 2 TA
4 2 Gd
4、使用pd.factorize()
pd.factorize()不像pd.get_dummies()那样将一个特征映射为多个特征,而只是对该特征内的特征值进行编码。
def factorize(values, sort=False, order=None, na_sentinel=-1, size_hint=None):"""Encode input values as an enumerated type or categorical variableParameters----------values : ndarray (1-d)Sequencesort : boolean, default FalseSort by valuesna_sentinel : int, default -1Value to mark "not found"size_hint : hint to the hashtable sizerReturns-------labels : the indexer to the original arrayuniques : ndarray (1-d) or Indexthe unique values. Index is returned when passed values is Index orSeriesnote: an array of Periods will ignore sort as it returns an always sortedPeriodIndex"""
df['MSZoning'] = pd.factorize(df['MSZoning'])[0]
print(df['MSZoning'])
二、各个特征值之间具有一定关系
通过map函数映射。
map_ExterQual = {'Ex':5, 'Gd':4, 'TA':3, 'Fa':2, 'Po':1}
df_used['ExterQual'] = df_used['ExterQual'].map(map_ExterQual)
print(df_used.head())
MSZoning ExterQual
0 RL 4
1 RL 3
2 RL 4
3 RL 3
4 RL 4
数据分析——数据清洗之文字特征编码相关推荐
- 大数据分析数据清洗的价值和意义
在这个由物联网(IoT),社交媒体,边缘计算以及越来越多的计算能力(如量子计算)支持的数字时代,数据可能是任何企业最有价值的资产之一.正确(或不正确)的数据管理将对企业的成功产生巨大影响.换句话说,它 ...
- 数据分析--数据清洗详解流程
无论是做机器学习还是做数据分析,都离不开获取数据后的第一步-数据清洗工作.据统计,数据清洗工作占据整个工作时间百分之50左右,有的甚至能达到百分之70.下面我将介绍我进行数据清洗得思路流程. 数据清洗 ...
- 动手学数据分析 | 数据清洗及特征处理(二)
接上篇动手学数据分析 | 数据基础操作(一),下面代码为本篇内容的基本代码准备工作. import numpy as np import pandas as pddf = pd.read_csv('t ...
- 3_数据分析—数据清洗及特征处理
文章目录 一.数据导入 二.数据清洗简述 2.1 缺失值-观察与处理 2.1.1 缺失值观察(2种方法) 2.1.2 对缺失值进行处理 2.1.3 对缺失值进行填充 2.2 重复值-观察与处理 2.2 ...
- 数据分析----数据清洗
一.导入数据 import pandas as pd import numpy as np from pandas import Series,DataFrame import xlrd df = D ...
- 旅游网站大数据分析 - 数据清洗
第1关:清洗HTML文档中无意义数据 将获取到携程网的城市酒店的HTML数据(包含了所有元素)进行清洗,得到我们需要的标签数据. package step1;import java.io.File; ...
- javaweb解决编码问题_停止尝试编码解决问题的方法
javaweb解决编码问题 抽象 (Abstract) Here's the situation. I need to build a test harness to verify that when ...
- python数据清理的实践总结_Python数据清洗实践
原标题:Python数据清洗实践 DATA CLEANING WITH PYTHON 作者 | Balogun Omobolaji 翻译 | 酱番梨.祝弟弟基督教 校对 | Pita 审核 | 约翰逊 ...
- pandas用众数填充缺失值_python数据分析包|Pandas-02之缺失值(NA)处理
本篇详解pandas中缺失值(Missing data handling)处理常用操作. 缺失值处理常用于数据分析数据清洗阶段:Pandas中将如下类型定义为缺失值: NaN: '', '#N/A', ...
最新文章
- 原来腾讯面试题也不难,面试官:给我说一下你理解的分布式架构?
- python程序运行时间计时软件_python 计时程序运行时间
- 利用辗转相除法计算最大公约数
- YBTOJ洛谷P1407:稳定婚姻(强连通分量)
- mysql查看sql代价_mysql 代价
- webpack4.0各个击破(3)—— Assets篇
- 吴恩达深度学习1.4练习_Neural Networks and Deep Learning
- 逻辑数据库设计 - 单纯的树(邻接表、路径枚举、嵌套集、闭包表)(引)
- aspnet还有人用吗_微信公众号软件安装管家会员真的那么好吗
- Silverlight 获得鼠标位置
- iPhone 12 要来了,手机是时候换到 11 了
- C语言C++编程软件推荐及下载方式
- 保险场景化与场景即保险——新保险
- 材料科学基础考研计算机,2017年西安工业大学计算机学院805材料科学基础考研仿真模拟题...
- OpenGL 纹理基础与索引
- 浅析LruCache原理
- 我的首个电子书软件--嘎嘎读书 的开发(四)
- maven工程提示pom.xml无法解析org.apache.maven.plugins:maven-resources-...
- 微信如何直接跳转外部浏览器
- 华为鸿蒙电视可以装软件吗,华为智慧屏V系列可以安装第三方软件吗?分享安装当贝市场教程...
热门文章
- Java设计模式之装饰模式(透明装饰模式,半透明装饰模式)
- 通达信小股民MACD二次金叉三全项柱面积指标公式 源码 副图
- QNX演示自动在CES 2016驱动模块-QNX自动驾驶
- [论文记录] 2019 - Utilizing Arousal-Valence Relationship for Continuous Prediction of Valence in Movies
- win7计算机里桌面菜单没有反应,win7系统鼠标右键点击桌面没反应怎么办 鼠标右键没反应解决方法...
- 渗透武器库---信息收集工具大全
- 【BMI指数计算器V2.0】项目实战
- 直流电路中升降压(Buck-Boost)变换电路的设计、参数选取及Matlab/Simulik仿真
- 《蚂蚁塔防》Antbuster
- 免费药店收银系统哪个好?