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

机器学习-- 如何清洗数据集

文章目录

  • 引言:
  • 数据清洗的具体步骤
  • 数据清洗的具体方法和示例
    • 1. 处理缺失值
    • 2. 去除重复数据
    • 3. 修正数据格式
    • 4. 处理异常值
    • 5. 标准化和归一化
    • 6. 处理不一致的数据
    • 7. 转换数据类型
    • 8. 数据集成
  • 总结

引言:

数据清洗是数据处理和分析的关键步骤,旨在确保数据的准确性、一致性和完整性。数据清洗包括处理缺失值、去除重复数据、修正数据格式、处理异常值等步骤。以下是数据清洗的具体方法和举例说明。

在这里插入图片描述

数据清洗的具体步骤

  1. 处理缺失值
  2. 去除重复数据
  3. 修正数据格式
  4. 处理异常值
  5. 标准化和归一化
  6. 处理不一致的数据
  7. 转换数据类型
  8. 数据集成

数据清洗的具体方法和示例

1. 处理缺失值

方法

  • 删除缺失值:适用于缺失值较少且随机分布的情况。
  • 填补缺失值:使用均值、中位数、众数填补,或使用插值、回归等方法填补。
  • 标记缺失值:用特定值(如 -1 或 “Unknown”)标记缺失数据。

示例
假设我们有一个包含员工信息的数据集,其中有些记录的年龄缺失。

import pandas as pd
import numpy as np# 创建示例数据集
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],'Age': [25, np.nan, 30, np.nan, 22],'Department': ['HR', 'Finance', 'IT', 'Marketing', 'IT']
}
df = pd.DataFrame(data)# 填补缺失值 - 使用均值填补
df['Age'].fillna(df['Age'].mean(), inplace=True)
print(df)

2. 去除重复数据

方法

  • 去除完全重复的行:删除所有列值都相同的重复行。
  • 去除部分重复的行:根据特定列(如ID或名称)去除重复行。

示例
假设我们有一个包含订单信息的数据集,其中有重复的订单记录。

# 创建示例数据集
data = {'OrderID': [1, 2, 2, 3, 4],'Product': ['A', 'B', 'B', 'C', 'D'],'Quantity': [1, 2, 2, 1, 3]
}
df = pd.DataFrame(data)# 去除重复行
df.drop_duplicates(inplace=True)
print(df)

3. 修正数据格式

方法

  • 转换数据格式:将日期、时间、货币等字段转换为统一格式。
  • 去除空白和特殊字符:清理字符串中的多余空格和特殊字符。

示例
假设我们有一个包含日期信息的数据集,其中日期格式不统一。

# 创建示例数据集
data = {'Date': ['2021-01-01', '01/02/2021', '2021.03.03', '2021-04-04']
}
df = pd.DataFrame(data)# 统一日期格式
df['Date'] = pd.to_datetime(df['Date'])
print(df)

4. 处理异常值

方法

  • 去除异常值:删除明显的异常数据。
  • 替换异常值:使用合理的数值替换异常值。
  • 标记异常值:标记异常数据以便进一步分析。

示例
假设我们有一个包含销售数据的数据集,其中有些记录的销售量异常。

# 创建示例数据集
data = {'Product': ['A', 'B', 'C', 'D', 'E'],'Sales': [100, 200, 3000, 400, 500]  # 3000 是异常值
}
df = pd.DataFrame(data)# 去除异常值 - 使用四分位数法去除异常值
Q1 = df['Sales'].quantile(0.25)
Q3 = df['Sales'].quantile(0.75)
IQR = Q3 - Q1
lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQRdf = df[(df['Sales'] >= lower_bound) & (df['Sales'] <= upper_bound)]
print(df)

5. 标准化和归一化

方法

  • 标准化:将数据转换为均值为0、标准差为1的标准正态分布。
  • 归一化:将数据缩放到特定范围(如0到1)。

示例
假设我们有一个包含不同量纲的特征的数据集。

from sklearn.preprocessing import StandardScaler, MinMaxScaler# 创建示例数据集
data = {'Feature1': [10, 20, 30, 40, 50],'Feature2': [1, 2, 3, 4, 5]
}
df = pd.DataFrame(data)# 标准化
scaler = StandardScaler()
df_standardized = pd.DataFrame(scaler.fit_transform(df), columns=df.columns)# 归一化
scaler = MinMaxScaler()
df_normalized = pd.DataFrame(scaler.fit_transform(df), columns=df.columns)print("Standardized Data:")
print(df_standardized)
print("\nNormalized Data:")
print(df_normalized)

6. 处理不一致的数据

方法

  • 统一数据格式和标准:统一度量单位、编码方式等。
  • 合并相同类别:将表示同一类别的不同标签合并。

示例
假设我们有一个包含部门信息的数据集,其中部门名称不一致。

