二、预备知识—数据预处理
2.2.1 读取数据集
1.将数据集按行写入CSV文件中
import os
# os.makedirs参数说明
# name:你想创建的目录名
# mode:要为目录设置的权限数字模式,默认的模式为0o777()八进制).
# exist_ok:是否在目录存在时触发异常。如果exist_ok为False(默认值),则在目标目录已存在的情况下触发FileExistsError异常;
# 如果exist ok为True,则在目标目录已存在的情况下不会触发FileExistsError异常。
os.makedirs(os.path.join(.., data), exist_ok=True) # os.makedirs用来创建多层目录(单层请用os.mkdir)
data_file = os.path.join(.., data, house_tiny.csv) # os.path.join()函数用于路径拼接文件路径,可以传入多个路径
with open(data_file, w, encoding=utf-8) as f:
f.write(NumRooms,Alley,Price
) # 列名
f.write(NA,Pave,127500
) # 每行表示一个数据样本
f.write(2,NA,106000
)
f.write(4,NA,178100
)
f.write(NA,NA,140000
)
输出:
2.从创建的CSV文件中加载原始数据集,我们导入pandas包并调用read_csv函数。该数据集有四行三列。其中每行描述了房间数量(“NumRooms”)、巷子类型(“Alley”)和房屋价格(“Price”)
import pandas as pd import os import torch data_file = os.path.join(.., data, house_tiny.csv) # os.path.join()函数用于路径拼接文件路径,可以传入多个路径 data = pd.read_csv(data_file) print(data)
输出:
NumRooms Alley Price 0 NaN Pave 127500 1 2.0 NaN 106000 2 4.0 NaN 178100 3 NaN NaN 140000
2.2.3 处理缺失值
注意,“NaN”项代表缺失值。于inputs中缺少的数值,我们用同一列的均值替换“NaN”项
对比两图即可发现,左图的第二列NaN已被平均值3.0填充为右图
# 处理缺失值,典型的方法包括插值法和删除法, 其中插值法用一个替代值弥补缺失值,而删除法则直接忽略缺失值 inputs, outputs = data.iloc[:, 0:2], data.iloc[:, 2] # 冒号在逗号前,后面的数值对应列;冒号在后,前面的数值对应行 inputs = inputs.fillna(inputs.mean()) # .fillna()用来填写空缺值,mean()函数求取均值 print(inputs) inputs = pd.get_dummies(inputs, dummy_na=True) # 是利用pandas实现one_hot_encode的方式 print(inputs)
对于inputs中的类别值或离散值,我们将“NaN”视为一个类别。 由于“巷子类型”(“Alley”)列只接受两种类型的类别值“Pave”和“NaN”, pandas可以自动将此列转换为两列“Alley_Pave”和“Alley_nan”。 巷子类型为“Pave”的行会将“Alley_Pave”的值设置为1,“Alley_nan”的值设置为0。 缺少巷子类型的行会将“Alley_Pave”和“Alley_nan”分别设置为0和1 输出:
NumRooms Alley 0 3.0 Pave 1 2.0 NaN 2 4.0 NaN 3 3.0 NaN NumRooms Alley_Pave Alley_nan 0 3.0 1 0 1 2.0 0 1 2 4.0 0 1 3 3.0 0 1
2.2.4 转换张量格式
现在inputs和outputs中的所有条目都是数值类型,它们可以转换为张量格式。 当数据采用张量格式后,可以通过在预备知识—pytorch数据基本操作中引入的那些张量函数来进一步操作。
X, y = torch.tensor(inputs.values), torch.tensor(outputs.values) # 现在inputs和outputs中的所有条目都是数值类型,将它们转换为张量格式 print(X) print(y)
输出:
tensor([[3., 1., 0.],
[2., 0., 1.],
[4., 0., 1.],
[3., 0., 1.]], dtype=torch.float64)
tensor([127500, 106000, 178100, 140000])
2.2.5 小结
-
pandas软件包是Python中常用的数据分析工具中,pandas可以与张量兼容。 用pandas处理缺失的数据时,我们可根据情况选择用插值法和删除法。
