python数据预处理

数据预处理

来自李沐老师b站课程,边学边敲代码,我主要是写书后面的习题

传概念一个人工数据集,并存储在csv(逗号分隔值)文件

import os

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')
#从创建的csv文件中加载原始数据集
import pandas as pd

data= pd.read_csv(data_file)
print(data)

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

#为了处理缺失的数据,典型的方法包括 插值 和 删除 ,这里将考虑插值
inputs,outputs=data.iloc[:,0:2],data.iloc[:,2]
inputs=inputs.fillna(inputs.mean())
print(inputs)

   NumRooms Alley
0       3.0  Pave#数字的na取均值,字符串的不动
1       2.0   NaN
2       4.0   NaN
3       3.0   NaN

#对于inputs中的类别或离散值,我们将‘NAN’视为一个类别
inputs= pd.get_dummies(inputs,dummy_na=True)
print (inputs)

   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)
x,y

(tensor([[3., 1., 0.],
         [2., 0., 1.],
         [4., 0., 1.],
         [3., 0., 1.]], dtype=torch.float64),#传统python默认64位,但计算慢,深度学习32位
 tensor([127500, 106000, 178100, 140000]))

reshape 和 view

a=torch.arange(12)
b=a.reshape((3,4))#b创建了a的view,指向同一个内存
b[:]=2
a
tensor([2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2])

tensor 和array的区别?

tensor:数学上的概念,张量

array:数组,计算机里的概念,没有数学上的定义

一个东西其实

前两节课的练习:

​ 03

  1. 运行本节中的代码。将本节中的条件语句X == Y更改为X < YX > Y,然后看看你可以得到什么样的张量。

    答:改成<

    x <y
    tensor([[ True, False,  True, False],
            [False, False, False, False],
            [False, False, False, False]])
    

    改成>

    tensor([[False, False, False, False],
            [ True,  True,  True,  True],
            [ True,  True,  True,  True]])
    
  2. 用其他形状(例如三维张量)替换广播机制中按元素操作的两个张量。结果是否与预期相同?

    a = torch.arange(6).reshape((3, 1, 2)) 
    b = torch.arange(2).reshape((1, 2, 1)) 
    a,b
    (tensor([[[0, 1]],
     
             [[2, 3]],
     
             [[4, 5]]]),
     tensor([[[0],
              [1]]]))
    a+b
    tensor([[[0, 1],
             [1, 2]],
    
            [[2, 3],
             [3, 4]],
    
            [[4, 5],
             [5, 6]]])
    

在这里插入图片描述

04

创建包含更多行和列的原始数据集。

import os

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,beds\n')#列名
f.write('NA,Pave,127500,2\n')
f.write('2,NA,106000,4\n')
f.write('4,NA,178100,5\n')
f.write('NA,NA,140000,1\n')
f.write('2,NA,106000,1\n')
f.write('4,NA,178100,2\n')
f.write('NA,NA,140000,2\n')
f.write('2,NA,106000,3\n')
f.write('4,NA,178100,4\n')
f.write('NA,NA,140000,2\n')
  1. 删除缺失值最多的列。

    import pandas as pd
    data= pd.read_csv(data_file)
    print(data)
       NumRooms Alley   Price  beds
    0       NaN  Pave  127500     2
    1       2.0   NaN  106000     4
    2       4.0   NaN  178100     5
    3       NaN   NaN  140000     1
    4       2.0   NaN  106000     1
    5       4.0   NaN  178100     2
    6       NaN   NaN  140000     2
    7       2.0   NaN  106000     3
    8       4.0   NaN  178100     4
    9       NaN   NaN  140000     2
    
    data.isna().sum(axis=0)#isna查看缺失值 
    
    NumRooms    4
    Alley       9
    Price       0
    beds        0
    dtype: int64
    可见alley列缺失值最多
    

    使用pandas 里drop函数来删除行或列(默认删除行)

    data.drop(['Alley'],axis=1,inplace=True)#注意列名外面要加‘’和[],inplace=true要写,不写不会改变dataframe
    data = data.fillna(data.mean())# 用均值处理
    
    data
    
    	NumRooms 	Price 	beds
    0 	3.0 	127500 	2
    1 	2.0 	106000 	4
    2 	4.0 	178100 	5
    3 	3.0 	140000 	1
    4 	2.0 	106000 	1
    5 	4.0 	178100 	2
    6 	3.0 	140000 	2
    7 	2.0 	106000 	3
    8 	4.0 	178100 	4
    9 	3.0 	140000 	2
    
  2. 将预处理后的数据集转换为张量格式。

    fillna:

    inplace参数的取值:True、False

    True:直接修改原对象

    False:创建一个副本,修改副本,原对象不变(缺省默认)

    method参数的取值 : {‘pad’, ‘ffill’,‘backfill’, ‘bfill’, None}, default None

    pad/ffill:用前一个非缺失值去填充该缺失值(第一个值为空就填不了第一个

    backfill/bfill:用下一个非缺失值填充该缺失值(如果最后一个为空,那么填不了

    None:指定一个值去替换缺失值(缺省默认这种方式)

    print (torch.tensor(data.values))#转化为张量格式
    tensor([[3.0000e+00, 1.2750e+05, 2.0000e+00],
            [2.0000e+00, 1.0600e+05, 4.0000e+00],
            [4.0000e+00, 1.7810e+05, 5.0000e+00],
            [3.0000e+00, 1.4000e+05, 1.0000e+00],
            [2.0000e+00, 1.0600e+05, 1.0000e+00],
            [4.0000e+00, 1.7810e+05, 2.0000e+00],
            [3.0000e+00, 1.4000e+05, 2.0000e+00],
            [2.0000e+00, 1.0600e+05, 3.0000e+00],
            [4.0000e+00, 1.7810e+05, 4.0000e+00],
            [3.0000e+00, 1.4000e+05, 2.0000e+00]], dtype=torch.float64)
    
    

.0000e+00, 1.4000e+05, 2.0000e+00],
[2.0000e+00, 1.0600e+05, 3.0000e+00],
[4.0000e+00, 1.7810e+05, 4.0000e+00],
[3.0000e+00, 1.4000e+05, 2.0000e+00]], dtype=torch.float64)

  ```

  ​

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值