2.2.0 头文件
import os
import pandas as pd
import torch
2.2.1 读取数据集
# 下面一段代码的作用是创建一个人工数据集,并存储在CSV文件中
# 在上一级目录下创建一个data文件夹,exist_ok为false表示如果该文件夹已经存在就报错,为true表示如果该文件夹已经存在不报错
os.makedirs(os.path.join('..', 'data'), exist_ok=True)
# 将house_tiny.csv文件与data文件夹路径拼接成一个相对路径
data_file = os.path.join('..', 'data', 'house_tiny.csv')
# 创建并打开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')
# 从house_tiny.csv文件中加载数据集
data = pd.read_csv(data_file)
print(data)
# 输出:
# NumRooms Alley Price
# 0 NaN Pave 127500 NaN:缺失值
# 1 2.0 NaN 106000
# 2 4.0 NaN 178100
# 3 NaN NaN 140000
2.2.2 处理数据集中的缺失值
inputs, outputs = data.iloc[:, 0:2], data.iloc[:, 2] #将数据集前两列作为输入inputs提取出来,将数据集第三列作为输出outputs提取出来
print(inputs)
# 输出:
# NumRooms Alley
# 0 NaN Pave
# 1 2.0 NaN
# 2 4.0 NaN
# 3 NaN NaN
print(outputs)
# 输出:
# 0 127500
# 1 106000
# 2 178100
# 3 140000
# Name: Price, dtype: int64
# 计算前两列的各列均值
print(inputs.mean())
# 输出:
# NumRooms 3.0
# dtype: float64
# 用均值来填充前两列中的缺失值(插值法)
inputs = inputs.fillna(inputs.mean())
print(inputs)
# 输出:
# NumRooms Alley
# 0 3.0 Pave
# 1 2.0 NaN
# 2 4.0 NaN
# 3 3.0 NaN
# 将不含数值的列中的每个类型都进行0-1编码,dummy_na=True时NaN值也作为一个类
inputs = pd.get_dummies(inputs, dummy_na=True)
print(inputs)
# 输出:
# 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
# 此时的输入输出为<class 'pandas.core.frame.DataFrame'>类型
print(type(inputs))
2.2.3 将读入的数据集转换成张量
X, y = torch.tensor(inputs.values), torch.tensor(outputs.values)
print(X)
# 输出:
# tensor([[3., 1., 0.],
# [2., 0., 1.],
# [4., 0., 1.],
# [3., 0., 1.]], dtype=torch.float64)
print(y)
# 输出:
# tensor([127500, 106000, 178100, 140000])
本小节完整代码如下
import os
import pandas as pd
import torch
# ------------------------------读取数据集------------------------------------
# 下面一段代码的作用是创建一个人工数据集,并存储在CSV文件中
# 在上一级目录下创建一个data文件夹,exist_ok为false表示如果该文件夹已经存在就报错,为true表示如果该文件夹已经存在不报错
os.makedirs(os.path.join('..', 'data'), exist_ok=True)
# 将house_tiny.csv文件与data文件夹路径拼接成一个相对路径
data_file = os.path.join('..', 'data', 'house_tiny.csv')
# 创建并打开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')
# 从house_tiny.csv文件中加载数据集
data = pd.read_csv(data_file)
print(data)
# 输出:
# NumRooms Alley Price
# 0 NaN Pave 127500 NaN:缺失值
# 1 2.0 NaN 106000
# 2 4.0 NaN 178100
# 3 NaN NaN 140000
# ------------------------------处理数据集中的缺失值------------------------------------
inputs, outputs = data.iloc[:, 0:2], data.iloc[:, 2] #将数据集前两列作为输入inputs提取出来,将数据集第三列作为输出outputs提取出来
print(inputs)
# 输出:
# NumRooms Alley
# 0 NaN Pave
# 1 2.0 NaN
# 2 4.0 NaN
# 3 NaN NaN
print(outputs)
# 输出:
# 0 127500
# 1 106000
# 2 178100
# 3 140000
# Name: Price, dtype: int64
# 计算前两列的各列均值
print(inputs.mean())
# 输出:
# NumRooms 3.0
# dtype: float64
# 用均值来填充前两列中的缺失值(插值法)
inputs = inputs.fillna(inputs.mean())
print(inputs)
# 输出:
# NumRooms Alley
# 0 3.0 Pave
# 1 2.0 NaN
# 2 4.0 NaN
# 3 3.0 NaN
# 将不含数值的列中的每个类型都进行0-1编码,dummy_na=True时NaN值也作为一个类
inputs = pd.get_dummies(inputs, dummy_na=True)
print(inputs)
# 输出:
# 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
# 此时的输入输出为<class 'pandas.core.frame.DataFrame'>类型
print(type(inputs))
# ------------------------------将读入的数据集转换成张量------------------------------------
X, y = torch.tensor(inputs.values), torch.tensor(outputs.values)
print(X)
# 输出:
# tensor([[3., 1., 0.],
# [2., 0., 1.],
# [4., 0., 1.],
# [3., 0., 1.]], dtype=torch.float64)
print(y)
# 输出:
# tensor([127500, 106000, 178100, 140000])