1.2 数据预处理
"""
1.2.1 读取数据集
这里通过新建路径与文件 并输入内容来进行介绍
"""
import os
os.makedirs(os.path.join('..','data'),exist_ok = True) #这一步是创建路径../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')
#接下来就是导入pandas包来进行预处理
import pandas as pd
data = pd.read_csv(data_file) #这是读取数据文件来进行处理
print(data)
"""1.2.2 处理缺失值
在csv文件中,经常会出现部分数值空缺的问题,这里会自动用NaN来代替
通常,我们通过插值法和删除法来解决该问题,下面是插值法的演示,就是通过取NaN值所在列的均值,将均值填入其中,
"""
inputs,outputs = data.iloc[:,0:2], data.iloc[:,2] #这一步中相当于将inputs赋为data的前两列,而outputs为data的最后一列
print(inputs)
print(outputs)
inputs = inputs.fillna(inputs.mean()) #这一步中的inputs.mean()是指将NaN的部分 填入这一列非空值的均值
print(inputs)
"""特别的 对于alley来说,仅有pave和nan两种值,pandas包提供可将该两种值转化为1和0"""
inputs = pd.get_dummies(inputs,dummy_na = True)
print(inputs)
"""1.2.3 张量的转换
上述的.csv文件和张量之间是可以互相转换的
"""
import torch
print(inputs.values)
X, y = torch.tensor(inputs.values), torch.tensor(outputs.values)
X, y
课后练习:
1.创建包含更多行和列的原始数据集。
2.删除缺失值最多的列。
3.将预处理后的数据集转换为张量格式。
import os
import pandas as pd
import torch
os.makedirs(os.path.join('..','work'),exist_ok=True)
work_file = os.path.join('..','work','house_large.csv')
with open (work_file,'w') as f:
f.write('NumRooms,Alley,Price,Address\n') # 列名
f.write('NA,Pave,223465,A\n') # 每行表示一个数据样本
f.write('2,Pave,NA,NA\n')
f.write('1,NA,769234,D\n')
f.write('NA,Pave,NA,NA\n')
f.write('5,NA,106000,C\n')
f.write('8,Pave,NA,NA\n')
f.write('NA,NA,479,NA\n')
f.write('3,Pave,NA,T\n')
f.write('4,Pave,NA,NA\n')
f.write('21,NA,870,NA\n')
names = ['NumRooms','Alley','Price','Address']
data2 = pd.read_csv(work_file)
print(data2.isnull())
data3 = data2.isnull() #这样在后面只需要判断True和False
hang = len(data2) #统计行数
lie = len(data2.columns) #统计列数
print(hang)
print(lie)
lst = []
m = 0
for i in range(lie):
lst.append(0)
for j in range(hang):
if data3.iat[j,i]:
lst[i] = lst[i] + 1
print(lst)
if lst[m] < lst[i]:
m = i #统计NaN最多列的下标
print(m)
data2.drop([names[m]],axis = 1, inplace=True) #删除该列
print(data2)
data2 = pd.get_dummies(data2,dummy_na=True) #将Pave和NaN改成1和0
print(data2.values)
tens = torch.tensor(data2.values) #转化为张量
print(tens)