আমার একটি টাইমরিজ ডেটা আছে। ডেটা তৈরি করা হচ্ছে
date_rng = pd.date_range('2019-01-01', freq='s', periods=400)
df = pd.DataFrame(np.random.lognormal(.005, .5,size=(len(date_rng), 3)),
columns=['data1', 'data2', 'data3'],
index= date_rng)
s = df['data1']
আমি স্থানীয় ম্যাক্সিমা এবং স্থানীয় মিনিমার মধ্যে সংযুক্ত একটি জিগ-জাগ লাইন তৈরি করতে চাই, যা এই শর্তটি সন্তুষ্ট করে যে |highest - lowest value|
প্রতিটি জিগ-জাগ লাইনের পূর্ববর্তী দূরত্বের শতাংশ (20% বলে) ছাড়িয়ে যেতে হবে জিগ-জাগ লাইন, এবং একটি পূর্ব-বর্ণিত মান কে (1.2 বলুন)
আমি এই কোডটি ব্যবহার করে স্থানীয় চূড়ান্ত সন্ধান করতে পারি:
# Find peaks(max).
peak_indexes = signal.argrelextrema(s.values, np.greater)
peak_indexes = peak_indexes[0]
# Find valleys(min).
valley_indexes = signal.argrelextrema(s.values, np.less)
valley_indexes = valley_indexes[0]
# Merge peaks and valleys data points using pandas.
df_peaks = pd.DataFrame({'date': s.index[peak_indexes], 'zigzag_y': s[peak_indexes]})
df_valleys = pd.DataFrame({'date': s.index[valley_indexes], 'zigzag_y': s[valley_indexes]})
df_peaks_valleys = pd.concat([df_peaks, df_valleys], axis=0, ignore_index=True, sort=True)
# Sort peak and valley datapoints by date.
df_peaks_valleys = df_peaks_valleys.sort_values(by=['date'])
তবে এতে কীভাবে প্রান্তিকের শর্তটি প্রয়োগ করতে হয় তা আমি জানি না। দয়া করে আমাকে এই জাতীয় শর্ত প্রয়োগ করতে পরামর্শ দিন।
যেহেতু ডেটাতে মিলিয়ন টাইমস্ট্যাম্প থাকতে পারে, একটি দক্ষ গণনা অত্যন্ত প্রস্তাবিত
উদাহরণস্বরূপ, আমার ডেটা থেকে আউটপুট:
# Instantiate axes.
(fig, ax) = plt.subplots()
# Plot zigzag trendline.
ax.plot(df_peaks_valleys['date'].values, df_peaks_valleys['zigzag_y'].values,
color='red', label="Zigzag")
# Plot original line.
ax.plot(s.index, s, linestyle='dashed', color='black', label="Org. line", linewidth=1)
# Format time.
ax.xaxis_date()
ax.xaxis.set_major_formatter(mdates.DateFormatter("%Y-%m-%d"))
plt.gcf().autofmt_xdate() # Beautify the x-labels
plt.autoscale(tight=True)
plt.legend(loc='best')
plt.grid(True, linestyle='dashed')
আমার কাঙ্ক্ষিত আউটপুট (এর সাথে মিলিয়ে কিছু, জিগজ্যাগ কেবলমাত্র গুরুত্বপূর্ণ অংশগুলিকে সংযুক্ত করে)