Pandas与变长时间序列的最佳表示方法

2024-05-15 12:57:20 发布

您现在位置:Python中文网/ 问答频道 /正文

这是一个场景。假设我有一个视觉心理物理实验的数据,在这个实验中,一个受试者指出在嘈杂的视觉刺激下,运动的净方向是向左还是向右。这里的原子单元是一个单独的试验,一个典型的每日试验可能有1000到2000个试验。每次试验都有不同的参数:试验的难度,刺激物在计算机显示器上的位置,运动速度,受试者与显示器之间的距离,受试者的回答是否正确等等。现在,我们假设每个试验对每个参数只有一个值(例如。,每次试验只有一个运动速度等)。到目前为止,很简单:试用id是索引,不同的参数对应于列。在

这是皱纹。每一次试验也有相关的可变长度时间序列。例如,每次试验都会有以1khz采样的眼球运动数据(所以我们得到采集时间,那个时间点的x数据,那个时间点的y数据)。因为每个试验有不同的总持续时间,这些时间序列的长度将因试验而异。在

所以。。。在pandas数据帧中表示这类数据的最佳方法是什么?对熊猫来说,这是可以应付的吗?我应该使用多个数据帧,一个用于单值参数,另一个用于类似时间序列的参数?在

我考虑过采用一种多索引方法,其中0级对应于试验编号,1级对应于连续数据采集的时间。然后我需要做的就是重复单值列,以匹配试验中时间序列的长度。但我马上预见到了两个问题。首先,单值列的数量足够大,如果不是不切实际的话,扩展每个列以匹配时间序列的长度似乎是非常浪费的。第二,更重要的是,如果我想进行基本的分组分析(例如,在给定的难度水平下获得正确回答的比例),这将产生有偏差(不正确)的结果,因为每个试验是正确的还是错误的,都将重复多次,以使其长度与该试验中的时间序列长度相匹配(这与计算各试验的平均值无关)。在

我希望我的问题有意义,谢谢你的建议。在


Tags: 数据方法参数时间场景物理序列视觉
1条回答
网友
1楼 · 发布于 2024-05-15 12:57:20

我也一直在处理这类问题。我有一堆我记录的运动捕捉数据,包含了几个动作捕捉标记的x-y-和z-位置,时间间隔为10ms,但每次试验也有几个单值字段(例如,受试者正在执行的任务)。在

我一直在用这个项目作为学习pandas的动机,所以我肯定还不太“流利”。但我发现,将每次试验的数据帧连接成单个较大的帧(例如,一个受试者)非常方便:

subject_df = pd.concat(
    [pd.read_csv(t) for t in subject_trials],
    keys=[i for i, _ in enumerate(subject_trials)])

总之,我对如何将单值试验数据与连续时间记录相结合的建议是将单值列复制到时间记录的整个索引中,就像你在问题末尾提到的那样。在

以这种方式对数据进行非规范化处理所带来的唯一损失是数据将消耗更多内存;但是,如果您有足够的内存,我认为这样做的好处是值得的,因为这样您就可以按照每次试验值对数据的各个时间帧进行分组。这对于堆叠的数据帧特别有用!在

至于消除重复做,例如,试验结果分析,这是非常简单的:

^{pr2}$

假设你的数据框有一个“结果”列。在

相关问题 更多 >