أريد أن أقحم (راقية) متسلسلة زمنية غير متباعدة للحصول على متسلسلة زمنية متساوية.
أفعل ذلك حاليًا بالطريقة التالية:
هل هناك طريقة أكثر بساطة؟ كما هو الحال في matlab ، لديك سلاسل زمنية أصلية وتمرر أوقاتًا جديدة كمعامل إلى دالة interpolate () لتلقي القيم في الأوقات المطلوبة. من الناحية المثالية ، أود الحصول على وظيفة مثل
origTimeSeries.interpolate(newIndex=newTimeIndex, method='spline')
ألاحظ أن أوقات السلاسل الزمنية الأصلية قد لا تكون مجموعة فرعية من أوقات السلاسل الزمنية المرغوبة.
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()
استخدم Order_merge بدلاً من concat والفرز
http://pandas.pydata.org/pandas-docs/stable/merging.html#merging -ordered-data
سيكون من الجيد القيام بذلك دون الحاجة إلى الدمج تمامًا لأنني لا أحتاج حقًا إلى السلسلة الزمنية المدمجة ، فأنا بحاجة فقط إلى السلاسل الزمنية المتساوية الناتجة. هل الطريقة التي وصفتها (محسّنة بالدمج_الطلب) هي الطريقة الأكثر فاعلية للقيام بذلك؟ ربما سيكون استخدام التوابل مباشرة أفضل بعد ذلك
http://docs.scipy.org/doc/scipy-0.14.0/reference/tutorial/interpolate.html#d -interpolation-interp1d
يسمح scipy بالقيام بذلك بأسلوب Matlab ، والاحتفاظ بالسلاسل الزمنية الأصلية ، وتمرير فهرس جديد للحصول على سلاسل زمنية جديدة.
كما سأعمل على البيانات عبر الإنترنت حتى تنمو السلاسل الزمنية الأصلية وسأحتاج إلى استيفاء البيانات الجديدة وإضافتها إلى السلاسل الزمنية (المتقاربة).
هذا يجعلك قريبًا جدًا
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
التعليق الأكثر فائدة
هذا يجعلك قريبًا جدًا