这是我数据的一小部分:
heartrate
2018-01-01 00:00:00 67.0
2018-01-01 00:01:00 55.0
2018-01-01 00:02:00 60.0
2018-01-01 00:03:00 67.0
2018-01-01 00:04:00 72.0
2018-01-01 00:05:00 53.0
2018-01-01 00:06:00 62.0
2018-01-01 00:07:00 59.0
2018-01-01 00:08:00 117.0
2018-01-01 00:09:00 62.0
2018-01-01 00:10:00 65.0
2018-01-01 00:11:00 70.0
2018-01-01 00:12:00 49.0
2018-01-01 00:13:00 59.0
这些数据是患者每日心率的集合。我想看看,根据他们的心率,我是否能找到他们睡觉的时间窗口。你知道吗
我不知道如何编写一个代码来识别患者睡眠的时间窗口,因为每隔几分钟,数据就会出现峰值。例如,在2018-01-01 00:07:00 to 2018-01-01 00:08:00
提供的数据中,heartrate
从59跳到117。有没有人能提出一个方法来解决这个问题,当Heartrate
低于平均值几个小时时,找到时间窗口的方法?你知道吗
您可以使用R基的游程编码函数来解决您的问题。在步骤1中,您可以计算患者心率的滚动平均值。您可以使用您的解决方案或任何other。之后,将逻辑标志添加到
data.frame
,例如patient['lowerVal'] = patient['heartrate'] < patient['rollingmeanVal']
。然后对变量lowerVal
应用rle
函数。作为回报,你得到的长度运行低于和高于平均值。通过对cumsum
值应用lengths
,可以得到睡眠时间范围的位置。你知道吗对不起。它是Python。因此,您可以使用Python版本的Run Length Encoding。你知道吗
正如您在评论中提到的,您可以使用以下方法找到滚动平均值来“平滑”您的信号:
假设您使用的是数据帧,并且希望标识的行的HR值小于或等于您可以使用的平均值:
然后,您可以重置索引并生成一个名为
index
的列,将datetime作为值,而不是将数据帧作为时间序列数据帧来处理。现在您有了一个所有值都低于平均值的数据帧,当每个组之间的差异超过30分钟时,您可以将它们分组。这是假设有30分钟的波动数据是可以的。你知道吗假设数据最多的组是在患者睡觉时,您可以确定该组。使用此组的第一个和最后一个日期,然后可以确定患者睡眠的时间窗口。你知道吗
重置索引,使用时间序列数据添加名为
index
的新列:分组依据:
睡眠开始时间:
睡眠结束时间:
相关问题 更多 >
编程相关推荐