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])

 

posted on 2022-11-01 11:07  yc-limitless  阅读(143)  评论(0编辑  收藏  举报