数据预处理过程中处理方法

1、初次清洗,DataFrame中存在数值型字段和非数字型字段技巧

1)将训练集和测试集数据进行合并,统一处理

dataset=pd.concat([train_data,test_data],axis=0)

2)识别数值型字段和非数值型字段

number_feats = dataset.dtypes[dataset.dtypes != "object"].index
object_feats = dataset.dtypes[adataset.dtypes == "object"].index

number_feats返回数值型字段列表,object_feats返回字符串型字段列表

3)对于数值型进行归一化操作、对于非数值型进行one-hot处理、空缺值填充

对于数值型采用Z-score归一化处理,代码如下:

dataset[number_feats] = dataset[number_feats].apply(lambda x: (x - x.mean()) / (x.std()))

技巧如下:

(1)对于多个列执行相同的操作:dataset[待处理的列].apply(lambda x: 关于x的函数) 

(2)处理后直接在原始DataFrame中赋值操作:dataset[待处理的列]=dataset[待处理的列].apply(labbda x :关于x的函数)

对于存在非数值型的dataframe进行one-hot处理,上面的数值型操作和下面的非数值型操作可以前后操作处理,代码如下

dataframe = pd.get_dummies(dataframe, prefix=object_feats, dummy_na=True)

其中,函数使用pd.get_dummies(dataframe,prefix=one-hot命名的前缀,dummy_na=True), dummy_na 后面True表示字段增加一列表示空缺值,默认是以列为对象的,

空值填充,以上两步分别做完,然后进行最后空缺值填充,保证数据完整性、可用性。

dataframe = dataframe.fillna(dataframe.mean())

4)tensor数据类型改变形状的一种方法

tensor数据矩阵.squeeze():对于tensor数据矩阵去掉维度为1的。

tensor数据矩阵.unsqueeze(数值):对于tensor数据矩阵增加维度为1的,具体在那个位置加入,需要依据设定的数值,该数值表示设定的位置。

扫描二维码关注公众号,回复: 13174290 查看本文章

5)ndarray转化成tensor形式

train_features = torch.from_numpy(train_features).cuda()

6)TensorDataset函数类似于一个压缩的过程,将第一维度一致的两个tensor矩阵压缩到一起,此处将数据集和对应标签压缩到一块。

train_set = TensorDataset(train_features,train_labels)

7)可以实现对于压缩好的数据进行分割成多个batch_size快循环训练,类似于构建多个子数据集的过程实现数据的训练训练

#定义迭代器
train_data = DataLoader(dataset=train_set,batch_size=64,shuffle=True)

8)卷积神经网络的实现过程

class CNN(nn.Module):
 2     def __init__(self):
 3         super(CNN, self).__init__()
 4         self.conv1 = nn.Sequential( #input shape (1,28,28)
 5             nn.Conv2d(in_channels=1, #input height 
 6                       out_channels=16, #n_filter
 7                      kernel_size=5, #filter size
 8                      stride=1, #filter step
 9                      padding=2 #con2d出来的图片大小不变
10                      ), #output shape (16,28,28)
11             nn.ReLU(),
12             nn.MaxPool2d(kernel_size=2) #2x2采样,output shape (16,14,14)
13               
14         )
15         self.conv2 = nn.Sequential(nn.Conv2d(16, 32, 5, 1, 2), #output shape (32,7,7)
16                                   nn.ReLU(),
17                                   nn.MaxPool2d(2))
18         self.out = nn.Linear(32*7*7,10)
19         
20     def forward(self, x):
21         x = self.conv1(x)
22         x = self.conv2(x)
23         x = x.view(x.size(0), -1) #flat (batch_size, 32*7*7)
24         output = self.out(x)
25         return output

1、时间戳的获取

1)将字符串转化成时间戳格式

t1=pd.DatetimeIndex(['2017/8/1','2018/8/2','2018/8/3','2018/8/4/','2018/8/5'])
print(t1,type(t1))

获取时间戳中的天字段

t1=pd.DatetimeIndex(['2017/8/1','2018/8/2','2018/8/3','2018/8/4/','2018/8/5']).day
print(t1,type(t1))

获取时间戳中的月字段

t1=pd.DatetimeIndex(['2017/8/1','2018/8/2','2018/8/3','2018/8/4/','2018/8/5']).month
print(t1,type(t1))

获取时间戳中的年字段

t1=pd.DatetimeIndex(['2017/8/1','2018/8/2','2018/8/3','2018/8/4/','2018/8/5']).year
print(t1,type(t1))

2)获取选定额起点时间、终止时间的连续时间序列,默认是按天更新

t1=pd.date_range('2017/1/4','2017/1/9',normalize=True)
print(t1)
DatetimeIndex(['2017-01-04', '2017-01-05', '2017-01-06', '2017-01-07',
               '2017-01-08', '2017-01-09'],
              dtype='datetime64[ns]', freq='D')

3)设定起始时间和往后更新多少天数,计算需要的时间

periods:表示时间日期,从start开始往后或end往前生成n天

t2=pd.date_range('2017/1/4',periods=10)
print(t2)
DatetimeIndex(['2017-01-04', '2017-01-05', '2017-01-06', '2017-01-07',
               '2017-01-08', '2017-01-09', '2017-01-10', '2017-01-11',
               '2017-01-12', '2017-01-13'],
              dtype='datetime64[ns]', freq='D')

4)根据获取的起始时间和更新天数,同时加入往后推的天数

增加时分秒:

t3=pd.date_range('2017/1/4 15:30:00',periods=10)
print(t3)
DatetimeIndex(['2017-01-04 15:30:00', '2017-01-05 15:30:00',
               '2017-01-06 15:30:00', '2017-01-07 15:30:00',
               '2017-01-08 15:30:00', '2017-01-09 15:30:00',
               '2017-01-10 15:30:00', '2017-01-11 15:30:00',
               '2017-01-12 15:30:00', '2017-01-13 15:30:00'],
              dtype='datetime64[ns]', freq='D')

猜你喜欢

转载自blog.csdn.net/zhangzhoubin666/article/details/120767749