数据清洗基础

分类: 数据处理

数据清洗的通常步骤

1. 数据加载

  • 使用合适的库(如 pandas)加载数据。常见格式包括 CSV、Excel、JSON、SQL 数据库等。

  • 示例:

import pandas as pd data = pd.read_csv('data.csv')

2. 检查缺失值

  • 数据集中的缺失值可能会影响分析的结果,因此需要检查缺失值并决定如何处理。

  • 检查每列的缺失值数量:

data.isnull().sum()

  • 处理缺失值的方式:

  • 删除缺失值:适用于缺失值较少或删除对分析没有影响的情况下。

    data = data.dropna() # 删除所有含缺失值的行

  • 填充缺失值:适用于缺失值较多的情况下。可以填充均值、中位数、众数,或者进行插值。

    data['column_name'].fillna(data['column_name'].mean(), inplace=True) # 用均值填充

3. 重复数据处理

  • 检查数据集是否包含重复行,通常重复数据会影响分析结果。

  • 查找重复数据:

data.duplicated().sum() # 查找重复的行

  • 删除重复行:

data = data.drop_duplicates()

4. 处理异常值(Outliers)

  • 异常值是指那些远离数据集中其他值的观测值。它们可能是数据录入错误,也可能是真实的离群点,需要根据上下文来判断如何处理。

  • 使用可视化工具(如箱线图、散点图)识别异常值:

import matplotlib.pyplot as plt data['column_name'].plot(kind='box') plt.show()

  • 可以选择删除、替换(如替换为上限或下限),或者根据分析需求保留异常值。

5. 数据类型转换

  • 确保每个列的数据类型正确(如整数、浮点数、类别型数据等)。不正确的数据类型可能会导致错误的分析结果。

  • 转换数据类型:

data['column_name'] = data['column_name'].astype('category') # 转为类别型 data['column_name'] = pd.to_datetime(data['column_name']) # 转为日期型

6. 处理类别变量(Categorical Variables)

  • 对于分类数据,需要将其转换为数值型,以便模型能够理解。常见的方法有:

  • 标签编码 (Label Encoding):将类别转换为整数。

    from sklearn.preprocessing import LabelEncoder le = LabelEncoder() data['category_column'] = le.fit_transform(data['category_column'])

  • 独热编码 (One-Hot Encoding):将类别转换为虚拟变量(0和1的形式)。

    data = pd.get_dummies(data, columns=['category_column'])

7. 数据标准化/归一化

  • 对于数值型特征,标准化和归一化是重要的预处理步骤,尤其是在使用基于距离的模型(如KNN、SVM)时。

  • 标准化:使数据均值为0,标准差为1。

from sklearn.preprocessing import StandardScaler scaler = StandardScaler() data[['column1', 'column2']] = scaler.fit_transform(data[['column1', 'column2']])

  • 归一化:将数据缩放到0到1之间。

from sklearn.preprocessing import MinMaxScaler scaler = MinMaxScaler() data[['column1', 'column2']] = scaler.fit_transform(data[['column1', 'column2']])

8. 处理日期/时间数据

  • 如果数据集中包含日期和时间列,可能需要提取年、月、日等信息,以便进行时间序列分析或其他分析。

  • 例如,提取日期特征:

data['year'] = data['date_column'].dt.year data['month'] = data['date_column'].dt.month

9. 特征工程

  • 创建新的特征,或对现有特征进行变换,以帮助模型更好地理解数据。

  • 例如,创建“房龄”特征(从“建造年份”和“当前年份”中计算):

data['house_age'] = 2023 - data['year_built']

10. 去除不必要的列

  • 删除那些对分析没有贡献的列(如ID列、非相关特征)。

  • 删除不需要的列:

data = data.drop(['unnecessary_column1', 'unnecessary_column2'], axis=1)

11. 检查数据的分布

  • 对数据进行一些简单的统计分析,检查各列的分布,确保数据正常。

  • 查看描述性统计信息:

data.describe()

12. 数据集划分

  • 在进行建模时,通常需要将数据集划分为训练集和测试集。

  • 划分训练集和测试集:

from sklearn.model_selection import train_test_split X = data.drop('target', axis=1) y = data['target'] X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)