【深度学习】S1 预备知识 P2 数据预处理

目录

在应用深度学习技术解决实际问题时,数据的预处理步骤至关重要。在 Python 的各种数据分析工具中,我们选择了 pandas 库来进行这一工作,因为它能与张量兼容。在本篇博文中,我们将概述如何使用 pandas 对原始数据进行预处理,并将其转换成张量格式。


准备工作

本节博文通过调用 Python Pandas 库实现操作,需要读者预安装完成 Pandas 包:

bash 复制代码
conda install pandas
pip install pandas

创建数据集

如果读者没有初始数据集,可以通过 write 函数创建 csv 数据集。

python 复制代码
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')

读取数据集

读取数据集,我们通过导入 pandas 并调用 read_csv 函数。上述数据集 house_tiny.csv 有四行三列,其中每行描述了房间数量 (NumRooms) ,巷子类型 (Alley) 以及房间价格 (Price);

python 复制代码
import os
import pandas as pd

data_file = os.path.join('..', 'data', 'house_tiny.csv')
data = pd.read_csv(data_file)
print(data)
python 复制代码
   NumRooms Alley   Price
0       NaN  Pave  127500
1       2.0   NaN  106000
2       4.0   NaN  178100
3       NaN   NaN  140000

至此,我们已经成功读取到了数据集 house_tiny.csv 中的数据。然而在读取到的结果中,我们注意到存在大量的 NaN 值,这些值代表着数据的缺失。下面将阐述数据缺失的处理办法。


处理缺失值

处理数据缺失的常见方法包括插值法和数据删除法。在插值法中,我们会用一个估计的数值来填补缺失的数据,其中一种常见的插值策略是利用周围非缺失数据的平均值来估计缺失值。然而,处理连续数据和离散数据的缺失值时,我们需要采用不同的策略。

处理连续数据缺失值

首先,以及房间数量(NumRooms)为例,我们将利用周围非缺失数据的平均值来估计缺失值。在这里,我们使用 mean() 函数。

python 复制代码
numRooms = data.iloc[:, 0]
print(numRooms)
numRooms = numRooms.fillna(numRooms.mean())
print(numRooms)
python 复制代码
0    NaN
1    2.0
2    4.0
3    NaN
Name: NumRooms, dtype: float64
0    3.0
1    2.0
2    4.0
3    3.0
Name: NumRooms, dtype: float64

处理离散数据缺失值

在对离散数据处理缺失值时,我们将 NaN 视作一个独立的类别。以"巷子类型"(Alley)为例,这一列只有两种可能的值:"Pave" 和 NaN。

借助 pandas 库,我们可以把这个列拆分成两列:"Pave" 和 "NaN"。在拆分后的两列中,如果巷子类型是 "Pave",那么 "Pave" 列的值为 1,而 "NaN" 列的值为 0 ;如果巷子类型是 NaN,则反之。

为了实现这一点,我们使用了 get_dummies() 函数,并通过设置 dummy_na 参数来决定是否创建一个代表 NaN 的额外列。

python 复制代码
alley = data.iloc[:, 1]
print(alley)
alley = pd.get_dummies(alley, dummy_na=True)
print(alley)
python 复制代码
0    Pave
1     NaN
2     NaN
3     NaN
Name: Alley, dtype: object
    Pave    NaN
0   True  False
1  False   True
2  False   True
3  False   True

如上,我们将数据集 house_tiny.csv 中缺失的连续数据(房间数量)、离散数据(巷子类型)处理完成。


转换为张量格式

在对数据集处理完缺失值后,我们将其转换成张量格式。

完整代码如下:

python 复制代码
import os
import pandas as pd
import torch

data_file = os.path.join('..', 'data', 'house_tiny.csv')
data = pd.read_csv(data_file)

inputs, outputs = data.iloc[:, 0:2], data.iloc[:, 2]
# print(inputs, outputs)
inputs['NumRooms'] = inputs['NumRooms'].fillna(inputs['NumRooms'].mean())
inputs['Alley'] = pd.get_dummies(inputs['Alley'], dummy_na=False)
# print(inputs)
X = torch.tensor(inputs.to_numpy(dtype=float))
y = torch.tensor(outputs.to_numpy(dtype=float))\

print(X)
print(y)
python 复制代码
tensor([[3., 1.],
        [2., 0.],
        [4., 0.],
        [3., 0.]], dtype=torch.float64)
tensor([127500., 106000., 178100., 140000.], dtype=torch.float64)

至此,我们使用 pandas 对原始数据进行预处理,读取数据集,处理缺失值;最后,将其转换为张量格式。


此上,如有任何为题,请留言或者联系,谢谢~

2024.2.12

相关推荐
xiaok6 分钟前
docker network create langbot-network这条命令在dify输入还是在langbot中输入
人工智能
It_张8 分钟前
LLM(大语言模型)的工作原理 图文讲解
人工智能·语言模型·自然语言处理
Darach10 分钟前
坐姿检测Python实现
人工智能·python
xiaok10 分钟前
LangBot 和消息平台均运行在 Docker 容器中
人工智能
queeny19 分钟前
Datawhale AI夏令营 科大讯飞AI大赛(大模型技术) Task3 心得
人工智能
ToTensor19 分钟前
Paraformer实时语音识别中的碎碎念
人工智能·语音识别·xcode
陈佬昔没带相机26 分钟前
Mac Mini 玩大模型避坑指南
人工智能·mac
重启的码农26 分钟前
llama.cpp 分布式推理介绍(4) RPC 服务器 (rpc_server)
c++·人工智能·神经网络
柠檬味拥抱27 分钟前
不确定环境下AI Agent的贝叶斯信念更新策略研究
人工智能
Nona996130 分钟前
从零开始学AI——13
人工智能