13 数据清洗与准备
在深度学习的过程中,数据是模型性能的基石。为了让我们的模型能够更加准确地学习到数据中的模式,进行有效的数据预处理是至关重要的一步。本篇将介绍深度学习中的数据清洗与准备,帮助你为接下来的特征工程做好铺垫。
数据清洗的重要性
在实际应用中,我们常常会遇到“脏数据”。这类数据可能包含了重复的记录、缺失的值、异常值等问题。例如,在处理用户行为数据时,一个用户可能在系统中多次注册,造成重复记录。这样的数据不仅会消耗模型的学习能力,还可能导致模型的误导性预测。
常见的数据清洗步骤
以下是一些常见的数据清洗步骤:
- 删除重复数据
- 处理缺失值
- 处理异常值
- 标准化数据格式
- 数据类型转换
接下来,我们将通过代码示例来详细解释这些步骤。
1. 删除重复数据
使用pandas
库,我们可以很方便地删除数据框中的重复记录。
import pandas as pd
# 创建一个示例数据框
data = {
'user_id': [1, 2, 2, 3, 4],
'action': ['click', 'view', 'view', 'click', 'view']
}
df = pd.DataFrame(data)
# 查看原始数据框
print("原始数据框:")
print(df)
# 删除重复记录
df_cleaned = df.drop_duplicates()
# 查看清理后的数据框
print("\n清理后的数据框:")
print(df_cleaned)
2. 处理缺失值
缺失值是数据集中常见的问题。我们可以选择删除包含缺失值的行,或者用某个统计量(例如均值、中位数)填补缺失值。
# 创建一个包含缺失值的示例数据框
data_with_nan = {
'user_id': [1, 2, None, 4],
'action': ['click', None, 'view', 'view']
}
df_nan = pd.DataFrame(data_with_nan)
# 查看原始数据框
print("原始数据框:")
print(df_nan)
# 使用均值填补缺失值
df_nan['user_id'] = df_nan['user_id'].fillna(df_nan['user_id'].mean())
# 删除包含缺失值的行
df_nan = df_nan.dropna()
# 查看清理后的数据框
print("\n清理后的数据框:")
print(df_nan)
3. 处理异常值
异常值通常会影响模型的性能。我们可以使用统计学的方法(如Z-score或IQR方法)来检测异常值。
import numpy as np
# 创建一个示例数据框
data = {
'age': [22, 25, 29, 100, 27]
}
df_age = pd.DataFrame(data)
# 计算IQR
Q1 = df_age['age'].quantile(0.25)
Q3 = df_age['age'].quantile(0.75)
IQR = Q3 - Q1
# 定义异常值的范围
lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR
# 删除异常值
df_age_cleaned = df_age[(df_age['age'] >= lower_bound) & (df_age['age'] <= upper_bound)]
# 查看清理后的数据框
print("\n清理后的数据框:")
print(df_age_cleaned)
4. 标准化数据格式
对于模型训练,我们需要确保所有数据格式一致,比如日期格式。
from datetime import datetime
# 创建一个包含不同日期格式的示例数据框
data_date = {
'date': ['2023-01-01', '01/02/2023', 'March 3, 2023']
}
df_date = pd.DataFrame(data_date)
# 将日期统一转化为datetime格式
df_date['date'] = pd.to_datetime(df_date['date'])
# 查看清理后的数据框
print("\n统一格式后的数据框:")
print(df_date)
5. 数据类型转换
确保每一列数据的类型与其内容相对应。通过pandas
的astype()
方法,我们可以进行类型转换。
# 创建一个包含字符串数字的示例数据框
data_types = {
'user_id': ['1', '2', '3', '4']
}
df_types = pd.DataFrame(data_types)
# 查看原始数据框类型
print("原始数据框类型:")
print(df_types.dtypes)
# 转换数据类型
df_types['user_id'] = df_types['user_id'].astype(int)
# 查看转换后的数据框类型
print("\n转换后的数据框类型:")
print(df_types.dtypes)
小结
以上是数据清洗与准备的几个主要步骤,通过这些步骤,能够有效地提升数据的质量,为后续的特征工程打下坚实的基础。对于处理的每一步都要特别留意,因为数据的质量直接影响到深度学习模型的表现。
在下一篇中,我们将深入探讨特征工程的相关内容,包括如何从清洗后的数据中提取出关键特征,以便更好地训练模型。请继续关注!