网站改版工作方案,天津网站优,教学网站开发视频,wordpress 去除评论提示#xff1a;这只是个训练模型#xff0c;技术不具备实际意义#xff0c;入市需谨慎。
首先调用tushare包
import tushare as ts
import pandas as pd
import matplotlib.pyplot as plt
查自己比较感兴趣的股票#xff0c;这里我查找的是新能源/燃料电池/氢燃料#xf…提示这只是个训练模型技术不具备实际意义入市需谨慎。
首先调用tushare包
import tushare as ts
import pandas as pd
import matplotlib.pyplot as plt
查自己比较感兴趣的股票这里我查找的是新能源/燃料电池/氢燃料在数据库里查找下
concept ts.get_concept_classified()
df concept[concept.c_name燃料电池]我们就用金龙汽车作为我们的股票分析对象吧。
datats.get_hist_data(600686)将开盘价open作为我们的分析对象在这里截取了一段相对趋势唯一的数据作为train_data。并且选取了最后的一部分数据作为test_data。如下图。在导入数据的过程中遇到一个很奇怪的现象那就是数据的行index是时间逆序排列刚开始没注意后来才发现用DataFrame.sort_index()进行调整。
data ts.get_hist_data(600686, start2016-09-13,end2017-02-15).sort_index()
testdatats.get_hist_data(600686,start2017-02-16,end2017-03-29).sort_index()
plt.figure(figsize(10,6))
plt.plot(data.open, labelRaw)
plt.legend(loc0)我们想对该时间序列数据进行预测我们需要先对该数据进行分析判断它到底是不是平稳性数据。
#使用ADF单位根检验法检验时间序列的稳定性
#先做一个编译器
def tagADF(t):
result pd.DataFrame(index[
Test Statistic Value, p-value, Lags Used,
Number of Observations Used,
Critical Value(1%), Critical Value(5%), Critical Value(10%)
],columns[value]
)
result[value][Test Statistic Value]t[0]
result[value][p-value]t[1]
result[value][Lags Used]t[2]
result[value][Number of Observations Used] t[3]
result[value][Critical Value(1%)]t[4][1%]
result[value][Critical Value(5%)]t[4][5%]
result[value][Critical Value(10%)]t[4][10%]
return result
我们调用python的统计包
import statsmodels.api as sm
import statsmodels.tsa.stattools as sts
这里会涉及到迪基-福勒检验的概念后面我会抽时间补充这块知识。
adf_Data sts.adfuller(data.open)
tagADF(adf_Data)我们的前提假设是该数据是非平稳性数据从p-value上我们看出有78.68%的可信度证明这条假设。
接下来利用差分法构建平稳时间序列。
diff data[[open]].diff(1).dropna()
plt.figure(figsize(10,6))
plt.plot(diff, labelDiff)
plt.legend(loc0)验证是否是平稳性数据重复上面的动作
adf_Data1 sts.adfuller(diff.iloc[:,0])
tagADF(adf_Data1)p-value很小我们的假设失效因此diff数据序列符合平稳性要求。
ic sm.tsa.arma_order_select_ic(
diff,
max_ar4,
max_ma2,
ichqic
)
计算结果order(1,1)
ARMAModel sm.tsa.ARMA(diff, order).fit()
delta ARMAModel.fittedvalues - diff
score 1 - delta.var()/diff.var()
plt.figure(figsize(10, 6))
plt.plot(diff, r, labelRaw)
plt.plot(ARMAModel.fittedvalues, g,labelARMA Model)
plt.legend()遇到一个很诡异的事情
p ARMAModel.predict(
start2017-02-16,
end2017-03-29
)跑了四遍代码重启了两遍kernel还是不行
试了一下数字index将就着用吧
p ARMAModel.predict(
start98,
end127
)
还原数据
def revert(diffValues, *lastValue):
for i in range(len(lastValue)):
result [];
lv lastValue[i];
for dv in diffValues:
lv dv lv
result.append(lv)
diffValues result
return diffValues;
r revert(p, data.open[-1])
plt.figure(figsize(10,6))
plt.plot(r,g,labelPredict)
plt.plot(testdata.open,r,labelRaw)
plt.legend()