【发布时间】:2019-01-27 16:20:32
【问题描述】:
我有一些细胞发光的实验延时数据。不幸的是,基线会随着时间而变化(例如,参见附图,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 提供)
【问题讨论】:
-
请提供 minimal reproducible example(没有图片/链接,只有文字)。
-
我很抱歉。我对 Python 还是很陌生,并且边走边学。我真的不知道如何为随机噪声信号编写短代码,而且也不可能仅附上我的 DataFrame 的样本。但是,我设法从一个旧问题中找到了一个并将其添加。
标签: python pandas matplotlib baseline