Home > Back-end >  Fitting a datetime.datetime format with curve_fit
Fitting a datetime.datetime format with curve_fit

Time:12-23

I have the code below, my problem is in the format "datetime.datetime", I can't fit it using a Gassian function.

import numpy as np
import datetime as datetime
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
from scipy.optimize import curve_fit

#ydata
Temperature = ([1.05436258e 03, 1.09296819e 03, 1.05145602e 03, 1.05894926e 03,
 1.08366115e 03, 1.08066721e 03, 1.04696163e 03, 1.01842441e 03,
 1.04944307e 03, 1.06891551e 03, 1.01844764e 03, 1.03511906e 03,
 1.02044599e 03, 9.93275818e 02, 1.03741013e 03, 1.00540470e 03,
 1.02573646e 03, 9.75301913e 02, 1.00045743e 03, 1.03321562e 03,
 1.03731104e 03, 9.68730834e 02, 9.07474634e 02, 9.30465587e 02,
 9.98967526e 02, 9.11791887e 02, 9.15951873e 02, 8.29331306e 02,
 9.31702088e 02, 8.90075633e 02, 8.30659093e 02, 8.78715978e 02,
 8.66238768e 02, 8.97958014e 02, 6.77909787e 02, 2.23437657e-01,
 9.40495055e 02, 8.41990924e 02, 8.75391469e 02, 8.98393043e 02,
 9.25048353e 02, 9.31445104e 02, 9.04151363e 02, 2.28176362e-01,
 9.65550728e 02, 9.16348809e 02, 9.36315168e 02, 9.00445995e 02,
 8.87768320e 02, 8.75064126e 02, 8.81480871e 02, 8.78240278e 02,
 8.62958271e 02, 8.93813659e 02, 8.83678318e 02, 9.23593998e 02,
 9.15524580e 02, 8.77919073e 02, 8.91754242e 02, 9.19274917e 02,
 8.62223914e 02, 8.81275387e 02, 8.62331470e 02, 8.69461632e 02,
 8.90014577e 02, 9.02656117e 02, 8.74446393e 02, 8.76284046e 02,
 8.66751916e 02, 8.54095049e 02, 8.44540741e 02, 8.70263794e 02,
 8.66687327e 02, 8.18019291e 02, 8.21875267e 02, 8.13385138e 02,
 8.43198211e 02, 8.70558259e 02, 7.94039978e 02, 8.13497634e 02,
 8.12217789e 02, 8.01361143e 02, 8.00263045e 02, 7.47101493e 02,
 7.35923635e 02, 7.32930255e 02, 7.75930026e 02, 7.83786631e 02,
 7.75255742e 02, 7.74938671e 02, 7.04186773e 02, 7.47612911e 02,
 7.29315237e 02, 6.94021293e 02, 7.42723487e 02, 7.09890191e 02,
 7.60674339e 02, 7.51491228e 02, 7.23875166e 02, 7.41451471e 02,
 7.49694410e 02, 7.43337883e 02, 7.00286359e 02, 7.20250078e 02,
 7.32189596e 02, 6.93097572e 02, 7.82342462e 02, 7.11995854e 02,
 6.84432159e 02, 7.61195087e 02, 7.46725427e 02, 7.44614939e 02,
 6.48985204e 02, 6.76023106e 02, 6.89141056e 02, 6.27855922e 02,
 7.07298358e 02, 6.52207871e 02, 6.52609278e 02, 6.80525240e 02,
 6.89328581e 02, 6.78148423e 02, 7.28229663e 02, 6.91857497e 02,
 7.43998987e 02, 6.96885527e 02, 7.33249599e 02, 7.22833678e 02,
 7.34832942e 02, 7.19049095e 02, 7.03573908e 02, 7.11151460e 02,
 6.89345427e 02, 6.14126253e 02, 4.60412424e 02])

