gpt4 book ai didi

python - 如何消除数据中的急剧跳跃?

转载 作者:太空狗 更新时间:2023-10-29 21:56:04 24 4
gpt4 key购买 nike

我有一些体表温度数据(以 1Hz 采集),我打算对其进行分析。

但是,传感器并不总是与皮肤接触。因此,我面临着删除这些非皮肤温度数据,同时保留实际皮肤温度数据的挑战。我有大约 100 个文件要分析,因此我需要使其自动化。

我知道已经有 this similar post ,但是我无法使用它来解决我的问题。

我的数据大致是这样的:

df =

timeStamp Temp
2018-05-04 10:08:00 28.63
. .
. .
2018-05-04 21:00:00 31.63

我采取的第一步是简单地应用一个最小阈值——这已经去除了大部分非皮肤数据。然而,我留下了传感器被移除或连接的急剧跳跃:

basic threshold filtered data

为了消除这些跳跃,我正在考虑采用一种方法,即使用温度的一阶微分,然后使用另一组阈值来去除我不感兴趣的数据。

例如

df_diff = df.diff(60) # period of about 60 makes jumps stick out

filter_index = np.nonzero((df.Temp <-1) | (df.Temp>0.5)) # when diff is less than -1 and greater than 0.5, most likely data jumps.

diff data

然而,我发现自己被困在这里。主要问题是:

1)我现在不知道如何使用这个索引列表来删除df中的非皮肤数据。如何最好地做到这一点?

更小的问题是2)我认为我仍然会在边缘附近的数据跳跃中留下一些残留的人工制品(例如,更严格的阈值会开始丢弃好的数据)。是否有更好的过滤策略或方法来消除这些人工制品?

*按照建议进行编辑我还计算了二阶差分,但老实说,我认为一阶差分允许更严格的阈值(见下文):

enter image description here

*编辑 2:Link to sample data

最佳答案

试试下面的代码(我使用了一个正切函数来生成数据)。我在评论中使用了疯狂物理学家的二阶差分思想。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

df = pd.DataFrame()
df[0] = np.arange(0,10,0.005)
df[1] = np.tan(df[0])

#the following line calculates the absolute value of a second order finite
#difference (derivative)
df[2] = 0.5*(df[1].diff()+df[1].diff(periods=-1)).abs()

df.loc[df[2] < .05][1].plot() #select out regions of a high rate-of-change
df[1].plot() #plot original data

plt.show()

以下是输出的缩放图,显示了过滤后的内容。 Matplotlib 从移除数据的开始到结束绘制一条线。

enter image description here

我相信上面的 .loc 选择可以回答您的第一个问题。

你的第二个问题将对你的数据集进行一些实验。上面的代码只选出了高导数的数据。您还需要选择阈值来删除零等。您可以试验在何处进行导数选择。您还可以绘制导数的直方图,以提示您选择什么。

此外,高阶差分方程可能有助于平滑。这应该有助于消除伪影,而不必在切口周围进行修剪。

编辑:

可以使用以下方法应用四阶有限差分:

df[2] = (df[1].diff(periods=1)-df[1].diff(periods=-1))*8/12 - \
(df[1].diff(periods=2)-df[1].diff(periods=-2))*1/12
df[2] = df[2].abs()

认为它可能有所帮助是合理的。上面的系数可以从以下链接中计算或导出以获得更高阶数。 Finite Difference Coefficients Calculator

注意:上面的二阶和四阶中心差分方程不是适当的一阶导数。必须除以区间长度(在本例中为 0.005)才能得到实际导数。

关于python - 如何消除数据中的急剧跳跃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50698834/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com