几种简单数据预处理方法的Python实现

本文介绍了数据预处理中的五个关键步骤,包括大向量分割、小向量填充、数据编码、向量形状变换和文本处理,通过Python实现。详细讲解了如何利用Python的列表切片、enumerate()、numpy库等工具进行数据处理,特别适合深度学习初学者。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

几种简单数据预处理方法的Python实现

数据科学、深度学习都离不开数据的准备与预处理。对于像我这样的新手而言,不仅算法需要花费许多时间来理解,数据预处理就消耗了不少的精力。在此特将近期遇到的几种准备数据的方法归类,并使用Python来处理它们。一可以深化对Python语言特性的理解,二也为所有人参考,能够少走弯路。

几个对于简化编码非常重要的语言特性与库方法:列表的切片,enumerate(),列表推导(List Comprehension),以及numpy库的numpy.zeros()、numpy.shape等。

近期学习Udacity深度学习基础课,把数据的准备分成了以下五种类型:

一.大向量分割成若干小向量

二.小向量内容复制到大向量

三.数据的编码

四.改变向量形状

五.文本处理


一.大向量分割成若干小向量

背景:切割训练集,使之适合于模型的输入 。使用List的切片

split_frac = 0.8 #训练集占80%
num_train = int(0.8*len(features))
train_x, val_x = features[:num_train], features[num_train:]
num_val = int(0.5*len(val_x)) #验证集与测试集各占剩余20%中的一半
val_x, test_x = val_x[:num_val], val_x[num_val:]

 

二.小向量内容复制到大向量

背景:给小向量填0,使之成为符合要求的大向量。使用zeros()创建"容器",enumerate()获得序号及其对应得数据

seq_len = 200
features = np.zeros((len(x), seq_len), dtype=int)
    #先开设符合大小的一个"容器",seq_len表示容器长度,x为需要填入的内容,个数为len(x)
for i, row in enumerate(x): #处理x个需要填入大矩阵的小向量, 每一次循环处理第i个,内容为x
    features[i, :len(row)] = np.array(row)

 

三.数据的编码

背景:独热编码(One-hot Encoding):用于分类问题,数值最高的一类对应的编码为1,其余全部设为0

x = list.index(max(data)) #data为list类型,若为numpy.array则需使用np.where(data==max(data))

#x为第i类取值为1,其余为0
vec = np.eye(10)[x]
#输出形如array([0,0,1,0,0...])

#若使用tensorflow,可参考tf.one_hot()函数

 

四.改变向量形状

背景:多维向量压缩维数。使用np.shape与np.reshape()

#x为四维张量,需要压缩第2、3、4维成为一列,以转换成二维张量
#numpy中
dim=x.shape #得到的是一个元组
x = x.reshape((-1, dim[1]*dim[2]*dim[3])) 
    #若想要程序自动帮忙计算某一维度的值,就填入-1好了

#tensorflow中
dim_list = x.get_shape().as_list()
x = tf.reshape(x, [-1, dim_list[1]*dim_list[2]*dim_list[3]] 
    #-1的作用同上

 

五.文本处理

背景:输入一长串英文文本,提取单词到字典,并把文本用整数来编码。活用enumerate()列表推导

with open('text.txt', 'r') as f:
    text=f.read()
vocab = set(text) #消除重复单词
vocab_to_int = {c: i for i, c in enumerate(vocab)} #enumerate(vocab)得到形如['love' : 0,     
                                                   #'home': 1,...]的列表,随后填入字典
encoded = np.array([vocab_to_int[c] for c in text], dtype=np.int32)
    #将单词转换成整数编码,由text="love home"得到的array形如[0,1]

小结:

若使用类似C/C++的语言,以上的实现都需要不少代码。Python确实是数据处理中非常值得选择的语言。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值