机器学习:数据预处理——数据清洗
创作时间:
作者:
@小白创作中心
机器学习:数据预处理——数据清洗
引用
CSDN
1.
https://m.blog.csdn.net/weixin_65047977/article/details/142035173
数据清洗是机器学习数据预处理中的关键步骤,它涉及去除重复数据、处理缺失值、统一数据格式、纠正数据错误、处理异常值等多个环节。本文通过一个矿物数据集的实例,详细介绍了数据清洗的具体步骤和Python代码实现,帮助读者更好地理解和掌握这一重要环节。
一、数据清洗
1.数据清洗是什么
数据清洗是指在数据分析过程中,对原始数据进行处理和整理的过程,以提高数据的质量和可用性。这是数据预处理中的一个关键步骤。
2.数据清洗步骤
- 去除重复数据:识别并删除重复记录。
- 处理缺失值:填补缺失值或删除包含缺失值的记录。
- 统一数据格式:统一数据格式,如日期、时间或数值单位。
- 纠正数据错误:修正数据中的错误和不一致,如拼写错误或错误的分类。
- 处理异常值:检测和处理数据中的异常值或离群点。
- 数据一致性检查:确保数据在不同数据源或表之间的一致性。
- 数据转换:将数据转换成适合分析的格式,例如归一化、编码分类变量等。
3.数据清洗示例
- 图片只截取了部分数据做演示
- 原始数据
- 经过数据清洗之后的数据
- 可以看到缺失值都进行了填充,特殊符号进行了去除,数据进行了z标准化的转换
二、数据清洗代码实现
1.完整代码
import pandas as pd
import fill_data
data = pd.read_excel('矿物数据.xls') # 导入数据
data = data[data['矿物类型'] != 'E'] # 去除数据量很少的类别
null_num = data.isnull()
# isnull() 会返回一个相同形状的DataFrame,但其中的元素是布尔值(True或False)。
# 如果原始DataFrame中的某个位置是缺失值(通常是NaN,即"Not aNumber”),
# 则对应位置在返回的DataFrame中会被标记为True;否则,标记为False。
# 注:还有空白处也是nan,isnull未包含空自处。
null_total = null_num.sum() # 检测每一列的缺失值个数
x_whole = data.iloc[:, 1:-1] # 取出特征数据
y_whole = data['矿物类型'] # 取出标签数据
# 将数据中的中文标签转换为字符
label_dict = {"A": 0, "B": 1, "C": 2, "D": 3}
encode_labels = [label_dict[label] for label in y_whole] # 将y_whole中的字母转换成数字并储存在列表里
y_whole = pd.Series(encode_labels, name='矿物类型') # 将原本的y_whole替换成encode_labels
# 数据中存在大量字符串数值、|、空格等异常数据。字符串数值直接转换为float,\和空格转换为nan
for column_name in x_whole.columns:
x_whole[column_name] = pd.to_numeric(x_whole[column_name], errors='coerce')
# pd.to_numeric()函数尝试将参数中的数据转换为数值类型。如果转换失败,它会引发一个异常
# 设置errors='coerce',会将无法转换的值设置为NaN
"""-----------------数据标准化: Z标准化-------------"""
from sklearn.preprocessing import StandardScaler
std = StandardScaler()
x_whole_z = std.fit_transform(x_whole) # 转换之后储存在矩阵里
x_whole = pd.DataFrame(x_whole_z, columns=x_whole.columns) # z标准化处理后为numpy数据,这里再转换成pandas数据
2.代码步骤解析
1.导入库和数据
初步去除异常数据:
在这份数据里,分类为E的数据只有一条,无法使用,直接去除
import pandas as pd
import fill_data
data = pd.read_excel('矿物数据.xls') # 导入数据
data = data[data['矿物类型'] != 'E'] # 去除数据量很少的类别
2.检测有无缺失值
null_num = data.isnull()
# isnull() 会返回一个相同形状的DataFrame,但其中的元素是布尔值(True或False)。
# 如果原始DataFrame中的某个位置是缺失值(通常是NaN,即"Not aNumber”),
# 则对应位置在返回的DataFrame中会被标记为True;否则,标记为False。
# 注:还有空白处也是nan,isnull未包含空自处。
null_total = null_num.sum() # 检测每一列的缺失值个数
输出:
将数据的列名和该列有多少失值存入Series类型数据
3.标签数字化
- 取出特征数据和标签数据
- 将标签数据中的字母转换成数字
x_whole = data.iloc[:, 1:-1] # 取出特征数据
y_whole = data['矿物类型'] # 取出标签数据
# 将数据中的中文标签转换为字符
label_dict = {"A": 0, "B": 1, "C": 2, "D": 3}
encode_labels = [label_dict[label] for label in y_whole] # 将y_whole中的字母转换成数字并储存在列表里
y_whole = pd.Series(encode_labels, name='矿物类型') # 将原本的y_whole替换成encode_labels
4.去除异常数据
- 将字符串类型数据转换成数值类型
- 特殊符号或者空格转换成nan
# 数据中存在大量字符串数值、|、空格等异常数据。字符串数值直接转换为float,\和空格转换为nan
for column_name in x_whole.columns:
x_whole[column_name] = pd.to_numeric(x_whole[column_name], errors='coerce')
# pd.to_numeric()函数尝试将参数中的数据转换为数值类型。如果转换失败,它会引发一个异常
# 设置errors='coerce',会将无法转换的值设置为NaN
输出:
5.标准化数据
- 将数据进行z标准化
- 得到的结果是矩阵
- 将其转换成DF表格数据
"""-----------------数据标准化: Z标准化-------------"""
from sklearn.preprocessing import StandardScaler