#xdata 
time=[datetime.datetime(2015, 11, 7, 18, 14, 24),
 datetime.datetime(2015, 11, 7, 18, 19, 12),
 datetime.datetime(2015, 11, 7, 18, 23, 9),
 datetime.datetime(2015, 11, 7, 18, 26, 38),
 datetime.datetime(2015, 11, 7, 18, 29, 55),
 datetime.datetime(2015, 11, 7, 18, 32, 52),
 datetime.datetime(2015, 11, 7, 18, 35, 36),
 datetime.datetime(2015, 11, 7, 18, 38, 26),
 datetime.datetime(2015, 11, 7, 18, 41, 13),
 datetime.datetime(2015, 11, 7, 18, 44, 16),
 datetime.datetime(2015, 11, 7, 18, 47, 12),
 datetime.datetime(2015, 11, 7, 18, 50, 1),
 datetime.datetime(2015, 11, 7, 18, 53, 2),
 datetime.datetime(2015, 11, 7, 18, 56, 17),
 datetime.datetime(2015, 11, 7, 18, 59, 45),
 datetime.datetime(2015, 11, 7, 19, 3, 14),
 datetime.datetime(2015, 11, 7, 19, 6, 28),
 datetime.datetime(2015, 11, 7, 19, 10, 4),
 datetime.datetime(2015, 11, 7, 19, 13, 46),
 datetime.datetime(2015, 11, 7, 19, 17, 47),
 datetime.datetime(2015, 11, 7, 19, 21, 35),
 datetime.datetime(2015, 11, 7, 19, 25, 15),
 datetime.datetime(2015, 11, 7, 19, 29, 22),
 datetime.datetime(2015, 11, 7, 19, 33, 41),
 datetime.datetime(2015, 11, 7, 19, 38, 38),
 datetime.datetime(2015, 11, 7, 19, 43, 16),
 datetime.datetime(2015, 11, 7, 19, 47, 53),
 datetime.datetime(2015, 11, 7, 19, 53, 21),
 datetime.datetime(2015, 11, 7, 19, 59, 4),
 datetime.datetime(2015, 11, 7, 20, 5, 14),
 datetime.datetime(2015, 11, 7, 20, 11, 6),
 datetime.datetime(2015, 11, 7, 20, 17, 7),
 datetime.datetime(2015, 11, 7, 20, 24, 11),
 datetime.datetime(2015, 11, 7, 20, 31, 5),
 datetime.datetime(2015, 11, 7, 20, 38, 1),
 datetime.datetime(2015, 11, 7, 20, 44, 39),
 datetime.datetime(2015, 11, 7, 20, 50, 8),
 datetime.datetime(2015, 11, 7, 20, 54, 31),
 datetime.datetime(2015, 11, 7, 20, 59, 28),
 datetime.datetime(2015, 11, 7, 21, 4, 54),
 datetime.datetime(2015, 11, 7, 21, 10, 24),
 datetime.datetime(2015, 11, 7, 21, 15, 56),
 datetime.datetime(2015, 11, 7, 21, 21, 50),
 datetime.datetime(2015, 11, 7, 21, 27, 38),
 datetime.datetime(2015, 11, 7, 21, 33, 24),
 datetime.datetime(2015, 11, 7, 21, 37, 54),
 datetime.datetime(2015, 11, 7, 21, 42, 24),
 datetime.datetime(2015, 11, 7, 21, 47, 20),
 datetime.datetime(2015, 11, 7, 21, 52, 12),
 datetime.datetime(2015, 11, 7, 21, 57, 3),
 datetime.datetime(2015, 11, 7, 22, 1, 41),
 datetime.datetime(2015, 11, 7, 22, 6, 21),
 datetime.datetime(2015, 11, 7, 22, 11, 30),
 datetime.datetime(2015, 11, 7, 22, 16, 44),
 datetime.datetime(2015, 11, 7, 22, 21, 59),
 datetime.datetime(2015, 11, 7, 22, 26, 56),
 datetime.datetime(2015, 11, 7, 22, 32),
 datetime.datetime(2015, 11, 7, 22, 37, 43),
 datetime.datetime(2015, 11, 7, 22, 43, 21),
 datetime.datetime(2015, 11, 7, 22, 48, 45),
 datetime.datetime(2015, 11, 7, 22, 53, 49),
 datetime.datetime(2015, 11, 7, 22, 58, 49),
 datetime.datetime(2015, 11, 7, 23, 4, 4),
 datetime.datetime(2015, 11, 7, 23, 9, 8),
 datetime.datetime(2015, 11, 7, 23, 14, 3),
 datetime.datetime(2015, 11, 7, 23, 18, 34),
 datetime.datetime(2015, 11, 7, 23, 22, 58),
 datetime.datetime(2015, 11, 7, 23, 27, 43),
 datetime.datetime(2015, 11, 7, 23, 32, 22),
 datetime.datetime(2015, 11, 7, 23, 36, 48),
 datetime.datetime(2015, 11, 7, 23, 41, 9),
 datetime.datetime(2015, 11, 7, 23, 45, 29),
 datetime.datetime(2015, 11, 7, 23, 49, 59),
 datetime.datetime(2015, 11, 7, 23, 54, 34),
 datetime.datetime(2015, 11, 7, 23, 59, 6),
 datetime.datetime(2015, 11, 8, 0, 3, 37),
 datetime.datetime(2015, 11, 8, 0, 8, 17),
 datetime.datetime(2015, 11, 8, 0, 13, 15),
 datetime.datetime(2015, 11, 8, 0, 18, 22),
 datetime.datetime(2015, 11, 8, 0, 23, 23),
 datetime.datetime(2015, 11, 8, 0, 28, 28),
 datetime.datetime(2015, 11, 8, 0, 33, 59),
 datetime.datetime(2015, 11, 8, 0, 39, 51),
 datetime.datetime(2015, 11, 8, 0, 45, 56),
 datetime.datetime(2015, 11, 8, 0, 51, 57),
 datetime.datetime(2015, 11, 8, 0, 57, 48),
 datetime.datetime(2015, 11, 8, 1, 4, 2),
 datetime.datetime(2015, 11, 8, 1, 10, 47),
 datetime.datetime(2015, 11, 8, 1, 17, 43),
 datetime.datetime(2015, 11, 8, 1, 24, 22),
 datetime.datetime(2015, 11, 8, 1, 30, 39),
 datetime.datetime(2015, 11, 8, 1, 37, 2),
 datetime.datetime(2015, 11, 8, 1, 43, 51),
 datetime.datetime(2015, 11, 8, 1, 50, 38),
 datetime.datetime(2015, 11, 8, 1, 57, 23),
 datetime.datetime(2015, 11, 8, 2, 4, 3),
 datetime.datetime(2015, 11, 8, 2, 10, 46),
 datetime.datetime(2015, 11, 8, 2, 18, 6),
 datetime.datetime(2015, 11, 8, 2, 25, 14),
 datetime.datetime(2015, 11, 8, 2, 32, 30),
 datetime.datetime(2015, 11, 8, 2, 39, 35),
 datetime.datetime(2015, 11, 8, 2, 46, 49),
 datetime.datetime(2015, 11, 8, 2, 54, 43),
 datetime.datetime(2015, 11, 8, 3, 2, 33),
 datetime.datetime(2015, 11, 8, 3, 10, 15),
 datetime.datetime(2015, 11, 8, 3, 17, 28),
 datetime.datetime(2015, 11, 8, 3, 24, 30),
 datetime.datetime(2015, 11, 8, 3, 32, 8),
 datetime.datetime(2015, 11, 8, 3, 39, 13),
 datetime.datetime(2015, 11, 8, 3, 46, 10),
 datetime.datetime(2015, 11, 8, 3, 52, 48),
 datetime.datetime(2015, 11, 8, 3, 59, 1),
 datetime.datetime(2015, 11, 8, 4, 5, 39),
 datetime.datetime(2015, 11, 8, 4, 11, 59),
 datetime.datetime(2015, 11, 8, 4, 18, 27),
 datetime.datetime(2015, 11, 8, 4, 24, 49),
 datetime.datetime(2015, 11, 8, 4, 31, 7),
 datetime.datetime(2015, 11, 8, 4, 39, 18),
 datetime.datetime(2015, 11, 8, 4, 46, 26),
 datetime.datetime(2015, 11, 8, 4, 53, 13),
 datetime.datetime(2015, 11, 8, 5, 0, 11),
 datetime.datetime(2015, 11, 8, 5, 8, 57),
 datetime.datetime(2015, 11, 8, 5, 15, 45),
 datetime.datetime(2015, 11, 8, 5, 22, 6),
 datetime.datetime(2015, 11, 8, 5, 28, 5),
 datetime.datetime(2015, 11, 8, 5, 34, 57),
 datetime.datetime(2015, 11, 8, 5, 40, 4),
 datetime.datetime(2015, 11, 8, 5, 44, 45),
 datetime.datetime(2015, 11, 8, 5, 49, 8),
 datetime.datetime(2015, 11, 8, 5, 54, 41),
 datetime.datetime(2015, 11, 8, 5, 58, 46),
 datetime.datetime(2015, 11, 8, 6, 2, 35),
 datetime.datetime(2015, 11, 8, 6, 6, 18),
 datetime.datetime(2015, 11, 8, 6, 11, 11),
 datetime.datetime(2015, 11, 8, 6, 14, 45)]

#ploting data
#plt.plot(time, Temperature)  
#plt.show()  

#curve_fit
def fun(x, A, B) : 
    return A*np.exp(-1*B*x**2)
parameters, covariance = curve_fit(fun, time, Temperature)
plt.plot(time, fun(time, *parameters))
plt.show()

this is the result of execution it :

Traceback (most recent call last): File "datetime_fit.py", line 187, in parameters, covariance = curve_fit(fun, time, Temperature) File "/home/lhoussine/anaconda3/lib/python3.8/site-packages/scipy/optimize/minpack.py", line 742, in curve_fit xdata = np.asarray_chkfinite(xdata, float) File "/home/lhoussine/anaconda3/lib/python3.8/site-packages/numpy/lib/function_base.py", line 486, in asarray_chkfinite a = asarray(a, dtype=dtype, order=order) TypeError: float() argument must be a string or a number, not 'datetime.datetime'

CodePudding user response:

You'll need to use a numeric representation of date and time, e.g. Unix time which you can obtain from the datetime object's plot example

  • Related