使用Pandas进行数据预处理:Gluon教程实践指南

使用Pandas进行数据预处理:Gluon教程实践指南

d2l-zh d2l-zh 项目地址: https://gitcode.com/gh_mirrors/d2l/d2l-zh

前言

在深度学习项目中,数据预处理是一个至关重要的环节。原始数据往往存在缺失值、格式不一致等问题,直接用于模型训练会导致效果不佳。本文将以Gluon教程中的实例为基础,详细介绍如何使用Pandas这一强大的Python数据分析工具进行数据预处理,为后续的深度学习模型训练做好准备。

Pandas简介

Pandas是Python生态系统中用于数据分析和操作的核心库,它提供了DataFrame这一强大的数据结构,可以高效地处理结构化数据。在深度学习领域,Pandas常被用于数据清洗、转换和特征工程等预处理工作。

创建示例数据集

让我们首先创建一个简单的房屋数据集,包含三个特征:

  • NumRooms:房间数量
  • Alley:巷子类型
  • Price:房屋价格
import os
import pandas as pd

# 创建数据目录和文件
os.makedirs(os.path.join('..', 'data'), exist_ok=True)
data_file = os.path.join('..', 'data', 'house_tiny.csv')

# 写入CSV文件
with open(data_file, 'w') as f:
    f.write('NumRooms,Alley,Price\n')  # 列名
    f.write('NA,Pave,127500\n')       # 样本1
    f.write('2,NA,106000\n')         # 样本2
    f.write('4,NA,178100\n')         # 样本3
    f.write('NA,NA,140000\n')        # 样本4

这个数据集包含了典型的现实数据特征:缺失值(NA)和混合类型(数值型和类别型)。

数据加载与初步观察

使用Pandas的read_csv函数可以轻松加载CSV数据:

data = pd.read_csv(data_file)
print(data)

输出结果会显示我们的数据集结构,可以清楚地看到存在缺失值的位置。

处理缺失值

缺失值是现实数据中的常见问题,处理不当会影响模型性能。Pandas提供了多种处理缺失值的方法:

1. 数值型缺失值处理

对于数值型特征(NumRooms),常用的方法是使用均值填充:

inputs = data.iloc[:, 0:2]  # 前两列作为输入特征
outputs = data.iloc[:, 2]   # 最后一列作为输出标签

# 用均值填充数值型缺失值
inputs['NumRooms'] = inputs['NumRooms'].fillna(inputs['NumRooms'].mean())

2. 类别型缺失值处理

对于类别型特征(Alley),我们将缺失值视为一个独立的类别:

inputs = pd.get_dummies(inputs, dummy_na=True)

get_dummies函数会执行独热编码(One-Hot Encoding),为每个类别创建新的二进制特征列。例如:

  • Alley_Pave:表示巷子类型是否为"Pave"
  • Alley_nan:表示巷子类型是否缺失

转换为张量格式

深度学习框架通常使用张量(Tensor)作为基本数据结构。我们可以将处理好的Pandas DataFrame转换为张量:

MXNet版本

from mxnet import np

X = np.array(inputs.to_numpy(dtype=float))
y = np.array(outputs.to_numpy(dtype=float))

PyTorch版本

import torch

X = torch.tensor(inputs.to_numpy(dtype=float))
y = torch.tensor(outputs.to_numpy(dtype=float))

TensorFlow版本

import tensorflow as tf

X = tf.constant(inputs.to_numpy(dtype=float))
y = tf.constant(outputs.to_numpy(dtype=float))

PaddlePaddle版本

import paddle

X = paddle.to_tensor(inputs.values)
y = paddle.to_tensor(outputs.values)

进阶技巧与实践建议

  1. 数据探索:在实际项目中,应先使用data.describe()和data.info()了解数据分布和类型

  2. 更复杂的缺失值处理

    • 对于数值特征,除了均值还可以考虑中位数、众数或预测模型填充
    • 对于时间序列数据,可以使用前后值插补
  3. 特征缩放:在转换为张量前,考虑对数值特征进行标准化或归一化

  4. 类别特征编码:对于多类别特征,可以考虑嵌入(Embedding)而非独热编码

练习与思考

  1. 尝试创建一个更大的数据集,包含更多特征和样本
  2. 实现自动识别并删除缺失值最多的列的功能
  3. 比较不同缺失值处理策略对最终模型性能的影响
  4. 思考如何处理数值特征中的异常值(outliers)

总结

本文通过Gluon教程中的实例,详细介绍了使用Pandas进行数据预处理的完整流程。从数据加载、缺失值处理到转换为张量格式,这些步骤构成了深度学习项目的数据准备基础。掌握这些技能将为你后续的模型构建和训练打下坚实基础。

记住,在真实项目中,数据预处理往往占据整个项目70%以上的时间和精力,值得投入足够的重视和学习。

d2l-zh d2l-zh 项目地址: https://gitcode.com/gh_mirrors/d2l/d2l-zh

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柏滢凝Wayne

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值