数据预处理

本文介绍了如何使用Python的pandas库从CSV文件中加载数据,处理缺失值,并进行数据转换,包括使用fillna函数填充缺失值和get_dummies函数进行独热编码。此外,还涉及了数据类型转换为张量及基本的矩阵操作技巧。
摘要由CSDN通过智能技术生成

首先创建一个人工数据集,并存储在CSV(逗号分隔值)文件 ../data/house_tiny.csv中。 以其他格式存储的数据也可以通过类似的方式进行处理。 下面我们将数据集按行写入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文件中加载原始数据集,我们导入pandas包并调用read_csv函数。该数据集有四行三列。其中每行描述了房间数量(“NumRooms”)、巷子类型(“Alley”)和房屋价格(“Price”)。

# 如果没有安装pandas,只需取消对以下行的注释来安装pandas
# !pip install pandas
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

对上述列表进行处理缺失值

fillna 的含义是填充空值   如数组X.fillna(1)即将数组X中的所有空值NAN填充为1

mean的含义是取数值的平均数 如数组X.mean()的值为数组X中所有数值的平均值 #括号必须带上

表格分割:

用data.ilco函数

eg:inputs=data.iloc[:,0:2]

问题:为什么?

inputs = inputs.fillna(outputs.mean()

 而

inputs = inputs.fillna(inputs.mean())

后者的Alley没有改变

 pandas中的get_dummy函数,是将拥有不同变量的值转化为0/1数值

使用:pd.get_dummies(目标数组或者行列,prefix='这一行或者列的名称')

eg:inputs = pd.get_dummies(inputs, prefix='Alley')

csv数值类型转化为张量类型:

用torch.tensor()  可将括号中的数值转化为张量类型

eg:torch.tensor(x.values)  加了value表示数字矩阵,意思是一个数值,不加value表示张量本身

访问张量的长度:

len(x)

自定义矩阵:

用A=torch.tensor([a,b,c,d])

得tensor([a,b,c,d])这样一个一维矩阵A

然后通过A.reshape(n*m)得自己想要的一个多维矩阵

矩阵转置:

可用A.t()或A.T对矩阵A进行转置

对称矩阵的原矩阵与转置后的矩阵完全相同 ,即若B为对称矩阵则有B==B.T

矩阵求和与矩阵的指定求和(可以做到降维的效果)

A.sum()即对A中所有元素求和

A.sum(axis=0)即按照特定的轴求和,axis=0则按照所有行的元素求和来降维,最后结果中,输出轴0消失                   若axis=1,则按照所有列的元素求和来降维

这里的0,1是序数词,若数组格式为A.shape=[5,4,6,  7 ],则axis=0代表的是5这个维度,axis=1代表的是4这个维度,axis=2代表的是6这个维度,axis=3代表的是7这个维度

eg1:二维

 axis=0

  排序为0的5维度不见了,结果转化为1维

 axis=1

 排序为1的4维度不见了,结果转化为1维

 eg2:三维

如果不想丢掉维度,则用A_sum=A.sum(axis=n,keepdims=True)  #n为小于维度总数-1的一个数

此做法有利于广播机制的使用(求和前后维度不变),因为广播机制可以在维度相同时使用,即A/A_sum可以直接计算

求均值:

用mean

 点积(内积):

用dot(A,B)对应元素乘积之和,结果是一个标量,可用<A,B>表示其运算,若<A,B>对A求导,则结果为A的转置

矩阵与矩阵的积:

用torch.mm(A,B)即矩阵乘法

矩阵与向量的积:

用torch.mv(A,x)即矩阵乘以一个向量

求向量L2范数:

用torch.norm()  #括号中间写矩阵   eg:torch.norm(A) 

求向量L1范数:

用torch.abs().sum()  #abs的括号里面写矩阵即可  eg:torch.abs(A).sum()

 求矩阵佛罗贝尼乌斯范数:

即用求向量L2范数的方式,用norm即可

2022/3/7

特别感谢:李沐大神

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

tinason杨

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

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

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

打赏作者

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

抵扣说明:

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

余额充值