我有以下从网上下载的代码。我已经通过分解它进行了修改,以便在雅虎上更容易。
我的问题是关于 python(一般)和 python+pandas 能够处理比我在这里尝试的更多的数据的能力。当我运行这段代码时,如果我计算了符号之间的所有相关性,它最终会阻塞(参见“相反它显示这个”部分)。如果我删除一些计算,它似乎没问题。我不确定是什么东西,我认为是熊猫?
分解此代码的正确方法是什么,以便它不会失去其简洁性[而不是使用矢量化的循环],并且仍然能够处理更多数据?我希望能够处理存储在文件中的 10 年 1 分钟数据,如果它甚至不能处理一年的日常数据,它就永远无法在该数据集上工作。
所以我的问题是:
修复这个程序的正确方法是什么(希望我可以概括)以便它适用于 DOW 30 符号?
import pandas
from matplotlib.pyplot import show, legend
from datetime import datetime
from matplotlib import finance
import numpy
# 2011 to 2012
start = datetime(2011, 01, 01)
end = datetime(2012, 01, 01)
symbolsAK = ["AA", "AXP", "BA", "BAC", "CAT",
"CSCO", "CVX", "DD", "DIS", "GE", "HD",
"HPQ", "IBM", "INTC", "JNJ", "JPM",
"KO"]
symbolsMP = ["MCD", "MMM", "MRK", "MSFT", "PFE", "PG"]
#symbolsTX = ["T", "TRV", "UNH", "UTX", "VZ", "WMT", "XOM"]
symbols = symbolsAK
symbols = symbols + symbolsMP
#symbols = symbols + symbolsTX
quotesAK = [finance.quotes_historical_yahoo(symbol, start, end, asobject=True)
for symbol in symbolsAK]
quotesMP = [finance.quotes_historical_yahoo(symbol, start, end, asobject=True)
for symbol in symbolsMP]
#quotesTX = [finance.quotes_historical_yahoo(symbol, start, end, asobject=True)
# for symbol in symbolsTX]
quotes = quotesAK
quotes = quotes + quotesMP
#quotes = quotes + quotesTX
close = numpy.array([q.close for q in quotes]).astype(numpy.float)
dates = numpy.array([q.date for q in quotes])
data = {}
for i in xrange(len(symbols)):
data[symbols[i]] = numpy.diff(numpy.log(close[i]))
df = pandas.DataFrame(data, index=dates[0][:-1], columns=symbols)
print df.corr()
它应该看起来像(某物)的输出[缩短]
# AA AXP BA BAC CAT
#AA 1.000000 0.768484 0.758264 0.737625 0.837643
#AXP 0.768484 1.000000 0.746898 0.760043 0.736337
#BA 0.758264 0.746898 1.000000 0.657075 0.770696
#BAC 0.737625 0.760043 0.657075 1.000000 0.657113
#CAT 0.837643 0.736337 0.770696 0.657113 1.000000
相反,它显示了这一点
<class 'pandas.core.frame.DataFrame'>
Index: 23 entries, AA to PG
Data columns (total 23 columns):
AA 23 non-null values
AXP 23 non-null values
BA 23 non-null values
BAC 23 non-null values
CAT 23 non-null values
CSCO 23 non-null values
CVX 23 non-null values
DD 23 non-null values
DIS 23 non-null values
GE 23 non-null values
HD 23 non-null values
HPQ 23 non-null values
IBM 23 non-null values
INTC 23 non-null values
JNJ 23 non-null values
JPM 23 non-null values
KO 23 non-null values
MCD 23 non-null values
MMM 23 non-null values
MRK 23 non-null values
MSFT 23 non-null values
PFE 23 non-null values
PG 23 non-null values
dtypes: float64(23)