深度学习中的数据操作(二) 数据预处理 基于pytorch实现

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)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值