当前位置: 首页 > news >正文

数据科学 - 数据预处理 (数据清洗,结构化数据)

1. 前言

数据清洗与结构化数据在数据分析和机器学习项目中扮演着至关重要的角色。随着大数据时代的到来,数据的质量、准确性和可用性成为决定项目成功与否的关键因素。

数据清洗提高数据质量,保证数据集的一致性;促进数据分析与挖掘,进一步提高模型质量与准确性,减少错误决策的风险。 

2. 数据集的删补

2.1 数据集的删除操作

train_Data.drop('CapitalLoss',axis=1,inplace=True) #对于某一列进行操作

2.2 数据集的修改操作 

train[0] #获取数据的第0列
train.iloc[0,1] #获取数据的第0行第1列

在DataFrame中默认索引是列,所以如列表一般[]是列索隐

想要获取数据库中某一特定数据使用loc或者iloc(行列索引),[行,列]

train_Data.iloc[0,1] = 3 #针对特定数据进行修改

与赋值一样,获取特定数据后可以直接赋新值进行替代。

 

train_Data[0].replace(2,3,inplace=True) #将第0行中为2的数据替换为3
train_Data.replace(' ?',pd.NaT,inplace=True) #数据集中为字符?替换为缺失值

也可以使用replace函数进行针对性替代。

 

2.3  数据集的增添操作

train_Data[6] = 7 #新增一列,这列数据为7

直接在原数据集中进行添加。 

df1 = pd.DataFrame({'A':[1,2],'B':[2,3]})
df2 = pd.DataFrame({'A':[3,4],'B':[4,5]})
df3 = pd.concat([df1,df2],axis=0,ignore_index=True) #行对齐
df4 = pd.concat([df1,df2],axis=1) #列对齐

concat函数可以将多个表格进行拼接。

3. 规范化标签

3.1 标签编码

最简单粗暴的方法,通过对每一列标签进行判断,逐个对标签进行数值化

Data['sex'][Data['sex'] == 'Male'] = 1
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder() #初始化
le.fit_transform(train_Data) #对这一列数据进行标签数值化

 对于调用的LabelEncoder模型我们需要将其初始化之后再使用。

for column in train_Data.columns: #遍历数据集的每一列if train_Data[column].dtype = 'object':train_Data[column] = le.fit_transform(train_Data[column])

通过循环的方式,将每一列标签中数值类型为object的标签进行数值化:

上述代码展示了将标签进行规范化,LabelEncoder将标签转化为从0-n的数值标签,互不重复。 

 但标签编码也有其局限性:

标签编码将分类数据转换为数字数据,但它为每个数据类别分配一个唯一的数字(从0开始)。这可能导致在数据集的模型训练期间产生优先级问题。具有高值的标签可以被认为具有比具有较低值的标签高的优先级。

3.2 独热编码

3.2.1 使用pandas库

df1 = pd.DataFrame({'Str':['A','A','B','B','C']})
df1.get_dummies(df1,columns=['Str'])

 

在回归,分类,聚类等机器学习算法中,特征之间距离的计算或相似度的计算是非常重要的,而我们常用的距离或相似度的计算都是在欧式空间的相似度计算,计算余弦相似性,基于的就是欧式空间。

而我们使用one-hot编码,将离散特征的取值扩展到了欧式空间,离散特征的某个取值就对应欧式空间的某个点。

 通俗而言,独热编码将各属性平等化,每一个属性权重,优先级等都一样。

3.2.2 使用Sklearn库

data = pd.DataFrame({'Str':['A','B','A','C']})form sklearn.preprocessing import OneHotEncoder
enc = OneHotEncoder()
enc.fit(data) #将数据库data中的数据编码
enc.transform([['A']]).toarray() #将字符A根据原有规则进行转码
#由于OneHotEncoder返回的是稀疏矩阵,所以需要使用toarray函数将矩阵转换enc.fit_transform(data).toarray()

根据打印结果,字符A代表编码[1,0,0],字符B代表编码[0,1,0],C代表编码为[0,0,1] 

在这里补充一下稀疏矩阵的知识:

import numpy as np  
from scipy.sparse import csr_matrix  # 创建一个稀疏矩阵  
data = np.array([1, 2, 3, 4, 5, 6])  
row_ind = np.array([0, 0, 1, 2, 2, 2])  
col_ind = np.array([0, 2, 2, 0, 1, 2])  
sparse_matrix = csr_matrix((data, (row_ind, col_ind)), shape=(3, 3))  
print(sparse_matrix)dense_matrix = sparse_matrix.toarray()  # 打印转换后的 NumPy 数组  
print("\nDense Matrix:")  
print(dense_matrix)

 

稀疏矩阵是一种用于存储和操作大型矩阵的方法,这些矩阵中大部分元素都是零,因此使用专门的数据结构来存储非零元素及其位置,可以大大节省内存和计算资源。简单来讲稀疏矩阵将矩阵中为0的部分省略,例如上述括号代表数字在矩阵中的位置。

通过toarray函数将矩阵进行还原。

独热编码优缺点:

优点:为处理离散型特征提供了方法,在一定程度上扩充了特征属性。

缺点:当特征的类别很多时,特征空间会变得非常大,在这种情况下,一般可以用PCA来减少维度。

如果离散特征的取值之间没有大小意义时,可以使用独热编码,例如学习成绩优>良>及格。

 

4. 数据集的标签还原

Data['sex'][Data['sex'] == 1] = 'Male' #选中列标签后新增一个中括号[]里面加入判定条件
# 如果你需要查看原始标签到整数的映射  
print(le.classes_)  # 输出: ['bird' 'cat' 'dog'],注意这不是按字母顺序的  # 如果你需要将整数转换回原始标签  
labels_decoded = le.inverse_transform(labels_encoded)  
print(labels_decoded)  # 输出: ['dog' 'cat' 'bird' 'dog' 'cat']

如果通过使用LabelEncoder将标签数值化,也可以使用同样的方式将标签还原 .

5. 参考资料

机器学习:数据预处理之独热编码(One-Hot)详解-CSDN博客

Python中的标签编码和独热编码示例详解_python_脚本之家

Adult数据集分析及四种模型实现-CSDN博客

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • window安装elasticsearch和可视化界面kibana
  • 企业级-实现Nginx的静态文件服务器映射
  • JVM(Java虚拟机) - JVM内存分配与内存管理
  • 发送邮箱调用接口时需要注意哪些安全事项?
  • [CP_AUTOSAR]_系统服务_DEM模块(一)功能及模块间依赖关系介绍
  • 数据结构初阶之排序(上)
  • 前端的学习-CSS(弹性布局-flex)
  • go语言day21 goland使用gin框架、gorm框架操作mysql数据库redis数据库 使用宝塔创建redis数据库
  • NIO专题学习(一)
  • 计算右侧小于当前元素的个数
  • 【C++】—— 类与对象(二)
  • [Git][认识Git]详细讲解
  • 【启明智显分享】适用于多功能养生壶、茶吧机的2.8寸触摸彩屏解决方案
  • uni-app封装组件实现下方滑动弹出模态框
  • NeRF学习——复现训练中的问题记录
  • (十五)java多线程之并发集合ArrayBlockingQueue
  • 【vuex入门系列02】mutation接收单个参数和多个参数
  • 【跃迁之路】【641天】程序员高效学习方法论探索系列(实验阶段398-2018.11.14)...
  • 4月23日世界读书日 网络营销论坛推荐《正在爆发的营销革命》
  • CSS盒模型深入
  • iOS小技巧之UIImagePickerController实现头像选择
  • Java 实战开发之spring、logback配置及chrome开发神器(六)
  • Java编程基础24——递归练习
  • JS+CSS实现数字滚动
  • MySQL的数据类型
  • oldjun 检测网站的经验
  • php面试题 汇集2
  • Python爬虫--- 1.3 BS4库的解析器
  • Python中eval与exec的使用及区别
  • Redis 懒删除(lazy free)简史
  • SSH 免密登录
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • 安卓应用性能调试和优化经验分享
  • 将 Measurements 和 Units 应用到物理学
  • 你真的知道 == 和 equals 的区别吗?
  • 浅析微信支付:申请退款、退款回调接口、查询退款
  • 设计模式(12)迭代器模式(讲解+应用)
  • 使用Tinker来调试Laravel应用程序的数据以及使用Tinker一些总结
  • 数据结构java版之冒泡排序及优化
  • 一道闭包题引发的思考
  • const的用法,特别是用在函数前面与后面的区别
  • 阿里云ACE认证之理解CDN技术
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (3)医疗图像处理:MRI磁共振成像-快速采集--(杨正汉)
  • (4.10~4.16)
  • (delphi11最新学习资料) Object Pascal 学习笔记---第13章第1节 (全局数据、栈和堆)
  • (Oracle)SQL优化基础(三):看懂执行计划顺序
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (Qt) 默认QtWidget应用包含什么?
  • (分享)自己整理的一些简单awk实用语句
  • (剑指Offer)面试题41:和为s的连续正数序列
  • (免费领源码)python+django+mysql线上兼职平台系统83320-计算机毕业设计项目选题推荐
  • (深度全面解析)ChatGPT的重大更新给创业者带来了哪些红利机会
  • (转载)Google Chrome调试JS
  • *算法训练(leetcode)第三十九天 | 115. 不同的子序列、583. 两个字符串的删除操作、72. 编辑距离