# 创建示例数据集
data = {'Employee': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],'Department': ['HR', 'Finance', 'IT', 'marketing', 'it']
}
df = pd.DataFrame(data)# 统一部门名称
df['Department'] = df['Department'].str.lower().replace({'marketing': 'it'})
print(df)

7. 转换数据类型

方法

  • 转换数据类型:将数值型字符串转换为数值类型,日期字符串转换为日期类型等。

示例
假设我们有一个包含数值数据的数据集,但数据类型是字符串。

# 创建示例数据集
data = {'Value': ['1', '2', '3', '4', '5']
}
df = pd.DataFrame(data)# 转换数据类型
df['Value'] = df['Value'].astype(int)
print(df)

8. 数据集成

方法

  • 合并数据集:将多个数据源整合成一个完整的数据集。
  • 连接数据表:根据主键或外键进行表连接。

示例
假设我们有两个数据集,一个包含员工信息,另一个包含部门信息。

# 创建示例数据集
data1 = {'EmployeeID': [1, 2, 3],'Name': ['Alice', 'Bob', 'Charlie'],'DepartmentID': [101, 102, 101]
}
data2 = {'DepartmentID': [101, 102],'DepartmentName': ['HR', 'Finance']
}
df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)# 合并数据集
df_merged = pd.merge(df1, df2, on='DepartmentID')
print(df_merged)

总结

数据清洗是数据处理和分析中的重要步骤,旨在确保数据的准确性、一致性和完整性。通过处理缺失值、去除重复数据、修正数据格式、处理异常值、标准化和归一化、处理不一致的数据、转换数据类型和数据集成,可以大大提高数据的质量,为后续的数据分析和建模提供坚实的基础。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 利用CSS隐藏HTML元素并插入替代内容
  • 超详解——python数字和运算——小白篇
  • 【数据结构】【版本1.0】【线性时代】——顺序表
  • 网络安全技术实验一 信息收集和漏洞扫描
  • Objective-C 学习笔记 | 回调
  • 3038. 相同分数的最大操作数目 I(Rust模拟击败100%Rust用户)
  • 解决Spark流处理产生的小文件问题
  • C语言考试内容
  • LangChain + ChatGLM 实现本地知识库问答
  • 【C++】函数模板和类模版
  • 《精通ChatGPT:从入门到大师的Prompt指南》附录C:专业术语表
  • SpringBoot+Vue实现前后端分离基本的环境搭建
  • 王学岗鸿蒙开发(北向)——————(七、八)ArkUi的各种装饰器
  • Kafka 架构
  • 快速排序(Quick_Sort)
  • 【347天】每日项目总结系列085(2018.01.18)
  • 2019.2.20 c++ 知识梳理
  • Android优雅地处理按钮重复点击
  • C# 免费离线人脸识别 2.0 Demo
  • docker-consul
  • ES6简单总结(搭配简单的讲解和小案例)
  • JavaScript新鲜事·第5期
  • JS笔记四:作用域、变量(函数)提升
  • js递归,无限分级树形折叠菜单
  • JS基础之数据类型、对象、原型、原型链、继承
  • Puppeteer:浏览器控制器
  • SpiderData 2019年2月23日 DApp数据排行榜
  • 动态魔术使用DBMS_SQL
  • 工作手记之html2canvas使用概述
  • 关于 Cirru Editor 存储格式
  • 关于extract.autodesk.io的一些说明
  • 将回调地狱按在地上摩擦的Promise
  • 每天一个设计模式之命令模式
  • 入手阿里云新服务器的部署NODE
  • 适配iPhoneX、iPhoneXs、iPhoneXs Max、iPhoneXr 屏幕尺寸及安全区域
  • 算法之不定期更新(一)(2018-04-12)
  • 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
  • 一些css基础学习笔记
  • Spark2.4.0源码分析之WorldCount 默认shuffling并行度为200(九) ...
  • 如何通过报表单元格右键控制报表跳转到不同链接地址 ...
  • 支付宝花15年解决的这个问题,顶得上做出十个支付宝 ...
  • ​Benvista PhotoZoom Pro 9.0.4新功能介绍
  • ​软考-高级-系统架构设计师教程(清华第2版)【第9章 软件可靠性基础知识(P320~344)-思维导图】​
  • ​水经微图Web1.5.0版即将上线
  • # 职场生活之道:善于团结
  • #我与Java虚拟机的故事#连载11: JVM学习之路
  • $.type 怎么精确判断对象类型的 --(源码学习2)
  • %check_box% in rails :coditions={:has_many , :through}
  • (32位汇编 五)mov/add/sub/and/or/xor/not
  • (4)(4.6) Triducer
  • (iPhone/iPad开发)在UIWebView中自定义菜单栏
  • (vue)el-cascader级联选择器按勾选的顺序传值,摆脱层级约束
  • (草履虫都可以看懂的)PyQt子窗口向主窗口传递参数,主窗口接收子窗口信号、参数。
  • (二十六)Java 数据结构
  • (附源码)ssm高校社团管理系统 毕业设计 234162