我用python写了一段代码对时间序列数据进行切割,主体思路就是对两个点相连成一条直线,计算线段各点用直线内插法计算的函数值和函数的实际值之间的误差,最大误差如果大于设定的阈值那么此点就是一个分割点,如果不是继续往后推移。
代码如下:
close = pd.read_csv("close.csv")
close = list(close)
next_break=[0]
def find_nextbreak(c):
for i in range(1,len(c)):
k=(close[i]-close[next_break[-1]])/(i-next_break[-1])
max_error=0
for j in range(next_break[-1]+1,i+1):
close_predict = close[next_break[-1]]+k*(j-next_break[-1])
close_predict_error = abs(close_predict-close[i])/close[i]
if close_predict_error>max_error:
max_error = close_predict_error
if max_error>=0.05:
next_break.append(i)
return next_break
all_point =find_nextbreak(close)
if all_point[-1]!=(len(close)-1):
all_point.append(len(close)-1)
print all_point
刚开始运行不会出错,但是如果多运行几次居然报错了
TypeError Traceback (most recent call last)
<ipython-input-17-c5e9f7a6f1b0> in <module>()
1 import pandas as pd
2 piecewise = pd.read_csv("piecewise.csv")
----> 3 close = list(piecewise['close'])
4 next_break=[0]
5 def find_nextbreak(c):
TypeError: 'list' object is not callable
我是在jupyter里面跑的程序,请问这是什么情况??
你是不是做了
重绑定(rebind)
: