我有一些皮肤温度数据(以1Hz的频率采集),我打算分析这些数据。在
然而,这些传感器并不总是与皮肤接触。所以我面临的一个挑战是删除这些非皮肤温度数据,同时保留实际的皮肤温度数据。我有大约100个文件要分析,所以我需要把它自动化。在
我知道已经有了this similar post,但是我不能用它来解决我的问题。在
我的数据大致如下:
df =
timeStamp Temp
2018-05-04 10:08:00 28.63
. .
. .
2018-05-04 21:00:00 31.63
我所采取的第一步是简单地应用一个最小阈值-这已经消除了大多数非皮肤数据。然而,我只剩下传感器被移除或连接的尖锐跳跃:
为了消除这些跳跃,我考虑采用一种方法,即使用温度的一阶微分,然后使用另一组阈值来去除我不感兴趣的数据。在
例如
^{pr2}$然而,我发现自己被困在这里。主要问题是:
1)我现在不知道如何使用这个索引列表删除df中的非皮肤数据。怎么做才是最好的?在
更小的问题是 2) 我想我还是会留下一些残留的伪制品,这些伪制品来自数据在边缘附近跳跃(例如,在那里,更严格的阈值将开始丢弃好的数据)。有没有更好的过滤策略或者方法来去除这些人工制品?在
*按建议编辑我还计算了二阶差分,但老实说,我认为一阶差分可以考虑更严格的阈值(见下文):
*编辑2:Link to sample data
尝试下面的代码(我使用了一个切线函数来生成数据)。我在评论中使用了疯狂物理学家的二阶差分思想。在
下面是输出的缩放,显示过滤后的内容。Matplotlib从删除数据的开始到结束绘制一条直线。在
我相信您的第一个问题的答案是上面的.loc选项。在
第二个问题需要对数据集进行一些实验。上面的代码只选择高导数数据。您还需要您的阈值选择来删除零等。您可以尝试在何处进行导数选择。您还可以绘制导数的柱状图,以提示您选择什么。在
此外,高阶差分方程也可能有助于平滑。这将有助于去除瑕疵,而不必修剪切口周围。在
编辑:
四阶有限差分可以使用以下公式:
^{pr2}$有理由认为这可能有帮助。对于更高阶,以上系数可通过以下链接计算或导出。 Finite Difference Coefficients Calculator
注:以上二阶和四阶中心差分方程不是真一阶导数。必须除以区间长度(在本例中为0.005)才能得到实际导数。在
这里有一个针对你的问题的建议
使用stats.zscore()和{a2}
事实上,这仍然是一个小问题,你的关注
但我们稍后再谈。在
首先,下面是一个片段,用于生成一个与数据集共享一些挑战的数据帧:
如您所见,有两个明显的峰值,它们之间缺少数字。如果你喜欢在差异很大的地方隔离值,那么问题就出在了缺失的数字上。第一个峰值不是问题,因为你会发现一个非常小的数字和一个与其他数据更相似的数字之间的差异:
但是对于第二个峰值,您将得到一个非常小的数字和一个不存在的数字之间的(不存在的)差异,因此您将最终删除的极端数据点是您的异常值与下一个观测值之间的差异:
对这一点来说,这不是一个大问题。你可以把它放回去。但对于更大的数据集,这将不是一个非常可行的解决方案。无论如何,如果您可以在没有特定值的情况下进行管理,下面的代码应该可以解决您的问题。您在第一次观察时也会遇到类似的问题,但我认为,决定是否保留这一个值要简单得多。在
步骤:
^{pr2}$以下是简单复制粘贴的全部内容:
相关问题 更多 >
编程相关推荐