У меня есть две функции interp1d, использующие сплайн-интерполяцию, и я хотел бы добавить вторичную ось на графике.
f1 = interp1d(a, b, kind='cubic')
f2 = interp1d(x, y, kind='cubic')
time = pd.to_datetime(a)
t = pd.to_datetime(x)
plt.plot(time,f1(time),color='green')
plt.plot(t,f2(t),color='red')
Вывод: График Interp1d
Вотпеременная для x, y
x
array([1.5224544e+18, 1.5145920e+18, 1.5067296e+18, 1.4988672e+18,
1.4910048e+18, 1.4831424e+18, 1.4746752e+18, 1.4668128e+18,
1.4589504e+18, 1.4510880e+18, 1.4432256e+18, 1.4353632e+18,
1.4275008e+18, 1.4196384e+18, 1.4117760e+18, 1.4039136e+18,
1.3960512e+18, 1.3881888e+18, 1.3803264e+18, 1.3724640e+18,
1.3646016e+18, 1.3567392e+18, 1.3488768e+18, 1.3410144e+18,
1.3331520e+18, 1.3252896e+18, 1.3168224e+18, 1.3089600e+18,
1.3010976e+18, 1.2932352e+18, 1.2853728e+18, 1.2775104e+18,
1.2696480e+18, 1.2617856e+18, 1.2539232e+18, 1.2224736e+18,
1.1910240e+18])
y
date
2018-03-31 0.208044
2017-12-30 0.202789
2017-09-30 0.201890
2017-07-01 0.200773
2017-04-01 0.200018
2016-12-31 0.201298
2016-09-24 0.207214
2016-06-25 0.212382
2016-03-26 0.218203
2015-12-26 0.223881
2015-09-26 0.224409
2015-06-27 0.222381
2015-03-28 0.221986
2014-12-27 0.219190
2014-09-27 0.212183
2014-06-28 0.213164
2014-03-29 0.210773
2013-12-28 0.208846
2013-09-28 0.211710
2013-06-29 0.218486
2013-03-30 0.230000
2012-12-29 0.249656
2012-09-29 0.264155
2012-06-30 0.266402
2012-03-31 0.268421
2011-12-31 0.255537
2011-09-24 0.236561
2011-06-25 0.232660
2011-03-26 0.221534
2010-12-25 0.215534
2010-09-25 0.213045
2010-06-26 0.211977
2010-03-27 0.208876
2009-12-26 0.197382
2009-09-26 0.186750
2008-09-27 0.151902
2007-09-29 0.125185
Name: value, dtype: float64
Здесь приведены переменные для a, b
a
array([1.5281568e+18, 1.4619744e+18, 1.4330304e+18, 1.3725504e+18,
1.3489632e+18, 1.3093920e+18, 1.2988512e+18, 1.2832128e+18,
1.2725856e+18, 1.2306816e+18, 1.2042432e+18, 1.1990592e+18,
1.1726208e+18, 1.1648448e+18, 1.1516256e+18, 1.1386656e+18,
1.1095488e+18, 1.0490688e+18])
b
2018-06-05 193.310000
2016-04-30 90.014780
2015-05-31 123.342948
2013-06-30 51.462246
2012-09-30 85.115356
2011-06-30 42.645786
2011-02-28 44.874186
2010-08-31 30.885067
2010-04-30 33.170639
2008-12-31 10.843441
2008-02-29 15.883386
2007-12-31 25.165422
2007-02-28 10.749426
2006-11-30 11.645106
2006-06-30 7.275968
2006-01-31 9.593301
2005-02-28 5.699318
2003-03-31 0.898221
Name: value, dtype: float64
Кроме того, мне было бы интересно узнать, есть ли способ измерения корреляции между двумя interp1dфункции.
Может ли кто-нибудь предложить какие-либо рекомендации?
Заранее спасибо.
Итак, я попытался воспроизвести ваши коды путем повторной выборки и интерполяции, используя следующиекод.
f1_lin = interp1d(a, b, kind='linear')
f1_cub = interp1d(a, b, kind='cubic')
f1_near = interp1d(a, b, kind='nearest')
t=np.linspace(min(a),max(a))
plt.figure()
plt.plot(a,b, 'o', label = 'original data')
plt.plot(t,f1_lin(t), '.',label = 'resampled via linear interpolation')
plt.plot(t, f1_cub(t), '1', label='resampled via cubic spline interpolation')
plt.plot(t, f1_near(t), '_', label='resampled via nearest value interpolation')
plt.legend()
Что дает мне те же результаты, что и вы.Если я сделаю то же самое для
f1_lin1 = interp1d(x, y, kind='linear')
t1=np.linspace(min(x),max(x))
plt.figure()
plt.plot(x,y, 'o', label = 'original data')
plt.plot(t1,f1_lin1(t1), '.',label = 'resampled via linear interpolation')
plt.legend()
, я получу следующий вывод: f1_lin1
Но как я смогу использовать эти функции для дальнейшего стимулирования статистической оценкизаданные значения f1_lin (t) и f1_lin1 (t1) не соответствуют совпадающим временным рамкам.