8 数据预处理之数据清洗

在机器学习的工作流程中,数据预处理是一个至关重要的步骤。特别是在与数据收集之后的“数据清洗”阶段,我们需要确保我们的数据集是高质量的,以便模型能够学习到有效的信息。在本篇教程中,我们将详细探讨数据清洗的关键步骤与技巧,并结合具体的案例与代码示例,使其更易于理解。

数据清洗的重要性

在数据预处理流程中,数据清洗的目的是去除或修复数据集中的不准确、错误或不完整的数据。数据质量好坏直接影响到模型的表现,数据清洗的过程不仅可以提高数据质量,还能帮助我们在后续的特征选择与工程中更加顺利。

数据清洗的步骤

数据清洗通常包括以下几个步骤:

  1. 处理缺失值
  2. 去除重复数据
  3. 纠正数据类型
  4. 处理异常值
  5. 标准化数据

接下来,我们将逐一探讨这些步骤并结合案例进行说明。

1. 处理缺失值

缺失值是数据集中常见的问题。对于缺失值的处理,我们可以采取以下几种策略:

  • 删除缺失值:适用于缺失比例很小的情况。
  • 填补缺失值:可以使用均值、中位数、众数或进行插值等方法来填补。

示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import pandas as pd

# 假设我们有如下数据集
data = {
'年龄': [25, 30, None, 35, 40],
'收入': [50000, 60000, 65000, None, 80000]
}

df = pd.DataFrame(data)

# 查看缺失值
print("缺失值统计:\n", df.isnull().sum())

# 填补缺失值(使用均值)
df['年龄'].fillna(df['年龄'].mean(), inplace=True)
df['收入'].fillna(df['收入'].mean(), inplace=True)

print("填补缺失值后:\n", df)

2. 去除重复数据

数据集中有时候会包含完全相同的记录,这会导致模型训练过程中对某些样本的过拟合。

示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 创建一个包含重复数据的示例数据集
data_with_duplicates = {
'姓名': ['张三', '李四', '张三', '王五'],
'年龄': [25, 30, 25, 28]
}

df_duplicates = pd.DataFrame(data_with_duplicates)

# 查看重复行
print("重复行统计:\n", df_duplicates.duplicated().sum())

# 去除重复行
df_duplicates.drop_duplicates(inplace=True)

print("去重后的数据集:\n", df_duplicates)

3. 纠正数据类型

数据类型的不一致会影响数据的操作与分析。比如,一列存储日期的字段最好转换为日期格式,以便后续的时间序列分析。

示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
# 处理包含日期的示例数据集
data_with_dates = {
'购买日期': ['2021-01-01', '2021-02-01', '2021-03-01'],
'金额': [100, 150, 200]
}

df_dates = pd.DataFrame(data_with_dates)

# 转换购买日期列
df_dates['购买日期'] = pd.to_datetime(df_dates['购买日期'])

print("数据类型:\n", df_dates.dtypes)

4. 处理异常值

异常值可能严重影响数据分析与模型训练,我们可以使用 Z-score 或 IQR 方法来识别并处理异常值。

示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 创建一个示例数据集
data_with_outliers = {
'收入': [50000, 60000, 70000, 85000, 100000, 500000] # 500000是异常值
}

df_outliers = pd.DataFrame(data_with_outliers)

# 计算 IQR
Q1 = df_outliers['收入'].quantile(0.25)
Q3 = df_outliers['收入'].quantile(0.75)
IQR = Q3 - Q1

# 识别出异常值的条件
outlier_condition = (df_outliers['收入'] < (Q1 - 1.5 * IQR)) | (df_outliers['收入'] > (Q3 + 1.5 * IQR))

# 去除异常值
df_outliers_cleaned = df_outliers[~outlier_condition]

print("处理后不包含异常值的数据集:\n", df_outliers_cleaned)

5. 标准化数据

标准化是将数据的分布调整到一个标准范围,通常是均值为 0,标准差为 1,常用于特征工程中。

示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from sklearn.preprocessing import StandardScaler

# 创建一个示例数据集
data_for_scaling = {
'特征1': [1, 2, 3, 4, 5],
'特征2': [10, 20, 30, 40, 50]
}

df_scaling = pd.DataFrame(data_for_scaling)

# 标准化
scaler = StandardScaler()
scaled_data = scaler.fit_transform(df_scaling)

print("标准化后的数据:\n", scaled_data)

小结

数据清洗是确保机器学习模型能够有效学习的前提。通过上述步骤,我们能够对数据集进行细致入微的检查与调整,使数据集更加整洁与有效。接下来,在学习数据预处理的下一步“特征选择与工程”时,将能够更好地利用我们清洗后的数据集。

希望本篇教程能够帮助你在数据清洗的过程中,加深对该领域的理解。如有问题或者进一步的讨论,欢迎留言!

8 数据预处理之数据清洗

https://zglg.work/machine-learning-zero/8/

作者

IT教程网(郭震)

发布于

2024-08-10

更新于

2024-08-10

许可协议

分享转发

交流

更多教程加公众号

更多教程加公众号

加入星球获取PDF

加入星球获取PDF

打卡评论