简体   繁体   中英

Exponential curve fitting of pandas data in python

I'm trying to fit an exponential curve to some data represented by a pandas dataframe. The data looks like this:

在此处输入图片说明

The code I've used for curve fitting:

import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
from scipy.optimize import curve_fit

t = df['time'].values
ym = df['value'].values

def func(t, c0, c1, c2, c3):
    return c0 + c1*t - c2*np.exp(-c3*t)

p0 = [6e6, 0.01, 100, 0.01]
c, cov = curve_fit(func, t, ym, p0)

print(c) # Output: [-5.46019366e+06  3.19567938e+03  1.00000000e+08  1.00000000e+06]

yp = func(t, c[0], c[1], c[2], c[3])

plt.figure()
plt.plot(t/60, ym)
plt.plot(t/60, yp)

However, the fitted curve always seem to be linear like this:

在此处输入图片说明

I have tried different methods I've found online and always get the same linear result. My dataframe look like this, were Cycle_id corresponds to "time", and peak correspond to "value":

在此处输入图片说明

Any suggestion on how to fit this data is much appreciated, since I can't seem to find any errors in my code upon reviewing it, thus not getting any further..

Sorry for the poor answer. I have not enough knowledge about Python in practical use. Moreover it is not possible to get sufficiently correct data from a picture. A scanning provided data which was used in the below calculus but the results are probably not accurate.

I guess that the difficulty that you faced comes from the method of calculus which is iterative starting from "guessed" values of the parameters.

If we use a non-iterative method which doesn't need initial guessed values the calculus is generally more robust. Such a method is explain in this paper : https://fr.scribd.com/doc/14674814/Regressions-et-equations-integrales

They are a lot of numerical examples in the paper but unfortunately your function is not treated in full details. It is not difficult to adapt the method to this case : See below. The result is :

在此处输入图片说明

Possibly you can use the above values of p,a,b,c as initial values of parameters in a more classical method.

在此处输入图片说明

FOR INFOMATION :

The method of non-iterative regression uses a convenient integral equation which transforms the non-linear regression to a linear regression. In the present case the integral equation is :

在此处输入图片说明

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM