Я пытаюсь подгонять некоторые данные с течением времени (x = время, y = данные), но у меня возникают трудности с определением используемой функции и как / если мне нужно очистить данные.
Это мой код:
import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
#define xdata dnd ydata
ydata = [1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 6, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 11, 12]
ydata_1 = [2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4]
ydata_2 = [1, 3, 7, 7, 10, 12, 12, 13, 13, 11, 11, 11, 12, 14, 15, 15, 15, 15, 16, 16, 16, 17, 16, 18, 18, 19, 19, 19, 19, 19, 19, 20, 20, 20, 21, 22, 22, 22, 23, 23, 24, 26, 25, 25, 25, 26, 26, 26, 26, 27, 27]
xdata = []
for i, _ in enumerate(ydata):
xdata.append(i+1)
x = np.array(xdata)
y = np.array(ydata)
def func(xdata, a, b, c, d):
t = 60
return (a * xdata * np.exp(1 - (b / (t - c)**d)))
xfine = np.linspace(y.min(), y.max(), 100)
popt, pcov = curve_fit(func, x, y)
fig = plt.figure()
ax4 = fig.add_subplot(1,1,1)
ax4.plot(x, y, '.')
ax4.plot(xfine, func(xfine, popt[0], popt[1], popt[2], popt[3]),'r-')
ax4.set_xlabel('Time')
ax4.set_ylabel('Score')
ax4.grid('on')
plt.show()
Как вы можете видеть, мои данные со временем очень повторяются, и на данный момент эта функция на самом деле не работает. Я действительно не знаю, что я делаю неправильно и как это исправить.