数据分析预处理 -字符型类别变量(string)

在数据分析时,会遇到一些非数值型的类别变量,例如字符串类型(string)。比如,西瓜的色泽:青绿、浅白、乌黑等等…直接放在svm、决策树或者贝叶斯分类器时,不方便处理,也直接套用sklearn中的内置算法。因而在预处理时需要对他们做相应的处理。

一般可以把类别数据分为:无序和有序两类。
有序:比如衣服尺码,S、M、L、XL,是有大小的;再比如拥堵指数,数值由0变化到4随拥堵加剧
无序:比如衣服颜色,黑、白、黄、蓝、绿,是没有大小(优劣)序列的类别

(1)有序序列

我们可以用map函数,将字符型类别替换成有大小顺序的数值。

# 定义一个DataFrame数据
data = pd.DataFrame([
["green", "S", 100,"label1"],
["blue", "M", 110,"label2"],
["red", "X", 120,"label3"],
["black", "XL", 130,"label4"]
])
# 设置列名
data.columns = ["color", "size", "price","label"]
#通过枚举获取类标与整数之间的映射关系
label_mapping = {label:idx for idx,label in enumerate(np.unique(data["label"]))}
print(label_mapping)
#对label列进行映射
data["size_label"] = data["label"].map(label_mapping)
print(data)

结果:
在这里插入图片描述

(2)无序类别

我们对上面衣服的颜色特征进行编码,将颜色映射为{“green”:0,“blue”:1,“red”:2,“black”:3}。看起来这样映射好像没什么问题,真的没有问题吗?实则不然,我们这样映射实际上给颜色强加了一个大小关系,即black>red>blue>green,实际上颜色是不存在这种关系的,很显然结果肯定也不是最优的。这时,我们可以通过独热编码(one-hot encoding)来解决这一类问题。独热编码是通过创建一个新的虚拟特征,虚拟特征的每一列各代表标称数据的一个值。例如,颜色一共有四个取值green、blue、red、black,独热编码是通过四位二进制来表示,如果是green就表示为[1,0,0,0],对应的颜色是[green,blue,red,black],如果属于哪一种颜色,则取值为1,否则为0。

第一步:先对离散的数字、离散的文本、离散的类别进行编号,使用 LabelEncoder,LabelEncoder会根据取值的种类进行标注。

import sklearn.preprocessing as pre_processing
import numpy as np
 
label=pre_processing.LabelEncoder()
labels=label.fit_transform(['中国','美国','法国','德国'])
print(labels)

第二步:然后进行独热编码,使用OneHotEncoder

labels=np.array(labels).reshape(len(labels),1) #先将X组织成(sample,feature)的格式
 
onehot=pre_processing.OneHotEncoder()
onehot_label=onehot.fit_transform(labels)
print(onehot_label.toarray())   #这里一定要进行toarray()

注意:在使用OneHotEncoder进行OneHot编码的时候,需要先将字符串转换成为整数之后才能进行OneHot编码,不然会报错。

也可以通过pandas模块的get_dummies起到同样的作用。
与onehot两者区别是:get_dummies用于对一个数据集处理,而onehot由于提前设定了labelEncoder,所以可以对不同的数据集用同一种转换设定。(我觉得)

# 数据预处理
# 由于色泽、根蒂...都是string,且不可比较大小的变量,调用get_dummyColumns方法进行不可比较大小虚拟变量的转换。
# 以西瓜色泽为例
# (对于可比较大小的虚拟变量,比如‘12个月定存’、‘6个月定存’、‘1个月定存’...)使用Map方法比较虚拟变量的转换
dummyColumns = ['色泽']

'''
for column in dummyColumns:
    data[column] = data[column].astype('category')
'''
dummiesData = pd.get_dummies(data,
                            columns = dummyColumns, prefix=dummyColumns,
                            prefix_sep = '_', dummy_na=False, drop_first = False)

结果:
在这里插入图片描述
参考:

  1. https://blog.csdn.net/qq_27825451/article/details/83823665
  2. https://www.cnblogs.com/xitingxie/p/11312045.html
  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
第1章 单片机基础 1.1 单片机技术发展状况 1.2 51系列单片机体系结构 1.2.1 内部结构 1.2.2 存储器组织结构 l.2.3 内部功能模块 l.2.4 外部引脚 1.2.5 系统资源扩展 1.3 单片机的编程方法 第2章 C语言编程基础 2.1 基本概念 2.1.1 概述 2.1.2 变量与算术表达式 2.1.3 for语句 2.1.4 符号常量 2.2 数据类、运算符和表达式 2.2.1 C语言的数据类 2.2.2 常量与变量 2.2.3 整数据 2.2.4 实数据 2.2.5 字符数据 2.2.6 运算符 2.2.7 表达式 2.3 程序控制语句 2.3.1 程序的3种基本结构 2.3.2 条件控制语句 2.3.3 程序应用举例 2.4 循环控制语句 2.4.1 while语句 2.4.2 dowhile语句 2.4.3 for语句 2.4.4 break与continue语句 2.4.5 程序应用举例 2.5 小结 第3章 C语言高级编程 3.1 函数与程序结构 3.1.1 函数的基本知识 3.1.2 返回非整数值的函数 3.1.3 外部变量 3.1.4 作用域规则 3.1.5 头文件 3.1.6 静态变量 3.1.7 寄存器变量 3.1.8 分程序结构 3.1.9 初始化 3.1.10 递归 3.2 数组 3.2.1 一维数组 3.2.2 维数组 3.2.3 多维数组 3.2.4 数组的初始化 3.3 指针 3.3.1 指针与指针变量. 3.3.2 指针变量的定义与引用 3.3.3 指针运算符与指针表达式 3.3.4 指针与数组 3.3.5 指针的地址分配 3.3.6 指针数组 3.3.7 指向指针的指针 3.4 占构体与共用体 3.4.1 结构体类变量的定义和引用 3.4.2 结构体数组的定义和引用 3.4.3 结构体指针的定义和引用 3.4.4 共用体 3.5 小结 第4章C51程序设计 4.1 C51对标准C语言的扩展 4.1.1 存储区域 4.1.2 数据变量分类 4.1.3 存储器模式 4.1.4 绝对地址的访问 4.1.5 指针 4.1.6 函数 4.2 C5 1函数库 4.2.1 字符函数CTYPE.H 4.2.2 一般I/O函数STDIO.H 4.2.3 字符串函数STRING.H 4.2.4 标准函数STDLIB.H 4.2.5 数学函数MATH.H 4.2.6 绝对地址访问ABSACC.H 4.2.7 内部函数INTRINS.H 4.2.8 变量参数表STDARG.H 4.2.9 全程跳转SETJMPH 4.2.10 访问SFR和SFR bit地址REGxxx.H 4.3 C51程序编写 4.3.1 C程序基本结构 4.3.2 编写高效的C51程序及优化程序 第5章 Windows集成开发环境μVision2 5.1 μVision2编辑界面及其功能介绍 5.1.1 μVision2界面综述 5.1.2 主菜单栏 5.1.3 μVision2功能按钮 5.1.4 μVision2窗口环境 5.2 应用μVision2开发流程介绍 5.2.1 建立新项目 5.2.2 常用环境配置 5.2.3 代码优化 5.2.4 目标代码调试 5.3 CPU仿真 5.3.1 μVision2调试器 5.3.2 调试命令 5.3.3 存储器空间 5.3.4 表述(Expressions) 5.3.5 技巧 5.4 深入了解μVision2 5.4.1 μVision2的项目管理 5.4.2 使用技巧 5.4.3 μVision2调试函数 第6章 C5l编译器 6.1 预处理 6.1.1 宏定义 6.1.2 文件包含 6.1.3 条件编译 6.1.4 其他预处理命令 6.2 C51编译器控制指令详解 6.2.1 源控制指令 6.2.2 列表控制指令 6.2.3 目标控制指令 6.3 C5l的高级配置文件 6.3.1 目标程序启动配置文件——STARTUP.A51. 6.3.2 CPU初始化文件——START751.A51 6.3.3 静态变量初始化文件——INT.A51 6.3.4 专用变量初始化文件——INIT751.A51 第7章 C51的典资源编程 7.1 中断系统设计 7.2 定时/计数器的使用 7.3 I/O口的使用 7.4 扩展存储器 7.4.1 外部ROM 7.4.2 外部RAM 7.4.3 外部串行E2PROM 7.5
第1章 单片机基础 1.1 单片机技术发展状况 1.2 51系列单片机体系结构 1.2.1 内部结构 1.2.2 存储器组织结构 l.2.3 内部功能模块 l.2.4 外部引脚 1.2.5 系统资源扩展 1.3 单片机的编程方法 第2章 C语言编程基础 2.1 基本概念 2.1.1 概述 2.1.2 变量与算术表达式 2.1.3 for语句 2.1.4 符号常量 2.2 数据类、运算符和表达式 2.2.1 C语言的数据类 2.2.2 常量与变量 2.2.3 整数据 2.2.4 实数据 2.2.5 字符数据 2.2.6 运算符 2.2.7 表达式 2.3 程序控制语句 2.3.1 程序的3种基本结构 2.3.2 条件控制语句 2.3.3 程序应用举例 2.4 循环控制语句 2.4.1 while语句 2.4.2 dowhile语句 2.4.3 for语句 2.4.4 break与continue语句 2.4.5 程序应用举例 2.5 小结 第3章 C语言高级编程 3.1 函数与程序结构 3.1.1 函数的基本知识 3.1.2 返回非整数值的函数 3.1.3 外部变量 3.1.4 作用域规则 3.1.5 头文件 3.1.6 静态变量 3.1.7 寄存器变量 3.1.8 分程序结构 3.1.9 初始化 3.1.10 递归 3.2 数组 3.2.1 一维数组 3.2.2 维数组 3.2.3 多维数组 3.2.4 数组的初始化 3.3 指针 3.3.1 指针与指针变量. 3.3.2 指针变量的定义与引用 3.3.3 指针运算符与指针表达式 3.3.4 指针与数组 3.3.5 指针的地址分配 3.3.6 指针数组 3.3.7 指向指针的指针 3.4 占构体与共用体 3.4.1 结构体类变量的定义和引用 3.4.2 结构体数组的定义和引用 3.4.3 结构体指针的定义和引用 3.4.4 共用体 3.5 小结 第4章C51程序设计 4.1 C51对标准C语言的扩展 4.1.1 存储区域 4.1.2 数据变量分类 4.1.3 存储器模式 4.1.4 绝对地址的访问 4.1.5 指针 4.1.6 函数 4.2 C5 1函数库 4.2.1 字符函数CTYPE.H 4.2.2 一般I/O函数STDIO.H 4.2.3 字符串函数STRING.H 4.2.4 标准函数STDLIB.H 4.2.5 数学函数MATH.H 4.2.6 绝对地址访问ABSACC.H 4.2.7 内部函数INTRINS.H 4.2.8 变量参数表STDARG.H 4.2.9 全程跳转SETJMPH 4.2.10 访问SFR和SFR bit地址REGxxx.H 4.3 C51程序编写 4.3.1 C程序基本结构 4.3.2 编写高效的C51程序及优化程序 第5章 Windows集成开发环境μVision2 5.1 μVision2编辑界面及其功能介绍 5.1.1 μVision2界面综述 5.1.2 主菜单栏 5.1.3 μVision2功能按钮 5.1.4 μVision2窗口环境 5.2 应用μVision2开发流程介绍 5.2.1 建立新项目 5.2.2 常用环境配置 5.2.3 代码优化 5.2.4 目标代码调试 5.3 CPU仿真 5.3.1 μVision2调试器 5.3.2 调试命令 5.3.3 存储器空间 5.3.4 表述(Expressions) 5.3.5 技巧 5.4 深入了解μVision2 5.4.1 μVision2的项目管理 5.4.2 使用技巧 5.4.3 μVision2调试函数 第6章 C5l编译器 6.1 预处理 6.1.1 宏定义 6.1.2 文件包含 6.1.3 条件编译 6.1.4 其他预处理命令 6.2 C51编译器控制指令详解 6.2.1 源控制指令 6.2.2 列表控制指令 6.2.3 目标控制指令 6.3 C5l的高级配置文件 6.3.1 目标程序启动配置文件——STARTUP.A51. 6.3.2 CPU初始化文件——START751.A51 6.3.3 静态变量初始化文件——INT.A51 6.3.4 专用变量初始化文件——INIT751.A51 第7章 C51的典资源编程 7.1 中断系统设计 7.2 定时/计数器的使用 7.3 I/O口的使用 7.4 扩展存储器 7.4.1 外部ROM 7.4.2 外部RAM 7.4.3 外部串行E2PROM 7.5 一个使用多种资源的完整例程 7.5.1 项目需求 7.5.2 步进电机背景知识 7.5.3 解决方案设计与实现 第8章 单片机通信 8.1 串口通信 8.1.1 串行通信基础 8.1.2 单片机串口使用 8.2 单片机点对点通信 8.2.1 通信接口设计 8.2.2 单片机点对点通信程序设计 8.3 单片机多机通信 8.3.1 主机部分通信程序设计 8.3.2 从机部分通信程序设计 8.4 单片机I2C总线通信 8.4.1 I2C总线介绍 8.4.2 I2C总线硬件接口设计 8.4.3 I2C总线模拟硬件接口软件设计 8.4.4 I2C总线系统的设计要点 8.5 单片机与计算机的互连 8.5.1 电路设计 8.5.2电路的C5 1程序代码 8.5.3计算机端的Visual C++程序代码 第9章 C51单片机的工程开发实例 9.1 单片机系统设计方法 9.2 C51系统设计的相关知识 9.2.1 硬件以及电路的知识 9.2.2 软件以及编程语言的知识 9.3 C5l系统设计需要注意的一些问题 9.3.1 单片机资源的分配 9.3.2 单片机的寻址 9.3.3 C5 1函数的返回值 9.3.4 单片机的看门狗功能 9.3.5 单片机的外设 9.3.6 单片机的功耗 9.4 有关C51的一些问题 9.5 键盘和发光数码管显示 9.5.1 电路设计的背景及功能 9.5.2 电路的设计 9.5.3 键盘扫描电路的C51程序代码 9.5.4 电路的改进——键盘的消抖动程序 9.5.5 电路的显示部分-LED数码管电路 9.6 A/D、D/A转换器使用 9.6.1 电路设计的背景及功能 9.6.2 电路的设计 9.6.3 电路的C51程序代码 9.7 基于单片机的数字钟 9.7.1 电路设计的背景及功能 9.7.2 电路的设计 9.7.3 电路的C51程序代码 第10章 C5l单片机典模块实例 10.1 典外部ROM和RAM器件的使用 10.1.1 实例功能 10.1.2 器件和原理 10.1.3 电路 10.1.4 程序设计 10.2 液晶显示和驱动实例 10.2.1 实例功能 10.2.2 器件和原理 10.2.3 电路 lO.2.4 程序设计 10.3 用A/D芯片进行电压测量 10.3.1 实例功能 10.3.2 器件和原理 10.3.3 电路 10.3.4 程序设计 lO.4 使用DSl820进行温度补偿和测量 10.4.1 实例功能 10.4.2 器件和原理 10.4.3 电路 10.4.4 程序设计 10.5 语音芯片在单片机系统中的使用 10.5.1 实例功能 10.5.2 器件和原理 10.5.3 电路 10.5.4 程序设计 10.6 时钟芯片在单片机系统中的应用 10.6.1 实例功能 10.6.2 器件和原理 10.6.3 电路 10.6.4 程序设计 10.7 单片机中滤波算法的实现 10.8 信号数据的FFT变换
数据预处理数据分析中非常重要的一个环节,它可以让原始数据更加适合用于各种分析和建模任务。常见的数据预处理包括数据清洗、缺失值处理、异常值处理、特征选择、特征缩放和特征变换等。下面我们将介绍一些常见的数据预处理方法。 1. 数据清洗 数据清洗是指在数据中去除不合理、重复或者无效的数据,保证数据的完整性和准确性。常见的数据清洗方法包括: - 删除重复数据 - 去除异常值 - 去除不合理数据 - 填充缺失值 2. 缺失值处理 缺失值是指数据集中某些数据缺失的情况。常见的缺失值处理方法包括: - 删除缺失值 - 插值法填补缺失值 - 使用平均值、中位数、众数等统计量填补缺失值 3. 异常值处理 异常值是指数据集中不符合正常规律的数据。常见的异常值处理方法包括: - 删除异常值 - 修改异常值 - 使用插值法填补异常值 4. 特征选择 特征选择是指从原始数据中选择最具有代表性的特征,以便用于分析和建模。常见的特征选择方法包括: - 过滤式特征选择 - 包裹式特征选择 - 嵌入式特征选择 5. 特征缩放 特征缩放是指将不同量纲的特征缩放到相同的范围内。常见的特征缩放方法包括: - 标准化 - 归一化 - 对数变换 6. 特征变换 特征变换是指通过对原始数据进行某些变换,使得数据更适合用于分析和建模。常见的特征变换方法包括: - 主成分分析(PCA) - 线性判别分析(LDA) - 因子分析 以上就是一些常见的数据预处理方法,通过对数据进行适当的预处理,可以提高数据分析和建模的准确性和效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值