深度学习——预备知识(2)数据预处理


2. 预备知识

2.2 数据预处理

用深度学习解决现实问题,要从预处理原始数据开始,而不是从张量格式数据开始。数据预处理经常使用pandas预处理原始数据,并将原始数据转换为张量格式。

2.2.1 读取数据集

总结:
我们常用pandas进行数据分析,pandas可以与张量兼容。
用pandas处理缺失数据,我们可以根据情况选择用插值法和删除法。

import os
import pandas as pd
import torch

# 创建一个人工数据集
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,nums,Alley,Price\n')  # 列名
    f.write('NA,1,Pave,127500\n')  # 每行表示一个数据样本
    f.write('2,1,NA,106000\n')
    f.write('4,1,NA,178100\n')
    f.write('NA,NA,NA,140000\n')
    f.write('NA,NA,NA,140000\n')
    f.write('NA,2,NA,140000\n')
    f.write('NA,3,NA,140000\n')
data = pd.read_csv(data_file)
print(data)  # 输出数据

# 处理缺失值,这里先用插值法,用同一列的均值替换NAN项
# 1.插值法
inputs = data.iloc[:, 0:4]
inputs = inputs.fillna(inputs.mean())
print(inputs)

# 对于inputs中的类被或离散值,我们讲NaN视为一个类别。由于Alley列只接受两种类型的类别值——Pave和NaN,pandas可以自动将此列转换为两列
# Alley_Pave和Alley_nan。类型为Pave的行会将Alley_Pave的值设置为1,Alley_nan的值设置为0,其余为0
inputs = pd.get_dummies(inputs, dummy_na=True)
print(inputs)

# 转换为张量格式
X = torch.tensor(inputs.values)
print(X)

# print(torch.cat((X,y),dim=1))
# print(Z)

   NumRooms  nums Alley   Price
0       NaN   1.0  Pave  127500
1       2.0   1.0   NaN  106000
2       4.0   1.0   NaN  178100
3       NaN   NaN   NaN  140000
4       NaN   NaN   NaN  140000
5       NaN   2.0   NaN  140000
6       NaN   3.0   NaN  140000
   NumRooms  nums Alley   Price
0       3.0   1.0  Pave  127500
1       2.0   1.0   NaN  106000
2       4.0   1.0   NaN  178100
3       3.0   1.6   NaN  140000
4       3.0   1.6   NaN  140000
5       3.0   2.0   NaN  140000
6       3.0   3.0   NaN  140000
   NumRooms  nums   Price  Alley_Pave  Alley_nan
0       3.0   1.0  127500           1          0
1       2.0   1.0  106000           0          1
2       4.0   1.0  178100           0          1
3       3.0   1.6  140000           0          1
4       3.0   1.6  140000           0          1
5       3.0   2.0  140000           0          1
6       3.0   3.0  140000           0          1
tensor([[3.0000e+00, 1.0000e+00, 1.2750e+05, 1.0000e+00, 0.0000e+00],
        [2.0000e+00, 1.0000e+00, 1.0600e+05, 0.0000e+00, 1.0000e+00],
        [4.0000e+00, 1.0000e+00, 1.7810e+05, 0.0000e+00, 1.0000e+00],
        [3.0000e+00, 1.6000e+00, 1.4000e+05, 0.0000e+00, 1.0000e+00],
        [3.0000e+00, 1.6000e+00, 1.4000e+05, 0.0000e+00, 1.0000e+00],
        [3.0000e+00, 2.0000e+00, 1.4000e+05, 0.0000e+00, 1.0000e+00],
        [3.0000e+00, 3.0000e+00, 1.4000e+05, 0.0000e+00, 1.0000e+00]],
       dtype=torch.float64)
#######################################################################
# 2.删除法
data = pd.read_csv(data_file)
# 统计每列的NANs数目
nan_number = data.isnull().sum(axis=0)
# 找到nan_number(series)中最大数的索引
nan_max_id = nan_number.idxmax()
# 删除NAN最大的列
data = data.drop([nan_max_id], axis=1)
print(data)
# 转换为张量格式
data = torch.tensor(data.values)
print(data)
 NumRooms  nums   Price
0       NaN   1.0  127500
1       2.0   1.0  106000
2       4.0   1.0  178100
3       NaN   NaN  140000
4       NaN   NaN  140000
5       NaN   2.0  140000
6       NaN   3.0  140000
tensor([[       nan, 1.0000e+00, 1.2750e+05],
        [2.0000e+00, 1.0000e+00, 1.0600e+05],
        [4.0000e+00, 1.0000e+00, 1.7810e+05],
        [       nan,        nan, 1.4000e+05],
        [       nan,        nan, 1.4000e+05],
        [       nan, 2.0000e+00, 1.4000e+05],
        [       nan, 3.0000e+00, 1.4000e+05]], dtype=torch.float64)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

暗紫色的乔松(-_^)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值