मेरे पास 30 मिनट अंतराल पर डेटा का एक बड़ा समय-श्रृंखला सेट है और डेटा के इस सेट पर एक स्लाइडिंग विंडो करने की कोशिश कर रहा है लेकिन पांडा का उपयोग करके दिन के प्रत्येक बिंदु के लिए अलग-अलग है।समय अक्ष के दौरान विंडो औसत स्लाइडिंग
मैं कोई सांख्यिकीविद नहीं हूं और इस तरह के काम के लिए सोचने या कोडिंग में बहुत अच्छा नहीं हूं, लेकिन मैं जो चाहता हूं उसे करने का मेरा बेकार प्रयास है। मैं वास्तव में इसे सुधारने में मदद की तलाश में हूं क्योंकि मुझे पता है कि ऐसा करने का एक बेहतर तरीका होगा, संभवतः मल्टीइंडेक्स और कुछ उचित पुनरावृत्ति का उपयोग करना? लेकिन मैंने इसे 'टाइम-अक्ष' में करने के लिए संघर्ष किया है।
def sliding_window(run,data,type='mean'):
data = data.asfreq('30T')
for x in date_range(run.START, run.END, freq='1d'):
if int(datetime.strftime(x, "%w")) == 0 or int(datetime.strftime(x, "%w")) == 6:
points = data.select(weekends).truncate(x - relativedelta(days=run.WINDOW),x + relativedelta(days=run.WINDOW)).groupby(lambda date: minutes(date, x)).mean()
else:
points = data.select(weekdays).truncate(x - relativedelta(days=run.WINDOW),x + relativedelta(days=run.WINDOW)).groupby(lambda date: minutes(date, x)).mean()
for point in points.index:
data[datetime(x.year,x.month,x.day,point.hour,point.minute)] = points[point]
return data
run.START, run.END और run.INDOW डेटा के भीतर दो बिंदु और 45 (दिन) हैं। मैं इस कोड पर बहुत कुछ देख रहा हूं इसलिए मुझे यकीन नहीं है कि (यदि कोई है) किसी और के लिए समझ में आता है, तो कृपया पूछें ताकि मैं कुछ और स्पष्टीकरण दे सकूं।
हल: (crewbum का समाधान शिष्टाचार)
संशोधित समारोह के रूप में की उम्मीद मूर्खता से तेजी से चला जाता है:
def sliding_window(run,data,am='mean',days='weekdays'):
data = data.asfreq('30T')
data = DataFrame({'Day': [d.date() for d in data.index], 'Time': [d.time() for d in data.index], 'Weekend': [weekday_string(d) for d in data.index], 'data': data})
pivot = data.pivot_table(values='data', rows='Day', cols=['Weekend', 'Time'])
pivot = pivot[days]
if am == 'median':
mean = rolling_median(pivot, run.WINDOW*2, min_periods=1)
mean = rolling_mean(pivot, run.WINDOW*2, min_periods=1)
return DataFrame({'mean': unpivot(mean), 'amax': np.tile(pivot.max().values, pivot.shape[0]), 'amin': np.tile(pivot.min().values, pivot.shape[0])}, index=data.index)
unpivot समारोह:
def unpivot(frame):
N, K = frame.shape
return Series(frame.values.ravel('C'), index=[datetime.combine(d[0], d[1]) for d in zip(np.asarray(frame.index).repeat(K), np.tile(np.asarray(frame.ix[0].index), N))])
केंद्र = सच इस समय sliding_mean टूटा हुआ प्रतीत होता है, अगर मुझे मौका मिलता है तो इसे गिटूब में फाइल करेगा।
आप को देखा है/कोशिश की निर्मित मतलब समारोह रोलिंग http:? //pandas.pydata.org/pandas-docs/stable/generated/pandas.stats.moments.rolling_mean.html उजागर = रोलिंग # pandas.stats.moments.rolling_mean – Garrett
यह स्पष्ट करने की कोशिश कर रहा है कि आप क्या करने का प्रयास कर रहे हैं: आप सभी मानों को -45 से +45 दिन अवधि के भीतर औसत करना चाहते हैं, लेकिन 24-घंटे के समय बिंदु पर समूहित करना चाहते हैं। उदा।, औसत सभी (9 1) डेटा 13:00 बजे, और 13:30 आदि पर सभी डेटा अलग से औसत करें क्योंकि "स्लाइडिंग विंडो" को अपरिभाषित किया गया है: क्या एक स्लाइडिंग विंडो? – Evert
इसके अलावा, क्यों सप्ताहांत और सप्ताहांत में अलगाव? विचाराधीन डेटा के लिए बस तार्किक, मुझे लगता है? – Evert