1.首先创建一个人工数据集,并存储在csv(逗号分隔值)文件
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,RoofType,Price
NA,NA,127500
2,NA,106000
4,Slate,178100
NA,NA,140000''')
import pandas as pd
data = pd.read_csv(data_file)
print(data)
- os.path.join('..', 'data'):构造一个路径../data(../表示上一级目录)
- os.makedirs(..., exist_ok=True):如果目录../data不存在就创建它,如果已经存在,不会报错
- data_file是最终的文件路径,等于../data/house_tiny.csv
- with open(data_file,'w') as f: 以只写模式打开文件
- f.write(...)是写入一段CSV格式的数据内容
- pd.read_csv(data_file)读取刚写入的CSV文件,转换成Pandas的DataFrame结构(表格形式)
- Pandas会自动把'NA'识别为缺失值(NaN)
NumRooms RoofType Price
0 NaN NaN 127500
1 2.0 NaN 106000
2 4.0 Slate 178100
3 NaN NaN 140000
2.将输入数据中的类别特征转换为数值形式,同时也保留缺失值NaN作为一个类别
inputs, targets = data.iloc[:, 0:2], data.iloc[:, 2]
inputs = pd.get_dummies(inputs, dummy_na=True)
print(inputs)
- data.iloc[:, 0:2] 取前2列作为输入
- ata.iloc[:, 2] 取第三列Price作为目标(要预测的值)
- pd.get_dummies()是Pandas提供的一个函数,将类别特征(字符串或者有限数值等)转换成one-hot编码(独热编码),dummy_na=True表示把缺失值(NaN)也当做一个类别处理
NumRooms RoofType_Slate RoofType_nan
0 NaN False True
1 2.0 False True
2 4.0 True False
3 NaN False True
3.对数据进行缺失值填补(插值)
inputs = inputs.fillna(inputs.mean())
print(inputs)
- inputs.mean()会计算每一列的平均值,但是只对数值型数据有效
- fillna(...)把缺失值用列的均值替代
NumRooms RoofType_Slate RoofType_nan
0 3.0 False True
1 2.0 False True
2 4.0 True False
3 3.0 False True
4.转换成PyTorch的张量,方便送入模型训练
import torch
X = torch.tensor(inputs.to_numpy(dtype=float))
y = torch.tensor(targets.to_numpy(dtype=float))
X, y
- 把Pandas的DataFrame转换成Numpy数组
- 再从Numpy转换成PyTorch张量
- 指定数据类型为浮点型,因为神经网络通常都用浮点数来处理
(tensor([[nan, 0., 1.],
[2., 0., 1.],
[4., 1., 0.],
[nan, 0., 1.]], dtype=torch.float64),
tensor([127500., 106000., 178100., 140000.], dtype=torch.float64))