Как сформировать базовую линию, вычесть базовую линию из исходного графика и повторить вычитание базовой линии через 160 кадров данных? - PullRequest
0 голосов
/ 25 июня 2019

Хотя другие потоки говорили о нахождении базовой линии и вычитании ее из своих данных, эти потоки делали это только на одном графике и использовали своего рода подгонку.Мое приложение похоже, но отличается, и мой код не работает для моего.По сути, я хочу взять свои исходные данные, сформировать базовую линию, вычесть исходные данные из базовой линии, взять максимум каждого фрейма данных и построить максимумы.Самая большая проблема для меня сейчас - это возможность сформировать базовую линию, которая может быть зациклена на каждом кадре данных (есть 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...