pytorch学习笔记(二)
数据预处理
创建一个人工数据集,并存储在CSV(逗号分隔值)文件
import os
os.makedirs(os.path.join('..','data'),exist_ok=True) #此处的..需要修改为你要存放的地址,例:C:\Users\qi\Desktop\文件\study
data_file = os.path.join('..','data','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')
从创建的CSV文件中加载原始数据集
impot pandas as pd
data = pd.read_csv(data_file)
print(data)
#out: NumRooms Alley Price
#0 NaN Pave 127500
#1 2.0 NaN 106000
#2 4.0 NaN 178100
#3 NaN NaN 140000
处理缺失数据例如:NA,典型的方法包括 插值 和 删除
使用插值法将数据缺失转换为估计值:
inputs,outputs = data.iloc[:,0:2],data.iloc[:,2] #把数据中的第一列和第二列全部放进inputs中,把数据中的第三列全部放进outputs中
inputs = inputs.fillna(inputs.mean()) #用同一列的均值替换NaN
print(inputs)
#out: NumRooms Alley
#0 3.0 Pave
#1 2.0 NaN
#2 4.0 NaN
#3 3.0 NaN
data.iloc是pandas中的位置索引
对于inputs中的类别值或离散值,我们将“NaN”视为一个类别。
inputs = pd.get_dummies(inputs,dummy_na=True)
print(inputs)
#out: 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
现在inputs和outputs中的所有条目都是数值类型,他们可以转换为张量格式。
import torch
X,y = torch.tensor(inputs.values),torch.tensor(outputs.values) #将上述的CSV文件转换成了pytorch的张量
X,y
#out:(tensor([[3., 1., 0.],
# [2., 0., 1.],
# [4., 0., 1.],
# [3., 0., 1.]], dtype=torch.float64),
# tensor([127500, 106000, 178100, 140000]))
使用删除法去除缺失最多的列
inputs = data.iloc[:,0:2],data.iloc[:,2] #把数据中的第一列和第二列存放到inputs中
if float(inputs['NumRooms'].count()) > float(inputs['Alley'].count()): #获取inputs中'NumRooms'列非空值的个数并转换为float类型
inputs.drop('Alley',axis=1,inplace=True) #删除'Alley'那一列
else :
inputs.drop('NumRooms',axis=1,inplace=True) #删除'Numroom'那一列
print(inputs)
#out: NumRooms
#0 NaN
#1 2.0
#2 4.0
#3 NaN
转换为张量格式
import torch
inputs = pd.get_dummies(inputs.NumRooms,dummy_na=True) #对'NumRooms'列进行分类,将NaN设置为可分类项
x = torch.tensor(inputs.values)
x
#out:tensor([[0, 0, 1],
# [1, 0, 0],
# [0, 1, 0],
# [0, 0, 1]], dtype=torch.uint8)
#---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------#
*注:python中反斜杠 \ 是有单独意义的,故输入地址要用其他符号代替,例:
错误输入:
sys.path.append('C:\Users\qi\Desktop\文件\study')
正确输入形式:1、在路径前面加r,即保持字符原始值的意思。
sys.path.append(r'C:\Users\qi\Desktop\文件\study')
2、替换为双反斜杠
sys.path.append('C:\\Users\\qi\\Desktop\\文件\\study')
3、替换为正斜杠
sys.path.append('C:/Users/qi/Desktop/文件/study')