李沐深度学习预备知识——数据预处理

部署运行你感兴趣的模型镜像

预备知识——数据预处理


本小节使用pandas,若未安装,通过pip install pandas添加。

1、读取数据集

import os
os.makedirs(os.path.join('..', 'data'), exist_ok=True)
data_file = os.path.join('..', 'data', 'house_tiny.csv')
with open(data_file, 'w') as f:
    f.write('NumRooms,Alley,Price\n') # 列名
    f.write('NA,Pave,127500\n') # 每行表示一个数据样本
    f.write('2,NA,106000\n')
    f.write('4,NA,178100\n')
    f.write('NA,NA,140000\n')
  • os.makedirs()函数创建了名为"data"的文件夹,exist_ok=True参数表示如果该文件夹已经存在则不会引发异常。
  • os.path.join()函数将路径拼接成一个完整的路径,指向"house_tiny.csv"文件。
  • with open()语句打开该文件,以写入模式打开。利用f.write()函数向文件中写入列名行和数据样本行。
  • 最终,该函数会创建一个包含4个数据样本的CSV文件,其中每行数据以逗号分隔,包含"NumRooms"(房间数)、“Alley”(巷子)和"Price"(价格)三个属性。数据样本的某些属性值可能缺失,用"NA"表示。
import pandas as pd
data = pd.read_csv(data_file)
print(data)

导入pandas,通过pd.read_csv()函数读取指定路径数据并存储在data中。

2、处理缺失值

在数据中,一般用NaN标识缺失值。处理缺失数据的方法主要有以下两种;

  • 插值法
inputs, outputs = data.iloc[:, 0:2], data.iloc[:, 2]
inputs = inputs.fillna(inputs.mean())
print(inputs)
inputs = pd.get_dummies(inputs, dummy_na=True)
print(inputs)

1、iloc 函数是 Pandas 库中用于 DataFrame 或 Series 对象的一种基于整数位置的索引方法,是一种浅拷贝,其主要功能如下:

  • 按位置选取数据: iloc 允许用户通过指定整数索引来访问数据框或系列中的特定行和列。这些索引直接对应于数据结构内部的存储顺序,与实际的行标签(如索引名)或列标签(如列名)无关。
  • 索引行为遵循 NumPy 标准: iloc 的索引行为类似于 NumPy 数组,遵循标准 Python 的切片逻辑,即左闭右开区间。这意味着,当使用切片时,指定范围的左端点会被包括在内,而右端点会被排除在外。
  • 支持多维索引: 对于具有多层索引(Hierarchical Indexing)的 DataFrame,iloc 依然按照扁平化的整数位置进行索引。
  • 空值处理: 使用 iloc 进行数据访问时,不会因为存在空值(NaN)而受到影响,它严格按照提供的位置信息进行数据检索。

2、fillna:填充NaN值方法,此处用inputs的均值填充。对于inputs中的类别值或离散值,我们将“NaN”视为一个类别。
3、 由于“巷子类型”(“Alley”)列只接受两种类型的类别值“Pave”和“NaN”,pandas可以自动将此列转换为两列“Alley_Pave”和“Alley_nan”。巷子类型为“Pave”的行会将“Alley_Pave”的值设置为1,“Alley_nan”的值设置为0。缺少巷子类型的行会将“Alley_Pave”和“Alley_nan”分别设置为0和1。
4、pandas库中的get_dummies函数,用于将类别型数据转换为数值型数据,即进行one-hot编码。其中,dummy_na参数表示是否为NaN值创建单独的虚拟变量。最终inputs变成三列,分类变量每种类型各成一列。

  • 删除法

3、转换上述数据为张量格式

import torch
# inputs,outputs为上文pandas的DataFrame格式数据
X = torch.tensor(inputs.to_numpy(dtype=float))
y = torch.tensor(outputs.to_numpy(dtype=float))

先通过to_numpy把pandas的DataFrame类型转换为ndarray,然后再转换为torch的tensor。

您可能感兴趣的与本文相关的镜像

PyTorch 2.5

PyTorch 2.5

PyTorch
Cuda

PyTorch 是一个开源的 Python 机器学习库,基于 Torch 库,底层由 C++ 实现,应用于人工智能领域,如计算机视觉和自然语言处理

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值