2016-11-21 125 views
0

我正在尋找谷歌股票數據的季節性。我已經有R在R和Python中使用傅立葉變換檢測季節性

library(quantmod) 
library(TSA) 
a=getYahooData("GOOGL",start=20130101,end=20160127,freq="daily") 
a=log(a$Close)-lag(log(a$Close)) 
a=na.exclude(a) 
periodogram(a) 

Periodogram with R

現在我想使用Python這樣做,因爲我已經找到了可用的算法交易更好的支持,這樣做是成功地。 這裏是我的代碼

import numpy as np 
from scipy import signal 
import matplotlib.pyplot as plt 
import pandas_datareader.data as web 
import datetime 
start = datetime.datetime(2013, 1, 1) 
end = datetime.datetime(2016, 1, 27) 
df = web.DataReader("GOOGL", 'yahoo', start, end) 
# import data from yahoo finance 
z=np.array(df) 
# convert data to array in order to manipulate with numpy 
y=z[:,5] 
# column with close prices 
logR=np.diff(np.log(y)) 
# logarithmic returns 
periodgram = signal.periodogram(logR) 
plt.plot(periodgram) 
plt.show() 
# periodgram graph 

Periodogram with Python

什麼是錯我的Python代碼?爲什麼我的週期圖看起來如此不同?

+0

在R代碼人們通常會寫聲明的RHS與滯後差異爲'diff(log(a $ Close))' –

回答

0

periodogram返回一對,(f, Pxx)。您應該使用:

... 
f, Pxx = signal.periodogram(logR) 
plt.plot(f, Pxx) 
... 

它仍然看起來與R輸出相當不同;也許你想要一個不同的列?

請注意,您可以直接訪問熊貓數據幀的列,使用:

logR = np.diff(np.log(df["Adj Close"])) 

,或者如果你想關閉,而不是使用:

logR = np.diff(np.log(df.Close)) 
+0

我認爲日期或數據挖掘方法可能存在一些差異。謝謝,請問爲什麼需要使用一對? @Neapolitan –

+0

如果使用'plot(array)',那麼matplotlib將爲數組的每一行生成一條繪圖線,x從1到n,其中n是列數。 – Neapolitan