按行划分数据帧(或numpy数组)的正确方法

Posted

技术标签:

【中文标题】按行划分数据帧(或numpy数组)的正确方法【英文标题】:correct way to divide a dataframe (or numpy array) by rows 【发布时间】:2021-06-29 23:31:24 【问题描述】:

我是机器学习领域的新手,我正在研究 rnn 以对时间序列进行分类。 我正在研究这个数据集https://archive.ics.uci.edu/ml/datasets/EEG+Eye+State# 由 14 个时间序列组成,每个时间序列的步数等于 14980 我想得到的是一组恰好有 20 个时间步长的时间序列,所以一个具有形状 (749,20,14) 的 numpy 数组 其中 749 是时间序列数,20 是时间序列的时间步数,14 是每个时间步的值数。 然后将该数组输入网络进行训练。 实现这一目标的正确方法是什么?

起始数据框,最后一列包含用于对时间序列进行分类的整数

#how to divide it right?
data = arff.loadarff('./datasets/eeg_eye_state.arff')

df = pd.DataFrame(data[0])
df['eyeDetection'] = df['eyeDetection'].str.decode('utf-8')
df['eyeDetection'] = df['eyeDetection'].astype(str).astype(int)

【问题讨论】:

你搜索了吗?你发现了什么? 【参考方案1】:

由于您使用的是EEG Eye State 数据集并且:

所有值均按时间顺序排列,第一个测量值位于数据顶部。

您可以使用tensorflow.keras 实用程序类中的TimeseriesGenerator 来生成时间数据批次。

from tensorflow.keras.preprocessing.sequence import TimeseriesGenerator

n_input = 20
batch_size = 749
data_input = df.drop(columns=['eyeDetection'])

data_gen = TimeseriesGenerator(data_input, df.eyeDetection, length=n_input, batch_size=batch_size)

batch_0 = data_gen[0]
x, y = batch_0

print(x.shape)
print(y.shape)

#feed possibly to a model.fit()
#model.fit(data_gen, ...)
(749, 20, 14)
(749,)

【讨论】:

以上是关于按行划分数据帧(或numpy数组)的正确方法的主要内容,如果未能解决你的问题,请参考以下文章

如何将数组划分为段,然后使用python numpy执行段的子段?

使用numpy在矩阵中划分一行

Numpy教程

python 按行划分多变量

划分并行数组C ++ [重复]

当 ID 匹配时,在其他 Pyspark 数据帧中按列划分 Pyspark 数据帧列