R和Python中傅立叶变换的季节性检测

时间:2016-11-21 00:01:16

标签: python r

我正在寻找谷歌股票数据的季节性。我已经用R

成功地做到了
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代码有什么问题?为什么我的周期图看起来如此不同?

1 个答案:

答案 0 :(得分:0)

periodogram会返回一对(f, Pxx)。你应该使用:

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

它看起来仍然与R输出完全不同;也许你想要一个不同的专栏?

请注意,您可以使用以下方法直接访问pandas数据框的列:

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

或者如果您想要关闭,请使用:

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