Хотя другие потоки говорили о нахождении базовой линии и вычитании ее из своих данных, эти потоки делали это только на одном графике и использовали своего рода подгонку.Мое приложение похоже, но отличается, и мой код не работает для моего.По сути, я хочу взять свои исходные данные, сформировать базовую линию, вычесть исходные данные из базовой линии, взять максимум каждого фрейма данных и построить максимумы.Самая большая проблема для меня сейчас - это возможность сформировать базовую линию, которая может быть зациклена на каждом кадре данных (есть 160 кадров данных).
Поэтому я пробовал другие методы, используя более сложные фитинги или алгоритмы, нони один из них не работал или был слишком сложен для реализации в моих более простых графиках.Пока я могу найти и построить все 160 максимумов.Все, что мне нужно, - это вычитать фон, чтобы максимумы соответствовали друг другу.
filestoprocess = []
peak 1 = []
for filename in filestoprocess:
dfspectra = pd.read_csv(filename, skiprows = 13, delimiter = '\t', header = None, names = ['Wavelength (nm)','Absorbance'])
ymax1 = np.max(dfspectra['Absorbance'][162:218])
peak1.append(ymax1)
time = range(0,160)
x = np.array(time)
ax.plot(x, peak1)
Это код, который у меня есть до сих пор.Он просто помещает максимумы в массив и строит массив.Я понятия не имею, как начать с создания другой базовой линии, вычитания ее из каждого фрейма данных и последующего построения этих максимумов.
По какой-то причине я не могу загрузить свой график.Но это просто спектры поглощения, которые имеют гауссову форму, которая выравнивается.Я не знаю, нужно ли какое-то подгонка по Гауссу для вычитания базовой линии.Но я ожидаю, что базовая линия будет просто более стабильной и ровной версией моих спектров, что поможет нормализовать максимумы.
EDIT *:
Вот код, который я видел в другомнить, которую я пробовал, но не был уверен, правильно ли я ее использовал.Я не знаю, будет ли это работать с моим приложением
def baseline_als(y, lam, p, niter=10):
L = len(y)
D = sparse.csc_matrix(np.diff(np.eye(L), 2))
w = np.ones(L)
for i in xrange(niter):
W = sparse.spdiags(w, 0, L, L)
Z = W + lam * D.dot(D.transpose())
z = spsolve(Z, w*y)
w = p * (y > z) + (1-p) * (y < z)
return z