动手深度学习V2

chapter2.2

import torch
import os
import numpy as np
import pandas as pd

# csv文件 一种以逗号,分隔开的数据文本 一种平面文件 是纯数据文件
# csv文件的读取是pandas的read_csv()函数来读取的
# 这个是和课件上不一样的点 此时是一个. 不是两个.. 因为权限不一样的
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') # 这个代表是列名
    f.write('NA,Pave,127500\n')  # 每行表示一个数据样本
    f.write('2,NA,106000\n')
    f.write('4,NA,178100\n')
    f.write('NA,NA,140000\n')

# 将scsv文件的结果输出来
# 如果提示没有pandas这个包的话 就去pytorch环境下conda install pandas
import pandas as pd
date = pd.read_csv(data_file)
print(date)

   NumRooms Alley   Price
0       NaN  Pave  127500
1       2.0   NaN  106000
2       4.0   NaN  178100
3       NaN   NaN  140000

# csv文件中出现了NaN这样的数据 要进行处理 通常的做法是进行插值和删除
inputs, outputs = date.iloc[:, 0:2], date.iloc[:, 2] # iloc函数是定位函数 前者定位到全部行的0到1列全部取出 后者是定位到全部行的第2列
inputs = inputs.fillna(inputs.mean()) # fillna函数将Na/NaN的数值进行指定的数值进行填充
print(inputs)

   NumRooms Alley
0       NaN  Pave
1       2.0   NaN
2       4.0   NaN
3       NaN   NaN
   NumRooms Alley
0       3.0  Pave
1       2.0   NaN
2       4.0   NaN
3       3.0   NaN

# 在处理数据过程中 遇到类别值和离散值 将NaN看为一个类别
# get_dummines() 这个是实现one hot code的形式 
# 将离散型特征的每一种取值都看成一种状态,若你的这一特征中有N个不相同的取值,那么我们就可以将该特征抽象成N种不同的状态,
# one-hot编码保证了每一个取值只会使得一种状态处于“激活态”,也就是说这N种状态中只有一个状态位值为1,其他状态位都是0。
inputs = pd.get_dummies(inputs, dummy_na=True)
print(inputs)

# 将inputs putputs中的所有条目都是数值类型 类型转化为张量格式
import torch
x, y = torch.tensor(inputs.values), torch.tensor(outputs.values)
x, y

(tensor([[3., 1., 0.],
         [2., 0., 1.],
         [4., 0., 1.],
         [3., 0., 1.]], dtype=torch.float64),
 tensor([127500, 106000, 178100, 140000]))

# 作业
# 1. 删除缺失值最多的列。
os.makedirs(os.path.join('.', 'data1'), exist_ok=True)
data_file1 = os.path.join('.', 'data1', 'house_tiny1.csv')
with open(data_file1, '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')
date1 = pd.read_csv(data_file1)
print(date1)

def drop_maxcol():
    count = 0
    count_max = 0
    labels = ['NumRooms','Alley','Price']
    for label in labels:
        count = date1[label].isna().sum() # 统计NAN元素
        if count > count_max:
            count_max = count
            drop_label = label
    # print(drop_label)        
    drop_data1 = date1.drop(drop_label, axis=1)  
    return drop_data1
drop_data1 = drop_maxcol()
drop_data1


NumRooms	Price
0	NaN	127500
1	2.0	106000
2	4.0	178100
3	NaN	140000

# 作业2
# 将预处理后的数据集转化为张量
# 1.将NumRooms为NaM的元素进行填充
# 2.
inputs = drop_data1.iloc[:,0:1]
inputs = inputs.fillna(inputs.mean()) # 数据填充
input_tensor = torch.tensor(inputs.values)
print(input_tensor)

tensor([[3.],
        [2.],
        [4.],
        [3.]], dtype=torch.float64)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值