一、相关资料链接
二、代码及笔记(使用Jupyter Notebook)
(一)数据预处理:创建一个人工数据集,并且存储在csv(逗号分隔值)文件
1. 创建一个文件夹,文件名为:house_tiny.csv csv是指每一行是一个数据,每一个域是用逗号分开的。这里写的几行f.write就是在往前几行创建的csv文件里写入数据。#1:告诉你有多少个房间,Alley是进门的那个路是什么样,这个房子卖多少钱。#2 NA是未知数,pave是铺路,127500是价格。一般读取csv文件使用的是pandas的库,如果没有安装pandas,只需在jupyter notebook中执行 !pip install pandas
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') #1 列名
f.write('NA,Pave,127500\n') #2 每行表示一个样本
f.write('2,NA,106000\n')
f.write('4,NA,178100\n')
f.write('NA,NA,140000\n')
2.
import pandas as pd
data = pd.read_csv(data_file)
print(data)
如果不使用print,则更加好看,是html的形式展示出来的,如下:
import pandas as pd
data = pd.read_csv(data_file)
data
运行结果显示如下:
3. 为了处理缺失的数据(NA),典型的方法包括 插值 和 删除,这里我们考虑插值。此时的data是一个4x3的表,#1 通过.iloc把第一个的第0和第1列和所有的行拿出来,放在input里面,然后把最后一列放在output里面。 #2 input 中fillna对于所有是notnumber(NA)的域填一个值,所有填值为mean(已知两个数值2和4,则取两个数的平均值进行填充)
inputs, outputs = data.iloc[:, 0:2], data.iloc[:, 2] #1
inputs = inputs.fillna(inputs.mean()) #2
print(inputs)
4. 对于inputs中的类别值(不是数值)或者离散值,我们将“NaN”视为一个类别。即把缺失的作为一个特别的类别,然后再吧字符串用数值表示。如上Alley有两个值:Pave和NaN,则用get_dummies建两类
inputs = pd.get_dummies(inputs, dummy_na=True)
print(inputs)
5. 我们已经把所有缺失的值和字符串已经变成一个值(数值类型)那么则可以把它们转换成pytorch的tensor(张量格式)。把一个csv文件变成一个纯张量了。float64是python默认的浮点数。而outputs中没有缺失值,所有不需要任何改变
import torch
X, y = torch.tensor(inputs.values), torch.tensor(outputs.values)
X, y