【发布时间】:2014-11-15 21:35:00
【问题描述】:
这是场景。假设我有来自视觉心理物理学实验的数据,其中受试者指示在嘈杂的视觉刺激中运动的净方向是向左还是向右。这里的原子单元是一次试验,典型的每日会话可能有 1000 到 2000 次试验。每次试验都与各种参数相关联:试验的难度、刺激物在计算机显示器上的位置、运动速度、受试者与显示器的距离、受试者是否正确回答等。现在,让我们假设每个试验的每个参数只有一个值(例如,每个试验只有一个运动速度等)。到目前为止,一切都很简单:试验 id 是索引,不同的参数对应于列。
这是皱纹。每次试验还关联可变长度的时间序列。例如,每次试验都会有以 1 kHz 采样的眼动数据(因此我们得到了采集时间、那个时间点的 x 数据和那个时间点的 y 数据)。由于每个试验的总持续时间不同,因此这些时间序列的长度会因试验而异。
那么...在 pandas DataFrame 中表示此类数据的最佳方式是什么?这是熊猫甚至可以处理的事情吗?我应该使用多个 DataFrame,一个用于单值参数,一个用于时间序列(如参数)?
我考虑采用 MultiIndex 方法,其中 0 级对应于试验编号,1 级对应于连续数据采集的时间。然后我需要做的就是重复单值列以匹配该试验中时间序列的长度。但我立即预见到两个问题。首先,单值列的数量足够大,以至于扩展它们以匹配时间序列的长度似乎非常浪费,如果不是不切实际的话。其次,更重要的是,如果我想做基本的 groupby 类型的分析(例如,在给定的难度级别获得正确响应的比例),这将给出有偏差(不正确)的结果,因为每次试验是正确还是错误都会重复为需要多次使其长度与该试验的时间序列长度相匹配(这与试验平均值的计算无关)。
我希望我的问题有意义,并感谢您的建议。
【问题讨论】:
-
我投票结束,因为我对 StackOverflow 来说这不是一个好问题,它太大了......
-
...也就是说,我目前正在处理类似的数据(也在心理学中,也使用眼动追踪)。我将所有单值试验信息保存在一个数据框中,将所有带时间戳的眼动追踪数据保存在另一个数据框中,按时间索引。在分析眼睛数据时,对于每个试验,我都会抓取眼睛数据的相关部分(如果数据按时间戳索引,这可以像
eyedata[trial_start_time:trial_end_time]一样简单)并计算该试验的相关变量,例如AoI 中的时间。希望能有所帮助。 -
投票保持开放。仅仅因为一个问题很难并且您不知道答案,就没有任何理由关闭它。这完全是on-topic。我和另一个人也想知道这个问题的答案。
-
我不明白你的第二个问题:做 groupby 会产生有偏见的结果,因为结果会重复/扩展到 pad。但如果这是一个问题,您可以将其存储在单独的表中并进行 SQL 连接。
-
我不明白你的第二个问题:做 groupby 会产生有偏见的结果,因为结果会重复/扩展到 pad。 (你的意思是你只存储一次结果,在时间序列的末尾?)无论如何,如果这是一个问题,你可以将结果存储在一个单独的表中并进行 SQL 连接。或者,您可以在填充结果列后用 NA 回填除最后一行之外的所有位置。
标签: python sorting pandas time-series multi-index