Saya ingin menginterpolasi (kelas atas) deret waktu nonequispaced untuk mendapatkan deret waktu equispaced.
Saat ini saya melakukannya dengan cara berikut:
apakah ada cara yang lebih sederhana? seperti di matlab Anda memiliki rangkaian waktu asli dan Anda melewatkan waktu baru sebagai parameter ke fungsi interpolate() untuk menerima nilai pada waktu yang diinginkan. Idealnya saya ingin memiliki fungsi seperti
origTimeSeries.interpolate(newIndex=newTimeIndex, method='spline')
Saya berkomentar bahwa waktu deret waktu asli mungkin bukan bagian dari waktu deret waktu yang diinginkan.
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
values = [271238, 329285, 50, 260260, 263711]
timestamps = pd.to_datetime(['2015-01-04 08:29:4',
'2015-01-04 08:37:05',
'2015-01-04 08:41:07',
'2015-01-04 08:43:05',
'2015-01-04 08:49:05'])
ts = pd.Series(values, index=timestamps)
ts
ts[ts==-1] = np.nan
newFreq=ts.resample('60S').asfreq()
new=pd.concat([ts,newFreq]).sort_index()
new=new.interpolate(method='time')
ts.plot(marker='o')
new.plot(marker='+',markersize=15)
new[newFreq.index].plot(marker='.')
lines, labels = plt.gca().get_legend_handles_labels()
labels = ['original values (nonequispaced)', 'original + interpolated at new frequency (nonequispaced)', 'interpolated values without original values (equispaced!)']
plt.legend(lines, labels, loc='best')
plt.show()
gunakan order_merge daripada concat dan sort
http://pandas.pydata.org/pandas-docs/stable/merging.html#merging -ordered-data
Akan menyenangkan untuk melakukannya tanpa perlu menggabungkan sama sekali karena saya tidak benar-benar membutuhkan deret waktu yang digabungkan, saya hanya membutuhkan deret waktu yang sama yang dihasilkan. Apakah cara yang saya jelaskan (disempurnakan dengan perintah_merge) cara paling efisien untuk melakukannya? Mungkin menggunakan pedas langsung akan lebih baik
http://docs.scipy.org/doc/scipy-0.14.0/reference/tutorial/interpolate.html#d -interpolation-interp1d
scipy memungkinkan untuk melakukannya dalam gaya Matlab, menyimpan deret waktu asli, dan meneruskan indeks baru untuk mendapatkan deret waktu baru.
juga saya akan bekerja akan data online sehingga deret waktu asli akan tumbuh dan saya perlu menginterpolasi data baru dan menambahkannya ke deret waktu yang diinterpolasi (equispaced).
ini membuat Anda cukup dekat
In [42]: ts.reindex(ts.resample('60s').asfreq().index, method='nearest', tolerance=pd.Timedelta('60s')).interpolate('time')
Out[42]:
2015-01-04 08:29:00 271238.000000
2015-01-04 08:30:00 271238.000000
2015-01-04 08:31:00 279530.428571
2015-01-04 08:32:00 287822.857143
2015-01-04 08:33:00 296115.285714
2015-01-04 08:34:00 304407.714286
2015-01-04 08:35:00 312700.142857
2015-01-04 08:36:00 320992.571429
2015-01-04 08:37:00 329285.000000
2015-01-04 08:38:00 329285.000000
2015-01-04 08:39:00 219540.000000
2015-01-04 08:40:00 109795.000000
2015-01-04 08:41:00 50.000000
2015-01-04 08:42:00 50.000000
2015-01-04 08:43:00 260260.000000
2015-01-04 08:44:00 260260.000000
2015-01-04 08:45:00 260950.200000
2015-01-04 08:46:00 261640.400000
2015-01-04 08:47:00 262330.600000
2015-01-04 08:48:00 263020.800000
2015-01-04 08:49:00 263711.000000
Freq: 60S, dtype: float64
Komentar yang paling membantu
ini membuat Anda cukup dekat