我有一些细胞发光的实验延时数据。不幸的是,基线随时间变化(例如,参见https://i.stack.imgur.com/zjlBR.png),这使得分析数据更加困难。对于不同的样本,基准线以某种不同的方式变化(例如,某些线性变化/增加)。
我想知道是否有某种方法可以删除DataFrame中每一列的基线。我研究了scipy的signal.detrend,但是由于它不是完全线性的,因此在这种情况下似乎没有用。发布此问题之前,我已经搜索了几天,但还没有找到合适的解决方案。我考虑过绘制局部最小值并减去它们,但是我发现它过于工具化,不明智地在包含40列的整个DataFrame上实现。
我还找到了peakutils基准模块,但是我并不满意。有什么我想念的吗?这应该不是实验数据中的唯一问题,所以如果SciPy没有合适的模块,我将感到非常惊讶。下面是一个示例,我希望能够从中减去基线,从而有效地消除周期性并使其大致线性化。
import numpy as np
n = 1000
limit_low = 0
limit_high = 0.48
my_data = np.random.normal(0, 0.5, n) \
+ np.abs(np.random.normal(0, 2, n) \
* np.sin(np.linspace(0, 3*np.pi, n)) ) \
+ np.sin(np.linspace(0, 5*np.pi, n))**2 \
+ np.sin(np.linspace(1, 6*np.pi, n))**2
scaling = (limit_high - limit_low) / (max(my_data) - min(my_data))
my_data = my_data * scaling
my_data = my_data + (limit_low - min(my_data))
(代码由Swier提供)
答案 0 :(得分:0)
如果我正确理解您的问题,那么您正在处理的是非平稳时间序列。这是时间序列分析中的常见问题,但是有一些方法可以处理非平稳数据或使其保持平稳状态(例如去趋势)。这些操作并非易事,并且有多种方法,大多数是从更面向统计信息的语言(例如R)(例如:https://www.statsmodels.org/dev/generated/statsmodels.tsa.tsatools.detrend.html)中复制而来的。
LSTM还可以处理非平稳数据。有关更有用的讨论,请参见this answer。