Кривая, соответствующая косинусообразным данным

#python #pandas #dataframe #curve-fitting

Вопрос:

Я пытаюсь подогнать кривую или функцию к своим данным, которые выглядят как косинусная или синусоидальная волна. Я использовал следующий код.

 from scipy.optimize import curve_fit

def sinfunc(t,A, w, p, c): 
   return A * np.cos(w*t   p)   c

def PushCalculator(df):
Vexs = next( i for i in df.columns.values if i.lower()=='vexc')
Vcos = next( i for i in df.columns.values if i.lower()=='vcos')
fs=abs(round(1/(df[df[Vexs]==df[Vexs][0]].iloc[0,0]-df[df[Vexs]==df[Vexs][0]].iloc[1,0])))
timestep=df.iloc[1,0]-df.iloc[0,0]
step=round(1/fs/timestep)
timePush=df.iloc[0::step,0]
pushCos=df.loc[0::step,Vcos]

plt.figure(figsize=(5,5))
plt.title("GeneratedPush")
plt.plot(timePush.iloc[:],pushCos.iloc[:],'g*')
plt.scatter(df.iloc[:,0],df.loc[:,Vcos],alpha=0.9)

# Curve fitting on Generated pushcos

popt, _=curve_fit(sinfunc,timePush.iloc[:250],pushCos.iloc[:250])
A, w, p, c=popt

ycos=sinfunc(df.iloc[:,0],A, w, p, c)
plt.figure(figsize=(5,5))
plt.title("VPushCos")
plt.scatter(df.iloc[:,0],ycos,marker="X")
plt.plot(timePush.iloc[:],pushCos.iloc[:],'g*')

# add generated data to df
 df.insert(3,"VPushCos",ycos)

return pushCos,df
 

//описание кода:
PushCalculator принимает фрейм данных в качестве входных данных. после расчета частоты и шага по времени рассчитайте кнопки. поскольку размер Pushco меньше размера входного кадра данных, я сначала использую подгонку кривой для подгонки функции на Pushco, а затем использую функцию подгонки для вычисления данных для каждой строки входного кадра данных.

код работает нормально и вычисляет кнопки для входного кадра данных, но он не может соответствовать функции, когда вычисление-кнопки не похоже на косинус, как показано ниже:

введите описание изображения здесь

в лучшем случае, он подходит для такой функции, как эта:

введите описание изображения здесь

Я думаю, проблема в том, что я пытаюсь подогнать функцию cos к данным, которые не похожи на косинусы. но я понятия не имею, как я могу разместить функцию на этих данных!?!?

примеры фрейма данных доступны здесь:

код отлично работает с CompleteData.xlsx но не тот 1200.xlsx. используйте следующий код для чтения файлов.

 a=pd.read_excel('excel path',usecols=[i for i in range(0,5)])
 

Комментарии:

1. Не удается импортировать ваши данные по данной ссылке. Я получаю «Этот форлер пуст».