识别时间序列数据中数据点低于设定值的窗口

2024-04-18 22:27:24 发布

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

这是我数据的一小部分:

                     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低于平均值几个小时时,找到时间窗口的方法?你知道吗


Tags: to数据方法代码患者时间心率平均值
2条回答

您可以使用R基的游程编码函数来解决您的问题。在步骤1中,您可以计算患者心率的滚动平均值。您可以使用您的解决方案或任何other。之后,将逻辑标志添加到data.frame,例如patient['lowerVal'] = patient['heartrate'] < patient['rollingmeanVal']。然后对变量lowerVal应用rle函数。作为回报,你得到的长度运行低于和高于平均值。通过对cumsum值应用lengths,可以得到睡眠时间范围的位置。你知道吗

对不起。它是Python。因此,您可以使用Python版本的Run Length Encoding。你知道吗

正如您在评论中提到的,您可以使用以下方法找到滚动平均值来“平滑”您的信号:

patient_data_df['rollingmeanVal'] = patient_data_df.rolling('3T').heartrate.mean()

假设您使用的是数据帧,并且希望标识的行的HR值小于或等于您可以使用的平均值:

HR_mean = patient_data_df['rollingmeanVal'].mean()
selected_data_df = patient_data_df[patient_data_df['rollingmeanVal'] <= HR_mean]

然后,您可以重置索引并生成一个名为index的列,将datetime作为值,而不是将数据帧作为时间序列数据帧来处理。现在您有了一个所有值都低于平均值的数据帧,当每个组之间的差异超过30分钟时,您可以将它们分组。这是假设有30分钟的波动数据是可以的。你知道吗

假设数据最多的组是在患者睡觉时,您可以确定该组。使用此组的第一个和最后一个日期,然后可以确定患者睡眠的时间窗口。你知道吗

重置索引,使用时间序列数据添加名为index的新列:

selected_data_df.reset_index(inplace=True)

分组依据:

selected_data_df['grp'] = selected_data_df['index'].diff().dt.seconds.ge(30 * 60).cumsum()
sleep_grp = selected_data_df.groupby('grp').count().sort_values(['grp']).head(1)
sleep_grp_index = sleep_grp.index.values[0]
sleep_df = selected_data_df[selected_data_df['grp'] == sleep_grp_index].drop('grp', axis=1)

睡眠开始时间:

temp2_df['index'].iloc[0]

睡眠结束时间:

temp2_df['index'].iloc[-1]

相关问题 更多 >