一文讲透数据清洗的概念及数据清洗的实施过程

822 阅读6分钟

欢迎关注作者的微信公众号:奋进的技术人

关注我获得前后端全套学习视频、各种学习资料,以及最及时的技术文章分享

随着人工智能技术的火热,数据清洗这个概念被越来越多的提及,可以说这一步骤在训练人工智能大模型的过程中是必不可少的,因为它直接关系到训练的效率和质量。

简单理解数据清洗这一概念的话,就是把“脏”数据变成“干净”数据的过程。想象一下,你有一堆杂乱无章的文件,里面有很多错误、重复和缺失的信息,这种情况下数据的效用肯定是达不到理想标准的,需要提前对数据集进行预处理之后才可使用。数据清洗这一步骤要完成的任务就是要整理这些数据,让它们变得整洁、准确和有用。

对数据清洗已经有了大致印象之后,我们再来看看它的官方定义。数据清洗(Data Cleaning),也称为数据净化或数据清理,是指检测、诊断、纠正和删除数据集中的错误、不一致和不完整数据的过程,以提高数据的质量和可靠性。数据清洗的目标是确保数据集中的数据准确、完整、一致和有效,以便于后续的数据分析、数据挖掘和决策支持。

在数据爆炸式增长的今天,数据清洗这一技术适用的领域及应用的场景也在变得越来越丰富,发挥的作用也是越来越重要,比如下面这些领域的相关场景下的应用:

数据仓库领域:从多个数据源获取数据并整合到数据仓库中时,数据清洗可以确保数据的一致性和准确性。还可以处理重复记录,确保数据仓库中的数据唯一性,以及将不同格式的数据转换为统一的格式,以便于后续分析和报告。

数据挖掘领域:在进行数据挖掘和机器学习之前,数据清洗可以确保特征数据的质量,提高模型的准确性和稳定性。

特征工程:在进行数据挖掘和机器学习之前,数据清洗可以确保特征数据的质量,提高模型的准确性和稳定性。识别和处理异常值,防止它们对模型训练产生负面影响以及填补或删除缺失值,确保模型输入数据的完整性。

数据质量管理领域:数据清洗技术主要用于定期检查数据的质量,确保数据符合预定的标准和要求。建立和维护数据治理框架,确保数据在整个生命周期中的质量和合规性。

金融领域:通过数据清洗,识别和纠正交易数据中的错误,降低金融风险。清洗交易数据,检测和预防欺诈行为,还可以确保客户数据的准确性,提高信用评估的可靠性。

医疗健康领域:清洗患者的病历数据,确保数据的准确性和完整性,支持临床决策。以及清洗和整合来自不同来源的医疗数据,支持流行病学研究和公共卫生政策制定。

电子商务领域:清洗用户行为数据,确保分析结果的准确性,支持个性化推荐和营销策略。清洗库存数据,确保库存信息的准确性和及时性,优化供应链管理。

政府和公共服务领域:清洗人口普查数据,确保统计数据的准确性和可靠性。清洗和整合公共安全数据,支持犯罪预防和应急响应。

数据清洗能在这么多个领域发挥这么重要的作用,那它的具体实施步骤是怎样的呢?其实整个流程理解起来并不复杂!整个操作流程主要分为“错误检测与纠正”、“处理缺失值”、“去除重复数据”、“数据标准化”和“异常值处理”这几步,下面我们使用Python代码来简单演示下每个步骤是怎样具体实施的。

错误检测与纠正:演示检测和纠正文本数据中的拼写错误

import pandas as pd
from fuzzywuzzy import fuzz
from fuzzywuzzy import process

# 示例数据
data = {'name': ['John Doe', 'Jane Doe', 'Jon Doe', 'Jan Doe']}
df = pd.DataFrame(data)

# 定义一个函数来纠正拼写错误
def correct_spelling(word, choices):
    return process.extractOne(word, choices)[0]

# 获取所有唯一的名字
unique_names = df['name'].unique()

# 纠正拼写错误
corrected_names = {name: correct_spelling(name, unique_names) for name in unique_names}

# 应用纠正后的名字
df['name'] = df['name'].map(corrected_names)

print(df)

处理缺失值:

演示使用均值、中位数、众数或其他方法填补缺失值

import pandas as pd
import numpy as np

# 示例数据
data = {'age': [25, np.nan, 30, 35], 'income': [50000, 60000, np.nan, 70000]}
df = pd.DataFrame(data)

# 填补缺失值
df['age'].fillna(df['age'].mean(), inplace=True)
df['income'].fillna(df['income'].median(), inplace=True)

print(df)

演示删除含有缺失值的记录

import pandas as pd
import numpy as np

# 示例数据
data = {'age': [25, np.nan, 30, 35], 'income': [50000, 60000, np.nan, 70000]}
df = pd.DataFrame(data)

# 删除含有缺失值的记录
df.dropna(inplace=True)

print(df)

去除重复数据:演示检测并删除数据集中的重复记录

import pandas as pd

# 示例数据
data = {'name': ['John Doe', 'Jane Doe', 'John Doe'], 'age': [25, 30, 25]}
df = pd.DataFrame(data)

# 检测重复记录
duplicates = df.duplicated()

# 删除重复记录
df.drop_duplicates(inplace=True)

print(df)

数据标准化:演示确保数据格式一致,例如日期格式、单位等

import pandas as pd

# 示例数据
data = {'date': ['2021-01-01', '01/02/2021', '2021-03-01']}
df = pd.DataFrame(data)

# 统一日期格式
df['date'] = pd.to_datetime(df['date'])

print(df)

异常值处理:演示使用统计方法(如Z-score、IQR)检测和处理异常值

import pandas as pd
import numpy as np

# 示例数据
data = {'age': [25, 30, 35, 100, 40]}
df = pd.DataFrame(data)

# 使用IQR方法检测异常值
Q1 = df['age'].quantile(0.25)
Q3 = df['age'].quantile(0.75)
IQR = Q3 - Q1

# 定义异常值的边界
lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR

# 检测异常值
outliers = (df['age'] < lower_bound) | (df['age'] > upper_bound)

# 处理异常值(例如删除)
df = df[~outliers]

print(df)