# coding=utf-8
 
import pandas 
 as pd 

import numpy 
 as np 

from pandas 
 import Series 
,DataFrame 

import matplotlib.pyplot 
 as plt 

#### 
股票时间序列分析 
####
 
# 
参数初始化
datafile= 
u'E:/python 
数据分析 
/ 
第 
12 
周 
/stock_px.xls'
 
import sys 

reload(sys) 

 sys.setdefaultencoding( 
'utf8') 

# 
读取数据
data=pd.read_ 
Excel(datafile 
, 
index_col= 
u' 
日期 
') 

 data=DataFrame(data 
, 
dtype=np.float64) 

 data=data.iloc[: 
,:- 
1] 
# 
取三只股票数据
data 

# 
时序图
plt.rcParams[ 
'font.sans-serif']=[ 
'SimHei'] 
# 
用来正常显示中文标签
plt.rcParams[ 
'axes.unicode_minus']= 
False  
# 
用来正常显示负号
data.plot() 

 plt.title( 
' 
三只股票时序图 
') 


# 
自相关数
 
from statsmodels.graphics.tsaplots 
import plot_acf 

#AAPL  
取前 
100 
条数据
plot_acf(data[ 
'AAPL'].iloc[: 
100]).show() 

 plt.title( 
'AAPL 
自相关图 
') 

#MSFT  
取前 
100 
条数据
plot_acf(data[ 
'MSFT'].iloc[: 
100]).show() 

 plt.title( 
'MSFT 
自相关图 
') 

#XOM  
取前 
100 
条数据
plot_acf(data[ 
'XOM'].iloc[: 
100]).show() 

 plt.title( 
'XOM 
自相关图 
') 

# 
平稳性检测
 
from statsmodels.tsa.stattools 
import adfuller 
 as ADF 

#AAPL 
的平稳性检测,看 
pvalue 
值
 
print  
'AAPL 
的 
pvalue:' 
,ADF(data[ 
'AAPL'])[ 
1] 
#pvalue 
值为 
0.99, 
大于 
0.05, 
不稳定,考虑差分数值建模
 
#MSFT 
的平稳性检测,看 
pvalue 
值
 
print  
'MSFT 
的 
pvalue:' 
,ADF(data[ 
'MSFT'])[ 
1] 
#pvalue 
值为 
0.04, 
小于 
0.05, 
稳定
 
#XOM 
的平稳性检测,看 
pvalue 
值
 
print  
'MSFT 
的 
pvalue:' 
,ADF(data[ 
'XOM'])[ 
1]   
#pvalue 
值为 
0.45, 
大于 
0.05, 
不稳定
 

 
### 
差分
D_data=data.diff().dropna() 

 D_data.columns=[ 
u'AAPL 
差分 
' 
, 
u'MSFT 
差分 
' 
, 
u'XOM 
差分 
'] 

 D_data 

## 
差分后的结果
 
# 
差分时序图
D_data.plot() 

 plt.title( 
' 
三只股票差分时序图 
') 

# 
差分自相关数
 
from statsmodels.graphics.tsaplots 
import plot_acf 

#AAPL 
差分 取前 
100 
条数据
plot_acf(D_data[ 
'AAPL 
差分 
'].iloc[: 
100]).show() 

 plt.title( 
'AAPL 
差分自相关图 
') 

#MSFT 
差分 取前 
100 
条数据
plot_acf(D_data[ 
'MSFT 
差分 
'].iloc[: 
100]).show() 

 plt.title( 
'MSFT 
差分自相关图 
') 

#XOM 
差分 取前 
100 
条数据
plot_acf(D_data[ 
'XOM 
差分 
'].iloc[: 
100]).show() 

 plt.title( 
'XOM 
差分自相关图 
') 

# 
偏自相关图
 
from statsmodels.graphics.tsaplots 
import plot_pacf 

#AAPL 
差分偏自相关 取前 
100 
条数据
plot_pacf(D_data[ 
'AAPL 
差分 
'].iloc[: 
100]).show() 

 plt.title( 
'AAPL 
差分偏自相关图 
') 

#MSFT 
差分偏自相关 取前 
100 
条数据
plot_pacf(D_data[ 
'MSFT 
差分 
'].iloc[: 
100]).show() 

 plt.title( 
'MSFT 
偏差分自相关图 
') 

#XOM 
差分偏自相关 取前 
100 
条数据
plot_pacf(D_data[ 
'XOM 
差分 
'].iloc[: 
100]).show() 

 plt.title( 
'XOM 
偏差分自相关图 
') 

# 
差分平稳性检测
 
from statsmodels.tsa.stattools 
import adfuller 
 as ADF 

#AAPL 
差分的平稳性检测,看 
pvalue 
值
 
print  
'AAPL 
的 
pvalue:' 
,ADF(D_data[ 
'AAPL 
差分 
'])[ 
1] 
# 
远小于 
0.05, 
稳定!
 
#MSFT 
差分的平稳性检测,看 
pvalue 
值
 
print  
'MSFT 
的 
pvalue:' 
,ADF(D_data[ 
'MSFT 
差分 
'])[ 
1] 
# 
远小于 
0.05, 
稳定!
 
#XOM 
差分的平稳性检测,看 
pvalue 
值
 
print  
'MSFT 
的 
pvalue:' 
,ADF(D_data[ 
'XOM 
差分 
'])[ 
1]   
# 
远小于 
0.05, 
稳定!
 

 
# 
白噪声检测
 
from statsmodels.stats.diagnostic 
import acorr_ljungbox 

#AAPL 
差分白噪声检测
acorr_ljungbox(D_data[ 
'AAPL 
差分 
'] 
, 
lags= 
1) 
# 
返回统计量和 
p 
值 
  p 
值大于 
0.05 
,不排除白噪声
 
#MSFT 
差分白噪声检测
acorr_ljungbox(D_data[ 
'MSFT 
差分 
'] 
, 
lags= 
1) 
# 
返回统计量和 
p 
值 
  p 
值小于 
0.05 
,排除白噪声
 
#XOM 
差分白噪声检测
acorr_ljungbox(D_data[ 
'XOM 
差分 
'] 
, 
lags= 
1) 
# 
返回统计量和 
p 
值 
   p 
值小于 
0.05 
,排除白噪声
 

 

 

 
#AAPL  ARIMA 
建模
 
from statsmodels.tsa.arima_model 
import  ARIMA 

 pmax= 
3
qmax= 
3
bic_matrix=[] 
#bic 
矩阵
 
for p 
 in  
range(pmax+ 
1): 

     tmp=[] 

     
for q 
 in  
range(qmax+ 
1): 

          
try: 
 # 
存在部分报错,所以用 
try 
来跳过报错。
 
            tmp.append(ARIMA(data[ 
'AAPL'] 
,(p 
, 
1 
,q)).fit().bic) 

          
except: 

             tmp.append( 
None) 

     bic_matrix.append(tmp) 

 bic_matrix=pd.DataFrame(bic_matrix) 
# 
从中可找出最小值
p 
,q=bic_matrix.stack().idxmin() 
 # 
先用 
stack 
展平,然后用 
idxmin 
找出最小位置。
 
print  
u'BIC 
最小的 
p 
值和 
q 
值为 
: %s 
、 
%s'%(p 
,q) 
#0,0
model=ARIMA(data[ 
'AAPL'] 
,(p 
, 
1 
,q)).fit() 
# 
建立 
ARIMA(0,1,0) 
模型
model.summary() 
# 
股票 
AAPL 
给出一份模型报告
 

 
#MSFT  ARIMA 
建模
 
from statsmodels.tsa.arima_model 
import  ARIMA 

 pmax= 
3
qmax= 
3
bic_matrix=[] 
#bic 
矩阵
 
for p 
 in  
range(pmax+ 
1): 

     tmp=[] 

     
for q 
 in  
range(qmax+ 
1): 

          
try: 
 # 
存在部分报错,所以用 
try 
来跳过报错。
 
            tmp.append(ARIMA(data[ 
'MSFT'] 
,(p 
, 
1 
,q)).fit().bic) 

          
except: 

             tmp.append( 
None) 

     bic_matrix.append(tmp) 

 bic_matrix=pd.DataFrame(bic_matrix) 
# 
从中可找出最小值
p 
,q=bic_matrix.stack().idxmin() 
 # 
先用 
stack 
展平,然后用 
idxmin 
找出最小位置。
 
print  
u'BIC 
最小的 
p 
值和 
q 
值为 
: %s 
、 
%s'%(p 
,q) 
#0,1
model=ARIMA(data[ 
'MSFT'] 
,(p 
, 
1 
,q)).fit() 
# 
建立 
ARIMA(0,1,1) 
模型
model.summary() 
# 
给出一份模型报告
 

 
#XOM  ARIMA 
建模
 
from statsmodels.tsa.arima_model 
import  ARIMA 

 pmax= 
3
qmax= 
3
bic_matrix=[] 
#bic 
矩阵
 
for p 
 in  
range(pmax+ 
1): 

     tmp=[] 

     
for q 
 in  
range(qmax+ 
1): 

          
try: 
 # 
存在部分报错,所以用 
try 
来跳过报错。
 
            tmp.append(ARIMA(data[ 
'XOM'] 
,(p 
, 
1 
,q)).fit().bic) 

          
except: 

             tmp.append( 
None) 

     bic_matrix.append(tmp) 

 bic_matrix=pd.DataFrame(bic_matrix) 
# 
从中可找出最小值
p 
,q=bic_matrix.stack().idxmin() 
 # 
先用 
stack 
展平,然后用 
idxmin 
找出最小位置。
 
print  
u'BIC 
最小的 
p 
值和 
q 
值为 
: %s 
、 
%s'%(p 
,q) 
#2,3
model=ARIMA(data[ 
'XOM'] 
,(p 
, 
1 
,q)).fit() 
# 
建立 
ARIMA(2,1,3) 
模型
model.summary() 
# 
给出一份模型报告 
result: 

AAPL的ARIMA模型拟合报告: 

                            ARIMA Model Results                              
 ==============================================================================
 Dep. Variable:                 D.AAPL   No. Observations:                 2213
 Model:                 ARIMA(0, 1, 0)   Log Likelihood               -5731.237
 Method:                           css   S.D. of innovations              3.225
 Date:                Sat, 24 Sep 2016   AIC                          11466.474
 Time:                        13:12:28   BIC                          11477.878
 Sample:                    01-03-2003   HQIC                         11470.640
                          - 10-14-2011                                         
 ==============================================================================
                  coef    std err          z      P>|z|      [95.0% Conf. Int.]
 ------------------------------------------------------------------------------
 const          0.1873      0.069      2.733      0.006         0.053     0.322
 ==============================================================================
 MSFT的ARIMA模型拟合报告:
                              ARIMA Model Results                              
 ==============================================================================
 Dep. Variable:                 D.MSFT   No. Observations:                 2213
 Model:                 ARIMA(0, 1, 1)   Log Likelihood               -1127.640
 Method:                       css-mle   S.D. of innovations              0.403
 Date:                Sat, 24 Sep 2016   AIC                           2261.280
 Time:                        13:13:45   BIC                           2278.387
 Sample:                    01-03-2003   HQIC                          2267.529
                          - 10-14-2011                                         
 ================================================================================
                    coef    std err          z      P>|z|      [95.0% Conf. Int.]
 --------------------------------------------------------------------------------
 const            0.0028      0.008      0.351      0.726        -0.013     0.018
 ma.L1.D.MSFT    -0.0752      0.021     -3.498      0.000        -0.117    -0.033
                                     Roots                                    
 =============================================================================
                  Real           Imaginary           Modulus         Frequency
 -----------------------------------------------------------------------------
 MA.1           13.3040           +0.0000j           13.3040            0.0000
 -----------------------------------------------------------------------------

 XOM的ARIMA模型拟合报告:
 

                             ARIMA Model Results                              
 ==============================================================================
 Dep. Variable:                  D.XOM   No. Observations:                 2213
 Model:                 ARIMA(2, 1, 3)   Log Likelihood               -3267.532
 Method:                       css-mle   S.D. of innovations              1.059
 Date:                Sat, 24 Sep 2016   AIC                           6549.063
 Time:                        13:14:26   BIC                           6588.978
 Sample:                    01-03-2003   HQIC                          6563.644
                          - 10-14-2011                                         
 ===============================================================================
                   coef    std err          z      P>|z|      [95.0% Conf. Int.]
 -------------------------------------------------------------------------------
 const           0.0219      0.017      1.284      0.199        -0.012     0.055
 ar.L1.D.XOM    -1.4970      0.090    -16.722      0.000        -1.672    -1.322
 ar.L2.D.XOM    -0.5351      0.085     -6.287      0.000        -0.702    -0.368
 ma.L1.D.XOM     1.3333      0.087     15.238      0.000         1.162     1.505
 ma.L2.D.XOM     0.1787      0.081      2.201      0.028         0.020     0.338
 ma.L3.D.XOM    -0.2140      0.021    -10.334      0.000        -0.255    -0.173
                                     Roots                                    
 =============================================================================
                  Real           Imaginary           Modulus         Frequency
 -----------------------------------------------------------------------------
 AR.1           -1.1026           +0.0000j            1.1026            0.5000
 AR.2           -1.6948           +0.0000j            1.6948            0.5000
 MA.1           -1.1927           -0.1691j            1.2046           -0.4776
 MA.2           -1.1927           +0.1691j            1.2046            0.4776
 MA.3            3.2206           -0.0000j            3.2206           -0.0000
 -----------------------------------------------------------------------------

result:

python arima 输出参数 python arima代码_时序图


python arima 输出参数 python arima代码_建模_02

python arima 输出参数 python arima代码_时序图_03

python arima 输出参数 python arima代码_建模_04

python arima 输出参数 python arima代码_差分_05

python arima 输出参数 python arima代码_python arima 输出参数_06

python arima 输出参数 python arima代码_差分_07

python arima 输出参数 python arima代码_python arima 输出参数_08

python arima 输出参数 python arima代码_时序图_09

python arima 输出参数 python arima代码_差分_10

python arima 输出参数 python arima代码_python arima 输出参数_11

figure_11.png (23.52 KB)

下载附件 保存到相册