std = StandardScaler()
x_whole_z = std.fit_transform(x_whole) # 得到的结果是矩阵
x_whole = pd.DataFrame(x_whole_z, columns=x_whole.columns) # z标准化处理后为numpy数据,这里再转换成pandas数据
输出:
总结
至此数据清洗已经完成了大部分,剩下缺失值填充的几种方法将在下一篇进行介绍
热门推荐
绿心蚕豆成减肥新宠,科学证实抗性淀粉助减重
《周髀算经》揭秘勾股定理千年奥秘
从剂量到禁忌:一文读懂奥美拉唑的正确使用
末代皇帝溥仪:临终前不愿断气,只为等一人到场,61岁死于尿毒症
扬州冬季旅游攻略:瘦西湖、大明寺必打卡,个园、何园、东关街全攻略
科学预防冬季鸡拉稀:饲料调整与环境管理双管齐下
青岛人教你挑选最新鲜的鲅鱼:从选购到烹饪全攻略
老龄化下的口腔健康挑战:现状、影响与对策
五本经典书籍里的生命智慧,伴你成长
从第一颗牙开始:儿童口腔保健实用指南
入选十大前沿技术,具身智能或成AI发展新引擎
打完新冠疫苗拉肚子怎么办?
烘焙入门指南:从零开始制作美味糕点
50岁后的夫妻关系:在亲密与独立间找到平衡
李清照最懒的一首诗,一个“花”字重复了17次,却成千古名作
如何优雅拒绝不讲理的女同事?
“国际橘”东京塔:64年历史见证,动漫中的经典地标
2024可持续社会价值创新大会在京召开,聚焦科技企业助力全球目标
酒后散步真的有害健康吗?
帝度全自动洗衣机排水故障解决方法(排水不畅)
冲动、傲慢、孤僻:高智商人群的社交挑战
三大系统构建高效导视:解密购物中心标识设计
自动驾驶汽车中的PCIe接口技术揭秘
中央汇金增持ETF创历史新高,外资加速布局A股市场
2024年中国新能源汽车销量破千万,全球市场份额近七成
冬笋怎么处理涩味留久一点(2个去除冬笋麻涩味的简单方法)
奇亚籽护心大作战,你get了吗?
从重庆伤人案看伤情鉴定:五步流程保障司法公正
蛋白质、维生素和含血食物:胸腔积液患者的饮食良方
黄氏响声丸治疗咽喉炎效果好,这些使用禁忌需谨记