求计算波峰波谷的python大法

qq_30491967 2016-04-10 07:00:52
[求代码]数据如下,求波峰波谷,请大神施法
a=[3160.17,3080.42,3170.45,3243.09,3197.89,3200.23,3114.8,3005.17,3152.26,3086.06, 3097.92, 3156.54, 3185.62, 3115.89, 3142.69, 3092.35, 3100.76, 3038.14, 3052.78, 3143.36, 3183.15, 3287.66, 3293.23, 3262.44, 3338.07, 3391.35, 3386.7, 3425.33, 3320.68, 3368.74, 3412.43, 3429.58, 3434.34, 3375.2, 3387.32, 3382.56, 3325.08, 3316.7, 3459.64, 3522.82, 3590.03, 3646.88, 3640.49, 3650.25, 3632.9, 3580.84, 3606.96, 3604.8, 3568.47, 3617.06, 3630.5, 3610.31, 3616.11, 3647.93, 3635.55, 3436.3, 3445.4, 3456.31, 3536.91, 3584.82, 3524.99, 3536.93, 3470.07, 3472.44, 3455.5, 3434.58, 3520.67, 3510.35, 3516.19, 3580, 3578.96, 3642.47, 3651.77, 3636.09, 3612.49, 3627.91, 3533.78, 3563.74, 3572.88, 3539.18, 3296.26, 3287.71, 3361.84, 3125, 3186.41, 3016.7, 3022.86, 2949.6, 3007.65, 2900.97, 2913.84, 3007.74, 2976.69, 2880.48, 2916.56, 2938.51, 2749.79, 2735.56, 2655.66, 2737.6, 2688.85, 2749.57, 2739.25, 2781.02, 2763.49, 2746.2, 2836.57, 2867.34, 2862.89, 2860.02, 2927.18, 2903.33, 2928.9, 2741.25, 2767.21, 2687.98, 2733.17, 2849.68, 2859.76, 2874.15, 2897.34, 2901.39, 2862.56, 2804.73, 2810.31, 2859.5, 2864.37, 2870.43, 2904.83, 2955.15, 3018.8, 2999.36, 3009.96, 2960.97, 2979.43, 2957.82, 2920.56, 3000.64, 3003.92,3053.07]
...全文
1839 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
xie3802 2019-09-30
  • 打赏
  • 举报
回复
# -*- coding: utf-8 -*-
import numpy as np
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
import seaborn as sns
import warnings; warnings.filterwarnings(action='once')
import tushare as ts
'''
36 带波峰波谷标记的时序图 (Time Series with Peaks and Troughs Annotated)
下面的时间序列绘制了所有峰值和低谷,并注释了所选特殊事件的发生。
'''
df = ts.get_hist_data('600006',start='2019-06-01')
df = df.sort_index(0)
#直接保存
df.to_csv('600006.csv')
# Import Data
df = pd.read_csv('600006.csv') #('https://github.com/selva86/datasets/raw/master/AirPassengers.csv')
#df.to_csv('AirPassengers.csv')
print(df.info())
#df['value']=df['close']
# Get the Peaks and Troughs
data = df['close'].values
doublediff = np.diff(np.sign(np.diff(data)))
peak_locations = np.where(doublediff == -2)[0] + 1

doublediff2 = np.diff(np.sign(np.diff(-1*data)))
trough_locations = np.where(doublediff2 == -2)[0] + 1

# Draw Plot
plt.figure(figsize=(16,10), dpi= 80)
plt.plot('date', 'close', data=df, color='tab:blue', label='close')
plt.scatter(df.date[peak_locations], df.close[peak_locations], marker=mpl.markers.CARETUPBASE, color='tab:green', s=100, label='Peaks')
plt.scatter(df.date[trough_locations], df.close[trough_locations], marker=mpl.markers.CARETDOWNBASE, color='tab:red', s=100, label='Troughs')

# Annotate
for t, p in zip(trough_locations[1::5], peak_locations[::3]):
plt.text(df.date[p], df.close[p], df.date[p], horizontalalignment='center', color='darkgreen')#df.close1[p]*(1+0.05)
plt.text(df.date[t], df.close[t], df.date[t], horizontalalignment='center', color='darkred')#df.close1[t]*(1.0-0.05)

# Decoration
#plt.ylim(50,750)
xtick_location = df.index.tolist()[::6]
xtick_labels = df.date.tolist()[::6]
plt.xticks(ticks=xtick_location, labels=xtick_labels, rotation=45, fontsize=12, alpha=.7)
plt.title("Peak and Troughs of 600006", fontsize=22)
plt.yticks(fontsize=12, alpha=.7)

# Lighten borders
plt.gca().spines["top"].set_alpha(.0)
plt.gca().spines["bottom"].set_alpha(.3)
plt.gca().spines["right"].set_alpha(.0)
plt.gca().spines["left"].set_alpha(.3)

plt.legend(loc='upper left')
plt.grid(axis='y', alpha=.3)
plt.show()
咚咚咚咚咚咚 2019-02-18
  • 打赏
  • 举报
回复
def p7():
x = np.linspace(0, len(a) - 1, len(a))
y = np.array(a)
df = pd.DataFrame({'Time': x, 'value': y})#, index=x)

doublediff = np.diff(np.sign(np.diff(a)))
peak_locations = np.where(doublediff == -2)[0] + 1
trough_locations = np.where(doublediff == 2)[0] + 1
print(peak_locations)
print(trough_locations)

plt.plot(df['value'])
plt.scatter(df.Time[peak_locations], df.value[peak_locations], marker=mpl.markers.CARETUPBASE,
color='tab:green',
s=100, label='Peaks')
plt.scatter(df.Time[trough_locations], df.value[trough_locations], marker=mpl.markers.CARETDOWNBASE,
color='tab:red',
s=100, label='Troughs')
plt.show() # 显示图形
屎克螂 2016-04-11
  • 打赏
  • 举报
回复
什么波峰波谷?指最大值与最小值吧 波峰: print max(a) 波谷: print min(a)

37,720

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